更安全、更低耗的微服务架构改造之道

安全,低耗,服务,架构,改造 · 浏览次数 : 114

小编点评

# Sermant  云原生架构升级指南 **1. 准备工作** * 准备步骤一:自身应用是否支持?参考链接: * 准备步骤二:在Kubernetes中安装Injector,方便以非侵入方式让Java应用自动挂载Sermant JavaAgent。本步骤可选。如跳过,则需要手动改变应用部署脚本加载sermant javaAgent。参考链接: * 准备步骤三:验证成功后,删除App1、 App2的V1版本,App1到App2的流量通过注册中心的注册发现,完全实现直连。 **2. Kubernetes 中对新版本的 App1、 App2 进行发布** * 在发布时携带Sermant Javaagent,以及激活SpringBoot注册插件。 **3. 配置中心,将App2加入到白名单中** * 同时,在配置中心,将App2加入到白名单中。 **4. 在 Kubernetes 中配置 Sermant** * 将App2加入到白名单中后,配置中心将App2加入到白名单中。 **5. 识别到App2的应用,挂有Sermant Javaagent的App1实例** * 在配置中心,将App2加入到白名单中后,配置中心将App2加入到白名单中。 **6. 对识别到App2的应用,挂有Sermant Javaagent的App1实例** * 在配置中心,将App2加入到白名单中后,配置中心将App2加入到白名单中。 **7. 验证成功后,删除App1、 App2的V1版本** * 后续其他App应用,可以按照类似方案,进行灰度升级,直至所有应用全部挂载上Sermant,完成微服务直连改造。 **8. 结束语** * Sermant  作为专注于服务治理领域的字节码增强框架,致力于提供高性能、可扩展、易接入、功能丰富的服务治理体验,并会在每个版本中做好性能、功能、体验的看护。

正文

摘要:微服务改造是政企客户云原生演进的重头戏,但如何做到成本低、安全性高、性能不变、方便调用等,却是一门学问。本文讲述华为云Stack的解决之道。

本文分享自华为云社区《【华为云Stack】【大架光临】第17期:更安全、更低耗的微服务架构改造之道》,作者:杨奕 华为云技术规划专家。

在以往的文章云原生时代,政企混合云场景IT监控和诊断的难点和应对之道》中,我们介绍了几种微服务架构模式,如下图所示:

注:图片来源 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采用JavaAgent来动态注入增强的服务逻辑治理,因此应用侧理论可以做到完全不用改代码。

• 其次,由于Sermant的核心逻辑是以AOP (面向切面编程) 方式,JavaAgent和业务属于同一进程,因此在性能方面不存在sidecar形态的特别大的损耗。

Sermant方案架构如下图所示:

 在核心技术点上,Sermant改造方案的功能主要有以下几个方面:

• 内置的服务注册发现机制。(上图中的第一点和第三点) 

  • 插件本身会带服务注册功能,在Provider应用启动的时候自动到注册中心进行服务注册。
  • 在Consumer应用进行URL服务调用的时候,通过微服务服务发现+负载均衡机制替代原先的服务直调。

• 域名到应用名的转换。(上图中的第二点)

  • 服务发现时,由于原先的调用采用URL直调,并不包含应用信息。这就需要一个调用关系到应用名的映射。对于这块内容,未来我们计划做成一个动态配置,存储到配置中心里。这样当有应用需要发起调用时,Sermant直接将URL转换成应用名,就可以在注册中心获取响应的应用IP列表。
  • 通过URL获取Provider应用名后,由于在改造过程中,不用Provider应用并不是同批次发布携带Sermant JavaAgent,因此还需要有个白名单机制,来配合灰度发布。

•  增强的客户端侧负载均衡、重试、隔离、降级机制。(上图中的第四点)

  • 结合上一步,完整的商用方案,Consumer调用Provider除了需要满足基本的负载均衡功能以外,还需要更进一步进行重试、容错隔离、以及对下游的限流降级处理。
  • 此外,对于一些必要的东西向流量的治理能力,如服务间的3A认证等,也需要进一步在Sermant端补齐。

以上便是Sermant改造方案的主要功能点。另外,在实操中如何针对现有环境进行升级还需要一定方法,避免对现有环境进行太大冲击。以下详细叙述。

采用Sermant对SOA/ESB架构升级的方案实操

应用改造在具体局点上不可能一蹴而就,因此在具体上实施上肯定是一个慢慢灰度的过程。以Kubernetes容器场景为例,介绍下在上百个微服务应用上千实例的情况下,如何采用Sermant对SOA/ESB基于灰度进行安全可控的云原生架构升级。

以下为准备工作:

• 准备步骤一:自身应用是否支持。当前Sermant支持的微服务升级的Java框架可以在该文档中查询。如未支持,可以考虑给社区提Issue解决。

• 准备步骤二:在Kubernetes中安装Injector,方便以非侵入方式让Java应用自动挂载Sermant JavaAgent.

以下介绍详细实施过程。假设初始架构如下。一共三个App,其中App1通过ELB连接到App2和App3。为简化表述,图中为应用均为单实例,实际生产中的实例可能会有多个。

接下来,在Kubernetes中对新版本的App1, App2进行发布(图中为V2版本),并在发布时携带Sermant Javaagent,以及激活SpringBoot注册插件。但是此时可以先不配置Provider白名单规则,因此发布后,应用流量应该还是走ELB,未发生任何变化。

