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

作者:怀成, Nacos committer

Nacos 简介

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

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

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

Nacos无缝支持服务网格

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

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

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

微服务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,也实现了不同语言的统一治理。

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

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

1、新旧架构体系如何互相发现,因为迁移过程必然存在两个体系共存的情况,应用需要互相调用;

2、注册中心如何支持微服务网格生态,因为istio目前默认支持的是k8s的service服务发现机制;

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

先看下非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体系,我们对这些方案做了对比,如下图描述:

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

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

场景一:

钉钉云上和集团互通的场景,本质其实就是混合云场景下的应用互通,我们是用了网关去打通这两个环境,钉钉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 构建服务网格生态的更多相关文章

  1. 服务网格数据平面的关键:层层剖析Envoy配置

    Envoy是一种高性能C++分布式代理,专为单个服务和应用程序设计.作为Service Mesh中的重要组件,充分理解其配置就显得尤为重要.本文列出了使用Envoy而不用其他代理的原因.并给出了Env ...

  2. TARS基金会:构建微服务开源生态

    导语 在20世纪60至70年代,软件开发人员通常在大型机和小型机上使用单体架构进行软件开发,没有一个应用程序能够满足大多数最终用户的需求.垂直行业使用的软件代码量更小,与其他应用程序的接口更简单,而可 ...

  3. 通过Dapr实现一个简单的基于.net的微服务电商系统(十三)——istio+dapr构建多运行时服务网格之生产环境部署

    之前所有的演示都是在docker for windows上进行部署的,没有真正模拟生产环境,今天我们模拟真实环境在公有云上用linux操作如何实现istio+dapr+电商demo的部署. 目录:一. ...

  4. 通过Dapr实现一个简单的基于.net的微服务电商系统(十二)——istio+dapr构建多运行时服务网格

    多运行时是一个非常新的概念.在 2020 年,Bilgin Ibryam 提出了 Multi-Runtime(多运行时)的理念,对基于 Sidecar 模式的各种产品形态进行了实践总结和理论升华.那到 ...

  5. 微服务开源生态报告 No.6

    「微服务开源生态报告」,汇集各个开源项目近期的社区动态,帮助开发者们更高效的了解到各开源项目的最新进展. 社区动态包括,但不限于:版本发布.人员动态.项目动态和规划.培训和活动. 非常欢迎国内其他微服 ...

  6. 微服务开源生态报告 No.4

    「微服务开源生态报告」,汇集各个开源项目近期的社区动态,帮助开发者们更高效的了解到各开源项目的最新进展. 社区动态包括,但不限于:版本发布.人员动态.项目动态和规划.培训和活动. 非常欢迎国内其他微服 ...

  7. 微服务开源生态报告 No.1

    从关注开源,到使用开源,再到参与开源贡献,越来越多的国内开发者通过开源技术来构建业务. 截止目前,Arthas / Dubbo / ChaosBalde / Nacos / RocketMQ / Se ...

  8. 精彩分享 | 欢乐游戏 Istio 云原生服务网格三年实践思考

    作者 吴连火,腾讯游戏专家开发工程师,负责欢乐游戏大规模分布式服务器架构.有十余年微服务架构经验,擅长分布式系统领域,有丰富的高性能高可用实践经验,目前正带领团队完成云原生技术栈的全面转型. 导语 欢 ...

  9. 揭开服务网格~Istio Service Mesh神秘的面纱

    目录 一.写在前面 二.微服务与K8S 三.服务网格与K8S 四.常见的产品 五.Istio架构 六.Istio的核心资源介绍 6.1.VirtualService 6.2.Destination R ...

  10. 微服务(Microservices)和服务网格(Service Mesh)架构概念整理

    注:文章内容为摘录性文字,自己阅读的一些笔记,方便日后查看. 微服务(Microservices) 在过去的 2016 年和 2017 年,微服务技术迅猛普及,和容器技术一起成为这两年中最吸引眼球的技 ...

随机推荐

  1. d3d12龙书阅读----d3d渲染流水线

    d3d12龙书阅读----d3d渲染流水线 输入装配器阶段 在输入装配器阶段,会从显存中读取顶点与索引这种几何数据,然后根据图形基元的类型,根据索引将顶点组装起来. d3d中的图形基元 我们来看看几种 ...

  2. 活动报名|3DCAT实时渲染云行业生态合作系列沙龙之“云XR如何赋能虚拟仿真实验教学”线上活动邀您参会

    当前,虚拟现实发展方兴未艾,"XR+教育"融合发展前景广阔. 3DCAT实时渲染云积极联动教育行业渠道商等生态合作伙伴,合力打造"虚拟现实实验室"." ...

  3. JS(循环)

    一 for循环 在程序中,一组被重复执行的语句被称之为循环体,能否继续重复执行,取决于循环的终止条件.由循环体及循环的终止条件组成的语句,被 称之为循环语句 1 语法结构 for循环主要用于把某些代码 ...

  4. 从零开始写 Docker(七)---实现 mydocker commit 打包容器成镜像

    本文为从零开始写 Docker 系列第七篇,实现类似 docker commit 的功能,把运行状态的容器存储成镜像保存下来. 完整代码见:https://github.com/lixd/mydock ...

  5. 记录--uniapp登录流程详解uni.login

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 uni.login(OBJECT)登录 H5平台登陆注意事项: 微信内嵌浏览器运行H5版时,可通过js sdk实现微信登陆,需要引入一个单 ...

  6. 记录--前端项目中运行 npm run xxx 的时候发生了什么?

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 npm 是 node 捆绑的依赖管理器,常用程度可想而知.那么你每天都在 npm/yarn run 的命令到底是如何运行项目的呢? 前端项 ...

  7. PC页面全屏显示以及退出全屏显示

    //点击,进入全屏 $('#btn4').click(()=>{ let el = document.documentElement; let rfs = el.requestFullScree ...

  8. Linux开启SSH连接

    1. 查看是否安装 openssh-server:yum list installed | grep openssh-server 已安装成功,如下图 2.如果没有任何输出显示表示没有安装openss ...

  9. KingbaseES数据库导入数据invalid byte sequence for encoding

    一.适用版本: KingbaseES数据库所有版本. 二.问题现象: 使用备份的数据进行还原,还原过程中发生异常. 日志信息: sys_restore: connecting to database ...

  10. 跳转到制定Sheet页及提交指定sheet页内容

    一.跳转到指定Sheet的实现 话不多说,先上效果图 两个按钮的事件分别如下: _g().loadSheetByName("sheet1") # 跳转至sheet1按钮事件 _g( ...