jjzjj

注册配置、微服务治理、云原生网关三箭齐发,阿里云 MSE 持续升级

阿里云技术 2023-09-20 原文

背景

  • 注册中心是日常使用频率很高的微服务组件,通过较低的资源溢价帮助客户缩短微服务的构建周期、提升可用性;
  • 微服务治理实现了 0 门槛就能接入全链路灰度、无损上下线、限流降级、环境隔离、数据库治理等能力,轻松完成开源到稳定生产的跨越;
  • 云原生网关则将网络入口的流量调度能力和后端的服务发现、服务治理能力相结合,从架构层面来提升全链路的性能和安全性。

这是 MSE 提供的三大核心产品能力之间的底层关联,产品研发团队保持每月至少迭代一次的投入,来持续提升产品竞争力。基于此,我们将 MSE 近期发布的重要能力做了一次汇总。

注册配置中心更新版本体系、升级产品能力

新增开发版,开发测试环境也能使用 Nacos2.0、ZooKeeper3.8 的引擎版本

MSE 最早提供的是基础版和专业版,但是哪个版本适用于生产、哪个版本适用于测试,并不显而易见,增加了客户选型的时间成本;基础版不支持 Nacos2.0、ZooKeeper3.8,使得使用开源 Nacos2.0、ZooKeeper3.8 的客户,在测试环境也必须购买价格更高的专业版。

在最新发布的版本中,MSE 取消基础版、上线开发版,并且开发版也支持 Nacos2.0、ZooKeeper3.8 ,这样一来,就降低了客户测试环境的使用成本,也屏蔽了测试、生产不同环境版本选型的干扰。

MSE Nacos 专业版新增推送轨迹功能,读写性能提升 40%+

是否能平滑迁移是客户选型商业化产品优先会考虑的条件之一。新版本中,MSE Nacos 提供了低版本到高版本、自建 Nacos 到 MSE Nacos 的平滑迁移方案,并且支持 Eureka 协议、ACM 协议。

注册中心的调用和配置变更都是高频使用功能,一旦出现异常,问题排查就成了用户最大的困惑,是注册和配置中心导致的,还是上下游业务自身的问题呢?新版本中,MSE Nacos 专业版提供可视化的数据观测界面和推送轨迹能力,从而非常清晰地观测到 Nacos 推送功能的履约情况,极大的提高问题的排查效率。

开源性能优化是开源自建的必修课,往往也是商业化服务会去精耕细作的能力。MSE Nacos 专业版基于阿里高性能 JDK Dragonwell 构建并且深度调优,并且 Nacos 本身基于企业级场景进行性能调优,使得 MSE Nacos2.0.4.0 版本性能比历史版本提升 40%+。

此外,与阿里云产品体系无缝对接,例如日志服务、服务治理、SSL 证书、观测、压测工具等,减少了云上的接入成本,支持注册中心 RAM 鉴权,整体支持管控策略配置,安全性也获得了全面提升。

MSE ZooKeeper 丰富可观测能力、多可用区部署,提高集群稳定性,读写性能大幅提升

开源 ZooKeeper 在可观测姓比较欠缺,这也导致较高的故障排查成本。MSE ZooKeeper 专业版和普罗米修斯进行了深度集成,并且可以免费使用,提供了 20 多个 Zookeeper 常用的观测指标,4 个核心资源观测指标,开放 70 多个 Metrics 指标,极大地提升了可观测性。

托管是起点、可观测是核心过程、保平安是最终目的。MSE ZooKeeper 专业版默认支持多可用区部署,获得更高的容灾级别,加强了最后一道防线。

MSE ZooKeeper 专业版基于阿里高性能 JDK Dragonwell 构建并且深度调优,读性能提升 1 倍,写性能提升 10% 以上,GC 时间降低 80%。

微服务治理升级流量治理、新增数据库治理和 Go 技术栈支持

限流降级全面升级为流量治理,全面增强弹性、依赖中间件的稳定性及流量调度的性能

