微服务与 Spring Cloud

微服务是继 SOA 之后流行起来的一种系统架构模式。因它紧随 SOA 之后,所以有必要对他们先作个比较。

SOA vs 微服务

关于二者的比较表格,我在谷歌上搜索的 一篇文章 分析的挺好,现引用如下。

面向服务架构 微服务架构
出现于 1990’s 年代 出现于 2000’s 年代
最大化应用服务的重用性 关注解耦
系统变化需要修改整体 系统变化是创建新服务
DevOps 和持续发布开始变得流行但不是主流 重点关注 DevOps 和持续发布
聚焦于业务系统重用 “边界上下文”越发重要
使用 ESB 通信 使用简单消息系统通信
支持多种消息协议 使用轻量级协议诸如:HTTP, REST 等
对部署在其上的所有服务使用通用平台 通常使用云平台而非应用服务器
Docker 不太流行 容器与微服务工作的非常协调
SOA 服务共享数据存储 每个微服务可以拥有独立的存储服务
通用的治理和标准 松散治理,关注团队协作与自由选择

SOA vs MicroService

微服务

微服务这么流行,肯定有其优势所在。不过也不能不看到它的劣势噢。

优势

  • 每个模块都是独立的,所以你可以选择不同的开发语言以获得语言级别的好处
  • 每个模块都可以有自己的数据库,NoSQL 或者关系型
  • 开发人员构建和维护微服务所以他们对模块非常熟悉。跨功能的成员一些协作完成服务

劣势

  • 服务调用其它服务,所以对于大型项目来说,难以跟踪调用过程以及监控服务
  • 服务之间通过 RESTful API 调用所以性能可能没有整体的进程内通信的系统高
  • 难以调试,尤其是一个服务调用了一系列其它服务

SpringCloud

如何扬长避短,更好更方便地利用微服务呢。

SpringCloud 提供以下特性来强化微服务的优势、弥补劣势

  • 分布式 / 版本化的配置
  • 服务注册和发现
  • 路由
  • 服务到服务的调用
  • 负载均衡
  • 熔断(Circuit Breaker)
  • 全局锁
  • leader 选举及集群状态
  • 分布式消息

SpringCloud 主要项目

Spring Cloud Config

统一配置中心。

Spring Cloud Netflix

服务发现

Spring Cloud Bus

一个事件总线,利用分布式消息系统将服务和服务实例连到一起。可用于在集群内传播状态变化(如配置变化事件)

Spring Cloud for Cloud Foundry

集成你的应用到 Pivotal Cloud Foundry,提供并且让实现 SSO 和 OAuth2 来保护资源变得更加容易。

Spring Cloud Open Service Broker

提供一个用于构建实现了 Open Service Broker API 的服务的 Broker 的起始点

Open Service Broker API 连接开发者到一个全球的服务生态环境,该项目给开发者、ISVs、SaaS 厂商提供一个单一的、简单的和完美的方式去发布服务到原生云平台上(诸如 Cloud Foundry, OpenShift, Kubernetes)

Open Service Broker 项目

Open Service Broker API 定义

Spring Cloud Cluster

提供基于 Zookeeper、Redis、Hazelcast、Consul 的领头选举、通用状态机模式的抽象及实现。

Spring Cloud Consul

基于 Hashicorp Consul 的服务发现及配置管理。

Spring Cloud Security

提供对基于负载均衡的 OAuth2 rest client 和 authentication header 的支持,依赖了 Zuul proxy。

Spring Cloud Sleuth

应用于 Spring Cloud 的分布式追踪功能,与 Zipkin, HTrace and log-based (e.g. ELK) tracing 相兼容。

Spring Cloud Data Flow

一个 cloud-native 的服务编排,易用的 DSL、drag-and-drop GUI,REST-APIs 一起全面简化了基于服务编排的数据管道。

Spring Cloud Stream

一个轻量级的事件驱动微服务框架,便于快速构建连接到外部系统的应用。简单的声明模型可以使用 Apache Kafka 或 RabbitMQ 在 Spring Boot 应用间收发消息。

Spring Cloud Stream App Starters

一系列基于 Spring Boot 的 Spring 集成应用程序,提供与外部应用的集成。

Spring Cloud Task

一个短期的微服务框架,快速构建执行有限数量的数据处理的应用。简单的声明就可以增加功能性或非功能性特性到 Spring Boot 中。

Spring Cloud Task App Starters

一系列单机版的可执行应用程序,可以拥有按需用例:比如数据库迁移、机器学习、定时操作。这些应用可以运行于各种独立平台,比如:Cloud Foundry、Apache Yarn、 ApacheMesos、Kubernetes、Docker 甚至你的笔记本上。

Spring Cloud Zookeeper

基于 Apache Zookeeper 的服务发现及配置管理。

Spring Cloud Connectors

使得运行于各种平台上的 PaaS 应用能够方便地连接到后端服务,比如数据库、消息 Broker。(这个项目原先叫作 Spring Cloud)

Spring Cloud Starters

Spring Boot 风格的启动项目,简化服务消费方 Spring Cloud 的依赖管理。

Spring Cloud CLI

Spring Boot CLI 插件,用来快速使用 Groovy 语言创建 Spring Cloud 组件应用

Spring Cloud Contract

是一揽子有关帮助用户成功地实现“消费端驱动契约”方式解决方案

Spring Cloud Gateway

是一款基于智能的、可编程的路由的Project Reactor

Spring Cloud OpenFeign

为 Spring Boot 应用提供通过自动化配置和绑定到 Spring Environment 和其它编程模型风格的集成。