分布式政企应用如何快速实现云原生的微服务架构改造
作者:杨奕 华为云技术规划专家
在以往的文章《云原生微服务治理技术朝无代理架构的演进之路》中,我们介绍了几种微服务架构模式,如下图所示。
注:图片来源 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,因此还需要有个白名单机制,来配合灰度发布。
- 增强的客户端侧负载均衡、重试、隔离、降级机制。(上图中的第四点)
- 结合上一步,完整的商用方案,Consumer调用Provider除了需要满足基本的负载均衡功能以外,还需要更进一步进行重试、容错隔离、以及对下游的限流降级处理。
- 此外,对于一些必要的东西向流量的治理能力,如服务间的3A认证,等,也需要进一步在Sermant端补齐。
以上便是Sermant改造方案的主要功能点。另外,在实操中如何针对现有环境进行升级还是需要一定方法,避免对现有环境进行太大冲击。以下详细叙述。
采用Sermant对SOA/ESB架构升级的方案实操
应用改造在具体局点上不可能一蹴而就,因此在具体上实施上肯定是一个慢慢灰度的过程。以Kubernetes容器场景为例,介绍下在上百个微服务应用上千实例的情况下,如何采用Sermant对SOA/ESB基于灰度进行安全可控的云原生架构升级。
以下为准备工作:
- 准备步骤一:自身应用是否支持。当前Sermant支持的微服务升级的Java框架可以在该文档中查询。如未支持,可以考虑给社区提Issue解决。
- 准备步骤二:在Kubernetes中安装Injector,方便以非侵入方式让Java应用自动挂载Sermant Java Agent.
- 本步骤可选。如跳过,则需要手动改变应用部署脚本加载Sermant Java Agent。
以下介绍详细实施过程。假设初始架构如下。一共三个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官网:https://sermant.io
GitHub仓库地址:https://github.com/huaweicloud/Sermant
添加Sermant小二(微信号:sermant-support)加入社区交流群
或扫码加入Sermant社区交流群

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
加密了100个小姐姐的PDF文档,1行代码搞定,网友:快男!
大家好,这里是程序员晚枫,今天给大家分享一个PDF的搞笑技能:1行代码,批量给PDF加密。 别人拿到加密的PDF开心不开心我不知道,反正你肯定开心了。 1、上代码 下载Python自动化办公的专用库:python-office,下载命令如下。 pip install python-office -i https://pypi.python.org/simple -U 注意,最近清华镜像和阿里镜像都不怎么更新国外源了,不知道是什么原因。 所以,建议大家在条件允许的情况下,像上面的代码那样,使用国外源来下载第三方库,才是最新版~ # pip install python-office 一定要成功哦~ import office office.pdf.encrypt4pdf(path=r'D:\程序员晚枫的文件夹\input_pdf', password='程序员晚枫的密码', output_path=r'D:\程序员晚枫的文件夹\output_pdf') 2、使用说明 有以下几点使用技巧: path:可以填单个文件,也可以填一个路径,会自动搜索路径下所有pdf文件,包括子文件夹里的。 有加...
- 下一篇
赋能直播行业精细化运营,斗鱼基于 Apache Doris 的应用实践
导读: 斗鱼是一家弹幕式直播分享网站,为用户提供视频直播和赛事直播服务。随着斗鱼直播、视频等业务的高速发展,用户增长和营收两大主营业务线对精细化运营的需求越发地迫切,各个细分业务场景对用户的差异化分析诉求也越发的强烈。为更好满足业务需求,斗鱼在 2022 年引入了 Apache Doris 构建了一套比较相对完整的实时数仓架构,并在该基础上成功构建了标签平台以及多维分析平台,在此期间积累了一些建设及实践经验通过本文分享给大家。 作者|斗鱼资深大数据工程师、OLAP 平台负责人韩同阳 斗鱼是一家弹幕式直播分享网站,为用户提供视频直播和赛事直播服务。斗鱼以游戏直播为主,也涵盖了娱乐、综艺、体育、户外等多种直播内容。随着斗鱼直播、视频等业务的高速发展,用户增长和营收两大主营业务线对精细化运营的需求越发地迫切,各个细分业务场景对用户的差异化分析诉求也越发的强烈,例如增长业务线需要在各个活动(赛事、专题、拉新、招募等)中针对不同人群进行差异化投放,营收业务线需要根据差异化投放的效果及时调整投放策略。 根据业务场景的诉求和精细化运营的要求,我们从金字塔自下而上来看,需求大致可以分为以下几点: 分析...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Red5直播服务器,属于Java语言的直播服务器
- CentOS7,8上快速安装Gitea,搭建Git服务器
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- CentOS8编译安装MySQL8.0.19