SpringCloud01—微服务基础(微服务的由来和微服务中一些基础概念)

为什么要有微服务?(微服务是怎么来的)

1.1 互联网系统架构的演变

互联网系统架构经过了以下几个阶段:

单体应用架构>>垂直应用架构>>分布式架构>>SOA架构>>微服务架构

1.1.1 单体应用架构

适用场景:流量较小

特点:只需一个应用,将所有的代码部署在一起就行

举例说明:比如一个商城系统,里面有用户管理,商品管理,订单管理等等很多模块,做成一个web的单体项目,部署到一台tomcat的服务器上。

优点:

减少开发、部署和维护的成本

缺点:

全部的功能集成在一个工程中,对于大型项目来说不易开发和维护。

项目模块之间紧密耦合,单点容错率低

无法针对不同模块进行针对性的优化和水平扩展

1.1.2 垂直应用架构

随着访问量的增大,就会出现一个问题,就是对于同一个项目中的各个模块的访问量不同,有些模块的访问量会很大,有些模块的访问量会很小,但是要是为了满足那些访问量大的模块的需求,单体架构就只能用增加节点的方式来应对。

为了解决这种问题就出现了垂直架构,所谓的垂直架构就是将原来一个应用拆成几个互不相干的应用,提升效率。

举例说明:以电商项目举例,可能用户访问只会增加用户和订单模块,而对其他模块影响较小,我们就可以将将整个项目拆分成3个系统------电商系统、后台系统、CMS系统。当用户访问的电商系统时,可以只增加电商系统的节点(做集群)。

优点:

可以针对访问量大的模块进行单独的扩展,不用扩展整个整个项目

1.1.3 分布式架构

当垂直架构越来越多的时候,就是各个系统之间会有重复的模块,就会有很多重复性的代码,这时候我们就考虑将重复性的代码拿出来作为一个独立的服务,然后由前端控制层调用不同的业务层。把整个工程拆成表现层和服务层两个部分,表现层只需要做页面处理的交互,业务逻辑都是用服务层来实现的。

优点:

抽取公共的功能作为服务层,提高代码的复用性

缺点:

系统间的耦合度变高,调用关系错综复杂,难以维护

1.1.4 SOA架构

在分布式架构下,当服务越来越多,容量的评估,小服务资源的浪费等问题逐渐显现,此时需增加一个 调度中心对集群进行实时管理。此时,用于资源调度和治理中心(SOA Service OrientedArchitecture, 面向服务的架构)是关键。

优点:

使用注册中心解决了服务间调用关系的自动调节。

缺点:

服务间会有依赖关系,一旦某个环节出现问题会影响比较大(服务雪崩)

服务关系复杂、运维、测试部署困难

1.1.5 微服务架构

微服务架构基于SOA架构演变过来的

在传统的WebService架构中有如下问题:

  1. 依赖中心化服务发现机制

  2. 使用Soap通讯协议,通常使用XML格式来序列化通讯数据,xml格式非常喜欢重,比较占宽带传输。

  3. 服务化管理和治理设施不完善

微服务架构在某种程度上是面向服务的架构SOA 继续发展的下一步,它更加强调服务的"彻底拆分"。微服务架构中每个服务必须独立部署、互不影响,微服务架构模式体现轻巧、轻量级、适合于互联网公司开发模式。

优点:

服务原子化拆分,独立打包、部署和升级,保证每个微服务清晰的任务划分,利于扩展

微服务之间采用Restful等轻量级http协议相互调用

缺点:

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

1.1.6 微服务和SOA的区别

微服务架构与SOA架构的不同

1.微服务架构基于 SOA架构 演变过来,继承 SOA架构的优点,在微服务架构中去除 SOA 架构中的 ESB 企业服务总线,采用 http+json(restful)进行传输。

2.微服务架构比 SOA 架构粒度会更加精细,让专业的人去做专业的事情(专注),目的提高效率,每个服务于服务之间互不影响,微服务架构中,每个服务必须独立部署,微服务架构更加轻巧,轻量级。

3.SOA 架构中可能数据库存储会发生共享,微服务强调独每个服务都是单独数据库,保证每个服务于服务之间互不影响。

4.项目体现特征微服务架构比 SOA 架构更加适合与互联网公司敏捷开发、快速迭代版本,因为粒度非常精细。

1.2 微服务架构介绍

微服务架构简单来理解就是将单体应用进一步拆分成一个一个更小的服务,每一个小的服务就是一个能独立运行的项目。

1.2.1 微服务架构常见的问题

面对如此多的服务,怎么去管理?(服务治理注册中心)

各个小服务之间,他们如何进行通讯?(restful rpc)

客户如果访问这些个小的服务?(网关)

这些小的服务,一旦出了问题,该如何处理?(容错)

这么多小的服务,一旦出了问题,如何排错?(链路追踪)

1.2.2 微服务架构的常见概念

1.2.2.1 微服务治理

微服务治理就是进行服务的自动化管理,其核心是服务的自动注册与发现

