目录
提供者和消费者
编辑 Eureka注册中心——远程调用的问题
Eureka注册中心——原理分析
Eureka注册中心——搭建eureka服务
步骤:
Eureka注册中心——服务注册
Eureka注册中心——服务发现
总结
Ribbon负载均衡——原理
流程:
Ribbon负载均衡——策略
Ribbon负载均衡——饥饿加载
总结
编辑 Nacos注册中心——认识和安装Nacos
docker拉取镜像
创建日志映射文件
启动Nacos
访问Nacos
账号密码
windows安装时的启动方法
Nacos注册中心——快速入门
Nacos注册中心——服务多级存储模型
服务集群属性配置
Nacos注册中心——NacosRule负载均衡
Nacos注册中心——服务实例的权重设置
Nacos注册中心——环境隔离
Nacos和Eureka的对比
提供者和消费者
针对上面这种情况,要看B相对于谁而言,B既可以是提供者,也可以是消费者。
Eureka注册中心——远程调用的问题
在之前的案例里面
url出现了硬编码,假如服务换了个服务器,每次都要重新修改代码和打包。
而且如果一个服务使用了多实例形成集群,url就不能指定了。
Eureka注册中心——原理分析
eureka的客户端包含了消费者和提供者,客户端启动时都会到服务端注册。
消费者要取到提供者的地址信息可以到eurka服务端去找。
并且每个客户都会向服务端发送心跳请求,如果不发了,默认宕机,就会剔除客户信息
Eureka注册中心——搭建eureka服务
步骤:
这里不需要指定eureka版本是因为在父工程已经通过版本依赖管理指定了版本信息。
创建好后通过浏览器直接访问
可以看见有一个“注册到eureka的实例”,这里现在只有一个服务端,能看见计算机名和端口在后面。
Eureka注册中心——服务注册
步骤
将两个服务配置完之后可以看见两个客户端
一个服务启动多个实例
Eureka注册中心——服务发现
完成之后重启orderservice.
运行两次之后两个实例分别收到一次查询请求。
总结
Ribbon负载均衡——原理
流程:
加上那个@LoadBalanced注解后,会有如下的一个拦截器拦截所有来自客户端的http请求。
会拿到userservice根据设定好的规则进行对url和端口号的转换和负载均衡访问。
Ribbon负载均衡——策略
在上面可以看见IRule接口定义规则。
有一个RandomRule随机和RoundRobinRule轮询。轮询下还有个根据权重轮询。
默认规则是ZoneAvoidanceRule,其父类中有轮询规则。
常见规则
第一种方案是作用于全局的,定义了一个IRule覆盖默认的IRule,不管调用哪一个微服务都是随机。
第二种方案可以针对某一种服务进行负载均衡的规则覆盖
Ribbon负载均衡——饥饿加载
总结
Nacos注册中心——认识和安装Nacos
这里的安装使用docker容器化部署。
在云服务器上。
docker拉取镜像
docker pull nacos/nacos-server
创建日志映射文件
mkdir -p /home/nacos/logs
启动Nacos
docker run \
--name nacos -itd \
-e MODE=standalone \
-p 8848:8848 \
-v /home/nacos/logs:/home/nacos/logs \
nacos/nacos-server
- -p:指定了宿主机端口为8848
- -v:指定宿主机与nacos的日志目录映射
- -e:指定环境变量(或–env)。MODE=standalone: 单机, MODE=cluster:集群(默认模式)
访问Nacos
http://服务器ip:8848/nacos
账号密码
nacos:nacos
tmd, 这个nacos放在云端,本地的项目怎么能让云端的东西负载均衡?
还真可以。
windows安装时的启动方法
找bin目录下打开cmd运行
startup.cmd -m standalone
Nacos注册中心——快速入门
使用Eureka和Nacos时代码不用怎么变化。
一个是依赖改变,一个是地址改变。
yml配置文件注释eureka的配置,使用nacos的配置
spring:cloud:nacos:server-addr: localhost:8848 #nacos服务地址
修改完之后就可以看见服务列表上出现了对应的项目和实例
最后,这里用云服务器的nacos也照样可以访问,这里版本不同是因为docker拉取默认拉最新版本的。并且负载均衡同样正常执行。
Nacos注册中心——服务多级存储模型
在某个实例下可以看见默认是没有集群。
服务集群属性配置
现在user-service有三个实例,先修改为gz然后启动1和2
再修改为hz然后启动3
然后在nacos控制台上就可以看见这个项目的三个实例分布在两个不同集群内
Nacos注册中心——NacosRule负载均衡
为里实现order-service远程调用user-service时优先选择本地集群,需要给order-service配置集群属性。
然后重启order-service。就可以在nacos控制台看见order-service也在gz集群中了。
目前还是轮询访问,因为没有配置IRule.
配置负载均衡规则
如果这里的没有实现在同一个地区的集群访问,可能是因为nacos版本过高,我这里就是,用了服务器上最新的nacos版本,不再支持这里旧的ribbon的负载均衡策略设置。用来提供的低版本nacos就又可以了。
Spring Cloud Nacos 2021使用LoadBalancer + Nacos做负载均衡 - 简书
我是因为写错了要访问的服务名称,所以不关云服务上的nacos版本的事情。
userserver: #要做配置的微服务名称ribbon:NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule #负载均衡规则
nacosrule优先选择本地集群,在本地集群的多个实例中优先选择随机策略。
并且在本地集群没有实例时会选择其他集群的服务,并且会给出警告让运维及时启动本地集群里面挂的服务。
加了一个注解会一直报错
The maximum number of tolerable server reconnection errors has been reached
<dependency><groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
Nacos注册中心——服务实例的权重设置
置为0就会导致这个实例访问不了。
Nacos注册中心——环境隔离
服务实例之间隔离之后就无法访问。Group是分组的意思,业务相关度高的服务可以放到一个组里面。
在nacos控制台可以看见有一个public的保留空间。原先的项目实例都在这个空间里面
新建一个命名空间
修改一个服务的命名空间
然后重启order-service。
然后重新访问order-service就有如下错误:找不到可用实例
Nacos和Eureka的对比
nacos会将提供者划分为临时实例或者非临时实例。
非临时实例无响应时不会从列表剔除,而是等其回复健康。并且主动向消费者推送消息。