springCloud架构简述及Eureka、Nacos注册中心应用入门
作者:互联网
一、微服务架构(持续集成)
二、微服务知识模块
三、微服务特征
1.单一职责:拆分粒度小,对应业务能力唯一,避免重复开发
2.面向服务:微服务对外暴露业务接口
3.自治:团队独立、技术独立、数据独立、部署独立
4.隔离性强:服务调用做好隔离、容错、降级,比卖你出现级联问题
缺点:架构复杂,运维监控,部署难度大
四、SpringCloud与SpringBoot的版本兼容关系
五、服务远程调用
1、向容器中注入RestTemplate对象
@Bean public RestTemplate restTemplate(){ return new RestTemplate(); }
2、调用 restTmplate的接口发送http请求
@Autowired private RestTemplate restTemplate; @GetMapping("{orderId}") public Order queryOrderByUserId(@PathVariable("orderId") Long orderId) { // 根据id查询订单并返回 Order order = orderService.queryOrderById(orderId); // 发送http请求,需要请求的准确路径和返回值的类型 User user = restTemplate.getForObject( 、// 方法视实际情况而定 "http://localhost:8081/user/" + order.getUserId(), User.class); order.setUser(user); return order; }
3、服务提供者
被调用的微服务(提供接口)
4、服务消费者
调用其他微服务(调用接口)
5、消费与调用是相对的
六、eureka注册中心简介
微服务分类:
-
EurekaServer:服务端,注册中心
-
记录服务信息
-
心跳监控
-
-
EurekaClient:客户端
-
Provider:服务提供者
-
创建时将自己的信息注册到EurekaServer
-
每隔30秒向EurekaServer发送心跳信号
-
-
Consumer:消费者
-
根据服务名称从EurekaServer中拉取服务列表
-
基于服务列表做负载均衡,远程调用其中一个
-
-
七、Eureka实现流程
1、搭建EurekaServer
-
依赖
<!--eureka服务端--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency>
-
启动类加注解@EnableEurekaServer
-
添加application.yml文件
server: port: 10086 spring: application: name: eureka-server eureka: client: service-url: defaultZone: http://127.0.0.1:10086/eureka
2、服务注册
-
依赖
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency>
-
添加application.yml配置
spring: application: name: userservice #微服务名称 eureka: client: service-url: defaultZone: http://127.0.0.1:10086/eureka/ # 远程调用地址
3、服务发现
-
给RestTemplate添加@LoadBalance注解
-
用服务者名称远程调用服务
@GetMapping("{orderId}") public Order queryOrderByUserId(@PathVariable("orderId") Long orderId) { // 根据id查询订单并返回 Order order = orderService.queryOrderById(orderId); User user = restTemplate.getForObject( "http://userserver/user/" + order.getUserId(), User.class); order.setUser(user); return order; }
七、负载均衡流程
八、负载均衡策略
1、继承关系
2、策略概览
内置负载均衡规则类 | 规则描述 |
---|---|
RoundRobinRule | 简单轮询服务列表来选择服务器。 |
AvailabilityFilteringRule | 对以下两种服务器进行忽略: (1)在默认情况下,这台服务器如果3次连接失败,这台服务器就会被设置为“短路”状态。短路状态将持续30秒,如果再次连接失败,短路的持续时间就会几何级地增加。 (2)并发数过高的服务器。如果一个服务器的并发连接数过高,配置了AvailabilityFilteringRule规则的客户端也会将其忽略。并发连接数的上限,可以由客户端的<clientName>.<clientConfigNameSpace>.ActiveConnectionsLimit属性进行配置。 |
WeightedResponseTimeRule | 为每一个服务器赋予一个权重值。服务器响应时间越长,这个服务器的权重就越小。这个规则会随机选择服务器,这个权重值会影响服务器的选择。 |
ZoneAvoidanceRule | 以区域可用的服务器为基础进行服务器的选择。使用Zone对服务器进行分类,这个Zone可以理解为一个机房、一个机架等。而后再对Zone内的多个服务做轮询。 |
BestAvailableRule | 忽略那些短路的服务器,并选择并发数较低的服务器。 |
RandomRule | 随机选择一个可用的服务器。 |
RetryRule | 重试机制的选择逻辑 |
3、策略配置
-
通过定义IRule实现负载均衡规则(该方式位全局配置,即通过注入bean使该微服务调用任何微服务都适用此规则)
@Bean public IRule randomRule(){ return new RandomRule(); // 可以返回任意IRule的实现类对象,来指定相应的均衡策略 }
-
配置文件方式:(application.yml)仅针对某一个服务做均衡策略
userservice: # 给某个微服务配置负载均衡规则,这里是userservice服务 ribbon: NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule # 负载均衡规则
4、加载策略
-
Ribbon默认采用懒加载,在第一次访问时创建LoadBalanceClient
-
通过application可以开启饥饿加载,减少第一次访问时间
ribbon: eager-load: enabled: true # 开启饥饿加载 clients: userservice # 指定策略对userservice生效(多个服务以数组形式添加)
九、Nacos注册中心简介
Nacos是阿里巴巴的产品,现在是SpringCloud中的一个组件。相比Eureka功能更加丰富,在国内受欢迎程度较高。(默认端口:8848)
十、Nacos注册
-
在cloud-demo父工程中添加spring-cloud-alilbaba的管理依赖:
<dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-alibaba-dependencies</artifactId> <version>2.2.6.RELEASE</version> <type>pom</type> <scope>import</scope> </dependency>
-
微服务端引入nacos-discovery依赖:
<dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency>
-
修改application.yml中的nacos地址
spring: cloud: nacos: server-addr: localhost:8848 userservice: # 给某个微服务配置负载均衡规则,这里是userservice服务 ribbon: NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule # 负载均衡规则,同集群优先
十一、Nacos集群配置
spring: cloud: nacos: server-addr: localhost:8848 discovery: cluster-name: HZ # 集群名称 # -Dserver.port=8083 -Dspring.cloud.nacos.discovery.cluster-name=SH 启动时指定集群
十二、Nacos权重负载均衡
访问概率与权重成正比,可以用作服务升级(权重为0,则不访问)
十三、nameSpace名称空间
-
nacos中可以有多个namespace
-
namespace下可以有group、service等
-
不同namespace之间相互隔离,例如不同namespace的服务互相不可见
spring: cloud: nacos: server-addr: localhost:8848 discovery: cluster-name: HZ namespace: 492a7d5d-237b-46a1-a99a-fa8e98e4b0f9 # 命名空间,填ID
十四、Nacos注册中心原理
-
设置非临时实例
spring: cloud: nacos: discovery: ephemeral: false # 设置为非临时实例
-
Nacos与eureka的共同点
-
都支持服务注册和服务拉取
-
都支持服务提供者心跳方式做健康检测
-
-
Nacos与Eureka的区别
-
Nacos支持服务端主动检测提供者状态:临时实例采用心跳模式,非临时实例采用主动检测模式
-
临时实例心跳不正常会被剔除,非临时实例则不会被剔除
-
Nacos支持服务列表变更的消息推送模式,服务列表更新更及时
-
Nacos集群默认采用AP方式,当集群中存在非临时实例时,采用CP模式;Eureka采用AP方式
-
标签:服务,springCloud,Nacos,Eureka,nacos,spring,服务器,cloud 来源: https://www.cnblogs.com/stare-of-the-dog/p/16629967.html