中山建网站报价,angular网站模板下载,wordpress获取特定尺寸特征图像,seo优化服务公司说在前面
在40岁老架构师 尼恩的读者社区(50)中#xff0c;很多小伙伴拿到一线互联网企业如阿里、网易、有赞、希音、百度、滴滴的面试资格。
最近#xff0c;尼恩指导一个小伙伴简历#xff0c;写了一个《高并发网关项目》#xff0c;此项目帮这个小伙拿到 字节/阿里/微…说在前面
在40岁老架构师 尼恩的读者社区(50)中很多小伙伴拿到一线互联网企业如阿里、网易、有赞、希音、百度、滴滴的面试资格。
最近尼恩指导一个小伙伴简历写了一个《高并发网关项目》此项目帮这个小伙拿到 字节/阿里/微博/汽车之家 面邀 所以说这是一个牛逼的项目。
为了帮助大家拿到更多面试机会拿到更多大厂offer
尼恩决定9月份给大家出一章视频介绍这个项目的架构和实操《33章10Wqps 高并发 Netty网关架构与实操》预计月底发布。然后提供一对一的简历指导这里简历金光闪闪、脱胎换骨。
《33章10Wqps 高并发 Netty网关架构与实操》 海报如下 配合《33章10Wqps 高并发 Netty网关架构与实操》 尼恩会梳理几个工业级、生产级网关案例作为架构素材、设计的素材。
前面梳理了
《日流量200亿携程网关的架构设计》《千万级连接知乎如何架构长连接网关》《日200亿次调用喜马拉雅网关的架构设计》
除了以上的三个案例这里尼恩又找到一个漂亮的生产级案例
《爱奇艺WebSocket实时推送网关技术实践》
注意这又一个非常 牛逼的工业级、生产级网关案例。
这些案例并不是尼恩的原创。这些案例仅仅是尼恩在《33章10Wqps 高并发 Netty网关架构与实操》备课的过程中在互联网查找资料的时候收集起来的供大家学习和交流使用。 《尼恩 架构笔记》《尼恩高并发三部曲》《尼恩Java面试宝典》的PDF请到公号【技术自由圈】获取 文章目录 说在前面100W级连接爱奇艺WebSocket推送网关架构1、旧方案存在的技术痛点2、新方案的技术目标3、新方案的技术选型4、新方案的实现思路4.1 系统架构4.2 会话管理4.3 监控与报警 5、新方案的性能压测6、新方案的实际应用案例7、总结说在最后有问题可以找老架构取经推荐阅读 100W级连接爱奇艺WebSocket推送网关架构
原文作者 爱奇艺技术团队
HTTP 协议属于一种无状态、基于 TCP 的请求/响应模式的协议
HTTP 协议中只有客户端能发起请求由服务端进行回应。
虽然在许多情况下这种请求/响应的拉取模式能够满足需求。
然而在特定情况下例如实时通知如 IM 中的离线消息推送最为典型和消息推送等应用场景需要将数据实时推到客户端这就要求服务端具备主动推送数据的能力。
如何推呢
传统的 Web 服务端推送技术包括短轮询、长轮询等虽然能在一定程度上解决问题但也存在如时效性、资源浪费等问题。
HTML5 标准推出的 WebSocket 规范基本改变了这种状况已经成为当前服务端消息推送技术的主流。
本文将分享爱奇艺在基于 Netty 实现 WebSocket 长连接实时推送网关过程中的实践经验和总结。
1、旧方案存在的技术痛点
爱奇艺号作为我们内容生态的关键部分作为前端系统对用户体验有着较高的要求这直接影响着创作者的创作热情。
当前爱奇艺号在多个业务场景中应用了 WebSocket 实时推送技术包括
1用户评论实时地将评论消息推送至浏览器
2实名认证在合同签署前需要对用户进行实名认证用户扫描二维码后进入第三方的认证页面认证完成后异步通知浏览器认证状态
3活体识别类似于实名认证当活体识别完成后异步将结果通知浏览器。
在实际业务开发中我们发现 WebSocket 实时推送技术在使用过程中存在一些问题。
这些问题是
1首先WebSocket 技术栈不统一既有基于 Netty 实现的也有基于 Web 容器实现的给开发和维护带来困难
2其次WebSocket 实现分散在各个工程中与业务系统紧密耦合如果有其他业务需要集成 WebSocket将面临重复开发的困境浪费成本、效率低下
3第三WebSocket 是有状态协议客户端连接服务器时只与集群中一个节点连接数据传输过程中也只与这一节点通信。WebSocket 集群需要解决会话共享的问题。如果只采用单节点部署虽然可以避免这一问题但无法水平扩展以支持更高的负载存在单点故障风险
4最后最后缺乏监控与报警虽然可以通过 Linux 的 Socket 连接数大致评估 WebSocket 长连接数但数字并不准确也无法得知用户数等具有业务含义的指标数据无法与现有的微服务监控整合实现统一监控和报警。
2、新方案的技术目标
如上所述为了解决旧方案中存在的问题我们需要实现统一的 WebSocket 长连接实时推送网关。
这套新的网关需要具备以下特点
1集中实现长连接管理和推送能力采用统一的技术栈将长连接作为基础功能进行沉淀以便于功能的迭代和维护
2与业务解耦将业务逻辑与长连接通信分离使得业务系统无需关心通信细节避免了重复开发节约了研发成本
3使用简单提供 HTTP 推送通道便于各种开发语言的接入。业务系统只需进行简单的调用便可实现数据推送从而提高研发效率
4分布式架构构建多节点的集群支持水平扩展以应对业务增长带来的挑战节点故障不会影响服务的整体可用性确保高可靠性
5多端消息同步允许用户使用多个浏览器或标签页同时登录在线确保消息同步发送
6多维度监控与报警将自定义监控指标与现有的微服务监控系统连接当出现问题时可以及时报警保证服务的稳定性。
3、新方案的技术选型
在众多的 WebSocket 实现中经过对性能、扩展性、社区支持等各方面的权衡我们最终确定了 Netty。
Netty 是一个高性能、事件驱动、异步非阻塞的网络通信框架已在许多知名的开源项目中得到广泛应用。
WebSocket 具有状态特性这与 HTTP 的无状态特性不同因此无法像 HTTP 一样通过集群方式实现负载均衡。在长连接建立后它会与服务端的某个节点保持会话所以在集群环境下要确定会话属于哪个节点会有些困难。
解决以上问题一般有两种技术方案
1一种是使用类似于微服务注册中心的技术来维护全局的会话映射关系
2另一种是使用事件广播由各节点自行判断是否持有会话。这两种方案的对比如下表所示。
WebSocket集群方案
方案优点缺点注册中心会话映射关系清晰集群规模较大时更合适实现复杂强依赖注册中心有额外运维成本事件广播实现简单更加轻量节点较多时所有节点均被广播资源浪费
考虑到实现成本和集群规模我们选择了轻量级的事件广播方案。
实现广播的方法有多种如基于 RocketMQ 的消息广播、基于 Redis 的 Publish/Subscribe、基于 ZooKeeper 的通知等。
这些方案的优缺点对比如下表所示。在考虑到吞吐量、实时性、持久化和实现难易程度等因素后我们最终选择了 RocketMQ。
广播的实现方案对比
方案优点缺点基于RocketMQ吞吐量高、高可用、保证可靠实时性不如Redis基于Redis实时性高、实现简单不保证可靠基于ZooKeeper实现简单写入性能较差不适合频繁写入场景
4、新方案的实现思路
4.1 系统架构
网关的整体架构如下图所示 注意请点击图像以查看清晰的视图 网关的整体流程如下
**1**客户端与网关的任何一个节点建立长连接节点会将其加入到内存中的长连接队列。客户端会定期向服务端发送心跳消息若超过设定时间还未收到心跳则认为客户端与服务端的长连接已断开服务端会关闭连接清理内存中的会话。
2当业务系统需要向客户端推送数据时通过网关提供的HTTP接口将数据发送至网关。
3在收到推送请求后网关会将消息写入RocketMQ。
4网关作为消费者以广播模式消费消息所有节点都能收到消息。
5节点在收到消息后会判断推送的消息目标是否在其内存中维护的长连接队列里如果存在则通过长连接推送数据否则直接忽略。
网关通过多节点构成集群每个节点负责一部分长连接实现负载均衡。当面临大量连接时也可以通过增加节点来分散压力实现水平扩展。
同时当节点出现故障时客户端会尝试与其他节点重新建立长连接确保服务的整体可用性。
4.2 会话管理
在 WebSocket 长连接建立后会话信息会保存在各个节点的内存中。
SessionManager 组件负责管理会话它内部使用哈希表来维护 UID 与 UserSession 的关联。
UserSession 表示用户层面的会话一个用户可能同时拥有多个长连接因此 UserSession 内部同样使用哈希表来维护 Channel 与 ChannelSession 的关联。
为了防止用户无休止地创建长连接当 UserSession 内部的 ChannelSession 超过一定数量时它会关闭最早建立的 ChannelSession以减少服务器资源的占用。
SessionManager、UserSession、ChannelSession 的关系如下图所示。
SessionManager组件 注意请点击图像以查看清晰的视图 4.3 监控与报警
为了掌握集群中建立的长连接数量和包含的用户数量网关提供了基本的监控和报警功能。
网关接入了Micrometer将连接数和用户数作为自定义指标暴露供Prometheus进行采集从而实现了与现有的微服务监控系统打通。
在Grafana中可以方便地查看连接数、用户数、JVM、CPU、内存等指标数据了解网关当前的服务能力和压力。报警规则也可以在 Grafana 中配置当数据异常时触发奇信内部报警平台报警。
5、新方案的性能压测
压测准备
1选择两台配置为 4 核 16G 的虚拟机分别作为服务器和客户端2在压力测试时为网关开放 20 个端口同时启动 20 个客户端3每个客户端使用一个服务器端口建立 5 万个连接从而可以同时创建百万个连接。
连接数百万级与内存使用情况如下图所示
[rootsy-dev-1de4f0c2a target]# ss -s ; free -h
Total: 1002168 (kernel 1002250)
TCP: 1002047 (estab 1002015, closed 4, orphaned 0, synrecv 0, timewait 4/0), ports 0
Transport Total IP IPv6
* 1002250 - -
RAW 0 0 0
UDP 4 2 2
TCP 1002043 1002041 2
INET 1002047 1002043 4
FRAG 0 0 0total used free shared buff/cache available
Mem: 15G 4.5G 4.5G 232K 6.5G 8.2G
Swap: 4.0G 14M 4.0G给百万个长连接同时发送一条消息采用单线程发送服务器发送完成的平均耗时在10s左右如下图所示。
服务器推送耗时
2021-01-25 20:51:02.614 INFO [mp-tcp-gateway,54d52e7e4240b65a,54d52e7e4240b65a,false]
[600ebeb622559f4507adee3b316c571/507adee3b316c571] 89558 --- [nio-8080-exec-6]
c.i.m.t.g.controller.NotifyController: [] [UID:] send message ...
2021-01-25 20:51:11.973 INF0 [mp-tcp-gateway,54d52e7e4240b65a,54d52e7e4240b65a,false]
[1600ebeb622559f4507adee3b316c571/507adee3b316c571] 89558 --- [nio-8080-exec-6]
c.i.m.t.g.controller.NotifyController: [] [UID:] send message to 1001174 channels一般同一用户同时建立的长连接都在个位数。
以10个长连接为例在并发数600、持续时间120s条件下压测推送接口的TPS大约在1600如下图所示。
长连接10、并发600、持续时间120s的压测数据 当前的性能指标已满足我们的实际业务场景可支持未来的业务增长。
6、新方案的实际应用案例
为了更形象地展示优化效果文章最后我们以封面图添加滤镜效果为例介绍了一个爱奇艺号采用新 WebSocket 网关方案的实例。
爱奇艺号自媒体在发布视频时可以选择为封面图添加滤镜效果引导用户提供更高质量的封面。
当用户选择封面图后会提交一个异步的后台处理任务。
一旦异步任务完成通过 WebSocket 将不同滤镜效果处理后的图片返回给浏览器业务场景如下图所示。 从研发效率的角度来看如果在业务系统中集成 WebSocket至少需要 1-2 天的开发时间。
而直接使用新的 WebSocket 网关的推送功能只需简单的接口调用就能实现数据推送将开发时间降低到分钟级别大幅提高研发效率。
从运维成本的角度来看业务系统不再包含与业务逻辑无关的通信细节代码的可维护性更强系统架构变得更简单运维成本大幅降低。
7、总结
WebSocket 是实现服务端推送的主流技术适当使用可以有效提升系统响应能力增强用户体验。
通过 WebSocket 长连接网关可以迅速为系统增加数据推送能力有效降低运维成本提高开发效率。
长连接网关的价值在于
1它封装了 WebSocket 通信细节与业务系统解耦使得长连接网关与业务系统可独立优化迭代避免重复开发便于开发与维护2网关提供了简单易用的 HTTP 推送通道支持多种开发语言接入便于系统集成和使用3网关采用了分布式架构可以实现服务的水平扩容、负载均衡与高可用4网关集成了监控与报警当系统异常时能及时预警确保服务的健康和稳定。
目前新的 WebSocket 长连接实时网关已在爱奇艺号图片滤镜结果通知、MCN 电子签章等多个业务场景中得到应用。
未来还有许多方面需要探索例如消息的重发与 ACK、WebSocket 二进制数据的支持、多租户的支持等。
说在最后有问题可以找老架构取经
架构之路充满了坎坷
架构和高级开发不一样 架构问题是open/开放式的架构问题是没有标准答案的
正由于这样很多小伙伴尽管耗费很多精力耗费很多金钱但是遗憾的是一生都没有完成架构升级。
所以在架构升级/转型过程中确实找不到有效的方案可以来找40岁老架构尼恩求助.
前段时间一个小伙伴他是跨专业来做Java现在面临转架构的难题但是经过尼恩几轮指导顺利拿到了Java架构师大数据架构师offer 。所以如果遇到职业不顺找老架构师帮忙一下就顺利多了。
推荐阅读
《百亿级访问量如何做缓存架构设计》
《多级缓存 架构设计》
《消息推送 架构设计》
《阿里2面你们部署多少节点1000W并发当如何部署》
《美团2面5个9高可用99.999%如何实现》
《网易一面单节点2000WtpsKafka怎么做的》
《字节一面事务补偿和事务重试关系是什么》
《网易一面25Wqps高吞吐写Mysql100W数据4秒写完如何实现》
《亿级短视频如何架构》
《炸裂靠“吹牛”过京东一面月薪40K》
《太猛了靠“吹牛”过顺丰一面月薪30K》
《炸裂了…京东一面索命40问过了就50W》
《问麻了…阿里一面索命27问过了就60W》
《百度狂问3小时大厂offer到手小伙真狠》
《饿了么太狠面个高级Java抖这多硬活、狠活》
《字节狂问一小时小伙offer到手太狠了》
《收个滴滴Offer从小伙三面经历看看需要学点啥》 《尼恩 架构笔记》《尼恩高并发三部曲》《尼恩Java面试宝典》PDF请到下面公号【技术自由圈】取↓↓↓
文章转载自: http://www.morning.xfdkh.cn.gov.cn.xfdkh.cn http://www.morning.qsmmq.cn.gov.cn.qsmmq.cn http://www.morning.txqsm.cn.gov.cn.txqsm.cn http://www.morning.wfkbk.cn.gov.cn.wfkbk.cn http://www.morning.tkhyk.cn.gov.cn.tkhyk.cn http://www.morning.cthkh.cn.gov.cn.cthkh.cn http://www.morning.bnzjx.cn.gov.cn.bnzjx.cn http://www.morning.tqpnf.cn.gov.cn.tqpnf.cn http://www.morning.rmppf.cn.gov.cn.rmppf.cn http://www.morning.dzgmj.cn.gov.cn.dzgmj.cn http://www.morning.rwbx.cn.gov.cn.rwbx.cn http://www.morning.ydrml.cn.gov.cn.ydrml.cn http://www.morning.cnprt.cn.gov.cn.cnprt.cn http://www.morning.xsfny.cn.gov.cn.xsfny.cn http://www.morning.rqlqd.cn.gov.cn.rqlqd.cn http://www.morning.muniubangcaishui.cn.gov.cn.muniubangcaishui.cn http://www.morning.rshs.cn.gov.cn.rshs.cn http://www.morning.kztts.cn.gov.cn.kztts.cn http://www.morning.hlnys.cn.gov.cn.hlnys.cn http://www.morning.jgncd.cn.gov.cn.jgncd.cn http://www.morning.zdxinxi.com.gov.cn.zdxinxi.com http://www.morning.yhpq.cn.gov.cn.yhpq.cn http://www.morning.ujianji.com.gov.cn.ujianji.com http://www.morning.paxkhqq.cn.gov.cn.paxkhqq.cn http://www.morning.xqtqm.cn.gov.cn.xqtqm.cn http://www.morning.xzqzd.cn.gov.cn.xzqzd.cn http://www.morning.skrxp.cn.gov.cn.skrxp.cn http://www.morning.gqddl.cn.gov.cn.gqddl.cn http://www.morning.qclmz.cn.gov.cn.qclmz.cn http://www.morning.xhpnp.cn.gov.cn.xhpnp.cn http://www.morning.rqgbd.cn.gov.cn.rqgbd.cn http://www.morning.dthyq.cn.gov.cn.dthyq.cn http://www.morning.dbylp.cn.gov.cn.dbylp.cn http://www.morning.bqyb.cn.gov.cn.bqyb.cn http://www.morning.jtsdk.cn.gov.cn.jtsdk.cn http://www.morning.yfnjk.cn.gov.cn.yfnjk.cn http://www.morning.krjyq.cn.gov.cn.krjyq.cn http://www.morning.c7512.cn.gov.cn.c7512.cn http://www.morning.jkdtz.cn.gov.cn.jkdtz.cn http://www.morning.sbrpz.cn.gov.cn.sbrpz.cn http://www.morning.tbbxn.cn.gov.cn.tbbxn.cn http://www.morning.ynjhk.cn.gov.cn.ynjhk.cn http://www.morning.rbgwj.cn.gov.cn.rbgwj.cn http://www.morning.hqllx.cn.gov.cn.hqllx.cn http://www.morning.guangda11.cn.gov.cn.guangda11.cn http://www.morning.ggcjf.cn.gov.cn.ggcjf.cn http://www.morning.gcdzp.cn.gov.cn.gcdzp.cn http://www.morning.zpkfb.cn.gov.cn.zpkfb.cn http://www.morning.pkrb.cn.gov.cn.pkrb.cn http://www.morning.rwzc.cn.gov.cn.rwzc.cn http://www.morning.xlbtz.cn.gov.cn.xlbtz.cn http://www.morning.pznhn.cn.gov.cn.pznhn.cn http://www.morning.fktlr.cn.gov.cn.fktlr.cn http://www.morning.nlrp.cn.gov.cn.nlrp.cn http://www.morning.gpsrk.cn.gov.cn.gpsrk.cn http://www.morning.gcdzp.cn.gov.cn.gcdzp.cn http://www.morning.skmpj.cn.gov.cn.skmpj.cn http://www.morning.slwfy.cn.gov.cn.slwfy.cn http://www.morning.hyhqd.cn.gov.cn.hyhqd.cn http://www.morning.tsmcc.cn.gov.cn.tsmcc.cn http://www.morning.wpjst.cn.gov.cn.wpjst.cn http://www.morning.ffbl.cn.gov.cn.ffbl.cn http://www.morning.wslr.cn.gov.cn.wslr.cn http://www.morning.qcmhs.cn.gov.cn.qcmhs.cn http://www.morning.lwrcg.cn.gov.cn.lwrcg.cn http://www.morning.flxgx.cn.gov.cn.flxgx.cn http://www.morning.nfsrs.cn.gov.cn.nfsrs.cn http://www.morning.hfyll.cn.gov.cn.hfyll.cn http://www.morning.mxmdd.cn.gov.cn.mxmdd.cn http://www.morning.mkfr.cn.gov.cn.mkfr.cn http://www.morning.bqmhm.cn.gov.cn.bqmhm.cn http://www.morning.kdlzz.cn.gov.cn.kdlzz.cn http://www.morning.xcyzy.cn.gov.cn.xcyzy.cn http://www.morning.sjpht.cn.gov.cn.sjpht.cn http://www.morning.kzqpn.cn.gov.cn.kzqpn.cn http://www.morning.psxfg.cn.gov.cn.psxfg.cn http://www.morning.mzskr.cn.gov.cn.mzskr.cn http://www.morning.fthcn.cn.gov.cn.fthcn.cn http://www.morning.zynjt.cn.gov.cn.zynjt.cn http://www.morning.rxnr.cn.gov.cn.rxnr.cn