网站浮动qq,什么是三合一网站建设,论文中小企业的网站建设,中税网crm客户管理系统前言 #xff1a;本文主要阐述微服务架构中的服务治理#xff0c;以及Nacos环境搭建、服务注册、服务调用#xff0c;负载均衡以及Feign实现服务调用。
服务治理 服务治理是微服务架构中最核心最基本的模块。用于实现各个微服务的自动化注册与发现。 服务注册#xff1a;在…前言 本文主要阐述微服务架构中的服务治理以及Nacos环境搭建、服务注册、服务调用负载均衡以及Feign实现服务调用。
服务治理 服务治理是微服务架构中最核心最基本的模块。用于实现各个微服务的自动化注册与发现。 服务注册在服务治理框架中都会构建一个注册中心每个服务单元向注册中心登记自己提供服 务的详细信息。并在注册中心形成一张服务的清单服务注册中心需要以心跳的方式去监测清单中 的服务是否可用如果不可用需要在服务清单中剔除不可用的服务。 服务发现服务调用方向服务注册中心咨询服务并获取所有服务的实例清单实现对具体服务实 例的访问。 这里还有一个必不可少的组件就是服务注册中心它是微服务架构非常重要的一个组件在微服务架构里主要起到了协调者的一个作用。
常见的服务注册中心 Zookeeper是一个分布式服务框架主要用来解决分布式应用中经常遇到的数据管理问题如统一命名服务、状态同步服务、集群管理、分布式应用 配置项的管理等。 EurekaSpring Cloud 微服务框架默认的也是推荐的服务注册中心主要作用就是做服务注册和发现。主要面向分布式服务化的系统提供服务注册、服务发现 和 配置管理的功能。 NacosAilibab旗下的开源项目是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台负责服务注册发现和服务配置。 对比总结
特性EurekaNacosZookeeper一致性模型APAP/CP 可切换CP健康检查心跳TCP/HTTP/自定义心跳配置管理不支持支持支持ZNode多数据中心不支持支持不支持社区生态停滞活跃阿里云成熟Apache适用场景Spring Cloud 旧项目全功能服务治理强一致性协调服务
Nacos NacosDynamic Naming and Configuration Service是阿里巴巴开源的一款集服务注册与发现、配置管理于一体的动态服务管理平台。它帮助开发者构建云原生应用和微服务架构实现服务的动态发现、健康管理、配置统一管理等功能。
环境搭建 下载地址https://github.com/alibaba/nacos/releases 进入bin目录
启动Nacos
startup.cmd -m standalone
访问网址127.0.0.1:8848/nacos
服务注册 1.添加依赖
!--nacos 客户端--
dependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-starter-alibaba-nacos-discovery/artifactId
/dependency
2.启动类注解标签 EnableDiscoveryClient 3. 定义服务名添加nacos服务地址
spring:application:name: service-order #服务名cloud:nacos:discovery:server-addr: 127.0.0.1:8848 #nacos 地址 此时商品订单用户服务均已注册成功。
服务调用 使用 nacos 客户端根据服务名动态获取服务地址和端口 RestController
RequestMapping(/order)
public class OrderController{AutowiredOrderService orderService;AutowiredDiscoveryClient discoveryClient;AutowiredRestTemplate restTemplate;RequestMapping(/create/{pid}/{uid}/{num})public Order createOrder(PathVariable(pid) int pid, PathVariable(uid)int uid, PathVariable(num) int num){ServiceInstance serviceInstance discoveryClient.getInstances(service-product).get(0);//ip portString purl serviceInstance.getHost() : serviceInstance.getPort();//使用ServiceInstance userviceInstance discoveryClient.getInstances(service-user).get(0);//ip portString uurl userviceInstance.getHost() : userviceInstance.getPort();Product p restTemplate.getForObject( http:// purl /product/get/ pid, Product.class);User u restTemplate.getForObject( http:// uurl /user/get/ uid, User.class);Order order null;if(p!null){if(p.getStock()num){if(u!null){order orderService.saveorder(pid,uid,num);}}}return order;}
} 与单一使用 RestTemplate 使用 http 方式远程访问相比解决了很多繁琐的步骤与人工维护。
负载均衡 负载均衡就是将负载(工作任务访问请求)进行分摊到多个操作单元(服务器,组件)上进行执行。 自定义实现
1.修改端口启动多个商品微服务
2.将获取服务的方式改为随机获取 核心代码
//获取服务列表
ListServiceInstance instances
discoveryClient.getInstances(service-product);
//随机生成索引
Integer index new Random().nextInt(instances.size());
//获取服务
ServiceInstance productService instances.get(index);
//获取服务地址
String purl productService.getHost() :
productService.getPort();
Ribbon实现 Ribbon 是 Spring Cloud 的一个组件 它可以让我们使用一个注解就能轻松的搞定负载均衡。
1.在 RestTemplate 的生成方法上添加LoadBalanced 注解
2.修改服务调用的方法 Product p restTemplate.getForObject( http://service-product/product/get/ pid, Product.class);User u restTemplate.getForObject( http://service-user/user/get/ uid, User.class);
Ribbon 支持的负载均衡策略 Ribbon 内置了多种负载均衡策略,内部负载均衡的顶级接口为 com.netflix.loadbalancer.IRule
3. 配置
ribbon:ConnectTimeout: 2000 # 请求连接的超时时间ReadTimeout: 5000 # 请求处理的超时时间
service-product: # 调用的提供者的名称ribbon:NFLoadBalancerRuleClassName:com.netflix.loadbalancer.RandomRule #负载均衡策略
Ribbon 的七种负载均衡策略 轮询策略 RoundRobinRule按照一定的顺序依次调用服务实例。比如一 共有 3 个服务第一次调用服务 1第二次调用服务 2第三次调用服务 3 依次类推。 NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RoundRobinRule 权重策略 WeightedResponseTimeRule根据每个服务提供者的响应时 间分配一个权重响应时间越长权重越小被选中的可能性也就越低。它的实现原理是刚开始使用轮询策略并开启一个计时器每一段时间收集一次所有服 务提供者的平均响应时间然后再给每个服务提供者附上一个权重权重越高被选中的概率也越大。 NFLoadBalancerRuleClassName: com.netflix.loadbalancer.WeightedResponseTimeRule 随机策略 RandomRule从服务提供者的列表中随机选择一个服务实例。 NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule 最小连接数策略 BestAvailableRule也叫最小并发数策略它是遍历服务提供者列表选取连接数最小的⼀个服务实例。如果有相同的最小连接数那么会调用轮询策略进行选取。 NFLoadBalancerRuleClassName: com.netflix.loadbalancer.BestAvailableRule 可用敏感性策略 AvailabilityFilteringRule先过滤掉非健康的服务实例 然后再选择连接数较小的服务实例。 NFLoadBalancerRuleClassName: com.netflix.loadbalancer.AvailabilityFilteringRule 区域敏感策略 ZoneAvoidanceRule根据服务所在区域(zone)的性能和服务的可用性来选择服务实例在没有区域的环境下该策略和轮询策略类似。 NFLoadBalancerRuleClassName: com.netflix.loadbalancer.ZoneAvoidanceRule
Feign
服务调用
1.添加依赖
dependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-openfeign/artifactId
/dependency
2.启动类添加Feign注解
EnableFeignClients//开启 Fegin 3.创建Service接口使用Feign实现服务调用
FeignClient(name service-product)
public interface ProductService {GetMapping(/product/get/{id})Product findProductById(PathVariable int id);
}
4.调用 //使用前要注入AutowiredProductService productService; //使用feignProduct p productService.findProductById(pid);//不使用feignUser u restTemplate.getForObject( http://service-user/user/get/ uid, User.class);