0%

环境信息

  • windows 10
  • IDEA 2019.3

不用下载scalasbt,直接使用 IDEA 插件中自带的就行。

阅读全文 »

前言

最近把 win10 版本升级到了1909,然后发现在有个Windows Defender Antivirus Server的服务会占用大量的 cpu 和内存,网上找了好多办法都关不掉它,现在终于找了个靠谱的办法在这里记录下。

阅读全文 »

前言

用过OOP的都知道,子类重写父类的方法可以优雅的实现代码的复用,例如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
public abstract class People {
String name;
int age;

public People(String name, int age) {
this.name = name;
this.age = age;
}

public void hello() {
System.out.printf("name:%s age:%d sex:%s\n", name, age, sex());
}

public abstract String sex();

static class Male extends People {

public Male(String name, int age) {
super(name, age);
}

@Override
public String sex() {
return "M";
}
}

static class Female extends People {

public Female(String name, int age) {
super(name, age);
}

@Override
public String sex() {
return "F";
}
}

public static void main(String[] args) {
new Male("小明",20).hello();
new Female("小红",18).hello();
}
}

输出:

1
2
name:小明 age:20 sex:M
name:小红 age:18 sex:F

但是go不支持OOP,那么在go中要类似情况的应该怎么实现?

阅读全文 »

背景

通常验证码都是通过session来实现,在服务端生成一个随机字符串作为验证码,将该字符串存到session中,然后将验证码图片渲染到前端,前端提交之后通过session中存放的正确验证码进行对比从而验证输入的正确性。

上面是一个典型的验证码实现的流程,但是这种方案存在非常多的弊端,例如:

  1. 分布式应用:大家知道session是有状态的,当服务器存在多个时,需要去处理session丢失的问题。
  2. 跨域问题:现在前后端分离大行其道,cookie跨域问题会导致session id无法正确传递,需要去处理cookie跨域的问题。
  3. 开销问题:维护session需要消耗一定服务器的资源。
阅读全文 »

前言

mongoDB 提供的副本集是将数据同步至多个节点,提供了数据冗余备份和节点故障的情况下可以自动转移的高可用特性,架构图如下:

有时候需要要在本地搭建一套 mongoDB 副本集环境来做测试,如果用虚拟机的话还是比较麻烦的,这里记录下如何用 docker-compose 快速搭建 mongoDB 副本集。

阅读全文 »

前言

docker 在使用过程中,可能会产生很多冗余无用的数据,这些数据会占用大量硬盘空间,这里记录下如何清理 docker。

容器清理

  • 删除所有关闭的容器
1
docker rm $(docker ps -a -f status=exited -q)
  • 关闭并删除所有容器
1
2
docker stop $(docker ps -aq)
docker rm $(docker ps -q)

镜像清理

  • 删除 dangling images
1
docker image prune
  • 删除所有镜像
1
docker rmi $(docker images -q)

挂载清理

  • 删除 dangling volmue
1
docker volume rm $(docker volume ls -f dangling=true -q)

介绍

HTTP 协议里的keep-alive机制和长连接协议的keep-alive机制有所不同,HTTP 中的作用是为了复用 TCP 连接,而长连接中大多数作用是为了保活,例如 TCP 通过 keep-alive 心跳包来检测对方是否存活。

HTTP/1.1版本中keep-alive默认是开启的,通过复用 TCP 连接,可以有效的降低 TCP 连接创建的开销,大多数浏览器只允许同时对同一个域名建立 6 个 TCP 连接。

阅读全文 »

背景

现在公司项目都是前后端分离的方式开发,有些时候由于某些新需求开发或者 bug 修改,想要让前端直接连到我本地开发环境进行调试,而前端代码我并没有,只能通过前端部署的测试环境进行测试,最简单的办法就是直接改 host 把后端测试环境的域名指向我本地的 IP,这对于 HTTP 协议的服务来说是很轻易做到的,不过公司的测试环境全部上了 HTTPS,而我本地的服务是 HTTP 协议这样就算是改了 host 也会由于协议不同导致请求失败,所以需要将本地的服务升级成 HTTPS 才行。

阅读全文 »

前言

近期线上 k8s 时不时就会出现一些内部服务间的调用超时问题,通过日志可以得知超时的原因都是出现在域名解析上,并且都是 k8s 内部的域名解析超时,于是直接先将内部域名替换成 k8s service 的 IP,观察一段时间发现没有超时的情况发生了,但是由于使用 service IP 不是长久之计,所以还要去找解决办法。

复现

一开始运维同事在调用方 pod 中使用ab工具对目标服务进行了多次压测,并没有发现有超时的请求,我介入之后分析ab这类 http 压测工具应该都会有 dns 缓存,而我们主要是要测试 dns 服务的性能,于是直接动手撸了一个压测工具只做域名解析,代码如下:

阅读全文 »