看!闲鱼在ServiceMesh的探索和实践

背景

在阿里服务端开发以Java为主的大背景下,其他异构语言业务如何调用现有Java服务,如何与集团中间件打通,就成为使用非Java语言团队必须要解决的首要问题。

现状

在ServiceMesh方案成熟之前,我们采用:通过Dart C/C++扩展方式调用各中间件客户端SO库(类JNI)。该方案在业务初期很好的解决了Dart服务端生态建设问题。但是该方案还存在以下几个问题:

  • 运维耦合度高。业务代码和客户端SO库代码打包在一起,运行在同一进程,一旦微服务框架需要升级,业务代码也需要维护和重启。
  • 复杂性:进程内的多个语言环境,跨语言数据表示和传输等问题,都会增加系统的复杂性,降低原有服务的性能。
  • 接入成本高
  • 新功能滞后

ServiceMesh

由于现有方案存在的一些问题,我们转向ServiceMesh寻找解决问题的思路。

如上图所示:与目前比较常见的微服务框架相比,ServiceMesh把微服务客户端核心功能独立出来,并作为一个独立Proxy进程部署在每一个主机上,业务进程通过Proxy进程与外界通信。这个独立的Proxy进程就是ServiceMesh的核心: SideCar。

业务进程和SideCar之间最常见的两种通信方案:1. 基于Iptables的流量拦截转发方案,2. 业务进程通过轻量化Mesh客户端直连SideCar。从实现原理上看,Iptables方案相比直连方案会有一定的性能损耗和延迟。我们选择的ALiMesh方案采用了轻量级Mesh客户端方案。

Mesh化之后,业务进程只包含业务代码和轻量化的Mesh Client,代码逻辑变得简单,问题定位更清晰。业务同学可以更专注业务开发,而不用关注微服务庞杂的逻辑。微服务框架核心功能的开发维护扩展升级等工作由专门的Mesh团队负责,独立升级维护,与业务解耦,业务无感知。

ServiceMesh方案解决了现有方案存在的:运维成本、接入成本问题,代码复杂问题。而且采用开源的Mesh方案,还可以借助开源的力量,不断增加新的功能。

AliMesh

SideCar的引入,使得原本业务跟微服务之间的进程内通信转变成进程间的通信,进出流量增加了一跳,那么ServiceMesh的引入对业务性能带来的影响具体怎么样?接下来我们基于ALiMesh(Istio开源方案阿里版本)一起分情况看下。

ALiMesh提供了2种接入方案:Http方式、HSF方式。其中Http方式又分为Http1.0和Http2.0方式。

AliMesh http方案(快速接入)

如图所示,Http方式下:在数据面,业务进程与SideCar,SideCar与Service Provider之间采用Http协议交互,数据编码采用Json。业务进程集成了基于Http协议的Mesh Client,Mesh SideCar通过泛化调用远程调用Java HSF服务。

而在控制面:ISTIO控制面同步ConfigServer的服务提供者列表数据,SideCar跟ISTIO pilot走原生的服务同步通道。

由于Http协议的通用性,该方案接入简单,快速的验证了Mesh方案的可行性,但是性能还达不到业务的线上要求,经测试,主要指标如下:

备注:目前闲鱼只使用了ServiceMesh OutBound功能。为了模拟线上详情页真实流量情况,每次上游请求处理过程会调用21次下游Java HSF服务, 所以图中QPS换算成Mesh流量时,需要乘以21倍,以下测试都是如此。

如图所示:Mesh方式相比直连方式,Consumer侧CPU消耗增长一倍,每一次RPC调用RT增加了近2ms。且HSF Provider侧CPU也有近40%的增加,这一点跟HSF同学的测试结果基本吻合。经过分析,我们初步定位引起CPU消耗增加的主要原因是Http1.1协议的连接方式(已经使用了连接池)和数据编码。

为了验证该方案的问题所在,我们测试接入了Http2.0方案。Http2.0相比Http1.x,在连接多路复用、数据格式、head压缩等等方面具有天然的优势。经过测试,ALiMesh的性能也较Http1.x有了较大的提升。部分满足或者接近我们的技术要求。详细指标如下图所示:

如图所示,优化后,业务进程Consumer侧,CPU和RT消耗稍稍有些超标(CPU 增加不超过20%)。为了探索更高性能,更低延迟的方案,我们转向了HSF私有协议方案。

AliMesh HSF扩展协议方案(高性能)


