Dya7_02_微服务概述
课程内容
-
系统架构的演变
-
远程调用概念
-
CAP原理
-
SpringCloud的体系介绍
学习目标
-
掌握系统架构的演变
-
掌握分布式系统的几个概念
-
了解springCloud的体系组成
一、微服务基础
1.1 系统架构的演变
随着互联网的发展,网站应用的规模不断扩大,常规的应用架构已无法应对,分布式服务架构以及微服务架构势在必行,亟需一个治理系统确保架构有条不紊的演进
1.1.1 单体架构
Web应用程序发展的早期,大部分web工程(包含前端页面,web层代码,service层代码,mapper层代码)是将所有的功能模块,打包到一起并放在一个web容器中运行

比如搭建一个电商系统:客户下订单,商品展示,用户管理。这种将所有功能都部署在一个web容器中运行的系统就叫做单体架构。
优点:
-
所有的功能集成在一个项目工程中。
-
项目架构简单,前期开发成本低,周期短,小型项目的首选。
缺点:
-
全部功能集成在一个工程中,对于大型项目不易开发、扩展及维护。
-
系统性能扩展只能通过扩展集群结点,成本高、有瓶颈。
-
技术栈受限。
1.1.2 垂直架构
当访问量逐渐增大,单一应用增加机器带来的加速度越来越小,将应用拆成互不相干的几个应用,以提升效率

优点:
-
项目架构简单,前期开发成本低,周期短,小型项目的首选。
-
通过垂直拆分,原来的单体项目不至于无限扩大
-
不同的项目可采用不同的技术。
缺点:
-
分开之后,系统各自独立,有些模块需要重复调用,会出现代码冗余。
-
系统分开之后,增加了后期的负载均衡配置难度。
1.1.3 微服务架构
微服务架构是使用一套小服务来开发单个应用的方式或途径,每个服务基于单一业务能力构建,运行在自己的进程中,并使用轻量级机制通信,通常是HTTP API,并能够通过自动化部署机制来独立部署。这些服务可以使用不同的编程语言实现,以及不同数据存储技术,并保持最低限度的集中式管理。

优点:
-
通过服务的原子化拆分,以及微服务的独立打包、部署和升级,小团队的交付周期将缩短,运维成本也将大幅度下降
-
微服务遵循单一原则。微服务之间采用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方式来实现服务间调用
| 比较项 | RESTful | RPC |
|---|---|---|
| 通讯协议 | http | TCP |
| 性能 | 略低 | 较高 |
| 灵活度 | 高 | 低 |
| 应用 | 微服务架构 | SOA架构 |
1.2.2 CAP原理
现如今,对于多数大型互联网应用,分布式系统(distributed system)正变得越来越重要。分布式系统的最大难点,就是各个节点的状态如何同步。CAP 定理是这方面的基本定理,也是理解分布式系统的起点。
CAP理论由 Eric Brewer 在ACM研讨会上提出,而后CAP被奉为分布式领域的重要理论。分布式系统的CAP理论,首先把分布式系统中的三个特性进行了如下归纳:

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)介绍

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版本。

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

所有评论(0)