当前位置: 首页 > 科技观察

线上爆发,移动订单占比83%,得益于苏宁易购移动端的统一接入层!

时间:2023-03-19 02:03:45 科技观察

【.com原创文章】近年来,随着业务的发展和用户习惯的改变,苏宁易购不断加强移动端的开发,加强与视频直播、娱乐、和体育营销,创新营销产品,不断提升移动端的日常活跃度。2017年3月,移动端订单量占整体线上比重的83%。为了进一步提高移动端的访问速度,提升用户体验,移动团队潜心研究网关和http2.0技术,最终决定推出统一接入层。下面从三个方面对苏宁易购移动终端统一接入层进行分析:统一接入层设计统一接入层功能及统一接入层性能实现统一接入层设计架构演进苏宁易购2014年接入应用防火墙,为Web应用提供安全保护。2015-2016年,整体架构更加稳固,保障了业务需求,支撑了线上业务的快速发展。2017年,随着统一接入层的加入,系统封装了应用的内部结构。客户端只需要与网关交互,无需调用特定的服务。并在此基础上,系统做了域名汇聚,采用http2.0协议,重点提高了移动端的访问速度。统一接入层的架构划分统一接入层的内部架构分为三层:Proxy层,有多个proxy代理,用go语言实现,向后转发请求;每个虚拟集群,每个集群对应一个业务系统,管理该系统的服务器;server,server为当前在线的各个系统的服务器。配置信息存储在zookeeper上,后台管理系统统一管理zookeeper上的配置数据。从上到下,统一接入层接管移动端的请求,转发给相应的服务器。代理层是用go语言实现的,主要是利用go的高性能和线程控制。后台管理系统使用Java实现。统一管理,采用公司内部通行证,统一后台管理。目前,移动终端系统接入统一接入层后,iOS和Android客户端发送的请求都汇聚到一个域名中,遵循http2.0协议。请求通过CDN到达代理层代理,代理将请求转发给各个集群系统。回源协议支持http2.0和http1.1。统一接入层功能,实现统一接入层的一个重要功能就是转发请求,我们首先考虑基于Nginx来做整个代理层,但是综合分析,与我们团队的技术方向不一致,修改Nginx成本高,不方便定制个人需求。那么,我们选择使用go语言。一是被它简洁的语法所吸引,二是它的性能实在是太强大了。后面的压测数据也证实了这一点,让我们感到意外。技术实现方案下面介绍我们应用的技术点和整个实现过程中接入层的作用:采用高效的fasthttp组件作为请求接入转发层,性能接近Ngnix。经过测试,每次转发请求包括网络传输平均只增加了0.1毫秒。fasthttp是不同于标准库net/http的Go的HTTP实现,其性能可以达到标准库的10倍。在匹配路由规则方面,通过快速搜索算法和精确匹配算法的互补,可以同时保证性能和准确性。对于后端请求的转发,采用了TCP链路复用的方式,使得请求在转发层面看起来像一台机器,大大减少了网络交互。对于后端服务检测,采用主动检测和被动检测相结合的方式,提高后端服务的快速容错能力。所有的规则配置都通过zookeeper快速配置,可以实现在线配置实时生效的功能。内部组件过滤层使用go1.8支持的plugin方式,通过在线动态补丁支持新需求的功能添加。整个proxy基本是无状态的,zookeeper部署也考虑了多机房同步方案,所以整个统一接入层也具备多机房部署能力。支持修改请求的HOST,统一接入层修改请求的域名,但是有些系统Apache对原域名有配置,特别是需要登录的接口,针对这种情况,支持配置后台请求的原域名。proxy转发时,HOST的值为原域名。这样就可以正确响应请求,并且原系统不需要修改服务器配置,对接入层没有影响。洞察力。转发规则动态配置所有配置数据(转发规则)都存储在zookeeper上,支持动态配置,由后台管理系统统一管理。Proxy,代理机在zookeeper中注册一个临时节点,如果代理机与zookeeper的连接断开,则自动删除临时节点,利用临时节点的特性检查代理。转发规则(api)存储了url的路由规则,如下图,统一接入层根据url转发将匹配/mtspre/*的请求转发到集群mtspre,并重写转发的请求地址。Cluster(集群),存储每个集群的信息,集群包含的服务器和转发策略,支持随机和哈希。服务器(server),存放所有服务器信息,包括签到时间和超时时间。绑定关系(bind),存放集群与服务器的绑定关系。Proxy代理层监控zookeeper的各个节点。一旦节点数据发生变化,可以实时获取最新配置,立即生效,改变请求的路由策略。为了保证可靠性,当zookeeper所在的虚拟机宕机时,所有的配置信息都保存在数据库中,并写入文件。在极端情况下,代理可以从文件中读取配置信息并正常启动。协议移动端发送的请求统一使用http2.0协议,Android端使用okhttp,iOS端使用AFNetworking。与HTTP/1.x和HTTP/2相比,系统在底层传输上做了很大的改变和优化:HTTP/2使用二进制格式来传输数据,而不是HTTP/1.x的文本格式。HTTP/2使用HPACK对消息头进行压缩传输,可以节省消息头占用的网络流量。但是,每一个HTTP/1.x请求都会携带大量冗余的头部信息,浪费了大量的带宽资源。多路复用,说白了就是所有的请求都通过一个TCP连接并发完成。同时,流还支持优先级和流量控制。服务器推送:服务器可以更快地将资源推送到客户端。比如服务端可以主动推送JS、CSS文件给客户端。HTTP/2主要是对HTTP/1.x底层传输机制的完整重构,HTTP/2基本兼容HTTP/1.x的语义。Content-Type还是Content-Type,只是不再是文本传输了。域名汇聚接入统一接入层后,客户端使用的域名全部汇聚为一个域名。域名后的第一个目录标记了请求所属的系统,即路由规则,程序员根据此将请求转发到不同的系统。客户端收敛域名,不仅有效减少了***访问的DNS解析次数,最重要的是充分利用了http2.0的特性——多路复用。因为只有一个域名,所以只需要建立一个连接就可以发送所有请求,大大减少了等待时间,真正做到了并发。下图所示的链路复用中,只进行了一次ssl握手(紫色部分),其他请求都复用在这条链路上,同时发送。后端服务器实时校验做请求转发。检查后端服务器的健康状况非常重要。我们目前有两套检查解决方案同时运行。(1)前端代理层被动检查代理将请求转发给后端服务器。如果返回失败,则本服务器的checkFailCount加1,如果checkFailCount超过3,则将服务器标记为down,不再向其发起转发。问。默认的checktime超时是3s。如果后端服务器在3s内没有再次失败,checkFailCount将被清除。(2)后台管理系统主动检查后台主动检查,在后台管理系统启动时开始运行,可以设置检查周期和超时时间。签入线程根据服务器的IP和端口号主动与各个服务器建立socket连接。如果连接超时,则认为服务器不可用,其状态标记为关闭;如果连接成功建立,状态标记为up。前后主动和被动检查的结合确保了当服务器不可用时,它停止向它转发请求。同时,当服务器再次可用时,它的状态被标记为up,前台代理可以继续向它转发请求。交换机(1)降级交换机为了保证可靠性,统一接入层修改了原有的网络链路,上线时必须有降级交换机。目前我们设计了一套开关,可以根据APP版本号和操作系统类型来设置开关的状态。打开开关后,将原域名转换为融合域名,请求到统一接入层;关闭开关后,域名恢复为原域名,请求直接进入原链路,无需经过统一接入层,支持在线实时切换。(2)协议转换开关http2.0的应用尚处于起步阶段,目前网络链接存在一定的风险,我们不能接受。为此,设计了另一组开关,将协议转换到http2.0和http1.1之间,以降低被***的风险。统一接入层性能Systemperformance为了测试统一接入层的性能,是否能满足线上要求。移动团队对苏宁易购APP的生产界面进行了压力测试。场景一是请求走原链路,场景二是请求走统一接入层。压力测试数据如下。请求走原链路,平均tps为9130,平均响应时间为11ms。通过统一接入层请求,tps达到14200,提升了50%,响应时间为6ms,缩短了近一半。这得益于go语言的高性能,快速的路由算法,以及后端tcp连接的多路复用。真实用户数据采集为了提高系统的访问性能,以及在实际生产环境中测试统一接入层的性能,我们将部分接口接入统一接入层,并在生产环境中运行。经过持续监控,我们收集了真实的用户数据。未连接统一接入层的接口,请求数据:连接统一接入层的接口,请求数据:图1是原链路接口的top99,71%的请求平均响应时间为72ms,图2是接入层的接口统一,域名汇聚,协议采用http2.0,然后由系统代理转发,87%的请求平均响应时间为62ms,top99数据有了明显提升。结束语本文主要分享统一接入层的技术实现方案和功能,利用go语言的快速、高效、高性能搭上http2.0的快车,为用户提供更好的购物体验。自上线以来,通过24小时不间断监控和数据采集,统一接入层功能稳定,性能提升约20%,符合我们的预期。但统一接入层目前处于起步阶段,移动端的最终目标是接入核心系统80%以上的请求,移动端接入性能提升30%以上。相信通过团队的共同努力和不断创新,移动端的性能能够得到进一步的提升。苏宁云业务IT总部任良成架构师,主要负责苏宁易购https化改造,并负责统一接入层上线。对网络性能优化有深刻的思考和理解。现在他正在和研发团队一起构建统一的接入层,并持续优化网关层,做一个更高效、更健壮的网关。王一博,苏宁云业务IT总部高级架构师,拥有多年IT平台研发和管理经验。曾就职于苏宁、阿里、惠普等大型互联网和IT公司。具有多年SOA企业架构、高并发高可用系统设计实践经验,专注于分布式、高并发、高性能/性能调优、架构拆分与集成、大数据等技术领域。【原创稿件,合作网站转载请注明原作者和出处为.com】