接着在配置中心,将App2加入到白名单中。此时,对识别到App2的应用,挂有Sermant Javaagent的App1实例 (图中的V2实例) 会对App2的实例以负载均衡方式直接发起调用。与此同时,App1访问App3的流量没有变化。

验证成功后,删除App1、 App2的V1版本,App1到App2的流量通过注册中心的注册发现,完全实现直连。同时,App1访问App3的流量维持不变。

至此,使用Sermant对App1、App2的云原生架构升级结束。后续其他App应用,可以按照类似方案,进行灰度升级,直至所有应用全部挂载上Sermant,完成微服务直连改造。

结束语

Sermant  作为专注于服务治理领域的字节码增强框架,致力于提供高性能、可扩展、易接入、功能丰富的服务治理体验,并会在每个版本中做好性能、功能、体验的看护。

当前Sermant已在Huawei Cloud Stack (HCS)中的ROMA Factory被集成,用户可以在华为云Stack ROMA Factory中使用相关功能。
https://www.huaweicloud.com/zhishi/solution-ROMA-Factory-jiagou.html

开发者也可以加入到Sermant社区,参与相关功能的讨论和共建。

• Sermant 官网:https://sermant.io

• GitHub 仓库地址:https://github.com/huaweicloud/Sermant

 

点击关注,第一时间了解华为云新鲜技术~

与更安全、更低耗的微服务架构改造之道相似的内容:

更安全、更低耗的微服务架构改造之道

摘要:微服务改造是政企客户云原生演进的重头戏,但如何做到成本低、安全性高、性能不变、方便调用等,却是一门学问。本文讲述华为云Stack的解决之道。 本文分享自华为云社区《【华为云Stack】【大架光临】第17期:更安全、更低耗的微服务架构改造之道》,作者:杨奕 华为云技术规划专家。 在以往的文章《云

基于React的SSG静态站点渲染方案

基于React的SSG静态站点渲染方案 静态站点生成SSG - Static Site Generation是一种在构建时生成静态HTML等文件资源的方法,其可以完全不需要服务端的运行,通过预先生成静态文件,实现快速的内容加载和高度的安全性。由于其生成的是纯静态资源,便可以利用CDN等方案以更低的成

算法~PBKDF2-SHA让密码更安全

摘要:在当今的数字世界中,密码安全是至关重要的。为了保护用户密码免受未经授权的访问和破解,Password-Based Key Derivation Function 2 (PBKDF2)算法成为了一种重要的工具。 在 PBKDF2 算法中,SHA 表示 Secure Hash Algorithm,

支付对接常用的加密方式介绍以及java代码实现

金融场景里如何让收银和支付更安全?背后的基础原件是加密方式的设计架构。本文重点讲解在京东金融中,我们如何用Java来实现支付加密。

GPT-4多态大模型研究

1.概述 GPT-4是OpenAI最新的系统,能够产生更安全和更有用的回应。它是一个大型的多模态模型(接受图像和文本输入,输出文本),在各种专业和学术的基准测试中展现了人类水平的表现。例如,它在模拟的律师资格考试中得分位于前10%的考生之列;相比之下,GPT-3.5的得分位于后10%。 GPT-4是

.NET8 Identity Register

分享给需要帮助的人:记一次 IdentityAPI 中注册的源码解读:设置用户账户为未验证状态,以及除此之外更安全的做法: 延迟用户创建。包含了对优缺点的说明,以及适用场景。 在ASP.NET 8 Identity 中注册API的源码如下: routeGroup.MapPost("/register

辅助测试和研发人员的一款小插件【数据安全】

## 一、为什么要做一款这样的小插件 数据,一直在思考如何让数据更安全的流转和服务于客户,围绕这样的想法,我们做过许多方面的扩展。我们落地了服务端的数据切片支持场景化的设计,实现了基于JDBC协议对SQL的拦截与切片,实现了在应用层的全链路数据库审计方案和实现,实现了WEB端明暗水印和文档水印等等,

[转帖]telnet命令使用详解

https://www.cnblogs.com/PatrickLiu/p/8556762.html telnet命令用于登录远程主机,对远程主机进行管理。telnet因为采用明文传送报文,安全性不好,很多Linux服务器都不开放telnet服务,而改用更安全的ssh方式了。但仍然有很多别的系统可能采

TCP协议的秘密武器:流量控制与拥塞控制

本文将深入探讨TCP协议的关键机制,包括流量控制和拥塞控制,以解密其在网络数据传输中的作用。通过了解TCP协议的工作原理,我们可以更好地理解网络通信的稳定性和可靠性,为我们的网络体验提供更安全、高效的保障。无论您是网络爱好者、技术从业者还是普通用户,本文将为您揭开TCP协议的神秘面纱,带您进入网络传输的奇妙世界。

如何在云服务上快速拥有洛甲WAF(Web防火墙)

如何在云服务上快速拥有洛甲WAF(Web防火墙) 洛甲WAF是基于openresty的web防火墙,通过配合后台保护您的数据安全,详情参考节点服务器 luojiawaf_lua(nginx+lua) Web防火墙能做什么 Web防火墙可以让您更清楚的知道你的服务器运行情况,可以让您的服务器更安全 如