Spring Cloud 概述

微服务发展

单体架构到分布式架构

单体架构

通常来说,一个 war 或者 jar 包含一个应用的所有功能,这种架构为单体架构。

集群及垂直化

随着应用的使用者增长带来的问题:

  • 服务负载越来越高;请求响应会变慢,使用体验降低。
  • 业务场景越来越复杂;代码量上升,开发、测试、部署成本增加。

优化方向:

  • 横行扩展,增加服务器,单台机器变成多台机器的集群
  • 垂直拆分,根据业务场景,拆分为多个服务

SOA

随着服务的拆分,经常会出现一个业务跨多个服务的场景,不同业务之间会有很多共享的服务或逻辑。如何能够将这些共享业务逻辑抽取出来形成可重用的服务呢?

出现了一种面向服务(Service-Oriented Architecture,SOA)的架构,SOA 是一种软件组件及开发的方式,目标是把一些通用的、会被多个上层服务调用的共享业务提取成独立的基础服务,即在 SOA 中,服务抽象是核心。

同时为了解决信息孤岛等问题,采用了 ESB(企业服务总线)作为系统和服务之间的通信桥梁(ESB 提供服务地址的管理、调用,协议转化等能力)。

微服务架构

系统经过服务化改造之后,可以很大程度上避免共享业务的重复建设、资源瓶颈等问题。那么如何拆分、部署服务,降低业务的耦合以及提升容错性呢?

微服务是一种解决方案。SOA 是面向服务思想的雏形,微服务针对可重用业务服务的进一步细化。

微服务和 SOA 的关注点差异:

  • SOA 关注服务的重用性以及解决信息孤岛的问题。
  • 微服务关注的是解藕。解藕和可重用在逻辑角度上是一样的,但是解藕的粒度是业务间,可重用关注的是服务。
  • 微服务对 DevOps 有更强烈的需求。随着服务规模的扩大,需要有一套成熟的交付链路和基础设施来实现快速发布、构建,以及后续的运维、监控等等。因此微服务与容器化技术结合的更紧密。

微服务架构挑战

微服务架构的突出优点:

  • 复杂度可控,一个服务只关注特定的业务领域,通过定义良好的接口清晰表述服务便捷。单个服务的开发、维护更容易。
  • 可扩展性强,可根据每个微服务的性能要求和业务特点对服务进行灵活扩展。
  • 独立部署,每个微服务都可以独立部署,单个服务体量小,发布效率更高。
  • 容错性,某个服务故障,可以使故障隔离在单个服务中,影响范围比较小。其他服务可通过重试、降级等机制实现容错。
  • 技术选型灵活,每个微服务可结合业务特性选择技术栈。

微服务带来以上好处的同时,也面临着极大的挑战:

  • 故障排查,一次请求可能经历多个微服务,链路可能很长,这种情况下,定位故障更加困难。
  • 服务监控,微服务架构的监控开销会非常大,不仅要对每个服务实现单体监控,好需要对整个链路进行监控。
  • 复杂度高,微服务本身是一个分布式系统,服务间往往采用远程通信,网络延迟、故障等问题增加应用的复杂度。
  • 服务依赖,在微服务数量增加后,各个服务间的依赖关系会特别复杂。对于一个服务的升级/下线,需要考虑到所有的依赖服务。
  • 运维成本,相对于少量的服务运维,为了保证成百上千个微服务正常运行,对运维的挑战极大,不仅需要保证日常的监控,还需要应付流量激增时的快速扩容等常见问题。

微服务架构

一个相对完整的微服务架构如下图:

Spring Cloud

Spring Cloud 是 Pivotal 公司于 2015 年发布的项目。官网介绍:

Spring Cloud provides tools for developers to quickly build some of 
the common patterns in distributed systems (e.g. configuration 
management, service discovery, circuit breakers, intelligent routing, 
micro-proxy, control bus, one-time tokens, global locks, leadership 
election, distributed sessions, cluster state). Coordination of 
distributed systems leads to boiler plate patterns, and using Spring 
Cloud developers can quickly stand up services and applications 
that implement those patterns. They will work well in any distributed 
environment, including the developer’s own laptop, bare metal data 
centres, and managed platforms such as Cloud Foundry.

Spring Cloud 提供一些可以快速构建微服务的工具(Spring 团队把一些优秀的解决微服务架构常见问题的框架,基于 Spring Cloud 规范进行了整合,通过 Spring Boot 框架进行封装后,屏蔽复杂的配置,提供开箱即用的组件):

  • Distributed/versioned configuration,分布式及版化配置
  • Service registration and discovery,服务注册与发现
  • Routing,服务路由
  • Service-to-service calls,服务调用
  • Load balancing,负载均衡
  • Circuit Breakers。断路器
  • Global locks,全局锁
  • Leadership election and cluster state,Leader 选举和集群状态
  • Distributed messaging,分布式消息

Spring Cloud 是一套规范,Spring Cloud Netflix,Spring Cloud Consul,Spring Cloud Alibaba 等等是 Spring Cloud 规范的实现。

Spring Cloud 版本

Spring Cloud 的发布版本如下:

Hoxton(最新版本)
Greenwich
Finchley
Edgware
...

每个版本会对应各个子项目的一个版本,并且这些子项目都依赖 Spring Boot 框架,所以 Spring Cloud 和 Spring Boot 的版本也存在依赖以及兼容关系,从 Finchley 版本开始,Spring Boot 的版本必须在 2.0.x 之上,不在支持 Spring Boot 1.5.x。

Release Train Boot Version
Hoxton 2.2.x
Greenwich 2.1.x
Finchley 2.0.x
Edgware 1.5.x
Dalston 1.5.x

Spring Cloud 解决方法的最常见的两个是:Spring Cloud Netflix 和 Spring Cloud Alibaba。

Spring Cloud Netflix

Spring Cloud Netflix 包括以下组件:

  • Eureka,服务注册与发现
  • Zuul,服务网关路由
  • Ribbon,客户端负载均衡
  • Hystrix,断路器
  • Hystrix Dashboard,监控面板

Spring Cloud Alibaba

Spring Cloud Alibaba 包括以下组件:

  • Nacos,服务注册与发现
  • Nacos,分布式配置中心
  • Sentinel,流量控制和服务降级
  • Seate,分布式事务
  • Dubbo RPC,RPC 通信协议
  • RocketMQ,消息驱动

Add a Comment

电子邮件地址不会被公开。 必填项已用*标注