首页 文章 精选 留言 我的

精选列表

搜索[快速],共10000篇文章
优秀的个人博客,低调大师

分布式政企应用如何快速实现云原生的微服务架构改造

作者:杨奕 华为云技术规划专家 在以往的文章《云原生微服务治理技术朝无代理架构的演进之路》中,我们介绍了几种微服务架构模式,如下图所示。 注:图片来源 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解决。 参考链接: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官网:https://sermant.io GitHub仓库地址:https://github.com/huaweicloud/Sermant 添加Sermant小二(微信号:sermant-support)加入社区交流群 或扫码加入Sermant社区交流群

优秀的个人博客,低调大师

TLv8 IDE v2.5.1 发布,基于 Eclipse 的快速开发工具

1. 资源视图增加右键菜单-补充新建页面文件快捷入口 2. 解决功能树配置时选择页面异常的问题 3. 优化页面设计器资源加载 4. 优化项目资源获取方法 5. 设计器样式修改 6. jdk版本兼容更新,修改构建配置 7. 添加 markdown editor 支持编辑器内预览 8. Tomcat插件增加Tomcat 11.x支持,默认使用Tomcat 9.x 9. 修改表单模板布局方式 10. 更新获取默认项目资源位置的方法 11. 右键菜单切换到资源管理器支持打开引用的jar包 12. 控制台打出“表”操作的SQL脚本. ...

资源下载

更多资源
Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册