【SpringCloudNetflix】


前言

Spring Cloud是一个用于构建分布式系统的框架,它基于Spring框架,并提供了一系列用于解决分布式系统中常见问题的组件和工具。Spring Cloud的目标是简化分布式系统的开发,提供一致性、可靠性和弹性等特性。


一、应用架构的演变

随着互联的发展,使用互联网的人群越来越多,软件应用的体量越来越庞大和复杂,传统的单体应用可能不足以支撑大数据量以及高并发场景,应用的架构也随之进行演变,从最开始的单体应用架构到分布式(SOA)架构再到今天比较火的微服务架构,以及服务网格架构。
在这里插入图片描述

1.单体应用架构

1.1什么是单体架构?

单体架构(Monolithic Architecture)是一种传统的软件架构模式,它将整个应用程序作为一个单一的、完整的、可执行的单元进行开发、部署和运行。

在单体架构中,应用程序的所有功能模块和组件都被打包成一个单独的应用程序,共享同一个代码库和数据库。这意味着应用程序的所有功能、服务和数据都在同一个部署单元中。
在这里插入图片描述

1.2单体架构的优缺点

  • 优点:
    简单易懂:单体架构通常是从头开始构建应用程序,没有对分布式系统的复杂性和考虑。
    开发效率高、开发周期短:由于应用程序的所有模块都在同一个代码库中,可以更轻松地进行开发、测试和部署。
    轻量级部署:整个应用程序可以打包成一个单一的部署单元,简化了部署过程。
    性能优势:单体架构在本地执行所有功能模块,减少了网络调用和延迟。
  • 缺点:
    代码臃肿不方便开发维护(代码可读性差)
    代码编译系统启动变慢
    系统扩展性能变差(牵一发而动全身)
    无法针对某一个业务做扩展(集群)
    对大数据量,高并发量的处理不占优势
    技术选型单一
    模块/业务耦合度高

2.分布式与SOA

2.1.分布式架构

分布式就是将应用按照业务进行拆分成多个子应用,多个子应用部署在不同的服务器中,多个子应用组成一个完整的系统,所有的子系统一起工作相互通信相互协调才能完成最终的业务流程,缺一不可,简单理解:“多个人在一起做不同的事情,多人和在一起才是一件完整的事情,有点0.5+0.5=1的感觉”

如:在程序中将业务拆分成独立的系统,部署在不同的服务器上,相互独立,但又共同协作,同时,如果某个子系统压力依然很大,可以单独对该子系统再做集群,所以分布式和集群也并不冲突
在这里插入图片描述

2.2.面向服务的架构SOA

SOA是面向服务的架构,它的思想是每个子应用可以通过网络通信协议向其他子应用提供服务或者消费服务,SOA也是分布式架构,我们可以简单的理解为SOA把分布式架构划分成表示层和服务层,服务层中包含了业务逻辑和相关流程,只需要对外暴露服务即可,表现层负责处理和页面的交互。这样的划分好处在于系统之间调用的方便性,如用户子系统只需要调用订单子系统的服务层即可完成应用之间的通信。这样的结构划分提高了应用的重用性,业务逻辑也变得可组合。如图:
在这里插入图片描述
SOA架构中有重要的两个角色,服务消费者(Consumer)和服务提供者(Provider)即服务调用者和服务被调用者,这样的架构优点有:

  • 模块拆分,使用API通信,降低模块之间的耦合度
  • 项目拆分多个子应用,每个子应用业务简单,代码简单,方便维护开发。
  • 不同技术人员可以负责不同的子应用
  • 提高服务之间的重用性,业务逻辑可组合。

其缺点在于:

  • 服务之间的API接口开发增加了工作量,
  • SOA服务之间的网络通信调用对性能有一定的影响(尽管很小)
  • 相对于单体应用来说,技术,人力成本较高。
  • 部署和运维相对麻烦

3.微服务架构

3.1.什么是微服务?

微服务(Microservices)是一种软件架构风格,将一个大型应用程序拆分为一组小型、自治的服务,每个服务独立运行在自己的进程中,通过轻量级通信机制进行互相协作。

在微服务架构中,每个服务都专注于某个特定的业务功能,拥有自己的数据库、代码库和部署单元。这些服务之间通过网络进行通信,可以使用诸如HTTP、消息队列、RPC(远程过程调用)等方式进行交互。

微服务与单体对比图:
在这里插入图片描述
微服务特点:

  • 由多个服务组成完整的系统
  • 每个服务都是独立的,有自己的进程
  • 服务之间使用HTTP协议通信
  • 不同的服务可以使用不同的编程语言
  • 不同的服务的数据库可以多样化选择
  • 微服务是一个分布式系统

3.2 微服务的优缺点

