项目
博客
文档
归档
资源链接
关于我
项目
博客
文档
归档
资源链接
关于我
三.AlibabaCloud核⼼组件服务治理Nacos
2020-11-12
·
softbabet博主
·
原创
·
微服务
·
本文共 317个字,预计阅读需要 2分钟。
### 什么是微服务的注册中心 什么是注册中心(服务治理) - 服务注册:服务提供者provider,启动的时候向注册中心上报自己的网络信息 - 服务发现:服务消费者consumer,启动的时候向注册中心上报自己的网络信息,拉取provider的相关网络信息 - 核心: `服务管理`,是有个`服务注册表`,`心跳机制动态维护`,服务实例在启动时注册到服务注册表,并在`关闭时注销`。 为什么要用 - 微服务应用和机器越来越多,调用方需要知道接口的网络地址,如果靠配置文件的方式去控制网络地址,对于动态新增机器,维护带来很大问题 主流的注册中心:`zookeeper`、`Eureka`、`consul`、etcd、`Nacos` - AlibabaCloud搭配最好的是Nacos,且服务的注册发现之外,`还支持动态配置服务` ![](http://114.67.107.180/ynblog/upload/1605190771630.jpg) ### AlibabaCloud注册中心Nacos实战 安装参考【[Nacos官网](https://nacos.io/zh-cn/docs/quick-start.html)】 Linux/Mac安装Nacos - 解压安装包 - 进入bin目录 - 启动 sh startup.sh -m standalone - 访问 localhost:8848/nacos - 默认账号密码 nacos/nacos ![](http://114.67.107.180/ynblog/upload/1605190783891.png) ### 基于Nacos实现订单-视频服务之间的调用 添加依赖 ```
com.alibaba.cloud
spring-cloud-starter-alibaba-nacos-discovery
``` 配置Nacos地址 ``` spring: application: name: yuan-video-service cloud: nacos: discovery: server-addr: 192.168.127.12:8848 ``` 启动类增加注解 ``` @EnableDiscoveryClient ``` 视频服务,订单服务,用户服务都集成Nacos `服务之间的调用` ``` @Autowired private DiscoveryClient discoveryClient; @Autowired private RestTemplate restTemplate; @RequestMapping("save") public VideoOrder save(int videoId){ VideoOrder videoOrder = new VideoOrder(); videoOrder.setVideoId(videoId); List
list = discoveryClient.getInstances("yuan-video-service"); ServiceInstance serviceInstance = list.get(0); Video video = restTemplate.getForObject("http://"+serviceInstance.getHost()+":"+serviceInstance.getPort()+ "/api/v1/video/find_by_id?videoId="+videoId,Video.class); videoOrder.setVideoTitle(video.getTitle()); videoOrder.setVideoId(video.getId()); return videoOrder; } ``` ### 大话常见的负载均衡策略和解决方案 什么是负载均衡(Load Balance) > 分布式系统中一个非常重要的概念,当访问的服务具有多个实例时,需要根据某种“均衡”的策略决定请求发往哪个节点,这就是所谓的负载均衡,原理是将数据流量分摊到多个服务器执行,减轻每台服务器的压力,从而提高了数据的吞吐量 软硬件角度负载均衡的种类 - 通过硬件来进行解决,常见的硬件有NetScaler、F5、Radware和Array等商用的负载均衡器,但比较昂贵的 - 通过软件来进行解决,常见的软件有LVS、Nginx等,它们是基于Linux系统并且开源的负载均衡策略 从端的角度负载均衡有两种 - 服务端负载均衡 - 客户端负载均衡 常见的负载均衡策略(看组件的支持情况) - `节点轮询`:每个请求按顺序分配到不同的后端服务器 - `weight 权重配置`:weight和访问比率成正比,数字越大,分配得到的流量越高 - `固定分发`:根据请求按访问ip的hash结果分配,这样每个用户就可以固定访问一个后端服务器 - `随机选择`、`最短响应时间`等等 ### AlibabaCloud集成Ribbon实现负载均衡 什么是Ribbon Ribbon是一个客户端负载均衡工具,通过Spring Cloud封装,可以轻松和AlibabaCloud整合 订单服务增加`@LoadBalanced` 注解 ``` @Bean @LoadBalanced public RestTemplate restTemplate() { return new RestTemplate(); } ``` 调用实战 ``` Video video = restTemplate.getForObject("http://xdclass-video-service/api/v1/video/find_by_id?videoId="+videoId, Video.class); 注意:方便大家看到负载均衡效果,在video类增加这个字段,记录当前机器ip+端口 ```