一、微服务
微服务的上述特性其实是在给分布式架构制定一个标准,进一步降低服务之间的耦合度,提供服务的独立性和灵活性。做到高内聚,低耦合。
因此,可以认为微服务是一种经过良好架构设计的分布式架构方案 。
二、SpringCloud
1、SpringCloud是目前国内使用最广泛的微服务框架。官网地址:https://spring.io/projects/spring-cloud。
2、SpringCloud集成了各种微服务功能组件,并基于SpringBoot实现了这些组件的自动装配,从而提供了良好的开箱即用体验。
1、常用的springcloud组件
- Eureka、Nacos:注册中心
- Zuul、Gateway:网关
- Ribbon:负载均衡
- Feign:服务调用
- Hystrix或Resilience4j:熔断器
SpringCloud底层是依赖于SpringBoot的,并且有版本的兼容关系,如下:
2、总结
-
单体架构:简单方便,高度耦合,扩展性差,适合小型项目。例如:学生管理系统
-
分布式架构:松耦合,扩展性好,但架构复杂,难度大。适合大型互联网项目,例如:京东、淘宝
-
微服务:一种良好的分布式架构方案
①优点:拆分粒度更小、服务更独立、耦合度更低
②缺点:架构非常复杂,运维、监控、部署难度提高
-
SpringCloud是微服务架构的一站式解决方案,集成了各种优秀微服务功能组件
三、微服务远程调用--RestTemplate
1、首先在启动类中注册RestTemplate的一个Bean对象
@Bean
public RestTemplate restTemplate() {
return new RestTemplate();
}
2、将此方法注入到需要远程调用的service处
四、Eureka注册中心
1、Eureka的结构和作用
常问问题:
注册中心的工作原理? 为什么引入注册中心之后,就可以使用服务名代警ip和端口进行访问了?
注册中心主要有三种角色:
服务提供者(RPC Server):在启动时,向 注册中心 注册自身服务,并向 注册中心 定期发送心跳汇报存活状态。
服务消费者(RPC Client):在启动时,向 注册中心 订阅服务,把 注册中心 返回的服务节点列表缓存在本地内存中,并与 RPC Sever 建立连接。
服务注册中心(Registry):用于保存 提供者 的注册信息,当 提供者 节点发生变更时,注册中心 会同步变更,消费者 感知后会刷新本地 内存中缓存的服务节点列表。
最后,消费者 从本地缓存的服务节点列表中,基于负载均衡算法选择一台 提供者 发起调用。
五、Ribbon负载均衡
SpringCloud底层其实是利用了一个名为Ribbon的组件,来实现负载均衡功能的。
拦截我们的RestTemplate请求http://userservice/user/1
RibbonLoadBalancerClient会从请求url中获取服务名称,也就是user-service
DynamicServerListLoadBalancer根据user-service到eureka拉取服务列表
eureka返回列表,localhost:8081、localhost:8082
IRule利用内置负载均衡规则,从列表中选择一个,例如localhost:8081
RibbonLoadBalancerClient修改请求地址,用localhost:8081替代userservice,得到http://localhost:8081/user/1,发起真实请求