文章插图
注意:请点击图像以查看清晰的视图!从上图中 , 我们能够明显观察到 , Tomcat 的封装功能相当完善 , 但在内部默认设置下 , 会有三次 copy 。
HttpNioClient 的问题:在获取和释放连接的过程中都需要进行加锁 , 针对类似网关这样的代理服务场景 , 会导致频繁地建立和关闭连接 , 这无疑会对性能产生负面影响 。
鉴于 Tomcat 存在的这些难题 , 我们在后续对接入端进行了优化 , 采用 Netty 作为接入层和服务调用层 , 也就是我们的第二版 , 成功地解决了上述问题 , 实现了理想的性能 。
2、第2版:Netty+全异步基于 Netty 的优势 , 我们构建了全异步、无锁、分层的架构 。
先看下我们基于 Netty 做接入端的架构图:
文章插图
注意:请点击图像以查看清晰的视图!2.1 接入层Netty 的 IO 线程主要负责 HTTP 协议的编解码工作 , 同时也监控并报警协议层面的异常情况 。
我们对 HTTP 协议的编解码进行了优化 , 并对异常和攻击性请求进行了监控和可视化处理 。
例如 , 我们对 HTTP 请求行和请求头的大小都有限制 , 而 Tomcat 是将请求行和请求头一起计算 , 总大小不超过 8K , 而 Netty 是分别对两者设置大小限制 。
如果客户端发送的请求超过了设定的阀值 , 带有 cookie 的请求很容易超过这个限制 , 一般情况下 , Netty 会直接响应 400 给客户端 。
在优化后 , 我们只取正常大小的部分 , 并标记协议解析失败 , 这样在业务层就可以判断出是哪个服务出现了这类问题 。
对于其他攻击性的请求 , 例如只发送请求头而不发送 body 或者只发送部分内容 , 都需要进行监控和报警 。
2.2 业务逻辑层这一层负责实现一系列支持业务的公共逻辑 , 包括 API 路由、流量调度等 , 采用责任链模式 , 这一层不会进行 IO 操作 。
在业界和大型企业的网关设计中 , 业务逻辑层通常都被设计成责任链模式 , 公共的业务逻辑也在这一层实现 。
在这一层 , 我们也执行了相似的操作 , 并支持以下功能:
- 1)用户认证和登录验证 , 支持接口级别的配置;
- 2)黑白名单:包括全局和应用的黑白名单 , 以及 IP 和参数级别的限制;
- 3)流量控制:提供自动和手动控制 , 自动控制可拦截过大流量 , 通过令牌桶算法实现;
- 4)智能熔断:在 Histrix 的基础上进行改进 , 支持自动升降级 , 我们采用全自动方式 , 也支持手动配置立即熔断 , 即当服务异常比例达到设定值时 , 自动触发熔断;
- 5)灰度发布:对于新启动的机器的流量 , 我们支持类似于 TCP 的慢启动机制 , 为机器提供一段预热时间;
- 6)统一降级:我们对所有转发失败的请求都会执行统一降级操作 , 只要业务方配置了降级规则 , 都会进行降级 , 我们支持将降级规则细化到参数级别 , 包括请求头中的值 , 非常细粒度 , 此外 , 我们还会与 varnish 集成 , 支持 varnish 的优雅降级;
- 7)流量调度:支持业务根据筛选规则 , 将流量分配到对应的机器 , 也支持仅让筛选的流量访问该机器 , 这在排查问题/新功能发布验证时非常有用 , 可以先通过小部分流量验证 , 再大面积发布上线;
- 8)流量 copy:我们支持根据规则对线上原始请求 copy 一份 , 将其写入 MQ 或其他 upstream , 用于线上跨机房验证和压力测试;
- 9)请求日志采样:我们对所有失败的请求都会进行采样并保存到磁盘 , 以供业务方排查问题 , 同时也支持业务方根据规则进行个性化采样 , 我们采样了整个生命周期的数据 , 包括请求和响应相关的所有数据 。
推荐阅读
- 什么是图像重定向
- “二次约会”间谍软件分析报告:网络攻击西北工业大学 美国相关人员真实身份被锁定
- 4位网红播资产惊人!网红赚钱太多惹人妒,日均收入超过明星
- 日本晚樱的花语 日本晚樱的花语文案
- 曝“锋菲恋”成泡影?谢霆锋和杨幂公布新恋情,这一次他不再隐瞒
- 一场生日会,“江湖地位、人情世故”在刘德华的身上体现得淋漓尽致
- 李勒优首次去上海,住1晚花2500元,两眼放光被震撼,立人生目标
- 突传噩耗!演员马卫军因病去世,享年67岁,多次扮演“日本军官”
- 韦德:刷分没有意义,我已有完美的职业生涯
- 李靓蕾再次开撕王力宏!