SLB支持wss

背景

原本用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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
2019-07-18,16:27:57  0.002:0.003:0.057:0.000:0.057:0.063:0.063
2019-07-18,16:27:58 0.001:0.003:0.048:0.000:0.048:0.055:0.055
2019-07-18,16:27:59 0.002:0.005:0.051:0.000:0.051:0.057:0.057
2019-07-18,16:28:00 0.002:0.003:0.050:0.000:0.050:0.055:0.055
2019-07-18,16:28:01 0.002:0.003:0.049:0.000:0.049:0.054:0.054
2019-07-18,16:28:02 0.002:0.003:0.052:0.000:0.052:0.058:0.058
2019-07-18,16:28:03 0.002:0.003:0.050:0.000:0.050:0.056:0.056
2019-07-18,16:28:04 0.002:0.003:0.051:0.000:0.051:0.057:0.057
2019-07-18,16:28:05 0.002:0.003:0.050:0.000:0.050:0.057:0.057
2019-07-18,16:28:06 0.001:0.003:0.049:0.000:0.049:0.055:0.055
2019-07-18,16:28:07 0.001:0.003:0.048:0.000:0.048:0.053:0.053
2019-07-18,16:28:08 0.002:0.003:0.052:0.000:0.052:0.058:0.058
2019-07-18,16:28:09 0.001:0.003:0.049:0.000:0.049:0.055:0.055
2019-07-18,16:28:11 0.001:0.003:0.049:0.000:0.049:0.055:0.055
2019-07-18,16:28:12 0.001:0.003:0.052:0.000:0.052:0.058:0.058
2019-07-18,16:28:13 0.002:0.003:0.049:0.000:0.049:0.055:0.055
2019-07-18,16:28:14 0.002:0.003:0.049:0.000:0.049:0.055:0.055
2019-07-18,16:28:15 0.002:0.003:0.053:0.000:0.053:0.059:0.059
2019-07-18,16:28:16 0.001:0.003:0.050:0.000:0.050:0.055:0.055
2019-07-18,16:28:17 0.002:0.003:0.048:0.000:0.048:0.053:0.053
2019-07-18,16:28:18 0.001:0.003:0.056:0.000:0.056:0.061:0.061
2019-07-18,16:28:19 0.002:0.003:0.050:0.000:0.050:0.056:0.056
2019-07-18,16:28:20 0.001:0.003:0.048:0.000:0.048:0.053:0.053
2019-07-18,16:28:21 0.002:0.003:0.051:0.000:0.051:0.057:0.057
2019-07-18,16:28:22 0.002:0.004:0.051:0.000:0.051:0.058:0.058

自己做解析

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
2019-07-18,17:57:04  0.002:0.002:0.073:0.000:0.073:0.074:0.074
2019-07-18,17:57:06 0.002:0.002:0.071:0.000:0.071:0.072:0.072
2019-07-18,17:57:07 0.002:0.002:0.072:0.000:0.072:0.072:0.072
2019-07-18,17:57:08 0.002:0.002:0.072:0.000:0.072:0.073:0.073
2019-07-18,17:57:09 0.002:0.002:0.072:0.000:0.072:0.072:0.072
2019-07-18,17:57:10 0.002:0.002:0.075:0.000:0.075:0.076:0.076
2019-07-18,17:57:11 0.002:0.002:0.075:0.000:0.075:0.076:0.076
2019-07-18,17:57:12 0.002:0.002:0.074:0.000:0.074:0.075:0.075
2019-07-18,17:57:13 0.002:0.002:0.074:0.000:0.074:0.075:0.075
2019-07-18,17:57:14 0.002:0.002:0.072:0.000:0.072:0.073:0.073
2019-07-18,17:57:15 0.002:0.002:0.075:0.000:0.075:0.076:0.076
2019-07-18,17:57:16 0.001:0.002:0.072:0.000:0.072:0.072:0.072
2019-07-18,17:57:17 0.001:0.002:0.074:0.000:0.074:0.075:0.075
2019-07-18,17:57:19 0.002:0.002:0.072:0.000:0.072:0.073:0.073
2019-07-18,17:57:20 0.001:0.003:0.072:0.000:0.072:0.073:0.073
2019-07-18,17:57:21 0.002:0.002:0.070:0.000:0.070:0.071:0.071
2019-07-18,17:57:22 0.001:0.002:0.071:0.000:0.071:0.072:0.072
2019-07-18,17:57:23 0.002:0.002:0.071:0.000:0.071:0.072:0.072
2019-07-18,17:57:24 0.001:0.002:0.070:0.000:0.070:0.071:0.071
2019-07-18,17:57:25 0.002:0.002:0.071:0.000:0.071:0.072:0.072
2019-07-18,17:57:26 0.001:0.002:0.071:0.000:0.071:0.072:0.072
2019-07-18,17:57:27 0.002:0.002:0.071:0.000:0.071:0.071:0.071
2019-07-18,17:57:28 0.001:0.002:0.072:0.000:0.072:0.073:0.073
2019-07-18,17:57:29 0.001:0.002:0.070:0.000:0.070:0.071:0.071
2019-07-18,17:57:30 0.002:0.002:0.083:0.000:0.083:0.084:0.084

线上验证

线上找了个某个微信小游戏做小白鼠,在wss链接步骤增加大数据埋点,用户的每次调用wss链接结果都上报大数据,然后进行统计,经过多天的测试,数据如下:

实验a

[微信client]—-wss—>[slb+ssl]—-ws—>[svr]

成功率在 60% 左右。

upload successful

实验b

[微信client]—-wss—->[slb]—-wss—>[svr+ssl]

成功率在 90% 左右。

upload successful

总结

  • https返回502 其实我的测试工具不正确; 如果直接用wss测试工具是不会返回502的。
  • 实验室中验证slb+ssl性能好20ms左右
  • 线上验证slb+ssl成功率不高(这个问题有时间分析下)