在项目规模较大的时候,相对于单体应用来说,微服务具备很多优势,主要体现在如下方面:

  • 单个服务业务简单,代码简单方便开发维护
  • 服务之间无耦合,服务之间升级维护互不影响
  • 轻量级HTTP通信机制,使得的不同的服务可以采用不同的编程语言
  • 微服务有极强的扩展能力,业务量大的服务可以再次拆分服务,也可以进行集群部署,剔除服务也很方便
  • 更大的系统负载能力和容错能力(集群)
  • 对于开发人员来说,通常只需要关注单一服务,新员工上手也比较快
  • 微服务架构对现在流行的敏捷开发支持优化

凡是都有双面性,微服务展示出了他都优势之处,同时也有其不足的地方,主要体现如下方面:

  • 分布式事务 :服务通信机制增加了事务的复杂性,架构师要选择合适的分布式方案(CAP理论)
  • 部署麻烦 :微服务众多,部署麻烦,需要借助容器技术和自动化部署工具,这又增加了开发人员的学习成本。
  • 技术成本高 :微服务架构本身比较复杂,技术成本高,开发人员需要花更多的时间学习相关技术。
  • 服务通信对性能的损耗 : 微服务架构一定要考虑服务通信延迟对服务调用性能的损耗问题,开发人员需要选择合适的通信方式解决这一问题。

二、SpringCloud

1. SpringCloud是什么?

Spring cloud是一个基于Spring Boot实现的服务治理工具包,用于微服务架构中管理和协调服务的。Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。通过Spring Boot风格进行再封装屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。有了SpringCloud之后,让微服务架构的落地变得更简单。

2. SpringCloud常用组件

在这里插入图片描述

  • Netflix Eureka

当我们的微服务过多的时候,管理服务的通信地址是一个非常麻烦的事情,Eureka就是用来管理微服务的通信地址清单的,有了Eureka之后我们通过服务的名字就能实现服务的调用。

  • Netflix Ribbon\Feign : 客户端负载均衡

Ribbon和Feign都是客户端负载均衡器,它的作用是在服务发生调用的时候帮我们将请求按照某种规则分发到多个目标服务器上,简单理解就是用来解决微服务之间的通信问题。

  • Netflix Hystrix :断路器

微服务的调用是非常复杂的,有的时候一个请求需要很多的微服务共同完成,那么一旦某个服务发生故障,导致整个调用链上的微服务全都出现异常,甚至导致整个微服务架构瘫痪。Hystrix就是用来解决微服务故障,保护微服务安全的组件。

  • Netflix Zuul : 服务网关

zuul作为服务网关,我们可以把它看作是微服务的大门,所有的请求都需要经过zuul之后才能到达目标服务,根据这一特性,我们可以把微服务公共的是事情交给zuul统一处理,如:用户鉴权,请求监控等。

  • Spring Cloud Config :分布式配置

微服务架构中的服务实例非常的多,服务的配置文件分散在每个服务中,每次修改服务的配置文件和重新服务实例都是一个很麻烦的工作,Spring Cloud Config作为分布式配置管理中心就是用来统一的管理服务的配置文件。

  • Spring Cloud Bus : 消息总线

消息总线是在微服务中给各个微服务广播消息的一个组件,我们使用消息总线构建一个消息中心,其他微服务来接入到消息中心,当消息总线发起消息,接入的微服务都可以收到消息从而进行消费。

  • Spring Cloud sleuth :微服务链路追踪

当我们的应用采用微服务架构之后,后台可能有几十个甚至几百个服务在支撑,一个请求请求可能需要多次的服务调用最后才能完成,链路追踪的作用就是来监控维护之间的调用关系,让程序员方便直观的感受到一个请求经历了哪些微服务,以及服务的请求时间,是否有异常等。

3.SpringCloud的版本

SpringCloud是基于SpringBoot的,所以两者的jar包都需要导入,需要注意的是SprinbCloud的版本需要和SpringBoot的版本兼容

Release TrainBoot Version
Hoxton2.2.x
Greenwich2.1.x
Finchley2.0.x
Edgware1.5.x
Dalston1.5.x

4.服务通信协议

在微服务中服务间通过网络进行通信,那么服务间的远程调用方式有哪些呢?

4.1.RPC

RPC(Remote Produce Call)远程过程调用,类似的还有RMI。自定义数据格式,基于原生TCP通信,速度快,效率高。早期的webservice,现在热门的dubbo,都是RPC的典型

4.2.Http

Http其实是一种网络传输协议,基于TCP,规定了数据传输的格式。现在客户端浏览器与服务端通信基本都是采用Http协议。也可以用来进行远程服务调用。缺点是消息封装臃肿。 现在热门的Rest风格,就可以通过http协议来实现

我们可以认为SpringCloud就是基于Http协议实现服务之间的通信。

总结

记SpringCloud

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值