登录  | 加入社区

黑狼游客您好!登录后享受更多精彩

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

查看: 451|回复: 0

Nacos集群摆设模式最佳实践

[复制链接]

958

主题

958

帖子

0

现金

黑狼菜鸟

Rank: 1

积分
0
发表于 2020-12-24 03:20:30 | 显示全部楼层 |阅读模式 来自 法国

原标题:Nacos 集群摆设模式最佳实践

简介:本文先容了 Nacos 的三种摆设模式,并就高可用、可伸缩、易用性等方面临各个模式举行先容。

媒介

Nacos 支持两种摆设模式:单机模式和集群模式。在实践中,我们每每风俗用单机模式快速构建一个 Nacos 开辟/测试情况,而在生产中,出于高可用的思量,肯定必要利用 Nacos 集群摆设模式。我的上一篇文章《一文详解 Nacos 高可用特性》提到了 Nacos 为高可用做了非常多的特性支持,而这些高可用特性大多数都依靠于集群摆设模式。这篇模式文章便是给各人先容一下,在实践中可以被接纳的几种集群摆设模式,无论你是盼望自行搭建 Nacos,照旧盼望对 MSE 贸易版 Nacos 有一个更加深刻的明白,我都很乐意跟你分享下面的内容。

由于篇幅限定,本文不会先容怎样将一个多节点的 Nacos 集群启动起来,重要先容的是一个多节点的 Nacos 集群启动之后,我们的应用怎样很好地毗连到 Nacos 集群,即客户端视角。这中心我们会引入一些其他组件以办理一些题目,本文标题也可以叫做《Nacos 接入点最佳实践》。我将会先容以下三种方案:直连模式、 VIP 模式和地点服务器模式,并对它们举行对比。

直连模式

直连模式是摆设上最简朴、最轻易明白的一种模式。

EDjkKJ998728W83k.jpg

接纳直连模式后,典范的开辟场景设置如下:

nacos-client 设置

Properties properties = new Properties();

properties.setProperty(PropertyKeyConst.SERVER_ADDR, "192.168.0.1:8848,192.168.0.2:8848,192.168.0.3:8848");

NamingService namingService = NacosFactory.createNamingService(properties);

留意这里的 PropertyKeyConst.SERVER_ADDR 的字面量是:serverAddr

睁开全文

Dubbo 设置

dubbo.registry.address=192.168.0.1:8848,192.168.0.2:8848,192.168.0.3:8848

dubbo.registry.protocol=nacos

假如有一天,Nacos 的 IP 变了,比方扩缩容,呆板置换,集群迁徙等场景,全部的应用都必要修改,如许的方式并不机动。以是并不是生产保举的模式。

模式分析

  • 高可用性。集群自己的扩缩容必须要改动业务代码才气被感知到,出现节点故障必要告急下线、告急扩容等场景,让业务修改代码是不实际的,不符合高可用的原则。
  • 可伸缩性。同上,可伸缩性欠好。
  • 架构简朴,用户明白本钱低。
  • 没有引入额外的组件,没有新增组件的运维本钱。

VIP 模式

VIP(Virtual IP) 模式可以很好的办理直连模式 IP 变革所带来的应用批量修改的题目。什么是 VIP 呢?

e1L7ENIHUKiJlILj.jpg

  • Real Server:处置惩罚现实哀求的后端服务器节点。
  • Director Server:指的是负载平衡器节点,负责吸收客户端哀求,并转发给 RS。
  • VIP:Virtual IP,DS 用于和客户端通讯的 IP 地点,作为客户端哀求的目的 IP 地点。
  • DIP:Directors IP,DS 用于和内部 RS 通讯的 IP 地点。
  • RIP:Real IP,后端服务器的 IP 地点。
  • CIP:Client IP,客户端的 IP 地点。

我这里先容时并没有效【负载平衡模式】,而是用了【VIP 模式】,重要是为了跟 Nacos 官方文档保持同等。究竟上,VIP 的叫法在阿里内部比力盛行,以是在开源 Nacos 时也被风俗性的带了出去。

ize2d44cv28v4D2D.jpg

VIP 资助 Nacos Client 屏蔽了后端 RIP,相对于 RIP 而言,VIP 很少会发生变革。以扩容场景为例,只必要让 VIP 感知到即可,Nacos Client 只必要关注 VIP,制止了扩容引起的代码改造。

只要是具备负载平衡本领的组件,均可以实现 VIP 模式,比方开源的 Nginx 以及阿里云负载平衡 SLB。

接纳 VIP 模式后,代码不必要感知 RIP,典范的开辟场景设置如下:

nacos-client 设置

Properties properties = new Properties();

properties.setProperty(PropertyKeyConst.SERVER_ADDR, "{VIP}:8848");

