文章目录

  • SpringCloud —微服务
  • 一、系统架构演变
  • 单体应⽤架构
  • 垂直应⽤架构
  • 分布式结构
  • SOA 架构
  • 微服务架构
  • 二、微服务架构介绍
  • 微服务常⻅问题
  • 微服务架构的常⻅概念
  • 服务治理
  • 服务调⽤
  • 服务⽹关
  • 服务容错
  • 链路追踪
  • 微服务架构的常⻅解决⽅案


SpringCloud —微服务

一、系统架构演变

随着互联⽹的发展,⽹站应⽤的规模也在不断的扩⼤,进⽽导致系统架构也在不断的进⾏变化。从互联⽹早期到现 在,系统架构⼤体经历了下⾯⼏个过程: 单体应⽤架构—>垂直应⽤架构—>分布式架构—>SOA架构—>微服务架构,当然还有悄然兴起的 Service Mesh (服务⽹格化)。

接下来我们就来了解⼀下每种系统架构是什么样⼦的, 以及各有什么优缺点。

单体应⽤架构

互联⽹早期,⼀般的⽹站应⽤流量较⼩,只需⼀个应⽤,将所有功能代码都部署在⼀起就可以,这样可以减少开 发、部署和维护的成本。

⽐如说⼀个电商系统,⾥⾯会包含很多⽤户管理,商品管理,订单管理,物流管理等等很多模块,我们会把它们做成⼀个 web 项⽬,然后部署到⼀台 tomcat 服务器上。

springcloud微服务架构之间的关系 springcloud微服务架构实战_系统架构

垂直应⽤架构

随着访问量的逐渐增⼤,单⼀应⽤只能依靠增加节点来应对,但是这时候会发现并不是所有的模块都会有⽐较⼤的访问量。

还是以上⾯的项⽬为例⼦, ⽤户访问量的增加可能影响的只是前台⻚⾯模块, 但是对后台管理的影响就⽐较⼩。 那么此时我们希望只多增加⼏个前台⻚⾯模块, ⽽不增加后台管理模块。 此时单体应⽤就做不到了, 垂直应⽤就应运⽽⽣了。

所谓的垂直应⽤架构,就是将原来的⼀个应⽤拆成互不相⼲的⼏个应⽤,以提升效率。⽐如我们可以将上⾯项⽬的单体应⽤拆分成:

  • 前台系统(⽤户管理、商品管理、订单管理等)
  • 后台系统(⽤户管理、订单管理、客户管理等)
  • 个⼈中⼼系统(⽤户信息、购物⻋等)

这样拆分完毕之后,⼀旦⽤户访问量变⼤,只需要增加前台系统的节点就可以了,⽽⽆需增加后台和个⼈中⼼的节点。

springcloud微服务架构之间的关系 springcloud微服务架构实战_系统架构_02

分布式结构

当垂直应⽤越来越多,重复的业务代码就会越来越多。这时候,我们就思考可不可以将重复的代码抽取出来,做成 统⼀的业务层作为独⽴的服务,然后由前端控制层调⽤不同的业务层服务呢?

这就产⽣了新的分布式系统架构。它将把⼯程拆分成表现层和服务层两个部分,服务层中包含业务逻辑。表现层只 需要处理和⻚⾯的交互,业务逻辑都是调⽤服务层的服务来实现。

springcloud微服务架构之间的关系 springcloud微服务架构实战_架构_03

优点:

抽取公共代码为服务层,增强代码复用性。

缺点:

调用关系复杂,维护困难。

SOA 架构

在分布式架构下,当服务越来越多,容量的评估,⼩服务资源的浪费等问题逐渐显现,此时需增加⼀个调度中⼼对集群进⾏实时管理。此时,⽤于资源调度和治理中⼼ ( SOA Service Oriented Architecture ,⾯向服务的架构) 是关键。

springcloud微服务架构之间的关系 springcloud微服务架构实战_微服务_04

优点:

使用服务治理中心帮我们维护复杂的调用关系

缺点:

服务有依赖性,可能会因为一个服务的问题,导致多个系统不可用(拆分的不够彻底)

微服务架构

微服务架构在某种程度上是⾯向服务的架构 SOA 继续发展的下⼀步,它更加强调服务的"彻底拆分"。

springcloud微服务架构之间的关系 springcloud微服务架构实战_Cloud_05

二、微服务架构介绍

微服务常⻅问题

⼀旦采⽤微服务系统架构,就势必会遇到这样⼏个问题:

