一、什么是微服务?
1. 将`单体系统`拆分成多个可以独立部署的`微服务系统`
2. 微服务模块划分
- 1. 服务注册与发现
- 2. RPC 远程调用
- 3. 路由与负载均衡
- 4. 服务监控
- 5. 服务治理
3. 微服务保障
- 1. 分布式 ID
- 2. 新表优化
- 3. 数据迁移与数据同步
- 4. SQL 调用方案改造
- 5. 切库方案
- 6. 数据一致性
二、为什么需要微服务?
1. 早期的单体架构带来的问题
2. 微服务与单体架构区别
3. 微服务与SOA区别
三、微服务本质?
1. 拆分应用
2. 松耦合
四、什么样的项目适合微服务?
1. 小:微服务体积小,2 pizza 团队。
2. 独:能够独立的部署和运行。
3. 轻:使用轻量级的通信机制和架构。
4. 松:为服务之间是松耦合的。
五、微服务折分与设计
1. 拆分的大原则是当一块业务不依赖或极少依赖其它服务,有独立的业务语义,为超过2个的其他服务或客户端提供数据,那么它就应该被拆分成一个独立的服务模块。
2. 微服务设计原则
- 1. 单一职责原则
- 2. 服务自治原则
- 3. 轻量级通信原则
- 4. 接口明确原则
六、微服务优势与缺点
1. 特性
2. 优点
- 1. 易于开发和维护
- 2. 启动较快
- 3. 局部修改容易部署
- 4. 技术栈不受限
- 5. 按需伸缩
3. 缺点
- 1. 运维要求较高
- 2. 分布式的复杂性
- 3. 接口调整成本高
- 4. 重复劳动
七、微服务开发框架
1. Spring Cloud:http://projects.spring.io/spring-cloud(现在非常流行的微服务架构)
2. Dubbo:http://dubbo.io
3. Dropwizard:http://www.dropwizard.io (关注单个微服务的开发)
4. Consul、etcd&etc.(微服务的模块)
微服务实践先知
一、客户端如何访问这些服务?(API Gateway)
1. 提供前台统一服务入口
2. 聚合后台的服务,节省流量,提升性能
3. 提供安全,过滤,流控等API管理功能
二、服务之间如何通信?(服务调用)
1. 服务的发布与引用
- 1. RESTful API/声明式 Restful API:这种常使用 HTTP 或者 HTTPS 协议调用服务,相对来说,性能稍差。
- 2. XML:使用私有 RPC 协议的都会选择 XML 配置的方式来描述接口,比较高效,例如 Dubbo、Motan 等。
- 3. IDL:是接口描述语言,常用于跨语言之间的调用,最常用的 IDL 包括 Thrift 协议以及 gRpc 协议。
2. REST(JAX-RS,Spring Boot)
3. RPC(Thrift、Dubbo)
4. 异步消息调用(Kafka, Notify)
三、这么多服务怎么查找?(服务发现)
1. DNS存在的问题
- 1. 维护麻烦,更新延迟
- 2. 无法在客户端做负载均衡
- 3. 不能做到端口级别的服务发现
2. 使用注册中心寻址并调用的过程
- 1. 服务启动时,向注册中心注册自身,并定期发送心跳汇报存活状态。
- 2. 客户端调用服务时,向注册中心订阅服务,并将节点列表缓存至本地,再与服务端建立连接(当然这儿可以 lazy load)。发起调用时,在本地缓存节点列表中,基于负载均衡算法选取一台服务端发起调用。
- 3. 当服务端节点发生变更,注册中心能感知到后通知到客户端。
3. 注册中心需要考虑的问题
- 1. 自身一致性与可用性
- 1. CAP理论
- 2. 注册方式
- 3. 存储结构
- 4. 服务健康监测
- 5. 状态变更通知
4. 服务的远程通信
四、服务挂了怎么办?
1. 重试机制
2. 限流
3. 熔断机制
4. 负载均衡
5. 降级(本地缓存)
五、微服务需要考虑的问题
1. API Gateway
2. 服务间调用
3. 服务发现
4. 服务容错
5. 服务部署
6. 数据调用
微服务重要部件
一、服务注册中心
1. 服务注册中心必须要有高可用性和实时更新功能
2. Netflix Eureka
3. etcd:高可用,分布式,强一致性的,key-value,Kubernetes和Cloud Foundry都是使用了etcd。
4. consul:一个用于discovering和configuring的工具。它提供了允许客户端注册和发现服务的API。Consul可以进行服务健康检查,以确定服务的可用性。
5. zookeeper:在分布式应用中被广泛使用,高性能的协调服务。 Apache Zookeeper 最初为Hadoop的一个子项目,但现在是一个顶级项目。
二、负载均衡策略
1. 随机
2. 轮询
3. 加权轮询
4. IP Hash
5. 最少连接数
三、容错策略
1. 快速失败
2. 失效切换
3. 失败安全
4. 失败自动恢复
5. forking Cluster
6. 广播调用
7. 容错框架Ribbon
四、熔断
1. 关闭状态工作原理
2. 开启状态工作原理
3. 半开状态工作原理
4. 熔断框架Hystrix
五、限流和降级
1. 设置服务流量请求阈值
- 1. QPS,即每秒请求数
- 2. 并发线程数
2. 可人工后台对单个服务进行限流
3. 限流算法,令牌桶算法`guava rateLimiter`
4. 降级的方法
六、服务等级协议SLA
七、API网关
1. 统一接入
2. 安全防护
3. 协议适配
4. 流量管控
5. 长短链接支持
6. 容错能力
八、多级缓存
九、隔离
1. 两种隔离方式:
- 1. 信号量隔离
- 2. 线程池隔离
2. 隔离框架Hystrix
十、超时和重试
1. 超时设置原则
- 1. 我们可以取该应用一段时间内的 P999 的值,或者取 p95 的值*2,具体情况需要自行定夺
2. 超时对于同步和异步的考虑
十一、网关监控和统计
参考资料
- [概念篇:一篇文章让你彻底搞明白什么是微服务(值得收藏)](https://www.toutiao.com/a6748982106036126212/)
- [一文让你深入理解微服务治理,技术干货|收藏](https://www.toutiao.com/a6796154053869961732/)
- [我终于搞懂了微服务,太不容易了...](https://www.toutiao.com/a6836274844846260743/)
本文暂时没有评论,来添加一个吧(●'◡'●)