SpringCloud 微服务概念
微服务
微服务是系统架构上的一种设计风格,主旨是将一个独立的系统拆分成多个小型服务系统,这些小型服务系统都在各自独立的进程运行,服务之间采用基于HTTP的RESTful API进行通信写作,每个服务都维护者自身的数据存储、业务开发、自动化测试案例以及独立的部署机制
单体系统与微服务系统比较
单体系统修改一个小功能为了部署上线会影响到其他功能的运行,使得系统难以维护和控制
微服务系统之间的功能模块被拆分成多个不同的服务,这些服务都能够独立部署和扩展,系统维护成本小且可控
微服务挑战
- 运维:运维人员维护的进程数量大量增加,进程编排和组织不容易
- 接口一致性:服务间的通信依赖使得接口需要更加完善的管理以保持其一致性
- 分布式:微服务架构中的服务处于分布式环境中,需要考虑许多复杂因素如网络延迟、分布式事务、异步消息等
微服务特性
- 服务组件化:服务类似组件可以独立开发、部署
- 业务组织团队:每个微服务的开发都是针对特定业务的全栈式实现,从数据的持久化保存到用户接口定义均由团队完成
- 智能通信:单体应用组件间采用函数调用进行交互写作,微服务架构中服务不仅仅采用RPC方法调用,而需要更粗粒度的通信协议,如
- HTTP的RESTful API或者轻量级的消息发送协议
- 在轻量级消息总线上传递消息,类似RabbitMQ等一些提供可靠异步交换的中间件
- 去中心化治理:微服务架构实施采用轻量级的契约定义接口使得对于服务本身的具体平台不再敏感,各个服务组件可以根据其不同业务特点选择不同的技术平台
- 去中心化管理数据:
- 通过将数据库拆分到新的同平台其他数据库中实现去中心化管理数据,让每个服务来管理其自有的数据库
- 也可以将一些特殊结构或者业务特性的数据存储到技术数据库实例中,如日志存储到MongoDB、登录信息存储到Redis等
- 带来了数据一致性、分布式事务的挑战,引入无事务调用和补偿机制使得错误数据可以到达最终的一致性
- 自动化:
- 自动化测试:部署前自动测试
- 自动化部署:减少重复操作和多环境的配置管理
- 容错设计:微服务架构中部分服务存在故障不会引起故障蔓延,快速检测故障源和自动恢复服务是被考虑的
SpringCloud微服务架构
SpringCloud是一个解决微服务架构实施的综合性解决框架,它整合了许多成熟框架作为实施的基础部件,又在该基础体系上创建了一些非常优秀的边缘组件
SpringCloud生态的各类组件:
- 涵盖了服务治理组件Eureka
- 客户端负载均衡组件Ribbon
- 服务容错保护组件Hystrix
- 声明式服务调用组件Feign
- API网关治理组件Zuul
- 分布式配置中心组件Config
- 消息总线组织间Bus
- 消息驱动组件Stream
- 分布式服务跟踪组件Sleuth
- ….等等