这么多⼩服务,如何管理他们?(服务治理、注册中⼼[服务注册 发现 剔除])

  • 这么多⼩服务,他们之间如何通讯?(restful、rpc)
  • 这么多⼩服务,客户端怎么访问他们?(⽹关)
  • 这么多⼩服务,⼀旦出现问题了,应该如何⾃处理?(容错)
  • 这么多⼩服务,⼀旦出现问题了,应该如何排错? (链路追踪)

对于上⾯的问题,是任何⼀个微服务设计者都不能绕过去的,因此⼤部分的微服务产品都针对每⼀个问题提供了相 应的组件来解决它们。

springcloud微服务架构之间的关系 springcloud微服务架构实战_Cloud_06

微服务架构的常⻅概念

服务治理

服务治理就是进⾏服务的⾃动化管理,其核⼼是服务的⾃动注册与发现

  • 服务注册:服务实例将⾃身服务信息注册到注册中⼼。
  • 服务发现:服务实例通过注册中⼼,获取到注册到其中的服务实例的信息,通过这些信息去请求它们提供的服务。
  • 服务剔除:服务注册中⼼将出问题的服务⾃动剔除到可⽤列表之外,使其不会被调⽤到。
服务调⽤

在微服务架构中,通常存在多个服务之间的远程调⽤的需求。⽬前主流的远程调⽤技术有基于 HTTP 的 RESTful 接⼝以及基于 TCP 的 RPC 协议。

  • REST (Representational State Transfer) 这是⼀种 HTTP 调⽤的格式,更标准,更通⽤,⽆论哪种语⾔都⽀持http 协议。
  • RPC(Remote Promote Call)⼀种进程间通信⽅式。允许像调⽤本地服务⼀样调⽤远程服务。 RPC 框架的主要⽬标就是让远程服务调⽤更简单、透明。 RPC 框架负责屏蔽底层的传输⽅式、序列化⽅式和通信细节。开发⼈员在使⽤的时候只需要了解谁在什么位置提供了什么样的远程服务接⼝即可,并不需要关⼼底层通信细节和调⽤过程。

⽐较项

RESTfu

RPC

通讯协议

HTTP

⼀般使⽤TCP

性能

略低

较⾼

灵活度



应⽤

微服务架构

SOA架构

服务⽹关

随着微服务的不断增多,不同的微服务⼀般会有不同的⽹络地址,⽽外部客户端可能需要调⽤多个服务的接⼝才能完成⼀个业务需求,如果让客户端直接与各个微服务通信可能出现:

  1. 客户端需要调⽤不同的url地址,增加难度
  2. 在⼀定的场景下,存在跨域请求的问题
  3. 每个微服务都需要进⾏单独的身份认证

针对这些问题,API⽹关顺势⽽⽣。

API ⽹关直⾯意思是将所有 API 调⽤统⼀接⼊到 API ⽹关层,由⽹关层统⼀接⼊和输出。

⼀个⽹关的基本功能有:统⼀接⼊、安全防护、协议适配、流量管控、⻓短链接⽀持、容错能⼒。

有了⽹关之后, 各个 API 服务提供团队可以专注于⾃⼰的的业务逻辑处理,⽽ API ⽹关更专注于安全、流量、 路由等问题。

服务容错

在微服务当中,⼀个请求经常会涉及到调⽤⼏个服务,如果其中某个服务不可⽤,没有做服务容错的话,极有可能 会造成⼀连串的服务不可⽤,这就是雪崩效应。我们没法预防雪崩效应的发⽣,只能尽可能去做好容错。

服务容错的三个核⼼思想是:

  • 不被外界环境影响
  • 不被上游请求压垮
  • 不被下游响应拖垮

springcloud微服务架构之间的关系 springcloud微服务架构实战_Cloud_07

链路追踪

随着微服务架构的流⾏,服务按照不同的维度进⾏拆分,⼀次请求往往需要涉及到多个服务。互联⽹应⽤构建在不 同的软件模块集上,这些软件模块,有可能是由不同的团队开发、可能使⽤不同的编程语⾔来实现、有可能布在了 ⼏千台服务器,横跨多个不同的数据中⼼。因此,就需要对⼀次请求涉及的多个服务链路进⾏⽇志记录,性能监控即链路追踪。

微服务架构的常⻅解决⽅案

ServiceComb

Apache ServiceComb ,前身是华为云的微服务引擎 CSE (Cloud Service Engine) 云服务,是全球⾸个 Apache 微服务顶级项⽬。它提供了⼀站式的微服务开源解决⽅案,致⼒于帮助企业、⽤户和开发者将企业应⽤轻松微服务 化上云,并实现对微服务应⽤的⾼效运维管理。

Spring Cloud

