一、微服务技术栈
二、单体架构和分布式架构的区别
1、单体架构: 将业务的所有功能集中在一个项目中开发,打成一个包进行部署
- 优点:架构简单,部署成本低
- 缺点:耦合度高
2、分布式架构: 根据业务功能对系统进行拆分,每个业务模块作为独立项目开发,称为一个服务
三、什么是微服务
微服务是一种经过良好架构设计的分布式架构方案,微服务架构特征:
- 单一职责:微服务拆分粒度更小,每一个服务都对应唯一的业务能力,做到单一职责
- 面向服务:微服务对外暴露业务接口
- 自治:团队独立、技术独立、数据独立、部署独立
- 隔离性强:服务调用做好隔离、容错、降级,避免出现级联问题
四、三种架构的区别
- 单体架构特点:简单方便,高度耦合,扩展性差,适合小型项目。例如:学生管理系统
- 分布式架构特点:松耦合,扩展性好,但架构复杂,难度大。适合大型互联网项目,例如:京东、淘宝
- 微服务:是一种良好的分布式架构方案,优点是拆分粒度更小、服务更独立、耦合度更低;缺点是架构非常复杂,运维、监控、部署难度提高
五、什么是SpringCloud
1、SpringCloud是目前国内使用最广泛的微服务架构
2、SpringCloud集成了各种微服务功能组件,并基于SpringBoot实现了这些组件的自动配置,从而提供了良好的开箱即用体验,包括如下组件:
- 服务注册发现:Eureka、Nacos、Consul
- 服务远程调用:OpenFeign、Dubbo
- 服务链路监控:ZIPkin、Sleuth
- 统一配置管理:SpringCloudConfig、Nacos
- 统一网关路由:SpringCloudGateway、Zuul
- 流控、降级、保护、断路器:Hystix、Sentinel
六、SpringCloud与SpringBoot的版本兼容关系
SpringCloud版本 | SpringBoot版本 |
---|---|
2021.x | 2.6.x |
2020.x | 2.4.x |
Hoxton | 2.2.x,2.3x |
Greenwich | 2.1.x |
Finchley | 2.0.x |
Edgware | 1.5.x |
Dalston | 1.5.x |
七、服务拆分注意事项
- 不同微服务,不要重复开发相同业务
- 微服务数据独立,不要访问其他微服务的数据库
- 微服务可以将自己的业务暴露为接口,供其他微服务调用
八、服务远程调用的过程
1、注册RestTemplate
- 在OrderApplication中注册RestTemplate
@Bean
public RestTemplate restTemplate() {return new RestTemplate();
}
2、服务远程调用RestTemplate
- 修改OrderService的queryOrderById方法
@Autowired
private RestTemplate restTemplate;public Order queryOrderById(Long orderId) {// 1.查询订单Order order = orderMapper.findById(orderId);// 2.利用RestTemplate发起http请求,查询用户// 2.1.url路径String url = "http://localhost:8081/user/" + order.getUserId();// 2.2.发送http请求,实现远程调用User user = restTemplate.getForObject(url, User.class);// 3.封装user到Orderorder.setUser(user);// 4.返回return order;
}
3、微服务调用方式
- 基于RestTemplate发起的http请求实现远程调用
- http请求做远程调用是与语言无关的调用,只要知道对方的ip、端口、接口路径、请求参数即可
参考
- 黑马《SpringCloud教程》