微服务技术栈(图)
微服务架构的演变
单体架构
概念: 将业务的所有功能集中在一个项目中开发,达成一个包部署
优点:
- 架构简单
- 部署成本低
缺点:
- 耦合度高
分布式架构
概念: 根据业务功能对系统进行拆分,每个业务模块作为独立项目开发,称为一个服务。
优点:
- 降低耦合度
- 有利于服务升级拓展
缺点
- 架构复杂,难度大。适合大型互联网项目
需要考虑的问题
- 服务拆分粒度
- 服务集群地址如何维护
- 服务之间如何远程调用
- 服务健康状态如何感知
微服务架构
概念: 微服务是一种经过良好架构设计的分布式架构方案。
特征:
- 单一职责:微服务拆分粒度更小,每个服务都对应唯一的业务能力,做到单一职责,避免重复业务开发
- 面向服务:微服务对外暴露业务接口
- 自治:团队独立、技术独立、数据独立。部署独立。
- 隔离性强:服务调用做好隔离、容错、降级、避免出现级联问题
优点
- 拆分粒度更小、服务更独立、耦合度更低
- 架构非常复杂,运维、监控、部署难度提高
微服务问题解决
服务拆分注意事项
- 不同的微服务,不要重复开发相同业务
- 微服务数据独立,不要访问其他微服务的数据库
- 微服务可以将自己的业务接口暴露,供其他微服务调用
远程调用方式:
实现: 在order-service的OrderApplication中注册RestTemplate
@Bean
public RestTemplate restTemplate(){
return new RestTemplate();
}
String url = "http://userservice/user/"+order.getUserId();
User user = restTemplate.getForObject(url, User.class);
提供者和消费者
- 服务提供者:一次业务中,被其它微服务调用的服务。(提供接口给其它微服务)
- 服务消费者:一次业务中,调用其它微服务的服务。(调用其它微服务提供的接口)