NamingService namingService = NacosFactory.createNamingService(properties);

Dubbo 设置

dubbo.registry.address={VIP}:8848

dubbo.registry.protocol=nacos

域名设置

VIP 模式和直连模式都不具备可读性,以是在现实生产中,每每还会给 VIP 挂载一个域名。

域名背后可以挂载 2 个 VIP 用作高可用,路由到雷同的 rs;同时域名的存在也让 VIP 的置换变得更加机动,当此中一台出现题目后,域名的 DNS 剖析只会路由到别的一个正常的 VIP 上,为平滑置换预留了充足的余地。

tips:一个域名可以绑定多个 A 记载,一个 A 记载对应一个 IPv4 范例的 VIP,DNS 域名服务器了对多个 A 记载会有负载平衡计谋和康健查抄机制。

VIP 模式的终极生产高可用版架构便产生了:

i75TPyxny5tPI9Xy.jpg

典范的开辟场景设置只必要将 VIP 更换为域名即可。

nacos-client 设置

Properties properties = new Properties();

properties.setProperty(PropertyKeyConst.SERVER_ADDR, "mse-abc123-nacos.mse.aliyuncs.com:8848");

NamingService namingService = NacosFactory.createNamingService(properties);

Dubbo 设置

dubbo.registry.address=mse-abc123-nacos.mse.aliyuncs.com:8848

dubbo.registry.protocol=nacos

模式分析

  • 高可用性。域名的可用性必要由 DNS 域名服务器负责,可用性保障较高;VIP 必要由高可用的负责平衡组件支持,且流量颠末负载平衡转发,对 VIP 的实现有较高可用性的要求。
  • 可伸缩性。程度扩缩容时,只必要让 VIP 感知即可,可伸缩性好。
  • 依靠了域名剖析体系和负载平衡体系,生产摆设时,必要有配套办法的支持。

地点服务器模式

地点服务器先容

提及地点服务器,大概各人对这个词会感到生疏,由于地点服务器的概念重要在阿里内部比力遍及,也是阿里中心件利用最广的一种寻址模式。但是在开源范畴,鲜有人会提及,但对于 Nacos 摆设模式而言,地点服务器模式是除了 VIP 模式之外,别的一个生产可用的保举摆设方式。

地点服务器是什么?顾名思义,是用来寻址地点的服务器,发送一个哀求,返回一串地点列表。只管在阿里内部利用的真实地点服务器比这复杂一些,但下图这个简朴的交互逻辑,险些涵盖了地点服务器 90% 的内容。

GZ0rBx8PDZH9bXMq.jpg

实现一个浅易版本的地点服务器并不困难,保举利用 Nginx 搭建一个静态文件服务器管理地点, 固然你可以利用 Java!

@Controller

public class AddressServerController {

@RequestMapping("/nacos/serverlist")

public ResponseEntity<String> serverlist() {

return ResponseEntity.ok().

header("Content-Type", "text/plain").

body("192.168.0.1:8848\r\n" +

"192.168.0.2:8848\r\n" +

"192.168.0.3:8848\r\n"

);

}

}

利用地点服务器可以完成集群地点和客户端设置的解耦,办理直连模式中无法动态感知集群节点变革的题目。客户端根据地点服务器返回的列表,随后接纳直连模式毗连;而且在客户端启动后,会启动一个定时器,轮询感知 AddressServer 的变革,进而实时更新地点列表。

而且地点服务器发起设置域名,增长可读性。以是末了的摆设交互架构是如许的:

fOqSTJjGL6GPBWwj.jpg

认识 RPC 的朋侪看到这里应该可以或许很好地对 VIP 模式和地点服务器模式做一个类比:

  • VIP 模式是雷同 DNS 的服务端负载平衡技能
  • 地点服务器是雷同服务发现机制的客户端负载平衡技能

nacos-client 的源码专门适配了地点服务器模式,我们只必要设置好 addressServer 的 endpoint 即可。

nacos-client 设置

Properties properties = new Properties();

properties.setProperty(PropertyKeyConst.ENDPOINT, "{addressServerDomain}");

properties.setProperty(PropertyKeyConst.ENDPOINT_PORT, "8080");

NamingService namingService = NacosFactory.createNamingService(properties);

留意,这里 PropertyKeyConst.ENDPOINT 的字面量是:endpoint ,设置的是地点服务器的地点。

Dubbo 设置

dubbo.registry.address=0.0.0.0?endpoint=127.0.0.1&endpointPort=8080

dubbo.registry.protocol=nacos

dubbo.registry.address 的 url 可以恣意填写,由于当 serverAddr 和 endpoint 同时存在时,默认是优先从地点服务器去选址的。

此时,只必要把真实的 Nacos Server IP 设置到地点服务器中即可。

