赞
踩
官方:一个更易于构建云原生应用的动态服务发现
、服务配置
、和服务管理
平台
理解:注册中心(如:服务地址注册进去根据名称调用)、配置中心(如:每个服务yaml中的配置)、服务管理(可视化管理平台)
1、下载nacos,并启动
本地启动单机模式需要修改nacos/bin/startup.cmd
中set MODE="cluster"
为set MODE="standalone"
(集群修改为单机)
修改nacos数据源nacos/conf/application.properties
,默认关闭,存在内存中。
启动完成,访问路径:http://localhost:8848/nacos/#/login 登录名和密码都是nacos
百度网盘下载链接:https://pan.baidu.com/s/1YpbW7TgQpXY5y8ayn68lRw
提取码:l18x
2、 pom里面添加服务注册 和 配置中心(父项目依赖spring-cloud-alibaba-dependencies)
<!-- nacos 服务的注册发现 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!-- nacos 配置中心做依赖管理 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-dubbo</artifactId>
</dependency>
<!-- dubbo-apache -->
配置yaml
# 应用名称(nacos会将改名称作为服务名称)
spring:
application:
name: order-service
cloud:
nacos:
server-addr: 127.0.0.1:8848
discovery:
username: nacos
password: nacos
namespace: public #命名空间,如prod,dev,默认public
1、下载并解压到对应目录下,copy三份分别为nacos8849,nacos8850,nacos8851
2、分别修改conf/application.properties文件中端口为8849,8850,8851
3、分别开启数据库,集群是保存到数据库中保证数据一致
4、创建nacos数据库并执行conf/nacos-mysql.sql文件中的sql
5、copy配置文件conf/cluster.conf.example为conf/cluster.conf并修改如下
6、如果服务器内存不够大,可修改集群内存大小,在bin/startup.sh目录下,第一个是单机占用内存,第二个是集群占用内存
7、然后启动分别启动bin/startup.sh即可(注意启动数据库)
8、配置nginx负载均衡,在nginx/conf/nginx.conf的http中配置如下
# 访问localhost:8847/nacos/反向代理为http://127.0.0.1:8849/nacos/或http://127.0.0.1:8850/nacos/,轮询负载均衡机制
upstream nacoscluster {
server 127.0.0.1:8849;
server 127.0.0.1:8850;
server 127.0.0.1:8851;
}
server {
# 监听本地端口为8847
listen 8847;
server_name localhost;
location /nacos/ {
proxy_pass http://nacoscluster/nacos/;
}
}
9、启动sbin下的nginx,然后即可访问localhost:8847/nacos/,yaml中修改nacos地址为127.0.0.1:8847
负载均衡有两类,服务端负载均衡和客户端负载均衡;
1、客户端负载均衡
例如 Ribbon。如下所有服务地址都注册到了注册中心,然后服务消费者可以去注册中心获取所有服务地址,然后自己通过负载均衡算法选择一个服务地址进行访问。由服务消费者(客户端)完成负载均衡。
2、服务端负载均衡
服务端负载均衡有三种实现方式:
这里介绍基于软件实现负载均衡,例如Nginx,在nginx中配置所有服务地址,服务消费者调用时nginx通过轮询负载均衡算法进行分配服务地址。由服务端(nginx)完成负载均衡分配
3、常见负载均衡算法
默认为轮询负载均衡策略
1、nacos-discovery默认加入了Ribbon的依赖
2、只需要在restTemplate中加入@LoadBalanced注解即可引入负载均衡
3、然后再调用服务时用服务名称即可
1、Ribbon自带的负载策略类
# com.netflix.loadbalancer.RoundRobinRule - 轮询
# com.netflix.loadbalancer.RandomRule - 随机
# com.netflix.loadbalancer.RetryRule - 重试,先按RoundRobinRule进行轮询,如果失败就在指定时间内进行重试
# com.netflix.loadbalancer.WeightedResponseTimeRule(nacos中权重要使用NacosRule,nacos对权重进行了基本配置的扩展) - 权重,响应速度越快,权重越大,越容易被选中。
# com.netflix.loadbalancer.BestAvailableRule - 先过滤掉不可用的处于断路器跳闸转态的服务,然后选择一个并发量最小的服务
# com.netflix.loadbalancer.AvailabilityFilteringRule - 先过滤掉故障实例,再选择并发量较小的实例
# com.netflix.loadbalancer.ZoneAvoidanceRule - 默认规则,复合判断server所在区域的性能和server的可用性进行服务的选择。
2、如何修改Nacos中Ribbon的默认负载均衡策略
方式一:
package com.rules; import com.netflix.loadbalancer.IRule; import com.netflix.loadbalancer.RandomRule; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; /** * @desc 自定义负载均衡策略(用于替换默认的RoundRobinRule轮询策略) */ @Configuration public class MyLoadBalanceRule { @Bean public IRule myRule(){ return new RandomRule(); // 改为随机算法规则 }
方式二:
这里设置负载均衡为权重,注意不能使用WeightedResponseTimeRule而要使用nacos自己扩展的NacosRule
stock-service:
ribbon:
NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule
然后通过nacos设置服务权重,权重越大越容易被选中
3、自定义一个负载均衡策略
package com.ribbon; import com.netflix.client.config.IClientConfig; import com.netflix.loadbalancer.AbstractLoadBalancerRule; import com.netflix.loadbalancer.ILoadBalancer; import com.netflix.loadbalancer.Server; import java.util.List; import java.util.concurrent.ThreadLocalRandom; public class CustomRule extends AbstractLoadBalancerRule { // 获取基本属性 @Override public void initWithNiwsConfig(IClientConfig iClientConfig) { } // 用来获取服务 @Override public Server choose(Object o) { // 实现一个简单的自定义负载均衡策略 ILoadBalancer loadBalancer = this.getLoadBalancer(); // 获取当前请求服务实例 List<Server> reachableServers = loadBalancer.getReachableServers(); // 获取随机数 int random = ThreadLocalRandom.current().nextInt(reachableServers.size()); // 随机获取一个服务 Server server = reachableServers.get(random); return server; } }
以上可以自定义一个负载均衡策略,但是在第一次调用服务的时候才会去动态加载负载均衡策略,这样会影响调用速率。通过以下配置在启动服务时初始化负载均衡策略
ribbon:
eager-load:
enabled: true # 开启ribbon饥饿加载
clients: stock-service # 需要启动负载均衡的服务,多个用逗号隔开
1、配置管理界面如下:
2、权限控制
1)首先要先将conf/application.properties中如下配置改为true(需要重启nacos)
2)添加用户3)给用户配置角色
4)给角色赋予权限
用@value注解读取配置文件信息时需要在类上加入@RefreshScope注解才能动态读取配置文件信息(不重启)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。