当流量超过系统负载时,可以通过限流降级来保障应用稳定性。限流降级是流量治理范畴比较常见、使用范围较大的能力,但仅仅是限流降级并无法解决所有的应用稳定性问题。MSE 微服务治理基于开源 OpenSergo 的微服务治理标准,提供全方位的、无入侵的、零门槛的应用视角治理能力,将限流降级和灰度发布、无损上线等流量治理能力融合在一起,提供单机流量防护、集群流量防护和网关流量防护。

此外,升级后的流量治理可应用于微服务的全链路,比如在流量入口层,可通过网关方式接入、在微服务层面不仅可保护微服务自身,也可以保护微服务依赖的中间件、如缓存、数据库等三方依赖、若通过 ACK 或者 Agent 方式接入,则无需改造一行代码即可轻松接入,若有高阶流量治理的需求,如自定义埋点,可通过 SDK 方式接入。

发布数据库治理能力,加固端到端的稳定性

在分布式系统架构中,业务的流量都是端到端的。每个请求都会经过很多层处理,比如从入口网关再到 Web Server 再到服务之间的调用,再到服务访问缓存或 DB 等存储。对于我们的系统来说,数据库是非常重要的一块。因此无论是在稳定性的治理上,还是在开发提效等场景下,数据库相关的治理能力都是我们系统所需具备的能力。

  • 慢 SQL 治理:MSE 提供了秒级的 SQL 调用监控,再根据 MSE 自动识别的 SQL 语句,可以对出现慢 SQL 的应用配置线程数维度的流控或降级规则,防止过多的慢 SQL 语句执行把资源耗尽。
  • 连接池治理:MSE 通过提前建连、"坏"连接剔除、访问控制,来有效地提前识别系统中存在的风险。
  • 数据库灰度:MSE 通过影子表的方式,用户可以在不需要修改任何业务代码的情况下,实现数据库层面全链路灰度。
  • 动态读写分离:MSE 提供了一种动态数据流量治理的方案,可以在不需要修改任何业务代码的情况下,实现数据库的读写分离能力。

发布面向 Go 技术栈的限流降级能力

随着 Go 语言、云原生的广泛采用,Go 语言在微服务场景中使用的越来越广泛,对 Go 语言微服务的治理、限流降级需求也越来越强。在 Go 语言中,虽然社区提供了 http://go.uber.org/ratelimit 等限流库,但其一,对多语言支持不足,只支持 Go,其二,功能上,限流降级会细分为流控、隔离、熔断、热点等功能,也不支持动态配置,在功能支持度上不够完善。

MSE 结合 Sentinel,给 Go 语言、Java 语言应用带来微服务治理能力。在微服务应用中,限流降级主要分为三步:

  • Target: 针对什么样的流量
  • Strategy: 限流降级的策略
  • FallbackAction: 触发后的行为

比如,针对订单创建接口(Target),我们限制请求为 1000QPS(Strategy),触发限流后,请求返回异常(FallbackAction)。在 MSE 支持通过开源 Sentinel 的方式来定义资源,并从 MSE 获取、应用限流降级规则,整体接入如下:

OpenSergo 全面覆盖流量路由、流控降级与容错等微服务治理领域

OpenSergo 是阿里巴巴、字节、bilibili 等企业一起共建的一套开放通用的、面向云原生服务、覆盖全链路异构化生态的微服务治理标准,并根据标准提供一系列的 API 与 SDK 实现。

OpenSergo 标准基于微服务治理中相关领域的实践与场景抽象,覆盖了服务元信息、流量治理、服务容错、数据库/缓存治理(微服务应用视角)、服务注册发现、配置治理等十几个关键领域,覆盖了完整的微服务生命周期(从开发态到测试态,到发布态,再到运行态)。无论我们是希望针对 Spring Cloud + Dubbo 服务链路配置流量灰度隔离,还是希望针对一个 Go gRPC 服务进行流量控制,还是希望针对服务访问数据库的慢 SQL 调用进行自动熔断,我们都可以利用 OpenSergo spec 中定义的 CRD 标准来进行统一配置,而无需关注各框架不同的声明式 API 及互不兼容的配置格式。

OpenSergo 项目涵盖服务元信息、服务注册发现、流量治理、服务容错、数据库治理、缓存治理等领域。在我们的首个版本 v1alpha1 版本中,社区一起发布了 服务契约(元数据)、流量路由、流控降级与容错、数据库治理 这几个领域的 CRD 标准。MSE 作为微服务治理的企业级产品,原生支持 OpenSergo 标准。

