成都服务器托管,创新互联公司提供包括服务器租用、联通服务器托管、带宽租用、云主机、机柜租用、主机租用托管、CDN网站加速、域名注册等业务的一体化完整服务。电话咨询:18982081108
大家好,我是哪吒。
一个更易于构建云原生应用的动态服务发现、服务配置和服务管理平台。
Nacos的关键特性:
Nacos的关键特性
如果此时,服务端接口接口名或参数或请求方式更改了,那么就得同步修改此restTemplate方法,感觉很麻烦。
RestTemplate调用远程服务
@SpringBootTest
class Test {
@Resource
private RestTemplate restTemplate;
@Test
void testSimple() {
// 请求地址
String url = "http://www.nzbc.com/updateUser";
// 要发送的数据对象
User user = new User();
user.setUserId(1);
user.setName("哪吒编程");
user.setMsg("读哪吒编程,品技术人生");
// 发送post请求
User result = restTemplate.postForObject(url, user, User.class);
System.out.println(result);
}
}
通过Nginx维护服务列表(upStream),如果服务较多的话,在Nginx通过upStream的方式去配置的话,Nginx配置文件会变得非常的难以维护。
Nacos注册中心
这种是最简单的Nacos注册中心,有若干个服务,都注册到Nacos注册中心,调用之前,先到Nacos获取对应接口,然后进行实际的调用。
但是,思考一个问题,如果Nacos宕机了,怎么办?如果从Nacos获取到接口后,调用服务2时,服务2宕机了,怎么办?
心跳版Nacos
心跳版Nacos,服务1和服务2和Nacos之间维护一个心跳关系,每5秒跳一次,频率不能太快或者太慢,否者会嗝屁的。
如果Nacos在5秒内没有收到心跳,则表示服务挂了,Nacos会下线此服务。
对于超过15秒没有收到客户端心跳的服务实例,会将它的healthy属性置为false,客户端无法调用healthy为false的服务。
如果超过30秒没有收到心跳,Nacos会直接将此服务剔除。
也可以通过服务端主动注销的方式,停止注册。
服务1调用服务2时,服务1会通过定时任务到Nacos中获取在线的服务,保证所调用的服务一直都是健康在线的状态。
获取到之后,用缓存将其保存起来,然后通过负载均衡器调用服务2,此时,将不再使用服务端的负载均衡Nginx了。
SpringBoot中引入Nacos Discovery,实现与Nacos的无缝连接,Nacos Discovery可以将服务自动注册到Nacos服务端,并且能够动态感知此服务,并刷新服务列表。并将服务的host、port、URL等信息注册到Nacos。
com.alibaba.cloud
spring-cloud-starter-alibaba-nacos-discovery
Nacos 的配置项信息:
Nacos核心功能
Nacos Client会通过发送REST请求向Nacos Server注册自己的服务,提供自身的元数据,比如host、port、url等信息,Nacos Server在收到注册请求后,会将这些数据信息存储在一个双层的内存map中。
服务注册后,服务消费者和Nacos Server之间会维护一个心跳,定时通知server,此服务还活着,防止被剔除掉。
Nacos Server集群之间会互相同步已注册的服务,用来保证服务列表的一致性。
服务消费者在调用服务提供者的服务时,会发送一个REST请求到Nacos Server,获取健康的服务列表,然后将其缓存到本地,同时开启一个定时任务,定时访问Nacos Server,然后更新本地缓存。
Nacos Server会开启一个定时任务用来检查注册服务实例的健康情况,对于超过15秒没有收到客户端心跳的服务实例,会将它的healthy属性置为false,客户端无法调用healthy为false的服务,如果超过30秒没有收到心跳,Nacos会直接将此服务剔除。
1、Nacos目前功能最全,用的也最多;
2、Eureka,因为挺更的缘故,比较新的技术都不支持了,目前很多公司都将Eureka换成Nacos了,不推荐使用;
3、Zookeeper,用的最多的地方就是和Dubbo一起使用,不支持负载均衡策略,但可以通过其它组件实现;
4、Consul支持的也很多;
CAP,C一致性,A可用性,P分区容错性
Nacos |
Eureka |
Zookeeper |
Consul |
|
一致性协议 |
CP + AP |
CP |
AP |
CP |
访问协议 |
HTTP/DNS |
HTTP |
TCP |
HTTP/DNS |
健康检查 |
TCP/HTTP/MYSQL/Client Beat |
Client Beat |
Keep Live |
TCP/HTT[/gRPC/Cmd |
负载均衡策略 |
权重/metadata/Seletor |
Ribbon |
- |
Fabio |
雪崩保护 |
有 |
有 |
无 |
无 |
自动注销 |
支持 |
支持 |
支持 |
支持 |
监听 |
支持 |
支持 |
支持 |
支持 |
多数据中心 |
支持 |
支持 |
支持 |
不支持 |
跨注册中心同步 |
支持 |
不支持 |
不支持 |
支持 |
Spring Cloud集成 |
支持 |
支持 |
支持 |
支持 |
Dubbo集成 |
支持 |
不支持 |
支持 |
支持 |
K8S集成 |
支持 |
不支持 |
支持 |
不支持 |
Nacos使用key/value形式存储配置信息,为分布式系统中的外部化配置提供服务支持。
com.alibaba.cloud
spring-cloud-starter-alibaba-nacos-config
spring.application.name=nacos-config
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
blog.name=哪吒编程
blog.language=java
@SpringBootApplication
public class ProviderApplication {
public static void main(String[] args) {
ConfigurableApplicationContext applicationContext = SpringApplication.run(ProviderApplication.class, args);
String name = applicationContext.getEnvironment().getProperty("blog.name");
String language = applicationContext.getEnvironment().getProperty("blog.language");
System.err.println("公众号 :"+name+"; 擅长技术: "+language);
}
}
一秒刷新一次。
@SpringBootApplication
public class ProviderApplication {
public static void main(String[] args) {
ConfigurableApplicationContext applicationContext = SpringApplication.run(ProviderApplication.class, args);
while(true) {
//当动态配置刷新时,会更新到 Enviroment中,因此这里每隔一秒中从Enviroment中获取配置
String name = applicationContext.getEnvironment().getProperty("blog.name");
String language = applicationContext.getEnvironment().getProperty("blog.language");
System.err.println("公众号 :"+name+"; 擅长技术: "+language);
TimeUnit.SECONDS.sleep(1);
}
}
}
开发测试环境和生产环境的资源(如配置、服务)隔离等,比如dev和prod。
在没有明确指定 ${spring.cloud.nacos.config.group}配置的情况下, 默认使用的是 DEFAULT_GROUP 。如果需要自定义自己的 Group,可以通过以下配置来实现:
spring.cloud.nacos.config.group=DEVELOP_GROUP
profile > 默认配置文件 > extension-configs(下标越大优先级越高) > shared-configs(下标越大优先级越高)。
一般都是通过@Value的形式读取配置文件中的信息,但是无法感知修改后的值,需要利用@RefreshScope动态刷新。
(1) Spring Cloud Config需要结合Git使用,动态变更需要配合Bus 消息总线来通知所有的客户端变化。
(2)Spring Cloud Config没有可视化界面。
(3)Nacos使用长轮询更新配置,速度上秒杀Spring Cloud Config。
本文转载自微信公众号「哪吒编程」,可以通过以下二维码关注。转载本文请联系哪吒编程公众号。
本文题目:图解Nacos,注册中心演变+Nacos核心功能
浏览地址:http://www.mswzjz.com/qtweb/news8/179108.html
网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联