作者:杨奕 华为云技术规划专家
在以往的文章《云原生微服务治理技术朝无代理架构的演进之路》中,我们介绍了几种微服务架构模式,如下图所示。
注:图片来源https://twitter.com/bibryam/status/1026429379587567616
今天主要是介绍,第一种soa/esb架构,在java语言场景下,如何朝第三种 云原生servicemesh架构的演进的问题。
soa/esb架构简介和问题概览
首先我们来看看 soa/esb 架构模式 在目前公有云上的典型参考架构。
如下图所示,以华为云为例,以该模式部署应用时,其使用到的典型云服务为 弹性负载均衡 (elb) + 弹性伸缩(as,包含ecs)。在这种场景下:
· 需要发起调用的客户端程序,通过配置好的域名或地址,直接调用到elb上,通过elb去调用到后端的ecs服务器。
· elb上需要配置后端服务器的多个ip地址。当然,一般这类操作可以简化为添加某类弹性伸缩组。这样,当ecs发生弹性伸缩时管理员无需处理elb配置,elb即可自动刷新ecs的ip列表的变化。
(配置操作可参见:https://support.huaweicloud.com/usermanual-as/as_01_0102.html)
值得注意的是,以上的模式可能存在几种变种。
·对于elb,可能会采用api网关替代,或者用户自建的kong, apisix,envoy等,具体取决各个企业的自身业务场景。例如,某些互联网公司倾向于采用企业自建的kong,其主要原因是除了基本的服务发现和负载均衡能力以外,网关还需要处理面向内部跨域调用的一些鉴权情况处理。
·对于弹性伸缩,可能也会直接采用kubernetes的deployment + horizontalpodautoscaler替代。这当然取决于企业内部的基础架构采用情况,看是更倾向于使用虚拟机架构还是容器架构。
以上架构虽然在隔离性、安全性上存在一定优点,但是短板也非常明显。
· 性能和资源开销。这个比较好理解,相对微服务架构,soa/esb架构上网络增加了额外一跳,而且elb的引入也会导致资源的额外消耗增多。
· 运维成本。毕竟额外引入了一个elb的组件,因此在微服务之间调用时,瓶颈在哪里,elb是否需要扩缩容,都是问题。
微服务和云原生架构改造方法和问题
对于如何改造 soa/esb 架构,朝微服务架构或云原生架构演进,业界也有很多方法。主要是以下两类。
· 通过修改代码,将应用改造为微服务架构。例如直接在代码中引入比如springcloud的服务注册发现和负载均衡等组件。当然,这种改造往往也并不简单,主要取决于现有应用已采用的开发框架等。比如应用本身没有采用spring来进行开发,那么直接采用springcloud可能会为应用带来海量的改造成本。
· 采用istio方案,通过有限改造应用,将架构升级为servicemesh架构。之所以该方案说是有限改造,而不是无改造,也是因为在服务调用方式上,istio方案对应用并不是完全无限制。其至少需要在客户端将调用的http调用地址改造成为k8s原生的服务地址,调用的服务治理才能被envoy有效接管。当然,改造完毕后,用户在接下来在面向边车的性能衰减,更复杂的调用运维问题上,恐怕一个也不会少。
综上所述,两种方案都存在比较明显的短板。接下来分析下采用sermant方式进行架构改造,如何弥补上述两种方案的短板。
sermant对soa/esb架构升级的思路
采用sermant (https://sermant.io/zh/) 对soa/esb架构升级,本质上的最后的架构终态是service-mesh。但是因为采用的方法稍有不同,从而导致方案在性能和运维问题上都不存在短板。主要是以下两点:
· 首先,sermant采用java agent来动态注入增强的服务逻辑治理,因此应用侧理论可以做到完全不用改代码。
· 其次,由于sermant的核心逻辑是以aop (面向切面编程) 方式,java agent和业务属于同一进程,因此在性能方面不存在sidecar形态的特别大的损耗。
sermant方案架构如下图所示。
在核心技术点上,sermant改造方案的功能主要有以下几个方面:
· 内置的服务注册发现机制。(上图中的第一点和第三点)
-插件本身会带服务注册功能,在provider应用启动的时候自动到注册中心进行服务注册。
- 在consumer应用进行url服务调用的时候,通过微服务服务发现+负载均衡机制替代原先的服务直调。
· 域名到服务名(有时也称应用名)的转换。(上图中的第二点)
- 服务发现时,由于原先的调用采用url直调,并不包含应用信息。这就需要一个调用关系到应用名的映射。对于这块内容,未来我们计划做成了一个动态配置,存储到配置中心里。这样当有应用需要发起调用时,sermant直接将url转换成应用名,就可以在注册中心获取响应的应用ip列表。
- 通过url获取provider应用名后,由于在改造过程中,不用provider应用并不是同批次发布携带sermant java agent,因此还需要有个白名单机制,来配合灰度发布。
· 增强的客户端侧负载均衡、重试、隔离、降级机制。(上图中的第四点)
- 通过url获取provider应用名后,由于在改造过程中,不用provider应用并不是同批次发布携带sermant java agent,因此还需要有个白名单机制,来配合灰度发布。
- 此外,对于一些必要的东西向流量的治理能力,如服务间的3a认证等,也需要进一步在sermant端补齐。
以上便是sermant改造方案的主要功能点。另外,在实操中如何针对现有环境进行升级还是需要一定方法,避免对现有环境进行太大冲击。以下详细叙述。
采用sermant
对soa/esb架构升级的方案实操
应用改造在具体局点上不可能一蹴而就,因此在具体上实施上肯定是一个慢慢灰度的过程。以kubernetes容器场景为例,介绍下在上百个微服务应用上千实例的情况下,如何采用sermant对soa/esb基于灰度进行安全可控的云原生架构升级。
以下为准备工作:
准备步骤一:
自身应用是否支持。当前sermant支持的微服务升级的java框架可以在该文档中查询。如未支持,可以考虑给社区提issue解决。
⇢参考链接:
https://sermant.io/zh/document/plugin/springboot-registry.html#%e8%af%a6%e7%bb%86%e6%b2%bb%e7%90%86%e8%a7%84%e5%88%99
准备步骤二:
在kubernetes中安装injector,方便以非侵入方式让java应用自动挂载sermant java agent.
(本步骤可选。如跳过,则需要手动改变应用部署脚本加载sermant java agent。)
⇢参考链接:
https://sermant.io/zh/document/user-guide/injector.html
以下介绍详细实施过程。假设初始架构如下。一共三个app,其中app1通过elb连接到app2和app3。为简化表述,图中为应用均为单实例,实际生产中的实例可能会有多个。
接下来,在kubernetes中对新版本的app1, app2进行发布(图中为v2版本),并在发布时携带sermant java agent,以及激活springboot注册插件。但是此时可以先不配置provider白名单规则,因此发布后,应用流量应该还是走elb,未发生任何变化。
接着在配置中心,将app2加入到白名单中。此时,对识别到app2的应用,挂有sermant java agent的app1实例 (图中的v2实例) 会对app2的实例以负载均衡方式直接发起调用。与此同时,app1访问app3的流量没有变化。
验证成功后,删除app1、 app2的v1版本,app1到app2的流量通过注册中心的注册发现,完全实现直连。同时,app1访问app3的流量维持不变。
至此,使用sermant对app1、app2的云原生架构升级结束。后续其他app应用,可以按照类似方案,进行灰度升级,直至所有应用全部挂载上sermant,完成微服务直连改造。
结束语
sermant 作为专注于服务治理领域的字节码增强框架,致力于提供高性能、可扩展、易接入、功能丰富的服务治理体验,并会在每个版本中做好性能、功能、体验的看护,广泛欢迎大家的加入。
当前sermant已在华为云云服务cse中被集成,用户可以在华为云的cse云服务中使用相关功能。(点击文末“阅读原文”跳转,了解更多相关功能)
戳“阅读原文”,了解更多!
原文标题:技术速递 | 分布式政企应用如何快速实现云原生的微服务架构改造
文章出处:【微信公众号:华为devcloud】欢迎添加关注!文章转载请注明出处。
苹果5G iPhone或采用OLED屏幕 JDI股价大跌
2022年到底哪类电视更加值得入手
山西省已确定大同市为山西省燃料电池汽车示范城市申报的牵头城市
ULN2003芯片的主要作用
功率电感厂商科普贴片功率电感的封装规格影响因素
技术速递 | 分布式政企应用如何快速实现云原生的微服务架构改造
三大控制系统PLC、DCS和FCS的特点介绍
关于三合一食品安全检测仪的功能特点介绍
安卓手机当做笔记本的辅屏?华硕就要给实现了
超级系统的开发加速了多处理器的设计
电子工程的风险??
RD60手持健康码核验终端灵敏识别24种健康码,支持身份证快速健康核验
智芯传感ZXP5机油压力传感器在汽车电子控制系统中的领先优势
可穿戴型下肢助力机器人感知系统传感电路设计
移动VR应用五大发展趋势预测 VR将如何引领新的风尚?
如何解读小米突然转换股份?
照明装置的检查项目盘点
什么是惯导模块?惯导模块有什么用?
压力试验机的组成部分
欧瑞博再获“地产数字力 TOP20 科技领军企业”殊荣