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

 

posted @ 2024-10-24 22:58  爱哭的小孩有糖吃  阅读(108)  评论(0)    收藏  举报