如何用 Nacos 构建服务网格生态?

本文涉及的产品
应用实时监控服务-应用监控,每月50GB免费额度
应用实时监控服务-用户体验监控,每月100OCU免费额度
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: Nacos 在阿里巴巴起源于 2008 年五彩石项目(该项目完成微服务拆分和业务中台建设),成长于十年的阿里双十一峰值考验,这一阶段主要帮助业务解决微服务的扩展性和高可用问题,解决了百万实例扩展性问题(10w->100w实例)。2018 年我们深刻感受到开源软件行业的影响,因此决定将 Nacos 开源,输出阿里十年关于服务发现和配管管理的沉淀,推动微服务行业发展,加速企业数字化转型。随着近几年云原生技术的发展,服务网格技术的提出,越来越多的公司尝试将微服务架构迁移到服务网格架构,这对 Nacos 提出了一个新的诉求,那就是如何更好的支持服务网格生态。

作者  | 怀成


Nacos 简介


Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称。目标是构建一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。


Nacos 在阿里巴巴起源于 2008 年五彩石项目(该项目完成微服务拆分和业务中台建设),成长于十年的阿里双十一峰值考验,这一阶段主要帮助业务解决微服务的扩展性和高可用问题,解决了百万实例扩展性问题(10w->100w实例)。2018 年我们深刻感受到开源软件行业的影响,因此决定将 Nacos 开源,输出阿里十年关于服务发现和配管管理的沉淀,推动微服务行业发展,加速企业数字化转型。


随着近几年云原生技术的发展,服务网格技术的提出,越来越多的公司尝试将微服务架构迁移到服务网格架构,这对 Nacos 提出了一个新的诉求,那就是如何更好的支持服务网格生态。


1.png


Nacos 无缝支持服务网格


我们先看下微服务 1.0 下的架构,流量从 Tengine 进来,经过微服务网关,然后再进入微服务体系。


这里解释下为什么分了两层网关,第一层 Tegine 是负责流量的接入,核心具备的能力是抗大流量、安全防护和支持 https 证书,追求的是通用性、稳定性和高性能。第二层是微服务网关,这层网关侧重的是认证鉴权、服务治理、协议转换、动态路由等微服务相关的能力,比如开源的 spring cloud gateway,zuul 等都属于微服务网关。


流量进入微服务体系后,会通过微服务框架实现服务间的调用,比如 hsf/dubbo、spring cloud 等等,那么 Nacos 在这里起到的核心作用是服务发现能力,比如 cousumer 会先从 Nacos 获取 provider 的服务列表地址,然后再发起调用,还有微服务网关也会通过 Nacos 获取上游的服务列表。这些能力主要通过 SDK 的方式提供,同时也会在 SDK 上增加一些负载均衡、容载保护的策略。


2.png


微服务 1.0 架构主要存在以下几个问题:


  1. Tengine 不支持动态配置,包括开源的 Nginx 原生也是不支持的,阿里内部是定期 reload 配置的方式实现配置变更,这导致配置不能及时变更,影响研发效率;
  2. Fat SDK 模式下,服务治理、服务发现等逻辑与 SDK 强耦合,如果需要变更逻辑,就得修改 SDK,推动业务方升级;
  3. 多语言下需要维护不同语言的 SDK,成本高,服务治理策略难以统一。


随着云原生技术的发展和微服务 2.0 架构的提出,很多公司正在尝试通过服务网格技术去解决微服务 1.0 架构中的问题。在微服务架构 2.0 架构中,流量是通过 ingress 网关接入的,进入微服务体系,与 1.0 架构不同的是引入了数据面 Envoy 和控制面 Istio。


Envoy 以 Sidecar 模式与应用部署在同一个 Pod 中,会劫持应用的进出流量,然后可以通过控制面 Istio 下发的 XDS 配置实现流量控制、安全、可观测能力,这一架构的优势是将服务治理能力与业务逻辑解耦,把服务框架中 SDK 大部分能力剥离出来,下沉到 Sidecar,也实现了不同语言的统一治理。

