为什么

理解注册中心的必要性,就需要了解软件架构的发展历程。

系统架构的发展历程

画板

为什么需要注册中心

上面的微服务架构采用直连的方式,每一个机器都需要维护更新自己需要连接的机器的IP,将来地址出现变更,还需要及时更新。在集群内部的节点越来越多的时候,开发者管理起来将会非常混乱。此时加入注册中心,就无需将消费者和服务提供者绑定了,提供者宕机不会对消费者产生直接的影响,所有的机器只需要和注册中心去交互。服务方与注册中心之间通过“心跳”机制进行监控。实现服务的自动注册、发现、状态监控:

画板

是什么

注册中心一般会存放机器IP和URL之间的映射,并且在其客户端一般都会附带负载均衡的功能帮助用户开箱即用调用其他机器的服务。还会通过心跳机制实现服务的自动注册、发现、状态监控。

怎么用

开源中间件

zookeeper

简单介绍

最初是Hadoop的子项目,用来管理分布式中的集群。一般用作配置中心、注册中心、分布式锁

简单使用

安装以及命令行的使用:https://juejin.cn/post/7025887917243383844

  • 常见的客户端:Zookeeper Java客户端、Apache Curator 开源客户端

Curator 是netflix开源的,Java 语言的。Curator 把常用 ZooKeeper 服务开发功能做了封装。在会话重新连接、Watch 反复注册、多种异常处理等使用场景中有很多自动处理。

  • curator-framework 包是对 ZK 底层 API 的一 些封装。
  • curator-recipes 包封装了一些 ZK 服务的高级特性,如: Cache 事件监听、选举、分布式锁。

nacos

简单介绍

阿里开源,动态服务发现和服务健康监测、动态服务配置、服务元数据及流量管理。

简单使用

下载安装包:https://github.com/alibaba/Nacos/releases。解压,进入nacos目录。

单机部署:修改配置文件中的启动模式export MODE="cluster"为:export MODE="standalone",不修改会有问题,之后执行:bin/startup.sh ‐m standalone。访问nocas的管理端:http://localhost:8848/nacos ,默认的用户名密码是 nocas/nocas。

集群部署文档: https://nacos.io/zh­cn/docs/cluster­mode­quick­start.html,提供了三种方式,推荐使用DNS+内网SLB+三节点Nacos。配置的时候最好使用外置数据库,conf\application.properties中配置外置的数据源,并且执行对应的SQL:conf\nacos­mysql.sqlconf\cluster.conf.example改为cluster.conf,添加节点配置。bin\startup.sh中修改对应的堆内存大小防止超出物理内存。登录控制台可以看到集群管理中的节点列表是一Leader和二FOLLOWER。之后在NGINX中配置相关的反向代理即可:

1
2
3
4
5
6
7
8
9
10
11
12
upstream nacoscluster {
server 127.0.0.1:8850;
server 127.0.0.1:8849;
server 127.0.0.1:8848;
}

server {
listen 8847;
server_name localhost;
location /nacos/ {
proxy_pass http://nacoscluster/nacos/;
}

相关使用文档如下,不再赘述,用前一定要看:

eureka

简单介绍

Eureka架构中的三个核心角色:

  • 服务注册中心:Eureka的服务端应用,提供服务注册和发现功能
  • 服务提供者:可以是SpringBoot应用,也可以是其它任意技术实现,只要对外提供的是Rest风格服务即可。
  • 服务消费者:消费应用从注册中心获取服务列表,得知每个服务方的信息,知道去哪里调用服务方。

简单使用

这里不再赘述。不怎么用了

开源中间件原理剖析

nacos 原理

nacos 来源

Nacos/nɑ:kəʊs/是Dynamic Namingand Configuration Service

阿里内部的 **Configserver** 非持久注册中心,**VIPServer**** 持久化注册中心,**Diamond** 配置中心。开源的时候考虑到用户体量可能没那么大又合并为一个产品,就是Nacos,对应阿里公有云的就是MSE微服务引擎。**

  1. 开源是为了像k8s一样加速云计算发展,清楚开源的价值是促进云的发展,保证开源的可持续发展。以开源为内核,以商业化为扩展;开源做生态(生态、开放),商业化做企业级特性(易用、安全),阿里内部做性能和高可用(性能、高可用);开源做组件,商业化做解决方案;并且随着时间推移,基本按照这思路完成的正循环。
  2. 开源是为了成为默认标准,避免商业化产品不断兼容其他产品
  3. 开源是为了在易用、规模、实时、稳定沉淀核心竞争力,围绕阿里 Dubbo和Spring-cloud-alibaba生态进行推广,建立阿里DNS(Dubbo+Nacos+Spring-cloud-alibaba/Seata/Sentinel)微服务最佳实践。

nacos架构

详细参考官方文档:https://nacos.io/zh-cn/docs/architecture.html

1657672709422-116b9512-d5e3-45ea-8f25-690838360dd1.png

**NamingService: 命名服务,注册中心核心接口 **

**ConfigService:配置服务,配置中心核心接口 **

控制台:服务和配置的管理。

OpenAPI文档:https://nacos.io/zh­cn/docs/open­api.html

nacos 架构和原理电子书:https://developer.aliyun.com/ebook/36?spm=a2c6h.20345107.ebook-index.18.152c2984fsi5ST1657673406588-781bf16f-c795-4855-83f4-141eb89bb555.png

NamingService 原理简单概括

画板

服务注册与服务同步 + 服务心跳与健康检查

Nacos Client会通过发送REST请求的方式向Nacos Server注册自己的服务,提供自 身的元数据,比如ip地址、端口等信息。Nacos Server接收到注册请求后,就会把这些元数据信 息存储在一个双层的内存Map中。

注册表结构

Map<String, Map<String, Service>> serviceMap = new ConcurrentHashMap<>();