1、Spring Cloud 涉及内容
- Spring Boot 框架
- Spring Cloud 组件
- 服务治理(Eureka)—— 服务注册与发现
- 客户端负载均衡(Ribbon)
- 微服务容错与降级处理(Hystrix)—— 微服务远程调用失败时的处理
- 微服务API统一网关(Zuul)—— 路由映射和请求过滤功能
- 分布式配置中心(Config)—— 包括配置动态刷新
- 微服务调用链追踪(Sleuth)—— 调用链可视化分析、日志集中管理
- 微服务消息驱动开发(Stream)
- 微服务安全(OAuth及JWT)
- Docker 容器 —— Docker及Jenkins发布
2、集群与分布式
- 集群:是一种物理形态,同一个业务部署在多个服务器上,比如Tomcat集群、redis集群,每个节点执行的功能是一样的。可用于分担压力,提高可用性,集群中一个节点不可用不影响整个业务。
- 分布式:是一种工作方式,一个业务分拆多个子业务,部署在不同的服务器上。比如Map/Reduce集群,多个服务器共同完成一个大的计算任务。
好的设计应该是分布式和集群的结合,先将业务拆分成多个子业务,然后针对每个子业务进行集群部署,这样每个子业务如果出了问题,整个系统完全不会受影响。
3、微服务架构
定义
将整个系统分解成一系列服务的架构模式。每个服务可以是业务功能或非业务功能。不同服务之间通过某种协议进行交互。
优势
服务之间有明确边界,易于开发和管控,也易于单独部署和扩展。
缺点
- 可用性降低:远程服务可能不稳定,一个服务不可用容易引起雪崩效应
- 一致性问题:分布式事务中难以保持数据一致性
- 全能对象阻止业务拆分:比如电商中的订单对象
- 学习难度
- 整体部署难度加大
微服务设计
- 微服务拆分
先专注于各个服务之间的交互,拆分成粗粒度的服务,然后随着系统的升级逐渐细化。 - 单一职责原则(SRP)
每个微服务只有一个业务职责。 - 共同封闭原则(CCP)
包中的所有的类对于同一种性质的变化应该是共同封闭的。一个变化若对一个封闭的包产生影响,则将对该包中的所有类产生影响,而对其他包则不造成任何影响。 - 微服务自治原则
微服务自治范围包括代码管理,微服务的运行和维护管理,以及数据的管理。 - 微服务交互原则
接口清晰,容易让其他开发者掌握。推荐使用:REST协议、URI表达、JSON数据格式、HTTP标准状态码。
微服务架构迁移
将单体架构迁移到微服务架构,可以先围绕着传统应用开发出新的微服务应用,并逐渐替代传统应用中的业务功能,直到微服务承担全部应用功能。
不应使用微服务架构的情形
- 构建分布式架构非常吃力时
- 服务器蔓延时
- 采用小型应用、快速产品原型时
- 对数据事务的一致性有一定要求时
4、Spring Boot
Spring 提供了基础的依赖注入和切面功能,易于整合众多框架(如Mybatis、Jedis),并提供了易用的事务支持与Web开发支持。
但是 Spring 配置十分繁琐,且有大量重复工作,而 Spring Boot 提供了自动配置机制,可以快速搭建项目。
5、Spring Cloud
微服务的概念正式出现于2014年,而 Spring Cloud 于次年推出。