目录
提供者和消费者
编辑 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既可以是提供者,也可以是消费者。
在之前的案例里面
url出现了硬编码,假如服务换了个服务器,每次都要重新修改代码和打包。
而且如果一个服务使用了多实例形成集群,url就不能指定了。
eureka的客户端包含了消费者和提供者,客户端启动时都会到服务端注册。
消费者要取到提供者的地址信息可以到eurka服务端去找。
并且每个客户都会向服务端发送心跳请求,如果不发了,默认宕机,就会剔除客户信息
这里不需要指定eureka版本是因为在父工程已经通过版本依赖管理指定了版本信息。
创建好后通过浏览器直接访问
可以看见有一个“注册到eureka的实例”,这里现在只有一个服务端,能看见计算机名和端口在后面。
步骤
将两个服务配置完之后可以看见两个客户端
一个服务启动多个实例
完成之后重启orderservice.
运行两次之后两个实例分别收到一次查询请求。
加上那个@LoadBalanced注解后,会有如下的一个拦截器拦截所有来自客户端的http请求。
会拿到userservice根据设定好的规则进行对url和端口号的转换和负载均衡访问。
在上面可以看见IRule接口定义规则。
有一个RandomRule随机和RoundRobinRule轮询。轮询下还有个根据权重轮询。
默认规则是ZoneAvoidanceRule,其父类中有轮询规则。
常见规则
第一种方案是作用于全局的,定义了一个IRule覆盖默认的IRule,不管调用哪一个微服务都是随机。
第二种方案可以针对某一种服务进行负载均衡的规则覆盖
这里的安装使用docker容器化部署。
在云服务器上。
docker pull nacos/nacos-server
mkdir -p /home/nacos/logs
docker run \
--name nacos -itd \
-e MODE=standalone \
-p 8848:8848 \
-v /home/nacos/logs:/home/nacos/logs \
nacos/nacos-server
http://服务器ip:8848/nacos
nacos:nacos
tmd, 这个nacos放在云端,本地的项目怎么能让云端的东西负载均衡?
还真可以。
找bin目录下打开cmd运行
startup.cmd -m standalone
使用Eureka和Nacos时代码不用怎么变化。
一个是依赖改变,一个是地址改变。
yml配置文件注释eureka的配置,使用nacos的配置
spring:
cloud:
nacos:
server-addr: localhost:8848 #nacos服务地址
修改完之后就可以看见服务列表上出现了对应的项目和实例
最后,这里用云服务器的nacos也照样可以访问,这里版本不同是因为docker拉取默认拉最新版本的。并且负载均衡同样正常执行。
在某个实例下可以看见默认是没有集群。
现在user-service有三个实例,先修改为gz然后启动1和2
再修改为hz然后启动3
然后在nacos控制台上就可以看见这个项目的三个实例分布在两个不同集群内
为里实现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
spring-cloud-starter-alibaba-nacos-config
服务实例之间隔离之后就无法访问。Group是分组的意思,业务相关度高的服务可以放到一个组里面。
在nacos控制台可以看见有一个public的保留空间。原先的项目实例都在这个空间里面
新建一个命名空间
修改一个服务的命名空间
然后重新访问order-service就有如下错误:找不到可用实例
nacos会将提供者划分为临时实例或者非临时实例。
非临时实例无响应时不会从列表剔除,而是等其回复健康。并且主动向消费者推送消息。