Nacos
Nacos注册中心
①:Nacos基础Linux的安装配置

nacos的默认端口号为8848
登录的用户名和密码默认的都是nacos
②:服务注册到Nacos
<!--父工程管理依赖-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2021.1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!--Nacos客户端依赖包-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>2021.1</version>
</dependency>
主要bug
Caused by: java.lang.ClassNotFoundException: org.springframework.boot.Bootstrapper
这个报错主要原因是springcloud与springboot版本之间的问题。
打开查看spring alibaba、springcloud、springboot对应版本
③:demo演示


④:Nacos服务分级存储模型

⑤:服务跨集群调用问题
服务调用尽可能选择本地集群的服务,跨集群调用延迟较高
本地集群不可访问时候、再去访问其他集群

⑥:服务集群属性

⑥:根据集群负载均衡

⑦:根据权重负载均衡
实际部署中会出现这样的场景
服务器设备性能有差异,部分实例所在机器性能较好,另一些较差,我们希望性能好的机器承担更多的用户请求
Nacos提供了权重配置来控制访问频率,权重越大则访问频率越高
包括服务器的升级、我们可以使用权重来使得某个微服务无人访问,然后停机升级。这样也不会影响正在使用的用户
实例的权重控制
Nacos控制台可以设置实例的权重值,0~1之间
同集群内的多个实例,权重越高被访问的频率越高
权重设置为0则完全不会被访问
⑧:环境隔离 - namespace
Nacos中服务存储和数据存储的最外层都是一个名为namespace的东西,用来做最外层隔离

搭建过程




Nacos环境隔离
namespace用来做环境隔离
每个namespace都有唯一id
不同namespace下的服务不可见
⑨:nacos注册中心细节分析

⑩:临时实例与非临时实例

临时实例的情况下,如果你终止程序,过30s,到nacos中查看就会发现爆红然后直接消失(被nacos踢出)
非临时实例终止程序,nacos中查看该服务爆红,但不会踢出。重新启动非临时实力即可
nacos与eureka的区别
1.Nacos与eureka的共同点
都支持服务注册和服务拉取
都支持服务提供者心跳方式做健康检测
2.Nacos与Eureka的区别
Nacos支持服务端主动检测提供者状态:临时实例采用心跳模式,非临时实例采用主动检测模式
临时实例心跳不正常会被剔除,非临时实例则不会被剔除
Nacos支持服务列表变更的消息推送模式,服务列表更新更及时
Nacos集群默认采用AP方式,当集群中存在非临时实例时,采用CP模式 ; Eureka采用AP方式
2.微服务架构组件
①:Nacos配置管理
配置更改热更新

注: Nacos配置文件中的内容不是随便写的,不是把项目中的yml配置文件拉进去就可以了,我们只写一些通用的、需要热更新的内容。
像数据库地址一般都是固定的,就不必写。

data ID: 服务器名-开发环境-后缀名

如此一来我们就配置好了,接下来就需要将微服务连接上配置
②:统一配置管理
服务获取配置的步骤、顺序如下:


注意: springboot 2.4以后,bootstrap默认关闭,你需要添加依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
<version>3.1.1</version>
</dependency>


这个配置在微服务本地配置是不存在的,也是刚刚在nacos当中的配置。
输出的日期与nacos配置当中一直,这就 说明我们确实获取到了nacos中的配置
③:热更新配置


④:多环境配置共享
共享前提: 微服务的bootstrap配置名相同
spring:
application:
name: orderService


关于配置的拆分管理


⑤:nacos集群搭建
1.搭建MySQL集群并初始化数据库表
2.下载解压nacos
3.修改集群配置(节点信息)、数据库配置
4.分别启动多个nacos节点
5.nginx反向代理
⑥:RestTemplate方式调用存在的问题

这样的代码可读性差、参数复杂URL难以维护
⑦:Feign声明式http客户端

feignclient 客户端名字根据你服务名来的,可以要yml文件中查看,需要调用哪个服务就放哪个名字进去

⑧:自定义Feign配置



方式一是配置文件,feign.client.config.xxx.loggerLevel
如果xxx是default则代表全局
如果xxx是服务名称,例如userservice则代表某服务
方式二是java代码配置Logger.Level这个Bean
如果在@EnableFeignClients注解声明则代表全局
如果在@FeignClient注解中声明则代表某服务
⑨:Feign性能调优
Feign底层的客户端实现
URLConnection: 默认实现,不支持连接池
Apache HttpClient: 支持连接池
OKHttp: 支持连接池我们知道没有连接池的情况下,需要每次都重连和断开,影响性能
因此优化Feign的性能主要包括:
使用连接池代替默认的URLConnection
日志级别,最好用basic或none





浙公网安备 33010602011771号