1、微服务的基本概念、拆分和设计原则
1、什么是微服务
- 一种架构分格
- 开发单个应用作为一系列小型服务的套件。其中每个服务都运行在自己的进程中,并且通过轻量级的机制实现彼此间的通信,这通常是HTTP资源API
- 这些服务是围绕着业务功能构建的,并且可以通过完全自动化的部署机制进行独立部署。
这些服务的集中式管理做到了最小化(例如docker相关技术),每一种服务都可以通过不同的编程语言进行编写,并且可以使用不同的数据存储技术
什么是服务化
把传统的单机应用中的本地方法调用,改造成RPC、HTTP产生的远程方法调用
- 把模块从单体应用中拆分出来吗,独立成一个服务部署
用户模块就可以独立开发、测试、上线和运维,可以交由专门的团队来做,与主模块不耦合
2、微服务的特点
组件以服务的形式来提供。
- 产品不是项目,单体项目容易做外包,微服务不容易做外包。
- 轻量级通信,独立进程。
- 分散治理、去中心化治理。每个人都要为自己的模块去负责
- 容错性设计
-
3、微服务的优缺点
优点
服务简单、便于学习和上手,相对易于维护
- 独立部署、灵活扩展
-
缺点
运维成本过高
- 接口可能不匹配
- 代理可能重复
-
4、微服务的两大门派
Spring Cloud:众多子项目。
Dubbo:高性能、轻量级的开源JavaRPC框架,它提供了三大核心能力:面向接口的远程方法调用,只能容错和负载均衡,以及服务自动注册和发现。dubbo提供的能力只是Spring Cloud的一个子集 | 核心组件 | Dubbo | SpringCloud | | —- | —- | —- | | 服务注册中心 | Zookeeper | Spring Cloud Netflix Eureka | | 服务调用方式 | RPC | REST API | | 服务网关 | 无 | Spring Cloud Netflix Zuul | | 断路器 | 不完善 | Spring Cloud Netflix Hystrix | | 分布式配置 | 无 | SPringle Cloud Config | | 服务跟踪 | 无 | Spring Cloud Sleuth | | 消息总线 | 无 | Spring Cloud Bus | | 数据流 | 无 | Spring Cloud Stream | | 批量任务 | 无 | Spring Cloud Task |
RPC vs REST:RPC服务提供与调用方接口依赖方式太强。RPC不是一种通用的通信协议
5、微服务的拆分
什么时候进行服务化拆分
- 第一阶段的主要目标是快速开发和验证想法
- 进一步增加更多的新特性来吸引更多的目标用户
- 同时进行开发的人员超过10人,这个时候就应该考虑服务化的拆分了
- 不适合拆分的情况
- 小团队,技术基础较薄弱
- 流量不高,压力小,业务变化也不大
- 对延迟很敏感的低延迟高并发系统
服务化拆分的两种姿势
x轴-水平复制
- y轴-功能解耦
-
自动按需扩展
根据CPU的负载程度、特定时间(比如周末)、消息中间件的队列长度、业务具体规则、预测是否决定扩展
- 自动分配一个新的服务实例
-
7、微服务的重要模块
服务描述
- 注册中心
- 服务框架
- 负载均衡
- 熔断和降低
- 网关
2、微服务和Spring Cloud的关系
3、微服务常见的组件和功能
4、课程查询案例基本介绍、系统架构设计和接口设计
5、 分模块构建Spring Cloud项目
6、完成课程列表、课程价格服务开发
7、课程服务整合,服务注册与发现
8、整合Feign实现服务间调用
9、网关的集成与开发,并接入服务
10、引入服务的熔断与降级,并进行实操演练