服务注册:服务实例将自身服务信息注册到注册中心。

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

服务剔除:服务注册中心将出问题的服务自动剔除到可用列表之外,使其不会被调用到。

1.2.2.2 服务调用

在微服务的框架中,通常存在多个服务之间的远程调用的需求。目前使用的技术有基于HTTP的restful接口和基于TPC的RPC协议

REST(Representational State Transfer):是一种HTTP的调用格式,更标准、更为通用,无论哪种语言都支持HTTP协议

RPC (Remote Promote Call): 一种进程间通信方式。允许像调用本地服务一样调用远程服务。 RPC框架的主要目标就是让远程服务调用更简单、透明。RPC 框架负责屏蔽底层的传输方式、序列 化方式和通信细节。开发人员在使用的时候只需要了解谁在什么位置提供了什么样的远程服务接口 即可,并不需要关心底层通信细节和调用过程。

区别与联系:

|------|-------|---------|-----|
| 比较项 | | RESTful | RPC |
| 通讯协议 | HTTP | 一般使用TCP |
| 性能 | 略低 | 较高 |
| 灵活度 | 高 | 较高 |
| 应用 | 微服务架构 | SOA架构 |

1.2.2.3 服务网关

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

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

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

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

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

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

1.2.2.4 服务容错

在微服务当中, 一个请求经常会涉及到调用几个服务,如果其中某个服务不可用,没有做服务容错的话,极有可能会造成一连串的服务不可用,这就是雪崩效应。我们没法预防雪崩效应的发生,只能尽可 能去做好容错。服务容错的三个核心思想是:

·不被外界环境影响

·不被上游请求压垮

·不被下游响应拖垮

1.2.2.5链路追踪

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

1.3 SpringCloud的介绍

1.3.1 为什么要使用SpringCloud?(SpringCloud作用)

SpringCloud并不是rpc远程调用框架,而是一套全家桶的微服务解决框架,理念就是解决我们在微服务架构中遇到的任何问题。

1.3.2 Spring中各个组件的作用

网关:API网关为微服务架构中的服务提供了统一的访问入口,客户端通过API网关访问相关服务。API网关的定义类似于设计模式中的门面模式,它相当于整个微服务架构中的门面,所有客户端的访问都通过它来进行路由及过滤。它实现了请求路由、负载均衡、校验过滤、服务容错、服务聚合等功能。

注册中心:注册中心可以说是微服务架构中的"通讯录",它记录了服务和服务地址的映射关系。在分布式架构中,服务会注册到这里,当服务需要调用其它服务时,就这里找到服务的地址,进行调用。

一般有以下几个功能:

1.服务发现

服务注册/反注册:保存服务提供者和服务调用者的信息

服务订阅/取消订阅:服务调用者订阅服务提供者的信息,最好有实时推送的功能

服务路由(可选):具有筛选整合服务提供者的能力。

2.服务配置

配置订阅:服务提供者和服务调用者订阅微服务相关的配置

配置下发:主动将配置推送给服务提供者和服务调用者

3.服务健康检测

检测服务提供者的健康情况

配置中心:配置中心为微服务架构中的微服务提供集中化的外部配置支持,配置服务器为各个不同微服务应用的所有环境提供了一个中心化的外部配置。

客户端软负载均衡: 客户端负载均衡是指负载均衡的决策发生在客户端,当客户端需要访问一个服务时,自己通过相应的策略决定要调用那个远程服务机器,服务端负载均衡则是说负载策略的决策是在服务端,当客户端发起请求,服务端接收到请求后根据相应的策略来判断将请求转发到那个服务机器中。

熔断器:当我们的服务不能正常服务的时候,需要把服务器停掉,但是停掉这个微服务的同时不想影响其他模块,就可以使用熔断器把这个需要停掉的服务和其他服务隔离开。

1.3.3 SpringCloud第一代与第二代的区别

相关推荐
DT辰白6 小时前
如何解决基于 Redis 的网关鉴权导致的 RESTful API 拦截问题?
后端·微服务·架构
老猿讲编程8 小时前
技术发展历程:从 CORBA 到微服务
微服务·云原生·架构
武子康10 小时前
Java-33 深入浅出 Spring - FactoryBean 和 BeanFactory BeanPostProcessor
java·开发语言·后端·spring·springboot·springcloud
time_silence12 小时前
微服务——服务通信与接口设计
微服务
Java程序之猿1 天前
微服务分布式(一、项目初始化)
分布式·微服务·架构
Yvemil71 天前
《开启微服务之旅:Spring Boot Web开发举例》(一)
前端·spring boot·微服务
Yvemil71 天前
《开启微服务之旅:Spring Boot Web开发》(二)
前端·spring boot·微服务
维李设论1 天前
Node.js的Web服务在Nacos中的实践
前端·spring cloud·微服务·eureka·nacos·node.js·express
jwolf21 天前
基于K8S的微服务:一、服务发现,负载均衡测试(附calico网络问题解决)
微服务·kubernetes·服务发现