如图所示,HSF方案下,HSF RPC协议实现为Mesh SideCar的一个扩展协议。在数据面:业务进程与SideCar,SideCar与Service Provider 之间采用HSF 2.0私有协议,数据编码采用Hessian 1.0。业务进程集成了Mesh化改造的HSFCPP SO库作为MeshClient,负责与Mesh SideCar通信。而在控制面:SideCar与Configsvr直连,同步服务提供者列表和配置信息,采用差量同步方式,以降低控制面板的CPU消耗。详细测试数据如下:

经过不断优化,最终成功将Mesh CPU增长控制在20%以内,每跳RPC调用RT增加控制在1ms以内。

ServiceMesh在闲鱼的落地

目前Dart+ALiMesh方案在闲鱼服务端已经稳定运行八个月+,服务于闲鱼详情页、猜你喜欢,租房首页等业务, 期间Mesh多次进行优化、升级、扩展功能等运维工作,业务进程都无感,正常对外提供服务,业务同学不需要参与。

ALiMesh引入后,对线上业务RT的影响如下图所示:橙色的曲线是Mesh化后的业务RT监控曲线,蓝色的曲线是Mesh化前一周业务RT监控曲线,排除线上环境日常的波动后,ALiMesh的引入对线上业务RT的影响相当小。

说在最后

ServiceMesh方案,将微服务逻辑和服务间通信这些与业务无关的逻辑从业务应用中解耦出来,让业务应用瘦身,让业务同学更专注于业务开发。同时也让异构语言能够低成本的建立服务端生态,接入现有系统。

当然对于性能损失,个人认为总体利大于弊。业务团队可以根据自己业务实际情况进行测试评估,权衡利弊是否要接入ServiceMesh。

接下来我们会进一步扩大AliMesh在闲鱼的应用,并与ALiMesh合作,推动AliMesh在Dart Faas落地,适配更多的中间件。

Image placeholder
NicholasCao
未设置
  59人点赞

没有讨论,发表一下自己的看法吧

推荐文章
美团BERT的探索和实践

他山之石,可以攻玉。美团点评NLP团队一直紧跟业界前沿技术,开展了基于美团点评业务数据的预训练研究工作,训练了更适配美团点评业务场景的MT-BERT模型,通过微调将MT-BERT落地到多个业务场景中,

揭秘!闲鱼拉新投放系统如何设计

背景闲鱼目前已经是国内最大的闲置物品交易平台。随着闲鱼体量的增长和用户规模不断扩大,闲鱼App上的一个普通banner抑或是feeds中的一张普通的卡片,每天都可能被数以千万计的人看到。为了更好地服务

美团下一代服务治理系统 OCTO2.0 的探索与实践

本文根据美团基础架构部服务治理团队工程师郭继东在2019QCon(全球软件开发大会)上的演讲内容整理而成,主要阐述美团大规模治理体系结合ServiceMesh演进的探索实践,希望对从事此领域的同学有所

从字到词,大词典中文BERT模型的探索之旅

导语:BERT模型自诞生以来统治了各项NLP任务的榜单,谷歌也针对中文给出了基于字的模型。然而我们知道词是语言最重要的组成部分,因此,一个自然的想法就是做基于词的BERT模型。但是受限于显存,谷歌原生

瓜子二手车在 Dubbo 版本升级、多机房方案方面的思考和实践

前言随着瓜子业务的不断发展,系统规模在逐渐扩大,目前在瓜子的私有云上已经运行着数百个Dubbo应用,上千个Dubbo实例。瓜子各部门业务迅速发展,版本没有来得及统一,各个部门都有自己的用法。随着第二机

Elasticsearch的sql化使用

Elasticsearch-sql的安装、使用本文以Elasticsearch-5.1.2为例elasticsearch-sql下载地址:https://github.com/NLPchina/e..

jquery中size()与length的区别是什么?

jQuerylength和size()区别length是属性,size()是方法。如果你只是想获取元素的个数,两者效果一样既("img").length和("img").size()获取的值是一样的。

警告:ORA-00600 2252 错误正在SCN问题下不断爆发

自2019年6月23日之后,Oracle启用了SCN自动Auto-Rollover的新特性,也就是自动调整了SCN的增长率算法(缺省32K每秒,允许SCN最高以每秒96K计算)。注意,这里说的自动,是

直击DTCC2019现场:数据库智能化运维探索与实践

5月10日,第十届中国数据库技术大会(DTCC2019)正在火热进行中。作为本届大会讨论的焦点之一,“数据库智能运维”专场人气爆棚,来自京东物流、腾讯、字节跳动、京东商城、便利峰的行业专家出席现场,他

做银行家里的数据专家:ING探索大数据时代下的金融最佳实践

大数据文摘出品记者:高延6月18-21日,O’ReillyAIConference在北京召开。大会上,来自荷兰的金融公司ING的IT主管BasGeerdink带来了《关于数字驱动企业》的主题分享。进入

Flutter高内聚组件怎么做?闲鱼打造开源高效方案!

fish_redux是闲鱼技术团队打造的开源flutter应用开发框架,旨在解决页面内组件间的高内聚、低耦合问题。开源地址:https://github.com/alibaba/fish-redux从

走近科学,探究阿里闲鱼团队通过数据提升Flutter体验的真相

背景闲鱼客户端的Flutter页面已经服务上亿级用户,因此用户体验尤其重要,完善Flutter性能稳定性监控体系,以便及早发现线上性能问题,也可以作为用户体验提升的衡量标准。那么Flutter的性能到

闲鱼Flutter互动引擎系列——整体设计篇

什么是Candy引擎Candy引擎是闲鱼技术团队设计开发的一款:APP嵌入式的、轻量级的、易于开发、性能稳定的互动引擎;绘制系统高度融合Flutter体系,游戏场景和FlutterUI支持无缝混排;动

HDFS 源码解读:HadoopRPC 实现细节的探究

桔妹导读:HDSF作为分布式文件系统,常常涉及DataNode、NameNode、Client之间的配合、相互调用才能完成完整的流程。为了降低节点之间的耦合性,HDFS将节点间的调用抽象成不同的接口,

从网络接入层到 Service Mesh,蚂蚁金服网络代理的演进之路

本文作者:肖涵(涵畅)上篇文章《 诗和远方:蚂蚁金服ServiceMesh深度实践|QCon实录》中, 介绍了ServiceMesh在蚂蚁金服的落地情况和即将来临的双十一大考,帮助大家了解Servic

算法题:设计和实现一个 LRU Cache 缓存机制

理论基础 LRU算法、Cache 实现LRUCache缓存机制 题目描述 设计和实现一个LRUCache缓存机制 解题思路 leastrecentlyused最近最少使用(被淘汰) Doubl

算法题:设计和实现一个 LRU Cache 缓存机制

题目来源于力扣 理论基础 LRU算法、Cache 实现LRUCache缓存机制题目描述 设计和实现一个LRUCache缓存机制 解题思路leastrecentlyused最近最少使用(被淘汰) Do

一个多业务、多状态、多操作的交易链路?闲鱼架构这样演进

前言双十一刚刚结束,成交额2684亿震惊全世界,每秒订单峰值达54.4W笔。在闲鱼2000万DAU,交易数额同样增长迅速的今天,我们如何保障交易链路的稳定与快速支撑业务?这篇文章从客户端开发的角度,介

闲鱼如何高效承接并处理用户纠纷

背景闲鱼是一个基于C2C场景的闲置交易平台,每个用户既是买家也是卖家,在自由享受交易乐趣的同时也容易带来一些问题,如发一些侵权违规商品而不自知,发一些带情绪化言语对他人造成了伤害等,因此这也带来了一个

SQL Server 2014的数据库引擎新增功能(参考sqlserver官方文档)

SQLServer2014数据库引擎引入了一些新功能和增强功能,这些功能可以提高设计、开发和维护数据存储系统的架构师、开发人员和管理员的能力和工作效率。  以下是 数据库引擎已增强的方面。数据库引擎功

笨办法学 Linux Bash:Shell、`.profile`、`.bashrc`、`.bash_history`

Bash:Shell、.profile、.bashrc、.bash_history。 当使用CLI(命令行界面)来使用Linux时,你正在与一个名为shell的程序进行交互。所有你输入的都传递给she

已配置 4000+ 页面,携程前端组件化探索之“乐高”运营系统

一、前言 市场部活动组主要负责各种运营活动的相关开发,分为常规运营活动和定制运营活动。常规运营活动因为组件(模块)具有复用性,并且配置化需求非常多,因此我们建设了一个可视化页面搭建平台——乐高(leg

爱奇艺RND框架技术探索——架构与实现

前言RND,全称ReactNodeDesktop,起源于RN在爱奇艺PC端的实现,采用ReactJSframework+Node.jsruntime+nativeUIengine架构,目标是成为最轻量

会员服务在高可用架构的实战探索

概述很多互联网公司在发展过程中大多出现过多次机房网络故障的情形,如果发生故障,一般需要动用整个IT部门的人力进行流量切换和客诉处理。为了避免此类情形的发生,公司计划进行服务的高可用建设。会员部门持续跟

简介PWA与Service Worker

1.关于PWAPWA,全称Progressivewebapps,即渐进式Web应用。PWA技术主要作用为构建跨平台的Web应用程序,并使其具有与原生应用程序相同的用户体验。早在2014年,W3C就已经