云原生网关升级产品能力,无缝融入 Kubernetes 生态、提效微服务上云

无缝兼容 Nginx Ingress 注解:迁移成本更低、功能与性能更高

MSE Ingress Controller 通过 List-Watch 机制获取关联的 ACK 集群中 Ingress 资源的变化,然后以热更新的方式动态更新 MSE 云原生网关的路由规则。当 MSE 云原生网关收到请求时,匹配 Ingress 转发规则转发请求到后端 Service 所对应的 Pod。

相比 Nginx Ingress Controller,MSE Ingress Controller 是以热更新的方式秒级生效监听到的 Ingress 资源,这种无需重启数据面即可生效配置的方式大大提高了集群入口网关的稳定性,有效保障了业务流量无损。更重要的是,MSE Ingress Controller 可以进行多集群管理,即同时作为多个集群的入口网关,意味着可以同时监听多个集群中的 Ingress 资源,解决用户跨 Kubernetes 集群流量调度和流量治理问题。

  • 平滑迁移:兼容 Nginx Ingress 注解 80%+使用场景
  • 架构安全:相比 Nginx Ingress 采用数据面、控制面分离部署且资源隔离,架构设计更安全
  • 扩展丰富:相比 Nginx Ingress 提供更丰富的扩展注解,例如认证鉴权、Header 控制、限流、安全防护
  • 性能强劲:支持 HTTPS 硬件加速,QPS 性能提升约 86%

支持 HTTP 转 Dubbo:帮助传统微服务用户快速上云

Dubbo 作为 RPC 服务对外提供服务,而 RPC 不适合直接暴露在公网上提供南北向流量的用户请求。通常情况下,公网上的流量都会走 HTTP 或 HTTPS,接收到公网流量后,由第一层的网关做协议转换,转为 Dubbo ,再由网关将 Dubbo 的请求分发给后端的 Dubbo provider。

云原生网关也对上述典型场景提供了支持。在 Envoy 侧插入了 Dubbo 的 Transcoder filter ,由它完成 HTTP 请求到 Dubbo 请求的协议转换。第一阶段,转换功能会支持 HTTP 转 Dubbo 2.X 版本,并支持从 Nacos 订阅 Dubbo 注册信息。后续将支持从 Zookeeper 订阅 Dubbo 注册信息,以及支持 HTTP 转 Dubbo 3.0。

此外,MSE 云原生网关集成 Sentinel 限流降级且支持一键压测,来快速提升高可用建设能力,安全防护能力也获得了大幅提升,通过信通院最高安全评测等级,并且支持版本自升级及业务服务的主动健康检测,以提升服务自治能力。

费芮移动:不改运维习惯、平滑迁移、构建更高性能和稳定性的下一代网关架构

MSE 云原生网关已经成为容器化过程中,升级网关架构、提升网关性能和稳定性的新选择。例如费芮互动每日处理粉丝交互超过 1 亿次, 电子券系统发放 6 亿+张电子券,4 万+门店使用费芮移动支付解决方案,支付系统每月处理 3000 万+ 笔。如此大规模的业务流量对网关接入层的性能和稳定性提出较大的挑战。

费芮的业务应用部署在阿里云容器服务 ACK 上,基于 Nginx 的 K8s Ingress 入口网关,与业务应用混布在同一集群中,对于突发流量的应对以及横向扩缩容能力有限,同时海量 C 端用户发起的 HTTPS 请求会产生大量的 TLS 加解密操作,对服务器的 CPU 造成了很大的压力,从而影响业务系统的稳定性。