Spring Cloud 是⼀系列框架的集合。它利⽤ Spring Boot 的开发便利性巧妙地简化了分布式系统基础设施的 开发,如服务发现注册、配置中⼼、消息总线、负载均衡、断路器、数据监控等,都可以⽤ Spring Boot 的开发⻛格做到⼀键启动和部署。 Spring Cloud 并没有重复制造轮⼦,它只是将⽬前各家公司开发的⽐较成熟、经得起实际考验的服务框架组合起来,通过 Spring Boot ⻛格进⾏再封装屏蔽掉了复杂的配置和实现原理,最终给开发者留出了⼀套简单易懂、易部署和易维护的分布式系统开发⼯具包。

Spring Cloud Alibaba

Spring Cloud Alibaba 致⼒于提供微服务开发的⼀站式解决⽅案。此项⽬包含开发分布式应⽤微服务的必需组件,⽅便开发者通过 Spring Cloud 编程模型轻松使⽤这些组件来开发分布式应⽤服务。

依托 Spring Cloud Alibaba ,您只需要添加⼀些注解和少量配置,就可以将 Spring Cloud 应⽤接⼊阿⾥微服务解决⽅案,通过阿⾥中间件来迅速搭建分布式应⽤系统。

主要功能

  • 服务限流降级:默认⽀持 WebServlet 、 WebFlux , OpenFeign 、 RestTemplate 、 Spring Cloud Gateway , Zuul , Dubbo 和 RocketMQ 限流降级功能的接⼊,可以在运⾏时通过控制台实时修 改限流降 级规则,还⽀持查看限流降级 Metrics 监控。
  • 服务注册与发现:适配 Spring Cloud 服务注册与发现标准,默认集成了 Ribbon 的⽀持。
  • 分布式配置管理:⽀持分布式系统中的外部化配置,配置更改时⾃动刷新。
  • 消息驱动能⼒:基于 Spring Cloud Stream 为微服务应⽤构建消息驱动能⼒。
  • 分布式事务:使⽤ @GlobalTransactional 注解, ⾼效并且对业务零侵⼊地解决分布式事务问题。
  • 阿⾥云对象存储:阿⾥云提供的海量、安全、低成本、⾼可靠的云存储服务。⽀持在任何应⽤、任何时间、任 何地点存储和访问任意类型的数据。
  • 分布式任务调度:提供秒级、精准、⾼可靠、⾼可⽤的定时(基于 Cron 表达式)任务调度服务。 同时提供 分布式的任务执⾏模型,如⽹格任务。⽹格任务⽀持海量⼦任务均匀分配到所有 Worker(schedulerxclient) 上执⾏。
  • 阿⾥云短信服务:覆盖全球的短信服务,友好、⾼效、智能的互联化通讯能⼒,帮助企业迅速搭建客户触达通道。

组件

  • Sentinel:把流量作为切⼊点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。
  • Nacos:⼀个更易于构建云原⽣应⽤的动态服务发现、配置管理和服务管理平台。
  • RocketMQ:⼀款开源的分布式消息系统,基于⾼可⽤分布式集群技术,提供低延时的、⾼可靠的消息发布与订阅服务。
  • Dubbo: Apache Dubbo™ 是⼀款⾼性能 Java RPC 框架。
  • Seata:阿⾥巴巴开源产品,⼀个易于使⽤的⾼性能微服务分布式事务解决⽅案。
  • Alibaba Cloud ACM:⼀款在分布式架构环境中对应⽤配置进⾏集中管理和推送的应⽤配置中⼼产品。
  • Alibaba Cloud OSS:阿⾥云对象存储服务( Object Storage Service,简称 OSS ),是阿⾥云提供的海 量、安全、低成本、⾼可靠的云存储服务。您可以在任何应⽤、任何时间、任何地点存储和访问任意类型的数 据。
  • Alibaba Cloud SchedulerX:阿⾥中间件团队开发的⼀款分布式任务调度产品,提供秒级、精准、⾼可靠、⾼ 可⽤的定时(基于 Cron 表达式)任务调度服务。
    bject Storage Service,简称 OSS ),是阿⾥云提供的海 量、安全、低成本、⾼可靠的云存储服务。您可以在任何应⽤、任何时间、任何地点存储和访问任意类型的数 据。
  • Alibaba Cloud SchedulerX:阿⾥中间件团队开发的⼀款分布式任务调度产品,提供秒级、精准、⾼可靠、⾼ 可⽤的定时(基于 Cron 表达式)任务调度服务。
  • Alibaba Cloud SMS:覆盖全球的短信服务,友好、⾼效、智能的互联化通讯能⼒,帮助企业迅速 搭建客户触达通道。