微服务项目结构
Nacos分级存储模型
目的:当两个服务user_service,order_service之间远程调用时,其中的order_service服务可以访问本地机房中user_service也可以访问其它地方机房中的user_service,如果本地的机房挂掉了,order_service还可以访问其它地方user_service,保证服务之间正常的远程调用
单个服务分级存储模型
一级是服务,例如用户服务
二级是集群(机房),例如北京机房或上海机房
三级是实例,例如北京机房的某台部署了某服务的服务器
服务跨集群调用问题
微服务互相访问时,应该尽可能访问同集群实例,因为本地访问速度更快。当本集群内不可用时,才访问其它集群。例如:
解决服务跨集群调用问题(先调用本地集群,其次考虑其它集群)
1.给user_service搭建集群
1.1.集群架构图
1.2.修改user_service的application.yml文件,添加集群配置
spring:
cloud:
nacos:
server-addr: localhost:8848
discovery:
cluster-name: HZ # 集群名称
1.3.再复制两个user_service启动,并且配置端口和集群
-Dserver.port=8083 -Dspring.cloud.nacos.discovery.cluster-name=SH
2.用order_serv远程调用user_service
2.1.修改order-service的application.yml文件,添加集群配置
spring:
cloud:
nacos:
server-addr: localhost:8848
discovery:
cluster-name: HZ # 集群名称
3.同集群优先的负载均衡
3.1.修改负载均衡规则(配置文件方式或者是代码方式,选一即可)
@Configuration
public class IRuleConfig {
@Bean
public IRule iRule(){
return new NacosRule();
}
}
userservice:
ribbon:# 负载均衡规则
NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule
4.测试当order_service远程调用user_service集群时,是否只会调用本地user_service
权重配置
Nacos提供了权重配置来控制访问频率,权重越大则访问频率越高。
环境隔离
Nacos环境隔离
1.namespace用来做环境隔离
2.每个namespace都有唯一id
3.不同namespace下的服务不可见
注意:不同namespace不同group中的服务无法进行远程调用,默认情况: 服务是注册到public名称空间的DEFALT GROUP组
1.创建namspace命名空间
2.给微服务配置namespace,
谁便给任意服务配置namespace
spring:
cloud:
nacos:
server-addr: localhost:8848
discovery:
cluster-name: HZ# 命名空间,填ID
namespace:HAHA#分组
group: JAVA_GROUP