另外,费芮在容器化改造后仍有一些传统的单体应用,服务之间通过域名方式调用,无法统一使用 K8s Service 进行统一管理。客户急需高性能、高可用的网关接入层,能够对南北向和东西向的流量进行统一管理,同时希望能平滑迁移存量路由配置,减少网关替换的工作量:

  • 选用 MSE 云原生网关作为阿里云容器服务 ACK 的 Ingress 网关,可将 ACK 集群内服务一键导入与自动同步,并支持多个 ACK 集群复用同一个网关实例;
  • 兼容 K8s Ingress 规范,且支持 Nginx Ingress 核心功能注解的无缝转换。通过 ack-mse-ingress-controller 组件,可自动监听、解析 K8s 集群中 Ingress 资源,将 ACK 中的 Ingress 路由直接同步至云原生网关中生效;
  • 直连业务 Pod IP,不经过传统 Cluster IP,RT 更低;通过对 OS 内核参数与组件调优,QPS 比 Nginx 提升约 40%;利用硬件卸载 TLS 证书验证加速, HTTPS QPS 提升 80%;
  • 利用 MSE 云原生网关的路由管理能力,既能实现南北向流量调度将服务对外暴露,也能支持东西向流量调度协助传统应用的服务间调用。丰富的负载均衡、限流降级、流量分发策略,可保证系统的稳定性,并满足业务快速迭代需求。

MSE 云原生网关作为托管型的独享实例,与部署业务应用的资源解耦,并支持过载保护、故障自愈、限流降级等功能,确保流量高峰时的稳定性。其优异的性能表现使费芮不需要高规格的资源配置即可支撑大规模的业务调用。灵活的路由策略使费芮可以对新老应用的服务调用进行统一的配置和管理,而对 Ingress 标准及 Nginx 常用注解的全面兼容,使费芮很低成本地完成了网关这个关键组件的迁移,且不需要改变平时的操作和运维方式。

原文链接

本文为阿里云原创内容,未经允许不得转载。

