课程内容

  1. 系统架构的演变

  2. 远程调用概念

  3. CAP原理

  4. SpringCloud的体系介绍

学习目标

  1. 掌握系统架构的演变

  2. 掌握分布式系统的几个概念

  3. 了解springCloud的体系组成

一、微服务基础
1.1 系统架构的演变

随着互联网的发展,网站应用的规模不断扩大,常规的应用架构已无法应对,分布式服务架构以及微服务架构势在必行,亟需一个治理系统确保架构有条不紊的演进

1.1.1 单体架构

Web应用程序发展的早期,大部分web工程(包含前端页面,web层代码,service层代码,mapper层代码)是将所有的功能模块,打包到一起并放在一个web容器中运行

image-20230102235848001

比如搭建一个电商系统:客户下订单,商品展示,用户管理。这种将所有功能都部署在一个web容器中运行的系统就叫做单体架构。

优点:

  • 所有的功能集成在一个项目工程中。

  • 项目架构简单,前期开发成本低,周期短,小型项目的首选。

缺点:

  • 全部功能集成在一个工程中,对于大型项目不易开发、扩展及维护。

  • 系统性能扩展只能通过扩展集群结点,成本高、有瓶颈。

  • 技术栈受限。

1.1.2 垂直架构

当访问量逐渐增大,单一应用增加机器带来的加速度越来越小,将应用拆成互不相干的几个应用,以提升效率

image-20230103000507155

优点:

  • 项目架构简单,前期开发成本低,周期短,小型项目的首选。

  • 通过垂直拆分,原来的单体项目不至于无限扩大

  • 不同的项目可采用不同的技术。

缺点:

  • 分开之后,系统各自独立,有些模块需要重复调用,会出现代码冗余。

  • 系统分开之后,增加了后期的负载均衡配置难度。

1.1.3 微服务架构

微服务架构是使用一套小服务来开发单个应用的方式或途径,每个服务基于单一业务能力构建,运行在自己的进程中,并使用轻量级机制通信,通常是HTTP API,并能够通过自动化部署机制来独立部署。这些服务可以使用不同的编程语言实现,以及不同数据存储技术,并保持最低限度的集中式管理。

image-20230103001608289

优点:

  • 通过服务的原子化拆分,以及微服务的独立打包、部署和升级,小团队的交付周期将缩短,运维成本也将大幅度下降

  • 微服务遵循单一原则。微服务之间采用Restful等轻量协议传输

缺点:

  • 微服务过多,服务治理成本高,不利于系统维护。

  • 分布式系统开发的技术成本高(容错、分布式事务等)

1.2 分布式核心知识
1.2.1 远程调用

无论是微服务还是SOA,都面临着服务间的远程调用。那么服务间的远程调用方式有哪些呢?

常见的远程调用方式有以下2种:

  • RPC:Remote Produce Call远程过程调用,RPC基于Socket,工作在会话层。自定义数据格式,速度快,效率高。早期的webservice,现在热门的dubbo,都是RPC的典型代表

  • Http:http其实是一种网络传输协议,基于TCP,工作在应用层,规定了数据传输的格式。现在客户端浏览器与服务端通信基本都是采用Http协议,也可以用来进行远程服务调用。缺点是消息封装臃肿,优势是对服务的提供和调用方没有任何技术限定,自由灵活,更符合微服务理念。现在热门的Rest风格,就可以通过http协议来实现

区别:RPC的机制是根据语言的API(language API)来定义的,而不是根据基于网络的应用来定义的

如果你们公司全部采用Java技术栈,那么使用Dubbo作为微服务架构是一个不错的选择。目前就算使用java技术栈,使用SpringCloud的架构也很多

相反,如果公司的技术栈多样化,而且你更青睐Spring家族,那么Spring Cloud搭建微服务是不二之选。在我们的项目中,会选择Spring Cloud套件,因此会使用Http方式来实现服务间调用

比较项RESTfulRPC
通讯协议httpTCP
性能略低较高
灵活度高低
应用微服务架构SOA架构
1.2.2 CAP原理

现如今,对于多数大型互联网应用,分布式系统(distributed system)正变得越来越重要。分布式系统的最大难点,就是各个节点的状态如何同步。CAP 定理是这方面的基本定理,也是理解分布式系统的起点。

