牛人说 | 360度揭秘阿基米德-微服务治理平台
商小研导读:
一转眼,18年已经到了第四周,“牛人说”如约而至~本期请到了基础架构部的白圣培,他将带领大家360度揭秘阿基米德——微服务治理平台:阿基米德——微服务治理平台是在总结现有JSF服务治理的优缺点的基础上,结合业界最新的技术发展思路,大胆地进行了一些有益的探索,努力将京东服务治理水平推上新的高度。话不多说,让我们一同走进阿基米德~
本期牛人说主讲人:白圣培,整体负责TIG所有核心系统的产品管理,特别是容器技术平台,中间件技术平台,分布式存储与计算平台,异地多活整体架构升级等一系列重大研发项目。串联业务需求、技术架构、工程实施,组织跨团队沟通与review,确保项目按计划开展。
服务治理的本质及意义
通常,我们理解的“服务”就是一段满足某种功能的网络通信代码,而一个服务内部为完成其功能可能又需要通过网络去访问另一个服务,这样服务与服务之间通过网络相互连接,共同构成了一个复杂、有机的功能集合,我们称之为“应用”,例如各种Web应用。
所以说没有网络通信就没有“服务”,而网络通信就是我们通常所说的“流量”,围绕流量而展开的管理、控制及变换被称为“流控”,TCP/IP协议中的“拥塞算法”可以被理解为最早的流控,不过它所处理的对象是网络字节流,是面向网络设备或者说操作系统而言的,与上层业务无关。得益于现代成熟的网络分层模型及实现,我们可以在TCP/IP字节流上构建业务的流量即“消息流”,而不必关心底层的TCP/IP如何运转。这里的“消息流”其实就是我们构建的各种服务跟外界交流的具体载体,它们集中反映了从业务层面所需要关心的服务界面是什么样的,而与服务内部的具体业务逻辑实现无关,因此,一个服务至少可以分成两部分,一个是自身的内部逻辑实现,另一个是对外交流的界面,即消息流(包括了消息的定义)。我们熟知的一些常见服务治理手段,比如服务跨机房切换、服务限流、服务熔断、服务的黑白名单,甚至是简单的服务上/下线,都最终体现为对消息流的某种控制,因此,从狭义上说,服务治理的本质就是对消息流的控制,从广义上说,还要加上对消息定义的管理、维护,而它们都与服务的内部逻辑实现无关。
而我们希望通过服务治理,来调节、维护服务,使之始终保持最好的交流界面(即跟消息流及消息定义相关的一切东西),进而保障服务的内部逻辑得以被准确且充分运转,最终满足各业务的需求。
当前JSF服务治理面临的问题
JSF(JingDong Service FrameWork,京东服务框架)是京东当前的微服务框架及治理平台,被广泛应用于集团内部。随着微服务在京东日益深入普及,服务的数量及种类日新月异,开始出现所谓的“微服务大爆炸”,我们在享受微服务带来的好处的同时,又开始日益被迫承受微服务带来的负面效应,这些负面效应大致有以下几方面:
1、调用端依赖的服务个数及每个服务的实例数越来越多,造成调用端的启动越来越慢;
2、当前的软负载均衡策略遇到挑战,急需优化、调整;
3、跨应用、跨系统的调用越来越多,调用关系和依赖关系日益复杂,可观察性越来越差;
4、各服务的信息比如入参/出参等散落在各个地方,服务调用者无法快速、准确、全面获取这些知识,沟通成本非常高;
5、跨语言支持日益迫切,基于库方式将开发者绑死在单一技术栈上,与微服务理念相悖;
6、缺乏灵活、智能、贴近业务场景及业务架构的流量控制机制及相应的运维支持手段;
7、缺乏灵活、适度的安全机制;
8、特性增加与bug修复升级非常困难。
基于当前JSF遇到的种种问题,我们开发了京东新一代的微服务框架及其治理平台,今天我们主要来聊一聊新一代的微服务治理平台,该平台是阿基米德系列中重要的成员之一,因此被称为“阿基米德微服务治理平台”。关于新一代的微服务框架,将另文介绍,敬请期待。
在阿基米德微服务治理平台中,我们将推出以下重要功能及特性:
1、服务集市,为开发者提供集中、全面、准确的微服务知识体系,降低沟通成本;
2、通过允许用户扩展服务属性,极大地增加服务的表现力,进一步把治理平台业务场景及业务架构拉近,使得业务在系统运维方面更加灵活、自由;
3、制定全局的服务身份体系,并围绕该体系进行一系列安全控制;
4、提供当前JSF所没有的大量的贴近业务场景的流控及运维手段;
5、结合CallGraph,提供跨应用的在线联调机制,提高线上排查问题的效率。
阿基米德微服务治理平台的内容介绍
◆ 微服务集市
当前开发人员面临的一个难题就是如何快速、准确、全面地获取某个服务的知识。由于缺乏集中管理机制,所以大家都把自己所提供的服务的知识放在cf或者jpcloud上,这种服务知识散落各处的做法极大地增加了相关人员的找寻与沟通成本,因此急需专门的管理中心来解决集中存放和查询服务知识的问题。
阿基米德微服务治理平台除提供服务基本的存放及查询功能外,还将提供以下高级功能:
1、除了支持按基本属性查询外,还支持按扩展属性查询;
2、除了支持模糊查询外,还支持按类目查询,比如按“交易类”、“商家类”、“金融类”、“物流类”等类目进行查询;
3、查询结果中,除了提供服务基本的出/入参数详情、负责人等组织架构信息外,还提供了服务当前的运行指标数据,比如QPS/TP情况/可用率/资源使用情况等,以配合相关人评价该服务是否有足够能力满足新的调用需求,另外还提供了测试环境,以供临时测试体验,而不需要去挨个找对应服务的测试环境;
4、结合CallGraph,提供服务的调用链信息,以了解服务的相关依赖关系及链路属性;
5、提供服务档案(包括已经终止的服务),记录某服务生命周期各阶段的情况,包括版本变化及各版本对应的接口服务详细信息,以方便事后审计;
6、针对Java语言,提供相关注解及Maven插件,自动收集服务接口信息,降低手工输入工作量;
7、提供相关的流程控制,比如调用申请、服务终止申请、服务访问授权等。
◆ 允许用户扩展服务属性
当前JSF服务的属性是固定的,不允许用户扩展属性,由此引发了一个深层次问题:业务只能按照JSF的规则来组织服务关系,而不能自定义服务关系,这个问题带来的后果就是一旦业务场景或业务架构跟JSF组织的服务关系不匹配,就会出现本来彼此相关的一系列服务被割裂的现象,业务只能逐个处理,而不能整体处理,如下图所示:
左边是个单体应用,一共由4个彼此依赖的服务构成,当该应用需要下线时,4个服务会同时下线(因为它们在同一进程空间中);而在右边,这4个服务被微服务化,分别部署在不同的Pod中,由不同的开发小组来维护,当其中一个服务需要下线时,实际上需要其他3个服务一起下线,从而构成一个“有机的微服务集”,此时只能靠扩展属性,将这4个服务“逻辑”地绑定在一起,进行整体下线,否则只能一个个下线,非常麻烦,效率低还易出错。
通过允许用户扩展服务属性,使得他们可以自由、灵活地按照实际的业务场景或架构来组合形成“有机的微服务集”,进行整体操作,从而提高效率。
◆ 全局服务身份及安全控制
由于JSF运行在公司内网,所以安全性问题一直不是重点关注对象,但是随着对外开放赋能不断深化以及公司体量的不断增大,不少服务提供方纷纷要求提高服务的安全性,从而保护自身服务的稳定运行,如下图所示:
左边是当前的情况,访问不需要身份认证和授权,只要知道服务接口的相关信息就能访问,虽然有token机制,但是极易被突破。
右边是新的安全模型,在该模型中,每个服务都有一个全局唯一ID(UUID),基于该ID,会进行证书管理、秘钥管理以及身份认证、访问授权等安全行为。为了兼顾灵活性和效率,还支持命名空间和安全级别,不同命名空间中可以有同名同接口的不同实现,同一命名空间内的服务可以随意通信,不同命名空间的访问受管控;不同级别有不同的安全要求,比如达到某种级别的服务必须有服务提供方的授权才能访问,支持动态可调。
◆ 丰富的流量控制机制及运维手段
在JSF的使用过程中,业务给我们提出了许多的跟流控及运维相关的需求,我们将在阿基米德微服务治理平台中给予集中的解决,它们包括:
1、流量控制中要支持“版本”的概念(比如在一个分组中有两个版本,现在需要对其中一个版本的实例进行操作);
2、提供平滑的灰度升级和回退手段,支持A/B测试、金丝雀部署等;
3、支持动态配置(不需要反复修改程序-打包-重新上线),这些动态配置的取值往往不可预测,需要根据实际情况随时调整,比如流量的阈值、服务超时时间等;
4、服务永久下线的全流程支持(经常有业务为了下线一个即将废弃的服务,而一遍遍的发邮件确认是否有人还在调用该服务);
5、临界条件下的强制降级、限流和熔断等;
6、废弃接口的治理,将长期没有调用量的接口,定期给相关人发通告,让他们下线。必要时,可以主动将它们下线,然后回收相应的资源。
◆ 跨应用的在线联调
跨应用的问题排查由于涉及的面太多,一直没有被很好解决,阿基米德微服务治理平台将试图解决该问题,解决大家的“难言之隐”。
具体包括:
1、与CallGraph(京东分布式服务跟踪系统)结合,完成基于调用链的问题定位;
2、支持多方的在线联调,在指定的范围内(指定业务范围、指定IP范围、指定服务接口方法),把调用细节(出/入参数取值及结果)收集,并集中展示,供大家排查问题。
总结
有网络就会有服务,有服务就会有服务治理。
阿基米德微服务治理平台在总结现有JSF服务治理的优缺点的基础上,结合业界最新的技术发展思路,大胆地进行了一些有益的探索,努力将京东服务治理水平推上新的高度。