程序员最近都爱上了这个网站  程序员们快来瞅瞅吧!  it98k网:it98k.com

本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长


+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

国内最简单易用的源码,Nacos必须榜上有名!

发布于2021-05-29 20:00     阅读(643)     评论(0)     点赞(3)     收藏(3)


点赞关注,不会迷路!   

2021最新学习面试资料 点击一起学习 暗号:csdn 最新学习资料+简历优化资源

最近新组件新的小组,开始了新的项目,项目的注册组件选择了我们国产的Nacos。

Nacos提供了一组简单易用的特性集,可以快速实现动态服务发现、服务配置、服务元数据及流量管理。越来越多的公司也在使用这个技术 ,前几天一直在研究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配置,如下所示:

  1. ### If use MySQL as datasource:
  2. spring.datasource.platform=mysql
  3. ### Count of DB:
  4. db.num=1  
  5. ### Connect URL of DB:
  6. db.url.0=jdbc:mysql://127.0.0.1:3306/Nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoRecon
  7. nect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
  8. db.user.0=root
  9. db.password.0=root

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

       图片       

       图片

另外给大家准备了2021面试资料,整理成了pdf文档,方便大家学习使用

点击 : 一线大厂核心技术分享 分享最新技术,走在知识前端

点击一起学习 暗号:csdn 最新学习资料+简历优化资源

后续会分享更多纯干货文章,希望能真正帮到你们。你们的支持就是我最大的动力!欢迎关注点赞啊!

  

原文链接:https://blog.csdn.net/weixin_50333534/article/details/117338857



所属网站分类: 技术文章 > 博客

作者:程序员之神

链接:http://www.javaheidong.com/blog/article/207123/6c71e9670bacd8ce2e12/

来源:java黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

3 0
收藏该文
已收藏

评论内容:(最多支持255个字符)