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 于次年推出。

软考 微服务 论文_服务器