微服务-微服务Alibaba-Nacos 源码分析(上)

Nacos&Ribbon&Feign核心微服务架构图

架构原理

1、微服务系统在启动时将自己注册到服务注册中心,同时外发布 Http 接口供其它系统调用(一般都是基于Spring MVC)

2、服务消费者基于 Feign 调用服务提供者对外发布的接口,先对调用的本地接口加上注解@FeignClient,Feign会针对加了该注解的接口生成动态代理,服务消费者针对 Feign 生成的动态代理去调用方法时,会在底层生成Http协议格式的请求,类似 /stock/deduct?productId=100

3、Feign 最终会调用Ribbon从本地的Nacos注册表的缓存里根据服务名取出服务提供在机器的列表,然后进行负载均衡并选择一台机器出来,对选出来的机器IP和端口拼接之前生成的url请求,生成调用的Http接口地址 http://192.168.0.60:9000/stock/deduct?productId=100,最后基于HTTPClient调用请求

Nacos架构图

Nacos核心功能点

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

**服务心跳:**在服务注册后,Nacos Client会维护一个定时心跳来持续通知Nacos Server,说明服务一直处于可用状态,防止被剔除。默认5s发送一次心跳。

**服务健康检查:**Nacos Server会开启一个定时任务用来检查注册服务实例的健康情况,对于超过15s没有收到客户端心跳的实例会将它的healthy属性置为false(客户端服务发现时不会发现),如果某个实例超过30秒没有收到心跳,直接剔除该实例(被剔除的实例如果恢复发送心跳则会重新注册)

**服务发现:**服务消费者(Nacos Client)在调用服务提供者的服务时,会发送一个REST请求给Nacos Server,获取上面注册的服务清单,并且缓存在Nacos Client本地,同时会在Nacos Client本地开启一个定时任务定时拉取服务端最新的注册表信息更新到本地缓存

**服务同步:**Nacos Server集群之间会互相同步服务实例,用来保证服务信息的一致性。

Nacos核心功能源码架构图

Nacos服务注册表结构:Map<namespace,Map<group::serviceName, Service>>

举例说明:

Nacos服务端源码单机运行

下载nacos源码 git clone https://github.com/alibaba/nacos.git

选择Tag 1.4.1版本

源码整体结构(注意,nacos源码导入要求maven 3.2.5以上版本):

1、源码单机运行:

直接运行console模块里的 com.alibaba.nacos.Nacos.java

增加启动vm参数 -Dnacos.standalone=true

2、源码集群运行

nacos集群需要配置mysql存储,需要先创建一个数据,名字随便取,然后执行 distribution/conf 目录下的 nacos-mysql.sql 脚本,然后修改 console\src\main\resources 目录下的 application.properties 文件里的mysql配置,如下所示

复制代码
### If use MySQL as datasource:
spring.datasource.platform=mysql

### Count of DB:
db.num=1

### Connect URL of DB:
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=root
db.password.0=root

运行console模块里的 com.alibaba.nacos.Nacos.java,需要增加启动vm参数端口号和实例运行路径nacos.home(对应的目录需要自己提前创建好),每台server的nacos.home目录里需要创建一个conf文件夹,里面放一个cluster.conf文件,文件里需要把所有集群机器ip和端口写入进去,见下图:

相关推荐
烟雨江南78523 分钟前
从转写到智能体决策:基于“灵声智库”与本地大模型(LLM)的政务热线智能分析与 RAG 知识库融合架构
人工智能·科技·架构·语音识别·政务·ai质检
互联网推荐官34 分钟前
上海物联网应用开发平台选型实录:PaaS架构如何解决设备接入与数据治理的工程难题
物联网·架构·paas·开发经验·上海
步步为营DotNet1 小时前
深入.NET 11:.NET Aspire 在云原生资源编排与管理的卓越实践
云原生·.net
小短腿的代码世界1 小时前
QHttpEngine深度解析:Qt嵌入式HTTP服务端的工业级架构与性能调优
qt·http·架构
学习,学习,在学习1 小时前
Qt 串口通讯架构
开发语言·c++·qt·架构·qt5
密瓜智能1 小时前
HAMi 正式接入 Kubernetes DRA:下一代 GPU 资源模型实践指南
云原生·容器·kubernetes
一切皆是因缘际会1 小时前
终结拟合式智能:记忆博弈心智架构重塑硅基生命进化逻辑
大数据·人工智能·深度学习·机器学习·架构
SOC罗三炮1 小时前
Hermes Agent 源码深度解构:一个“自进化“AI Agent的完整架构拆解
大数据·人工智能·架构
IPHWT 零软网络1 小时前
从选型角度看语音网关国产化:以MX8G-A为列的架构与价值分析
人工智能·架构·信创·国产化·语音网关
KaMeidebaby1 小时前
卡梅德生物技术快报|适配体筛选技术架构演进:SPARK-seq 高通量平台原理与技术流程解析
大数据·前端·其他·百度·架构·spark·新浪微博