基础知识
Microservices
什么是微服务
微服务是系统架构上的一种设计风格,它将一个独立的系统按照系统业务功能拆分成多个独立的小服务,小服务间各自在独立进程中运行,通过基于HTTP 的Restful API进行通信协作
特征
- 粒度小,精于一个或一组特定服务
- 都有单独的进程
- 轻量级的通信机制,通常使用HTTP/Rest 还有RPC协议
- 松耦合,可独立部署
设计思想
- 服务组件化
对服务进行分解,每个服务都可以独立开发,部署,运行,然后通过通讯相互依赖,可以有效对一个服务进行修改而需要重新部署整个系统
- 按服务划分团队
- 智能端点与哑管道
使用简单的RPC方式调用会导致微服务间产生繁琐通讯,需要使用更粗粒度的通讯协议:基于HTTP的Restful API,消息中间件
- 去中心化治理
服务架构中的各个服务根据自身不同的业务需求选择不同的技术平台,应尽量避免统一的、集中的服务管理机制,对具体的一个服务而言,应根据业务上下文,选择合适的语言、工具对其进行构
- 去中心化管理数据
让每个服务管理自己的数据库
优点
- 开发层面:
- 每个服务独立,便于测试,部署,升级
- 系统不会被限制于某个技术栈
- 开发针对性,可以针对每个服务组件开发团队
- 性能层面:
- 提高容错性,一个服务的错误并不会马上让整个系统瘫痪
- 按需定制的DFX,资源利用率,每个服务可以各自进行x扩展和z扩展,而且,每个服务可以根据自己的需要部署到合适的硬件服务器上;
问题
- 系统复杂性,需要开发人员处理分布式系统复杂性
- API网关
- 通信问题:服务拆开后业务依赖由代码依赖变为了通讯依赖,需要更加完善的依赖通讯机制
同步通信:HTTP、RPC;异步通信:消息队列(kafaka,robbitMQ)
- 服务注册和发现问题:需要服务治理(Zookeeper,Eureka)
- 分布式事务问题:
- 一致性问题
- 服务管理,编排
- 重试,熔断,降级,限流等
微服务三维模型(Chris Richardson)
- X轴,服务实例水平扩展,保证可靠性与性能;
- Y轴,功能的扩展,服务单一职责,功能独立;
- Z轴,数据分区,数据独立,可靠性保证;