CAP理论由 Eric Brewer 在ACM研讨会上提出,而后CAP被奉为分布式领域的重要理论。分布式系统的CAP理论,首先把分布式系统中的三个特性进行了如下归纳:

image-20230103002952453

Consistency(一致性):数据一致更新,所有数据的变化都是同步的

Availability(可用性):在集群中一部分节点故障后,集群整体是否还能响应客户端的读写请求

Partition tolerance(分区容忍性):某个节点的故障,并不影响整个系统的运行

通过学习CAP理论,我们得知任何分布式系统只可同时满足二点,没法三者兼顾,既然一个分布式系统无法同时满足一致性、可用性、分区容错性三个特点,所以我们就需要抛弃一样:

选择说明
CA放弃分区容错性,加强一致性和可用性,其实就是传统的关系型数据库的选择
AP放弃一致性(这里说的一致性是强一致性),追求分区容错性和可用性,这是很多分布式.系统设计时的选择,例如很多NoSQL系统就是如此
CP放弃可用性,追求一致性和分区容错性,基本不会选择,网络问题会直接让整个系统不可用

需要明确一点的是,在一个分布式系统当中,分区容忍性和可用性是最基本的需求,所以在分布是系统中,我们的系统最当关注的就是A(可用性)P(容忍性),通过补偿的机制寻求数据的一致性

二、SpringCloud概述
2.1 微服务中相关的概念
2.1.1 服务注册与发现

服务注册:服务实例将自身服务信息注册到注册中心。这部分服务信息包括服务所在主机IP和提供服务的Port,以及暴露服务自身状态以及访问协议等信息。

服务发现:服务实例请求注册中心获取所依赖服务信息。服务实例通过注册中心,获取到注册到其中的服务实例的信息,通过这些信息去请求它们提供的服务。

2.1.2 负载均衡

负载均衡是高可用网络基础架构的关键组件,通常用于将工作负载分布到多个服务器来提高网站、应用、数据库或其他服务的性能和可靠性。

2.1.3 熔断

熔断这一概念来源于电子工程中的断路器(Circuit Breaker)。在互联网系统中,当下游服务因访问压力过大而响应变慢或失败,上游服务为了保护系统整体的可用性,可以暂时切断对下游服务的调用。这种牺牲局部,保全整体的措施就叫做熔断。

2.1.4 链路追踪

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

2.1.5 API网关

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

  • 客户端需要调用不同的url地址,增加难度

  • 再一定的场景下,存在跨域请求的问题

  • 每个微服务都需要进行单独的身份认证

针对这些问题,API网关顺势而生。

API网关直面意思是将所有API调用统一接入到API网关层,由网关层统一接入和输出。一个网关的基本功能有:统一接入、安全防护、协议适配、流量管控、长短链接支持、容错能力。有了网关之后,各个API服务提供团队可以专注于自己的的业务逻辑处理,而API网关更专注于安全、流量、路由等问题。

2.2 SpringCloud介绍

1)介绍

image-20230103003923625

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

  • Spring Cloud是一个开发工具集,包含多个子项目;为微服务开发提供一站式解决方案,是一组独立组件的集合。

  • SpringCloud是在SpringBoot的基础上构建的,使开发者可以轻松入门并快速提高工作效率。

2)版本

SpringCloud是一个由许多子项目组成的综合项目,为了避免SpringCloud版本号与子项目版本号混淆,SpringCloud版本采用了名称而非版本号的命名方式,这些版本的名称采用了伦敦地铁站的名字来命名,根据字母表的顺序来对应版本时间顺序,例如Angel是第一个版本, Brixton是第二个版本。 当SpringCloud的发布内容积累到临界点或者一个重大BUG被解决后,会发布一个”service releases”版本,简称SRX版本,比如Greenwich.SR2就是SpringCloud发布的Greenwich版本的第2个SRX版本。

image-20230103004125767

2.3 SpringCloud架构
2.3.1 Spring Cloud Netflix组件
组件名称作用
Eureka服务注册中心
Ribbon客户端负载均衡
Feign声明式服务调用
Hystrix客户端容错保护
ZuulAPI服务网关
2.3.2 Spring Cloud Alibaba组件
组件名称作用
Nacos服务注册中心,配置中心
Sentinel客户端容错保护
2.3.3 Spring Cloud 原生及其他组件
组件名称作用
Consul服务注册中心
Config分布式配置中心
GatewayAPI服务网关
Sleuth/Zipkin分布式链路追踪

更多推荐