image.gif

3.png


服务网格技术优势非常多,但是新架构的引入也会带来新的问题,尤其是对于技术包袱比较重的公司,将面临的问题,比如:sidecar 性能问题、私有协议支持问题、新旧架构体系如何平滑迁移等等。


本文主要关注新旧架构体系平滑迁移这个问题,平滑迁移必然会面对的两个关于服务发现的问题:


  1. 新旧架构体系如何互相发现,因为迁移过程必然存在两个体系共存的情况,应用需要互相调用;
  2. 注册中心如何支持微服务网格生态,因为 istio 目前默认支持的是 k8s 的 service 服务发现机制;


我们看下在 Nacos 服务网格生态下是如何解决这些问题,架构图如下,流量是从云原生网关(云原生网关,它具备的特点是与微服务架构保持兼容,既支持微服务网关,同时又能符合云原生架构,支持 K8s 标准的 ingress 网关)进来,然后进入微服务体系,微服务体系中 1.0 应用(非 mesh 化应用)和已经 mesh 化的应用共存。


4.png


先看下非 mesh 化应用是如何访问已经 mesh 化的应用。


从这个架构图可以看到非 mesh 化的应用还是通过 SDK 方式从 Nacos 进行服务注册或者服务订阅,已经 mesh 化的 provider 也会注册到 Nacos 上,这样非 mesh 化的应用也能获取到已经 mesh 化的应用服务信息,provider 注册服务一般是通过 sdk 方式,因为开源 envoy 不支持代理注册功能,当然我们阿里内部实现的时候,其实已经把服务注册的能力下沉到 sidecar。


另一个问题,mesh 化的应用的服务发现是怎么做的。


我们可以看架构图的下面这部分,Nacos 已经支持了 MCP server 的能力,Istio 是通过 MCP 协议从 Nacos 获取全量的服务信息列表,然后再转化成 XDS 配置下发到 envoy,这样即支持了 mesh 化应用内的服务发现,也能访问非 mesh 化的服务,业务在 mesh 化过程中服务发现不需要做任何改造,就能无缝迁移。


这里简单介绍下 MCP 协议,MCP 协议是 Istio 社区提出的组件之间配置同步协议,这个协议在 1.8 之后就废弃了,替代方案是 MCP over XDS 协议,Nacos 两个协议都兼容。


除了 MCP 协议同步方案外,也有其它方案实现注册中心的服务数据同步到 ServiceMesh 体系,我们对这些方案做了对比,如下图描述:

image.gif

5.png


Nacos 服务网格生态阿里落地实践


最后给大家介绍下阿里巴巴 Nacos 服务网格生态的实践,下面这张图总体概括了阿里落地的两个场景。


6.png


场景一:


钉钉云上和集团互通的场景,本质其实就是混合云场景下的应用互通,我们是用了网关去打通这两个环境,钉钉 vpc(阿里云部署)这边用的是 MSE 云原生网关,集团用的是 Envoy 网关,他们之间使用 Dubbo3.0 的 triple 协议实现网络通讯,网关的控制面都使用的是 Istio,Istio 会通过 MCP 协议从 Nacos 同步服务列表数据。


使用这个架构解决了两个问题:


1、私有云和公有云网络通讯安全问题,因为网关之间使用 mtls 加密通讯;

2、平滑支持微服务架构,因为应用通过 triple 协议调用网关,不需要业务做代码改动,服务发现则是通过 Nacos mcp 去同步数据;


这套架构同时也用于蚂蚁集团互通的场景,就是这张图的左边,蚂蚁的网关使用的是 Mosn on Envoy 的架构。


场景二:


集团的微服务 mesh 化场景,对应这张图的中下部分,内部落地与社区的差异点是,Envoy 直接对接了 Nacos 注册中心,使用这个方案主要还是考虑到性能问题,我们有些应用会有几万的实例 ip,如果通过 EDS 推送,因为数据量过大,会导致 Istio OOM 或者 Envoy 数据面 cpu 飙高等问题。


