微服务发展以及SpringCloud体系中的组件


转载于:https://mp.weixin.qq.com/s/0iAcNHXeM3EOlLBlG-2q4w

1 微服务历程

1.1 大致历程

架构的发展历程是从单体式架构,到分布式架构,到SOA架构,再到微服务架构
![在这里插入图片描述]( https://img-blog.csdnimg.cn/2021050122401270.png?x-oss-process=image/watermark ,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTIwNjAwMzM=,size_16,color_FFFFFF,t_70)

1.2 单体架构

单体架构:未做任何拆分的Java Web程序
一个归档包(例如war格式或者Jar格式)包含了应用所有功能的应用程序,我们通常称之为单体应用。架构单体应用的方法论,我们称之为单体应用架构,这是一种比较传统的架构风格
![在这里插入图片描述]( https://img-blog.csdnimg.cn/20210501222332107.png?x-oss-process=image/watermark ,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTIwNjAwMzM=,size_16,color_FFFFFF,t_70)
单体架构的缺陷:

  1. 复杂性高
    整个项目包含的模块非常多,模块的边界模糊,依赖关系不清晰,代码质量参差不齐,整个项目非常复杂。每次修改代码都心惊胆战,甚至添加一个简单的功能,或者修改一个BUG都会造成隐含的缺陷。
  2. 技术债务逐渐上升
    随着时间推移、需求变更和人员更迭,会逐渐形成应用程序的技术债务,并且越积越多。已使用的系统设计或代码难以修改,因为应用程序的其他模块可能会以意料之外的方式使用它。
  3. 部署速度逐渐变慢
    随着代码的增加,构建和部署的时间也会增加。而在单体应用中,每次功能的变更或缺陷的修复都会导致我们需要重新部署整个应用。全量部署的方式耗时长、影响范围大、风险高,这使得单体应用项目上线部署的频率较低,从而又导致两次发布之间会有大量功能变更和缺陷修复,出错概率较高。
  4. 扩展能力受限,无法按需伸缩
    单体应用只能作为一个整体进行扩展,无法结合业务模块的特点进行伸缩。
  5. 阻碍技术创新
    单体应用往往使用统一的技术平台或方案解决所有问题,团队的每个成员都必须使用相同的开发语言和架构,想要引入新的框架或技术平台非常困难。

1.3 集群架构

集群:多台服务器部署相同应用构成一个集群
作用:通过负载均衡设备共同对外提供服务
集群模式是不同服务器部署同一套服务对外访问,实现服务的负载均衡。
区别集群的方式是根据部署多台服务器业务是否相同。

:集群模式需要做好session共享,确保在不同服务器切换的过程中不会因为没有获取到session而中止退出服务。
一般配置Nginx*的负载容器实现:静态资源缓存、Session共享可以附带实现,Nginx支持5000个并发量
![在这里插入图片描述]( https://img-blog.csdnimg.cn/20210501224039687.png?x-oss-process=image/watermark ,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTIwNjAwMzM=,size_16,color_FFFFFF,t_70)

1.4 分布式架构

分布式架构:按照业务垂直划分,每个业务都是单体架构,通过API互相调用
![在这里插入图片描述]( https://img-blog.csdnimg.cn/20210501222417669.png?x-oss-process=image/watermark ,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTIwNjAwMzM=,size_16,color_FFFFFF,t_70)

1.5 SOA架构

SOAService-Oriented Architecture的英文缩写,就是面向服务的架构。这里的服务可以理解为service层业务服务
SOA架构:SOA是一种面向服务的架构。其应用程序的不同组件通过网络上的通信协议向其它组件提供服务或消费服务,所以也是分布式架构的一种

![在这里插入图片描述]( https://img-blog.csdnimg.cn/20210501222949137.png?x-oss-process=image/watermark ,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTIwNjAwMzM=,size_16,color_FFFFFF,t_70)

1.6 微服务

微服务架构在某种程度上是SOA架构的进一步的发展。
微服务目前并没有比较官方的定义。微服务 Microservices 之父,马丁.福勒,对微服务大概的概述如下:

就目前而言,对于微服务业界并没有一个统一的、标准的定义(While there is no precise definition of this architectural style ) 。但通常在其而言,微服务架构是一种架构模式或者说是一种架构风格,它提倡将单一应用程序划分成一组小的服务,每个服务运行独立的自己的进程中,服务之间互相协调、互相配合,为用户提供最终价值。服务之间采用轻量级的通信机制互相沟通(通常是基于 HTTP 的 RESTful API ) 。每个服务都围绕着具体业务进行构建,并且能够被独立地部署到生产环境、类生产环境等。另外,应尽量避免统一的、集中式的服务管理机制,对具体的一个服务而言,应根据业务上下文,选择合适的语言、工具对其进行构建,可以有一个非常轻量级的集中式管理来协调这些服务。可以使用不同的语言来编写服务,也可以使用不同的数据存储

![在这里插入图片描述]( https://img-blog.csdnimg.cn/20210501224529621.png?x-oss-process=image/watermark ,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTIwNjAwMzM=,size_16,color_FFFFFF,t_70)

2 SpringCloud

2.1 介绍SpringCloud

什么是SpringCloud
Spring Cloud 作为 Java 言的微服务框架,它依赖于 Spring Boot ,有快速开发、持续交付和容易部署等特点。Spring Cloud 的组件非常多,涉及微服务的方方面面,井在开源社区 SpringNetflix Pivotal 两大公司的推动下越来越完善。

SpringCloud是一系列组件的有机集合,其架构体系
![在这里插入图片描述]( https://img-blog.csdnimg.cn/20210501224715875.png?x-oss-process=image/watermark ,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTIwNjAwMzM=,size_16,color_FFFFFF,t_70)
SpringCloud 思维导图
![在这里插入图片描述]( https://img-blog.csdnimg.cn/20210501224807538.png?x-oss-process=image/watermark ,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTIwNjAwMzM=,size_16,color_FFFFFF,t_70)

2.2 主要组件

2.2.1 Eureka

Netflix Eureka 是由 Netflix 开源的一款基于 REST 的服务发现组件,包括 Eureka ServerEureka Client
![在这里插入图片描述]( https://img-blog.csdnimg.cn/20210501224915600.png?x-oss-process=image/watermark ,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTIwNjAwMzM=,size_16,color_FFFFFF,t_70)

2.2.2 Ribbon

Ribbon Netflix 公司开源的一个负载均衡的组件
![在这里插入图片描述]( https://img-blog.csdnimg.cn/20210501224945286.png?x-oss-process=image/watermark ,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTIwNjAwMzM=,size_16,color_FFFFFF,t_70)

2.2.3 Feign

Feign是一个声明式的Web Service客户端
![在这里插入图片描述]( https://img-blog.csdnimg.cn/20210501225012227.png?x-oss-process=image/watermark ,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTIwNjAwMzM=,size_16,color_FFFFFF,t_70)

2.2.4 Hystrix

HystrixNetstflix 公司开源的一个项目,它提供了熔断器功能,能够阻止分布式系统中出现联动故障
![在这里插入图片描述]( https://img-blog.csdnimg.cn/20210501225037117.png?x-oss-process=image/watermark ,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTIwNjAwMzM=,size_16,color_FFFFFF,t_70)

2.2.5 Zuul

Zuul 是由 Netflix 孵化的一个致力于网关 解决方案的开源组件
![在这里插入图片描述]( https://img-blog.csdnimg.cn/20210501225107708.png?x-oss-process=image/watermark ,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTIwNjAwMzM=,size_16,color_FFFFFF,t_70)

2.2.6 Gateway

Spring Cloud GatewaySpring 官方基于 Spring 5.0、 Spring Boot 2.0Project Reactor 等 技术开发的网关, Spring Cloud Gateway 旨在为微服务架构提供简单、 有效且统一的 API 路由 管理方式
![在这里插入图片描述]( https://img-blog.csdnimg.cn/20210501225149183.png?x-oss-process=image/watermark ,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTIwNjAwMzM=,size_16,color_FFFFFF,t_70)

2.2.7 Config

Spring Cloud 中提供了分布式配置中 Spring Cloud Config ,为外部配置提供了客户端和服务器端的支持
![在这里插入图片描述]( https://img-blog.csdnimg.cn/20210501225223847.png?x-oss-process=image/watermark ,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTIwNjAwMzM=,size_16,color_FFFFFF,t_70)

2.2.8 Bus

使用 Spring Cloud Bus, 可以非常容易地搭建起消息总线
![在这里插入图片描述]( https://img-blog.csdnimg.cn/20210501225249848.png?x-oss-process=image/watermark ,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTIwNjAwMzM=,size_16,color_FFFFFF,t_70)

2.2.8 OAuth2

Sprin Cloud 构建的微服务系统中可以使用 Spring Cloud OAuth2 来保护微服务系统

![在这里插入图片描述]( https://img-blog.csdnimg.cn/20210501225318587.png?x-oss-process=image/watermark ,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTIwNjAwMzM=,size_16,color_FFFFFF,t_70)

2.2.9 Sleuth

Spring Cloud SleuthSpring Cloud 的组件,它的主要功能是在分布式系统中提供服务链路追踪的解决方案
![在这里插入图片描述]( https://img-blog.csdnimg.cn/20210501225345876.png?x-oss-process=image/watermark ,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTIwNjAwMzM=,size_16,color_FFFFFF,t_70)

posted @ 2021-05-02 13:03  上善若泪  阅读(163)  评论(0)    收藏  举报