今天需要在本机压测一个 Netty 的 TCP 服务,需要在本机做一个简单的压测,想起 Linux 是可以配置最大文件限制数,所以找了一下在 Mac 上的配置:
Netty ByteBuf 和相关的辅助类
之前公司在公司第一次用 Netty 做游戏服务器,在网上找的 Demo,就把游戏服务器做起来了,但是一直也没有管去优化,最近在开始总结和回归的时候,会思考一些问题?
- Netty 为什么要用 ByteBuf 呢?NIO 不是已经有了 ByteBuffer 了吗?
- 除了 Unpooled.buffer() 还有没有别的方法返回 ByteBuf 呢?
- 好多对象的数据长度是固定的,在写数据中,能不能申请固定长度的 ByteBuf 呢?
- 使用了这么多 ByteBuf,系统会不会有大量的时间在拷贝 byte[] 数组呢?
- ByteBuf 如何才能高效的使用呢?
SSH authorized_keys
一台 server 的 authorized_keys 配置了很多很多 public key, 一个客户端去连接的时候,服务端怎么知道这个客户端的私钥对应哪个 public key 呢?
RSA 加密解密和签名验证
分析数字证书的签名和验证以及 RSA 非对称加密解密的时候,又想到了 SSH 中登陆流程,服务器是如何在 authorized_keys 找到当前登陆客户端与之匹配的公钥呢??
Spring Boot filtering 不生效问题
1. Spring Boot filtering 不生效
今天在写自己的图床的时候,因为用了docker,每次在更新的时候,本地使用 dockerfile-maven-plugin 插件,打包镜像,然后 push 到 Docker hub 自己的私有仓库。然后自己的 VPS,再拉取最新的 Docker img 启动。
所以,每次在更新了 pom.xml 中的 version 后, 需要手动去更新 docker-compose.yml 文件中镜像的版本号。 为了自动做,就把 docker-compose.yml 放到了 src/main/resources 下,然后使用 mave-resources-plugin 插件 copy 到指定目录。这样在编译,打包镜像的时候,会自动更新 docker-compose.yml 文件。
Redis 知识点整理
1. Redis 数据结构
主要的数据类型:
- String(K-V): 单值,键值对,类似 Memcached, 比如配置,常量值,开关等等。
- Hash: 一般是存储对象接口,key 是对象的标示,filed 是属性,value 是属性值。
- Set: 集合,存放不重复的数据,求交集,统计不重复的量。
- List: 链表,常用在消息队列,TimeLine.
- SortedSet: 排名,需要根据 一个值来排序的场景,排行榜等。
IO 模型
1. tcp backlog 参数
- tcp 在三次握手的时候:
- client 会发送一个 SYN 到 server。此时,客户端的 tcp 状态会变成 SYN_SEND,server 收到 SYN包后,将连接状态修改为 SYN——RCVD,维护一个 half open sync queue(半连接)队列,将当前连接加入到半连接队列。半连接的长度为 max(64, /proc/sys/net/ipv4/tcp_max_syn_backlog) 。
- server 端给客户端回应一个 SYN_ACK 的包给 client。client 收到后,会将连接修改为ESTABLISHED,然后发送 ACK 到 server。
- server 收到 client 的 ACK 过后,将连接的状态修改为 ESTABLISHED,并把请求从 sync queue 半连接队列放到 accept queue,长度为min(backlog, somaxconn)。
Docker 私有仓库 Harbor 配置
1. 安装依赖
- docker
- docker-compose
2. 下载安装包
Harbor 安装分为两种,一种是 online,一种是 offline。offline 的包很大,推荐 online 的方式。
1 | wget https://storage.googleapis.com/harbor-releases/release-1.8.0/harbor-online-installer-v1.8.1.tgz |
3. 修改 harbor.yml
配置 harbor.yml 文件,配置并必须参数和可选参数: