谢谢大家今天来参加我们这次分享今天我会讲一下在Eastus X-Mesh中我采用Arochemesh去做VH流量的管理以及我们来自我先自我介绍一下我是那只Tesla Iota的花瓶我是那只Boss直聘的秦士林先我会给大家讲一下Arochemesh的新历史和它的架构试点会给大家分享一下它在Boss直聘里面Arochemesh做Double流量治理的一些事件开始吧这是它一个简单的历史我们在2020年CF的时候开源了当时开源的一个契机是因为当时我在的公司我们有客户他们希望采用Eastus X-MeshEastus去做服务治理但是他们用实际上Double服务当时我就尝试往社区提了一个PR说我们是不是可以支持一下Double因为其实我们在NW里面它是有一个Double的Filter的当时那个霍霍的就给我答复说社区还是希望关注在ATP协议上因为本身Eastus X-Mesh已经够复杂了对吧大家可以看到这种模式很复杂然后如果我们再去做其他协议的话它的复杂度是不太好掌控的所以说它就希望说这个东西可能不好混去然后据这个因为社区活不了然后我们自己有这个需求所以说当时就自己考虑做了AirCAD那个开源项目然后去做NW原生的Double和Slive协议的一个支持这是它的一个起源为什么做这个事然后到21年8月的时候我们又有一些新的需求一个是本身在社区里面Double和Slive协议他们的Filter他们本身他们两个Filter的配置也是不太一致的然后他们的能力也不是不对齐的然后比如它不支持当时不支持RDS一些Metrics和Tracer的能力也比较缺缺所以当时对比ATP的话就很弱这是第一个原因第二个原因是我们公司当时内部我当时所在的公司内部有些其他协议是有协议因为这大公司大公司难免自己照轮子但照轮子的原因很多有的是活里的有的不活里的我们先不说原因但是轮子都是有的比如说我们有TRPC我们有些游戏的是有协议有些视频的是有协议这些的话也希望成为协议管理能怎么做就这是两个问题考虑两个问题之后我们就对ARCAM的基础上去做了一个数据面那个数据面也是GNW的GNW的它做了一个叫做Metaprotocol代理就是原协议代理的一个filter然后filter上去做了私有协议和其他协议的支持然后后面我们会讲它的一些能力当时是做了牺牲度游比如说本地全旅渐流还有一些游战经线的流量管理能力当时做这个事情然后在6月份的时候我们加入了Sensef的Sandbox然后在23年2月份发布了1.2.2版本实际上的服务级别的Tracin Logon Matrix这个时候能力基本上就跟Astile 红卫对ATU的能力基本是对齐了然后在23年6月份发布了1.30年这个时候我们有社区同学就提了EPR去支持了在GNW上去支持一些资产业的协议因为他们有这个需求同时支持了1.16的版本然后在8月份发布1.4.0支持了1.18这是它的一个大则的例证然后这个是当时做Metaproc代理的一个思路因为我们所有的汽车协议这边是類似RPC的平康型的协议或者是顺利型的协议它都是类似的就是根据Header根据Header去做一些流量治理包括路由包括它的一些线流等等的操作它都是Header里面的一些制断包括你的ATPE的PostPostSAPR的一些委头Ossurity等等比如说Double里面的Self-sneedSelf-sneedSelf-sneed Mescaline等等都是类似的都是牺牲头里面的一些一些元素剧我要做一些做一些匹配判断然后做一些流量的处理所以就基于这个原因其实我们可以我们可以把这个逻辑抽象出来我们没必要为每个协议都去单独写一个不同的Filter我们可以有一个有一个这是在NW里面的一个Failure Challenge大家可能对NW熟悉的话就会知道我们有这个东西这个我们是Listner当时就是下游客户站过来之后进入到一个Listner然后进入4成的Failure处理其中我们的Metaprotocol Proxy它是一个4成的Failure它的能力是跟H7ATB Clicking Manager它是对等的然后它里面它实现了一些公共的一些能力包括我们的路由能力路由能力然后它的一些可见性的能力包括Treson, Logan, Patrick 等等这些能力还有线流还有重视这些能力因为它本身它都是根据我们说的一个7成协议的一头做一些流荡的一些处理或者说根据7成协议的头做一些指标的采集之后它的逻辑是类似的是相同的应该是相同的所以我们把它做在一起唯一不同的就是我们的边界码它是不一致的就是你怎么去把一个Double协议的解析出来拿到它的一些头的数据或者怎么把Slip协议或者是一个Sale协议的一些头解析出来就从T-Sideal里面去取出一个7成的数据包进行的请求这个地方是不同的所以我们把边界码这块做了一个接口拿出来然后你可以实现边界码实现完之后你就可以使用我们这个等能力了这是这样的边界码的话因为我们知道已经实现了数十种协议如果是一种不是很复杂的协议的话边界码可能一百多行我两百行持下压带码然后一周之内可以搞定从从边码到测试到到一个卖箱那么一个流程一周之内可以完成它的基本上它的一个简单的原理就是我们里面有两个出于结构一个叫做Metadata我们叫做Metadata就是你在请求T-Sideal里有进来之后我们把请求取出来你的自定的解码器解出来之后你可以解除任意的一些可以挖入的字画解出来之后你存到一个Metadata里面我们会给一个数据存进去之后后面我们所有的七成的处理都可以把那个开发的那个直串拿出来之后做一些匹配做一些处理比如说你可以用路由的匹配你会用线流的匹配然后你可以做其他的判逻选这个是个例子比如说我可以判断如果是UdorsTest的话我就做这后面的一个可能流量的一个拆分这样子Metadata的话它是说你的七成的处理逻辑你可以往Metadata你填充一数据这样的话你可以修改你的头你可以把你的头的字改掉我们吹声就这么实现的最后你再编码的时候再把它留在现在那个结构拿进来编码 编进去然后再发上我的发上我的Apps真正的那个最终的Metadata这是它基本的逻辑刚才讲的是数据面数据面实现之后那么我们在代理层面已经可以去做一些ADB协议的所有的流量的处理了所以说另外我们需要有控制面控制面的话还是在ARRAC上面我们最开始ARRAC上面去做一些做一些工作让它可以支持Metaport那种协议它的逻辑也比较简单其实很简单首先从STL里面拿到我们当前这个Match里面所谓的Service服务对吧 当那个Service可能对STL来说它认为你是一个TTP的服务你正做TTP的流量治理当我们ARRAC里面拿到TTP的服务之后我们会有一个后续的判断判断说跟STL律师的表示你是Metaprotocol什么一个前罪的话我们认为你是我们可以识别的Metaprotocol的协议最后面是你的协议的具体是哪个协议拿到之后我们就会把配置下给数据面因为数据面都可以拿到这个协议名之后拿到它的对应的边界码去做边界码这样子拿到之后空之面ARRAC会生成一个NWFILTER这个配置给我们下发给STL然后STL为它下发给NW的TTPFILTER打一个补丁把TTPFILTER转换成我们的Metaprotocol这个配置这样的话STL下发在LDS里面它的对应的TTPFILTER配置变成了我们的Metaprotocol代理然后当然CDS EBS不变了这个能力我们还采用了STL的所以说它实际上它是跟STL是配合工作的它并没有去替代STL而是对STL做了一个增强增强所有的能力它有的能力我们都使用STL的它没有的能力我们再使用ARRACMetaprotocol代理去补其他这么一个设计的思路然后最后我们会拿到这个配置之后它里面有一个配置就是RDS的路由的服务器它会指向ARRAC为什么呢因为本身ATV的路由它跟ATV协议它是比较强项观的我们当时就没有去采用STL的路由UNISM STLwhich yourself表示表示是有协议的就不好表示为什么灵活比如说它对人的host我们怎么印象到我们是有协议的这个东西就不好印象所以我们单独去做了一个叫做Metaprotocol的CRD去表示我们的路由后面司令应该会给大家讲到给大家例子这个时候我们UNISM只向ARRAC之后ARRAC就会把它对应的路由下发给UNISMUNISM最后可以去做什么做识别我们的FATV协议的流量然后去做相应的一处理目前我们支持的版本因为我们是跟STL和UNISM同样一起票工作的对吧所以我们支持的版本是跟STL是有对应关系的我们目前社区支持的是STL的双手版本因为大家知道STL本身的版本跌得比较快我们社区也不可能去去跟踪每一个版本现在就是按双手版本这么去迭代基本上也满足带来需求目前支持的协议的话没有去系数大概有十多种开源的话就有Double, Swift, BRPC然后私有协议的话可能也还有将近七八种吧七八种吧项目安利在二二年冬奥会直播的时候我们有有那个央视屏转件它后转是采用我们的方案采用协议然后听音乐然后我有待会儿视频给大家分享的Boss执聘的行业安利还有零气云的一些更多安利的话可以看我们的官网好下面请视频给我们分享ErekaMesh的Double这里的一些事件大家下午好我是秦士林然后来自于Boss执聘然后在分享这个ErekaMesh在Boss执聘的落地之前先跟大家一起回顾一下我们国内吧业务架构的一个眼镜主要是分为四个大的阶段单体架构集群架构面向服务架构以及微服务架构单体架构不用多说因为它比较简单它主要的优点是交付效率比较高然后用人的成本以及硬件资源的成本花费比较低然后它的劣势也很明显因为所有的业务模块都在一个进程里面所以你的业务进程就是易容俱容易损俱损就你平时没什么事的时候这个业务它运行得很流畅一旦出事的时候你可能就是对你整个那个公司的业务就是雪崩嘛然后后面发展到是集群架构集群架构它的那个架构原理比较清晰但是它的劣势也非常明显可以看到这个图中它的那个业务的偶和以及它的那个跟地壁的偶和就比较严重然后还有一个最关键线的点就是这个架构模式它主要是技术驱动的它并非业务驱动的所以说在我们的业务逻辑比较复杂的时候这种架构模式它不能很好的满足我们的业务场景那改造办法就是我们后面的一个面向服务架构提出的就是那个以业务为中心然后业务不同的业务功能然后进行垂直化的拆分这是后来的那个面向服务架构面向服务架构它里面有一个核心的一个点就是最开始的面向服务架构就是它有一个企业的一个服务总线然后也就是所有的服务都会所有的业务程序都会连接到这个ESB企业服务总线中然后去做服务的注册发现以及做协议的转化就比如说我用户服务跟我的那个商品服务他们要是用不同协议的话那我们都得注册到这个ESB企业服务总线中然后对他们俩不同的那个协议然后进行转化然后能识别他们俩的就是这个ESB这个服务总线这很明显它就是中心化的然后它是中心化的一个设计然后它的这个成本也非常高然后业界呢没有好的一些开源的产品然后它的那个技术被少数的一些那个核心的大厂绑架所以后面就诞生了我们这个微服务架构微服务架构实际上是一种现代化的面向服务架构它有几个关键点嘛关键维度首先它以开源作为基座就是它一定是开源的然后它提供了独立开发部署以及运为这样的一些服务能力它提供了这样一些能力的服务开发框架然后并且它提供了自己的那个它可能会提供自己的那个私有的RPC协议或者说用一些开源的一些私有的协议以及它能够实现服务治理它然后将这些所有的东西串联起来作为一个整体的这么一个生态体系我们把这样的这样的一种架构方式叫做微服务化的一个架构微服化架构它的一个特点就是跟前面那个微小服务架构比起来它只需要它不需要所有APP所有的业务全部接到那个刚刚说的那个服务总线里边它只需要你入口服务就是你入口服务跟你的网关然后它的协议做一些绑定就你的网关它能够识别它能够兼容你入口服务的协议以至于你A掉B你后面的后续的那些服务怎么调用用什么协议其实在微服架构领域它其实不关心OK这个跟大家就是介绍一下现在Boss直聘的它的一个微服架构的这么一个势力吧然后我从请求的一个流转跟大家介绍一下然后从客户端发起请求然后到我们的那个七层的网关主要是那个HTTP协议的那个转发代理然后再到我们自言的一个私有协议的Double的一个网关主要目的是为了把那个HTTP转成那个把那个HTTP转成Double协议让那个后端的服务能够通信能够识别吗这就是我刚刚说的那个API网业务策的那个API网关然后请求再留下通过这个私有化的API网关然后经过附载均衡然后到那个服务的那个入口层的那个服务然后入口层的服务它要掉后续的服务它需要先经过那个注册中心里面的那个服务发现然后去找到后端要掉的那个服务的具体的IP端口然后再发起调用然后最后它它会请求中途它它中间会请求一些那个数据库一些存储然后它是这么一个请求流程然后那个EurekaMesh它就在东西向流量的处理这一侧然后主要是帮我们解决了那个流量治理这么一个核心的一些问题OK 这是那个Boss执品维护架构的这么一个架构图我们来看到那个DoubleDouble这一块Double本身是那个开始是阿里开源然后捐献给那个阿巴奇社区Double框架Double框架怎么说呢它是一个典型的一个面向维护架构开发的这么一个开发框架吧因为它包含了刚刚说的那些以上的所有的特点它是开源的然后第二点它是那个面向那个服务治理的然后还可以看到它兼容了很多的一些那个主流的一些编程语言吧Double框架也实现了自己的那个私有化的一个协议就是Double协议然后这是Double协议的一个那个字节嘛然后左边的这个是字节然后右边的这个是那个W就是Double协议其实跟其他的那个应用程的协议也大致类似吧就是0到150到15位它是那个标识Double协议的版本你用的是哪个版本2.9.6对吧或者三点几点几然后是那个请求的响应是请求还是响应然后用依旧表示是那个请求然后0表示的是响应然后是是否需要那个响应的返回嘛然后请求事件然后以及训练化ID这个训练化ID就是说我用什么训练化类型比如说像那个Fast Jason他这个字就是6然后就是那个响应的一些状态的指标状态码那些然后后面的就是一些RPCDouble RPC的一些那个请求ID然后一些消息体长度还有一些消息体里面具体存的什么东西吧大概Double协议就是这么一个展开来说的话就是这么一个字件码形式OK然后Double协议我们现在是接入到了字眼的这么一个注册中心中然后就我们所有的服务然后以在接入的时候都会去买一个SDK的这么SDK买一个驾包吧然后这个驾包主要就是说我去注册到我的那个这个名字服务中注册中心里面去然后Consumer然后也会通过一个SDK然后去名字服务上面去进行服务发现然后Double服务注册到我们的注册中心中它怎么去被那个Institut或者说被那个Archimage利用起来了然后它就需要我们去让那个注册中心里面的服务被那个Institut的那个服务发现然后能够识别其实我们是用的那种Elka社区推荐的那个创建Service Entry这样的一种资源的一种形式吧它有两种创建方式第一种如果你的IP你的那个实力它是在KBS集群外的话你可以通过这个Service Entry然后把那个IP端口以及它的那个服务的标签然后写到那个Service Entry里面还有一种方式如果你的那个服务是在那个KBS刚刚是不在KBS集群内在KBS集群内的话你可以通过那个KBS的那个Walk&Load Selector标签选择器然后去直接去根据Nables然后去选择你的那些实力然后我们Boss直聘然后是怎么基于这个Elka Max进行服务治理的呢然后我们现在除了有那个Elka Max进行容器测的那个服务治理之外我们还有那个原生的Double的那种治理方式就通过那个传统的SDK通过那个Double SPI然后去扩展的那样一种限流容断降级那种治理方式我们现在是相当于是在那个服务注册中心里面然后对这个服务然后进行了治理的一个分类我们把它分成了三个类型第一个类型就是那个通过Elka Max进行治理然后第二个类型是那个通过Double原生的刚刚说的那种SPI的那种SDK的方式去进行治理还有一种是就是你刚注册上来我不进行治理它是一个缺省的一个策略如果你的那个注册中心的那个SDK服务发现的那个SDK它要去进行服务治理它第一个步骤会去名字服务里面去拿回这个标签然后去掉那个名字服务的接口然后拿到这个标签然后去发现它是Elka Max的治理方式还是Double原生的治理方式还是不进行治理这样一种方式如果它是走那个Elka Max的这种治理方式的话然后它会去请求就那个SDK发现服务的那个SDK它会去请求ECDU的那个Service Entry然后拿到那个Service Entry的那个VIP然后这样大家知道这相当于就是拿到那个Service Name可以把S里面的然后拿到这个东西然后去进行请求因为你用这个IP去进行服务发现去进行那个请求调用的时候它会走那个Esq的那一套治理的那一套体系然后如果说你你找到的是那个默认的不做治理的策略就直接走那个注射中心如果你是走的那个Double原生的那种治理方式的话它也是走那个注射中心然后去拿一个IP回来然后经过那个SDK去进行治理它是这么一个方式这是用那个Elka Max然后进行服务治理然后几种治理类型当然是Double请求的一个路由就我们传统意义上说的就是我想把流量做那个按版本为渡或者按DU为渡按什么为渡做那个流量的拆分嘛比如说我想往V1版本上面去打20%的流量往V2版本上面去打84%的流量然后右边这个配置就是刚刚话语提到的那个Elka Max里面然后去没有用那个HTTP绑定比较深的那个叫Vocial Service那种方式而我们用的是自己实现的一个CRD一种治愿内形然后叫Meter Router这样一种形式大家可以简单的看一下这种形式其实它就是在去它是深层那个NW Felt这么一个配置然后它跟那个比如说你这个流量路由的这种方式它跟那个Vocial Service实际上是没有本质多的一个区别的就是你能用你会用那个Vocial Service那种配置其实用这个是上手是零成本的然后比如说这里做流量切分它的那个名字也就是那个缺费给split然后我想打到那个V1上面打20%的流量上去打V2上面打80%的流量上去流量进向这个是对我们来说还比较常用的就是在有一些时候在有一些时候我们需要对线上的流量进行那个流量进向下来之后然后去进行一些压侧然后进行线上的一些问题的一些那个负线所以这个流量进向也是现在那个Everkind Match也是支持的然后请求投休改刚刚画面也说了本地线流本地线流就是我请求到达我本地之后然后我我有一个令牌筒然后我进行流量的那个令牌的那个计算然后发现它达没达到那个流量的线子然后一个是全局的线流就是我从那个有一个远端的这么一个令牌筒的一个技术器然后对相同的这个Service然后进行请求的统计然后进行线流然后要强调一点的是这里有一个那个用Everkind去实现它的那个分布式追踪然后Trinsink这块因为那个double框架本身它支持那个RPC Contacts的那个Attachment就是说我可以把那个Header然后塞到那个它就可以一直往下透传所以在Trinsink这一块其他的框架可能不太支持就是但是对于double这个框架来说它是可以完全就OrcMatch可以完全让它无感知的就你从那个OutboundGateway Outbound出来的那个第一环然后塞到塞上那个Chase ID和那个Spin ID之后它会一路往下透传所以说它这个是无需任何的修改的对于double协议然后这是提到的那个比如说线流的屏次对吧然后什么时候配告警或者说根据这个监控的数据然后来进行那个弹性的自动的扣折容对我们的那个资源复杂OK 这个是那个double官方它其实现在也在往这方面去靠吧它想做一个统一化的这么一个就是既有这种e-situ的这种治理方式也让它自己用SDK的这种方式一个全局统一的这么一个治理方案吧但是目前因为它还是在实现那个所有的XDS的那个协议的那个过程中然后我们这边也在做这样的一个事情就是做一个统一的一个控制面然后SDK和那个ErkanMesh然后同时去做那个服务的治理好 谢谢大家