有关注册配置、微服务治理、云原生网关三箭齐发,阿里云 MSE 持续升级的更多相关文章

  1. ruby - 通过 rvm 升级 ruby​​gems 的问题 - 2

    尝试通过RVM将RubyGems升级到版本1.8.10并出现此错误:$rvmrubygemslatestRemovingoldRubygemsfiles...Installingrubygems-1.8.10forruby-1.9.2-p180...ERROR:Errorrunning'GEM_PATH="/Users/foo/.rvm/gems/ruby-1.9.2-p180:/Users/foo/.rvm/gems/ruby-1.9.2-p180@global:/Users/foo/.rvm/gems/ruby-1.9.2-p180:/Users/foo/.rvm/gems/rub

  2. ruby-on-rails - 独立 ruby​​ 脚本的配置文件 - 2

    我有一个在Linux服务器上运行的ruby​​脚本。它不使用rails或任何东西。它基本上是一个命令行ruby​​脚本,可以像这样传递参数:./ruby_script.rbarg1arg2如何将参数抽象到配置文件(例如yaml文件或其他文件)中?您能否举例说明如何做到这一点?提前谢谢你。 最佳答案 首先,您可以运行一个写入YAML配置文件的独立脚本:require"yaml"File.write("path_to_yaml_file",[arg1,arg2].to_yaml)然后,在您的应用中阅读它:require"yaml"arg

  3. ruby-on-rails - 项目升级后 Pow 不会更改 ruby​​ 版本 - 2

    我在我的Rails项目中使用Pow和powifygem。现在我尝试升级我的ruby​​版本(从1.9.3到2.0.0,我使用RVM)当我切换ruby​​版本、安装所有gem依赖项时,我通过运行railss并访问localhost:3000确保该应用程序正常运行以前,我通过使用pow访问http://my_app.dev来浏览我的应用程序。升级后,由于错误Bundler::RubyVersionMismatch:YourRubyversionis1.9.3,butyourGemfilespecified2.0.0,此url不起作用我尝试过的:重新创建pow应用程序重启pow服务器更新战俘

  4. ruby - 如何在 Lion 上安装 Xcode 4.6,需要用 RVM 升级 ruby - 2

    我实际上是在尝试使用RVM在我的OSX10.7.5上更新ruby,并在输入以下命令后:rvminstallruby我得到了以下回复:Searchingforbinaryrubies,thismighttakesometime.Checkingrequirementsforosx.Installingrequirementsforosx.Updatingsystem.......Errorrunning'requirements_osx_brew_update_systemruby-2.0.0-p247',pleaseread/Users/username/.rvm/log/138121

  5. Ruby Sinatra 配置用于生产和开发 - 2

    我已经在Sinatra上创建了应用程序,它代表了一个简单的API。我想在生产和开发上进行部署。我想在部署时选择,是开发还是生产,一些方法的逻辑应该改变,这取决于部署类型。是否有任何想法,如何完成以及解决此问题的一些示例。例子:我有代码get'/api/test'doreturn"Itisdev"end但是在部署到生产环境之后我想在运行/api/test之后看到ItisPROD如何实现? 最佳答案 根据SinatraDocumentation:EnvironmentscanbesetthroughtheRACK_ENVenvironm

  6. ruby - 在不使用 RVM 的情况下在 Mac 上卸载和升级 Ruby - 2

    我最近决定从我的系统中卸载RVM。在thispage提出的一些论点说服我:实际上,我的决定是,我根本不想担心Ruby的多个版本。我只想使用1.9.2-p290版本而不用担心其他任何事情。但是,当我在我的Mac上运行ruby--version时,它告诉我我的版本是1.8.7。我四处寻找如何简单地从我的Mac上卸载这个Ruby,但奇怪的是我没有找到任何东西。似乎唯一想卸载Ruby的人运行linux,而使用Mac的每个人都推荐RVM。如何从我的Mac上卸载Ruby1.8.7?我想升级到1.9.2-p290版本,并且我希望我的系统上只有一个版本。 最佳答案

  7. Vscode+Cmake配置并运行opencv环境(Windows和Ubuntu大同小异) - 2

    之前在培训新生的时候,windows环境下配置opencv环境一直教的都是网上主流的vsstudio配置属性表,但是这个似乎对新生来说难度略高(虽然个人觉得完全是他们自己的问题),加之暑假之后对cmake实在是爱不释手,且这样配置确实十分简单(其实都不需要配置),故斗胆妄言vscode下配置CV之法。其实极为简单,图比较多所以很长。如果你看此文还配不好,你应该思考一下是不是自己的问题。闲话少说,直接开始。0.CMkae简介有的人到大二了都不知道cmake是什么,我不说是谁。CMake是一个开源免费并且跨平台的构建工具,可以用简单的语句来描述所有平台的编译过程。它能够根据当前所在平台输出对应的m

  8. Observability:从零开始创建 Java 微服务并监控它 (二) - 2

    这篇文章是继上一篇文章“Observability:从零开始创建Java微服务并监控它(一)”的续篇。在上一篇文章中,我们讲述了如何创建一个Javaweb应用,并使用Filebeat来收集应用所生成的日志。在今天的文章中,我来详述如何收集应用的指标,使用APM来监控应用并监督web服务的在线情况。源码可以在地址 https://github.com/liu-xiao-guo/java_observability 进行下载。摄入指标指标被视为可以随时更改的时间点值。当前请求的数量可以改变任何毫秒。你可能有1000个请求的峰值,然后一切都回到一个请求。这也意味着这些指标可能不准确,你还想提取最小/

  9. jenkins部署1--jenkins+gitee持续集成 - 2

    前置步骤我们都操作完了,这篇开始介绍jenkins的集成。话不多说,看操作1、登录进入jenkins后会让你选择安装插件,选择第一个默认的就行。安装完成后设置账号密码,重新登录。2、配置JDK和Git都需要执行路径,所以需要先把执行路径找到,先进入服务器的docker容器,2.1JDK的路径root@69eef9ee86cf:/usr/bin#echo$JAVA_HOME/usr/local/openjdk-82.2Git的路径root@69eef9ee86cf:/#whichgit/usr/bin/git3、先配置JDK和Git。点击:ManageJenkins>>GlobalToolCon

  10. 神州数码无线产品(AC+AP)配置 - 2

    注意:本文主要掌握DCN自研无线产品的基本配置方法和注意事项,能够进行一般的项目实施、调试与运维AP基本配置命令AP登录用户名和密码均为:adminAP默认IP地址为:192.168.1.10AP默认情况下DHCP开启AP静态地址配置:setmanagementstatic-ip192.168.10.1AP开启/关闭DHCP功能:setmanagementdhcp-statusup/downAP设置默认网关:setstatic-ip-routegeteway192.168.10.254查看AP基本信息:getsystemgetmanagementgetmanaged-apgetrouteAP配

随机推荐