背景
原本用boost::asio 做了一个支持tcp、ws、wss协议的网关,一个端口同时支持三种协议,区分的方法比较简单:
判断三次握手之后的第一字节的数据报文
0x16:wss // ssl协议的头
‘G’:ws
‘H’: tcp //私有协议也有一个握手报文
现在担心自己ssl解析性能不够优秀,所以打算使用阿里slb的ssl解析
配置方法
配置比较简单,使用“性能保障型SLB”,然后在https中设置。
出现的问题
健康检测异常
由于不支持http的HEAD命令,所在在代码中增加对HEAD的处理,直接返回200ok,并主动关闭链接
https返回502
使用 curl https://xxx.xx.com:1235 -v 提示502。
需要支持http的GET命令。
修改代码对GET的支持。
slb一个端口无法支持多个协议
原来的服务12345端口是可以同时支持tcp、ws、wss协议的,经过slb需要配置三个端口:
- tcp : 12345 — >12345
- http: 12346 — > 12345
- https:12347 —> 12345
巨不爽!!
测试数据
使用 https://blog.csdn.net/zt3032/article/details/80492146 文章中测试https的结果。
slb
1 | 2019-07-18,16:27:57 0.002:0.003:0.057:0.000:0.057:0.063:0.063 |
自己做解析
1 | 2019-07-18,17:57:04 0.002:0.002:0.073:0.000:0.073:0.074:0.074 |
线上验证
线上找了个某个微信小游戏做小白鼠,在wss链接步骤增加大数据埋点,用户的每次调用wss链接结果都上报大数据,然后进行统计,经过多天的测试,数据如下:
实验a
[微信client]—-wss—>[slb+ssl]—-ws—>[svr]
成功率在 60% 左右。
实验b
[微信client]—-wss—->[slb]—-wss—>[svr+ssl]
成功率在 90% 左右。
总结
- https返回502 其实我的测试工具不正确; 如果直接用wss测试工具是不会返回502的。
- 实验室中验证slb+ssl性能好20ms左右
- 线上验证slb+ssl成功率不高(这个问题有时间分析下)