SprngCloud

一个人想着一个人 提交于 2020-02-06 02:42:17

目录

 

一、系统架构演变

1.集中式架构

2.垂直架构

3.分布式服务

4.SOA架构

5.微服务架构

6.微服务和SOA的区别

二、服务的调用方式

1.RCP

2.HTTP

3.两者的使用场景

三、SpringCloud的概念

四、微服务的场景

五、Eureka注册中心

六、Ribbon负载均衡

七、Hystrix延迟容错库

八、Feign

九、Zuul网关


一、系统架构演变

1.集中式架构

(1)集中式架构,是指由系统的所有业务单元,都集中部署到一台或者多台服务器组成的中心节点上

(2)图解

(3)优点

部署方便

(4)缺点

①不能水平扩展:承载的并发量小  【注】水平扩展:同时增加多个服务器实现负载 垂直扩展:提高单台服务器的性能

②代码耦合性强,不利于功能的扩展

(5)应用场景

小型项目,访问量比较低

2.垂直架构

(1)将系统的各个模块拆分,分别部署在不同的服务器

(2)图解


(3)优点

①提高的并发:将不同的模块部署到不同的服务器,对访问量比较大的模块,进行集群增加服务器的操作,充分的节约服务器的成本

②方便水平扩展,可以针对某个模块进行定向优化

(4)缺点

代码重复度高,不同模块之间的功能有重复

3.分布式服务

(1)垂直架构代码重复度高,维护困难,分布式将核心的业务模块抽离出来,互相调用

(2)图解

(3)优点

①提高了代码的复用率

(4)缺点

①系统调用关系复杂,系统的结构不好管理,服务之间通过接口去调用,需要开发各种接口,调用结构过程比较复杂

4.SOA架构

(1)面向服务架构:因为分布式服务之间的调用接口关系不好管理,所以SOA架构将服务进行集中管理(ESB),服务之间的通讯通过ESB进行集中式管理

(2)图解

(3)优点

①服务被注册中心进行管理,简化了服务之间的调用关系

(4)缺点

  • 服务间会有依赖关系,一旦某个环节出错会影响较大

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

5.微服务架构

(1)微服务架构是从SOA架构演变过来的,微服务架构比SOA架构的服务更加细粒度化,每个服务之间互不影响,都有自己独立的数据库,独立的redis,采用restful风格的API,也就是HTTP协议+JSON格式进行传输,更加轻量化。

(2)图解

(3)优点

①单一职责,服务之间互不干扰

②去中心化:服务之间的通讯使用restful风格

(4)缺点

①分布式系统的复杂性比较高,运维的难度比较大

6.微服务和SOA的区别

(1)微服务是由SOA演变过来的,微服务相比较SOA更加细粒度化,微服务的服务之间的通讯使用的是restful风格,SOA服务之间的通讯使用的是ESB进行中心化管理,微服务的通讯采用的是HTTP协议+JSON格式(restful)进行通讯,比较轻量;SOA使用的时HTTP+XML方式进行通讯,所以数据传输的速度比微服务慢一些;SOA可能存在数据库之间的共享,但是微服务强调每个服务都是单独的数据库,保证每个服务之间互不影响。

二、服务的调用方式

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

1.RCP

(1)基于TCP协议(相对于HTTP更加底层),速度快些

(2)自定义数据传输格式

(3)代表的技术时WebService和dubbo

2.HTTP

(1)基于TCP协议

(2)规定了传输格式(json)

(3)消息封装臃肿,速度慢一些

(4)对技术的提供方和调用方没有技术限制

3.两者的使用场景

公司的技术栈都是java的情况下使用dubbo比较好

公司的技术栈比较丰富使用SpringCloud

三、SpringCloud的概念

SpringCloud和dobbu都是服务框架

SpringCloud是http协议传输,带宽会比较多,同时使用http协议一般会使用JSON报文,消耗会更大

dubbo的开发难度较大,原因是dubbo的jar包依赖不好管理;SpringCloud把很多流行的分布式技术集中到一起,进行统一的版本管理

四、微服务的场景

服务的提供者,服务的调用者,服务注册中心

服务的提供者个调用者都需要Eureka的客户端,因为两者之间的联系都是通过Eureka注册中心。

所有的服务都会将自己注册到注册中心中,在调用时可以直接在注册中心获取其他服务的信息

五、Eureka注册中心

管理服务,提供了服务的发现,注册和状态监控,各个服务都可以在注册中心中找到自己所需要调用服务的信息

  • Eureka:就是服务注册中心(可以是一个集群),对外暴露自己的地址

  • 提供者服务:启动后向Eureka注册自己信息(地址,提供什么服务)

  • 消费者服务:向Eureka订阅服务,Eureka会将对应服务的所有提供者地址列表发送给消费者,并且定期更新

  • 心跳(续约):提供者定期通过http方式向Eureka刷新自己的状态

六、Ribbon负载均衡

(1)两种默认负载的算法,分别时轮询和随机算法,可以通过配置进行选择,当然可以自定义负载均衡算法

(2)需要在调用者服务配置,因为调用者向被调用者服务器发起请求,请求到对方的哪台服务器,当然请求的方式(负载均衡就是对请求方式进行优化,按实际情况分配将多个请求分别分配到不用的服务器,使多个服务器共同分担系统的压力)是由调用者决定

七、Hystrix延迟容错库

(1)在多个服务的情况下,一个请求可能需要多个服务来处理,如果此时其中一个服务器出现问题,就会阻塞,当大量的请求仍然访问这个服务的时,由于服务器支持的线程数和并发数有限制,当这些服务器资源耗尽,导致所有其它服务都不可用,形成雪崩效应。就像汽车生产线生产汽车,但是组装汽车的某一个零件没法使用,就会导致整个生产线因为这个零件无法成功组装汽车。

(2)解决雪崩的问题有两种方案

①线程隔离

Hystrix会为每个服务分配一个小的线程池,当用户发起请求时,如果线程池已满就会拒绝调用;

请求超时就会进行降级处理,返回一个友好的信息,至少会看到执行的结果,而不会直接阻塞,这样最多会影响线程池的资源,对其他的服务没有影响。

【注】降级处理就是保证核心服务,非核心服务不可用或者不可用

【注】阻塞,当请求一直被阻塞,可能会导致雪崩问题

②服务熔断

  • 服务调用方可以自己判断,那些服务反应慢,或者存在大量的超时情况就会主动熔断,防止整个系统被拖垮
  • 服务熔断有三种状态
    • Closed 关闭状态:所有的请求都可以访问
    • Open 打开状态:所有的请求都会被降级 【注】当一定时间的请求失败百分比超过50%,且请求次数不低于20次
    • Half Open 半开状态:Open状态不是永久的,有一个5s的休眠期,随后进入半开状态,释放一部分请求,如果者部分请求是健康的,则会完全的关闭断路器,否则继续打开进入休眠计时。

(3)需要在调用者服务配置,因为什么时候进行请求,什么时候终止请求就是应该有请求方(服务的调用者去控制)

八、Feign

(1)Feign可以帮助我们更便捷的使用HTTP API,ResTemplate需要写被调用服务的IP等信息,而Feign只需要知道被调用服务的ID即可

(2)Feign继承了Ribbon负载均衡和Hystrix延迟容错库

(3)配置在服务的调用方

九、Zuul网关

(1)所有的请求首先经过网关,Zuul主要功能对请求进行过滤和路由,可以对外暴露聚合AP,保持整个系统的稳定性。

(2)Zuul里面还内置了Ribbon的负载均衡功能。

 

 

 

 

 

 

 

 

 

 

 

 

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!