本文是 Nacos 服务网格生态直播的文本整理,完整直播内容可以参看:https://yqh.aliyun.com/live/detail/26211


Nacos 源代码仓库:https://github.com/alibaba/nacos

相关文章
|
Nacos
Nacos源码构建报错程序包不存在com.alibaba.nacos.consistency.entity
Nacos源码构建报错程序包不存在com.alibaba.nacos.consistency.entity
497 0
Nacos源码构建报错程序包不存在com.alibaba.nacos.consistency.entity
|
1月前
|
监控 网络协议 Nacos
Nacos:构建微服务架构的基石
Nacos:构建微服务架构的基石
109 2
|
17天前
|
缓存 Kubernetes 容灾
如何基于服务网格构建高可用架构
分享如何利用服务网格构建更强更全面的高可用架构
|
1月前
|
Kubernetes Cloud Native JavaScript
为使用WebSocket构建的双向通信应用带来基于服务网格的全链路灰度
介绍如何使用为基于WebSocket的云原生应用构建全链路灰度方案。
|
4月前
|
安全 Nacos 数据库
【技术安全大揭秘】Nacos暴露公网后被非法访问?!6大安全加固秘籍,手把手教你如何保护数据库免遭恶意篡改,打造坚不可摧的微服务注册与配置中心!从限制公网访问到启用访问控制,全方位解析如何构建安全防护体系,让您从此告别数据安全风险!
【8月更文挑战第15天】Nacos是一款广受好评的微服务注册与配置中心,但其公网暴露可能引发数据库被非法访问甚至篡改的安全隐患。本文剖析此问题并提供解决方案,包括限制公网访问、启用HTTPS、加强数据库安全、配置访问控制及监控等,帮助开发者确保服务安全稳定运行。
449 0
|
4月前
|
安全 Nacos 数据安全/隐私保护
【技术干货】破解Nacos安全隐患:连接用户名与密码明文传输!掌握HTTPS、JWT与OAuth2.0加密秘籍,打造坚不可摧的微服务注册与配置中心!从原理到实践,全方位解析如何构建安全防护体系,让您从此告别数据泄露风险!
【8月更文挑战第15天】Nacos是一款广受好评的微服务注册与配置中心,但其连接用户名和密码的明文传输成为安全隐患。本文探讨加密策略提升安全性。首先介绍明文传输风险,随后对比三种加密方案:HTTPS简化数据保护;JWT令牌减少凭证传输,适配分布式环境;OAuth2.0增强安全,支持多授权模式。每种方案各有千秋,开发者需根据具体需求选择最佳实践,确保服务安全稳定运行。
428 0
|
7月前
|
运维 负载均衡 监控
如何构建Sidecarless模式的高性能服务网格
以上步骤可以帮助你构建一个Sidecarless模式的高性能服务网格。但是,请记住,每个应用都有其特定的需求和约束,你可能需要根据你的具体情况进行调整。
72 1
|
7月前
|
Dubbo 应用服务中间件 Apache
恭喜 Apache Dubbo 和 Nacos 荣获开放原子“2023年度生态开源项目”
恭喜 Apache Dubbo 和 Nacos 荣获开放原子“2023年度生态开源项目”
170 10
|
7月前
|
安全 关系型数据库 MySQL
使用Docker-compose快速构建Nacos服务
【1月更文挑战第1天】 在微服务架构中,服务的注册与发现扮演着至关重要的角色。Nacos(Naming and Configuration Service)是阿里巴巴开源的服务注册与发现组件,致力于支持动态配置管理和服务发现。
2306 2
|
7月前
|
Java Nacos Docker
Spring Cloud Alibaba【什么是Nacos、Nacos Server下载安装 、Docker安装Nacos Server服务、微服务聚合父工程构建】(一)
Spring Cloud Alibaba【什么是Nacos、Nacos Server下载安装 、Docker安装Nacos Server服务、微服务聚合父工程构建】(一)
201 0

相关产品

  • 服务网格