微服务的可观测
- 健康检查API:可以返回服务健康状态的API。
- 日志聚合:把服务产生的日志写入一个集中式的日志服务器,这个服务器可以提供日志搜索,可以根据日志情况出发报警。
- 分布式追踪:为每个外部请求分配一个唯一的ID,用于在各个服务之间追踪外部请求。
- 异常追踪:把程序异常发送到异常跟踪服务,这个服务会排除重复异常,给开发者发送告警并且跟踪每一个异常的解决。
- 应用指标:供维护使用的指标,例如计数器、访问量等。
- 审计日志:记录用户的行为。
典型的分布式事务模式,依据一致性由强到弱排序
- XA,eXtended Architecture, 数据库层面的分布式事务规范,目前主流数据库基本都支持 XA 事务,已知方案中的最强的一致性方案。
- TCC,Try、Confirm、Cancel,应用(服务)层参与的 2PC 方案。
- 事务消息,利用消息队列异步确保事务的一致性。
- Saga,将长事务拆分为多个本地短事务协调执行,若某个短事务失败,则反顺序调用补偿(undo)操作。
- 最大努力通知,发起通知方通过一定的机制最大努力将事务结果通知到接收方,来保证一致性。
微服务易出现的问题和解决办法
- 网络延迟:访客发起一个请求导致多个服务之间大量往返调用,解决方案是把多个相关的服务组合一起变成新的服务。
- 同步进程间通信导致可用性降低:如果一个被调用的服务处在不可用状态,会降低调用方服务的可用性,解决方案是采用异步消息消除这种服务之间紧耦合的问题来提供服务可以性。
- 在服务之间维持数据一致性:多服务之间调用保持数据最终一致性,解决方案参考分布式事务。
- 获取一致的数据视图:即使每个服务的数据库是一致的,也无法获得全局一致的数据视图,解决方案是使用单个服务提供数据视图。
微服务分解的两种模式
- 基于业务能力分解:参考业务架构。
- 基于领域驱动设计分解:通过子域进行分解。