Dubbo 通过 url 的 kv 属性将值透传给 Nacos 创建 Nacos-Client。Dubbo + Nacos 利用地点服务器模式时,发起 Dubbo 版本 >= 2.7.4,nacos-client 版本 >= 1.0.1

模式分析

  • 高可用性。域名的可用性必要由 DNS 域名服务器负责,可用性保障较高;地点服务器的职责单一,有较高的可用性;运行时 Client 直连 Nacos Server 节点,可用性靠 nacos-sdk 保障。
  • 可伸缩性。程度扩缩容时,只必要让地点服务器感知即可,可伸缩性好。
  • 依靠了域名剖析体系和地点服务器,生产摆设时,必要有配套办法的支持。

摆设模式对比

直连模式

VIP 模式

地点服务器模式

Nacos 这款开源产物很好地支持了地点服务器这种模式,以是无论是大、中、小型公司在自建 Nacos 时,都可以选择地点服务器模式去构建生产高可用的 Nacos 集群,地点服务器组件相对而言维护简朴,Nginx,Java 构建的 Web 服务器均可以轻松实现一个地点服务器。利用地点服务器后,nacos-client 与 nacos-server 之间仍旧是直连访问,以是可以很好的运作在平展网络下。

VIP 模式同样保举在自建场景利用,但运维本钱相对地点服务器照旧要高一些,可以根据本身公司的运维体系评估。颠末了 VIP 的转发,有利有弊。毛病比力显着,网络多了一跳,对于内网情况如许的平展网络而言,是不须要的;上风也同样显着,大公司每每情况比力复杂,数据中央之间有网络隔离,应用和中心件大概摆设在差别的网络情况中,借助于 VIP 可以很好地做网络买通,而且基于 VIP 可以很好实现安全组、ACL 等特性,更符合企业级诉求。

固然,组合利用地点服务器 + VIP 也是可以的,可以充实的融合两者的上风:

Bh6r6tz69e7RPmhm.jpg

MSE Nacos 的实践

上述场景重要先容了三种模式的详细摆设方案,以及自建 Nacos 场景怎样做到高可用,末了要先容的是阿里云情况 MSE 是怎样摆设的。

MSE(微服务引擎)提供了 Nacos 注册中央中央的全托管本领,除了要做上述提到的高可用、可伸缩、易用性,还要思量以下的因素:

  • 开源担当度。制止给用户带来太多明白本钱,只管做到对标开源,如许用户担当度才会高。
  • 网络隔离。MSE 提供的是 BaaS 化的本领,Nacos Server 摆设在云产物 VPC,与用户 VPC 是隔离的,必要办理网络隔离题目。
  • 网络安全。MSE Nacos 是独享模式,网络上租户隔离是最根本的要求。除此之外企业级用户会对 MSE Nacos 提出安全组/ACL 控制的诉求,这些都必要考量。

综上,MSE Nacos 终极接纳的是域名 + SLB 的 VIP 模式。

vcMpeGnp7OC7czOt.jpg

MSE Nacos 提供两个域名,此中公网域名可以用做当地开辟测试,大概自建情况、混淆云等场景的接入点,内网域名用做阿里云生产情况接入点。公网域名有带脱期制,必要在集群创建时根据场景选择符合的带宽,而内网域名则没有带脱期制。公网域名请留意添加 IP 访问白名单。

总结

本文先容了 Nacos 的三种摆设模式,并就高可用、可伸缩、易用性等方面临各个模式举行了先容,并对自建 Nacos 场景的摆设选型举行了分析,同时先容了 MSE Nacos 企业版的摆设架构,对云情况摆设 Nacos 举行了增补。

文章提及的三种模式实在也都是中心件组件常见的摆设模式,不但仅 Nacos,比方 Redis、DB 等场景,同样有参考代价。

本文提及了地点服务器这个大概在开源范畴不太常见的组件,在阿里内部则用得非常广泛。

别的,Nacos 自己也提供了 addressServer 模块,出于篇幅思量没有在本文中提及,后续我会单独整理一篇文章先容,感爱好的同砚可以自行参考 Nacos 官方文档和官方博客中的内容。

作者:中心件小哥

原文链接

本文为阿里云原创内容,未经答应不得转载返回搜狐,检察更多

责任编辑:





上一篇:2021年,手机或将打起「抗老化之战」
下一篇:ToB技能服务平台:焦点对象(一)
您需要登录后才可以回帖 登录 | 加入社区

本版积分规则

 

QQ|申请友链|小黑屋|手机版|Hlshell Inc. ( 豫ICP备16002110号-5 )

GMT+8, 2024-5-2 06:41 , Processed in 0.205277 second(s), 47 queries .

HLShell有权修改版权声明内容,如有任何爭議,HLShell將保留最終決定權!

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表