IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> 分布式微服务与springCloud之微简介 -> 正文阅读

[Java知识库]分布式微服务与springCloud之微简介

背景:

随着互联网的高速发展,传统的单体应用已经无法满足暴雨式的用户需求和繁杂的业务需求,为了解决这个问题,人们开始寻找新的方法。。。

场景一:服务器集群

既然一台服务器无法hold住那么多请求线程,那就水平扩展一下,多找几个人来帮忙不就行了。

具体操作为:

????????将原来的单体应用复制多份,然后反向代理负载均衡一下。 起初可以放在一个服务器中,每个单体应用为一个进程,监听一个端口;访问量再大时可以增加多个服务器,每个服务器中部署一个或多个应用,应用也是以进程的方式存在。

????????然后用诸如Nginx、LVS、F5等软件或硬件,反向代理集群服务器,并设置响应的负载均衡算法,用一个域名统一对外提供访问。

场景二:分布式与微服务

面对繁杂的业务,单体应用的代码会变得非常多,开发和部署都很费时费力,而且单台服务器的能力有限不利于扩展。

这时我们要采用组件化的思想对系统进行拆分(这很难,需要对业务和技术都无比熟悉),拆分后每个子系统都能独立开发部署运行,无论是部署到单台服务器上,还是多台甚至异地的服务器上,子系统之后都是通过网络进行通信。拆分后的整个系统成为分布式系统,单个独立运行的子系统称为微服务。

综上,集群解决的是代码不庞大,但访问量大。分布式先解决系统代码庞大,之后到分布式集群时才解决单个模块访问量大,因为之后当单个模块访问量大时,可以针对单个模块进行集群处理。

场景三:springCloud

分布式系统构建。

无论是旧系统的拆分后构建还是从0开始构建分布式系统,都会遇到一下问题:

  1. 子系统间如何高效通信?
  2. 如何去找到有哪些服务的提供者和服务的消费者?
  3. 服务提供者调用超时怎么处理?突然间的访问量暴增冲垮了单个微服务怎么办?
  4. 这么多微服务,前端应该调用哪一个?对请求进行拦截过滤等操作在哪进行?
  5. 一个请求需要经过多个服务时,事务怎么保证?

针对问题1:

????????springCloud提供了OpenFeign来处理服务间的高效通信。对比于之前的如HttpClient、RestTemplate等http工具,OpenFeign采用接口声明式的方式实现http通信,极大地简化了http通信代码的编写,除此之外OpenFeign还内置的请求日志记录工具、针对请求超时的处理、内置了Ribbon可以很方便的实现客户端负载均衡调用。

针对问题2:

????????springCloud提供了Eureka来完成一个服务注册中心功能。所有的服务提供者和消费者都能在上面找到,并可以看到每个client的在线状态,起到了一个服务注册和统一管理的作用。支持服务名和服务IP的映射,代码中可以写服务名,这样当某些服务提供者更换IP后,只需要将当前应用的名称和之前保持一致即可,对于服务调用者来说是无感知的。这就是 “中间加一层” 的好处。

针对问题3:

????????springCloud提供了hystrix来完成微服务的熔断、限流和降级处理,保障系统平稳运行。比如当B服务宕机导致A服务调用超时,因为此时线程还被占用着,试想一下如果该接口的访问量很大,将导致没有线程可用,该服务停止服务出现宕机,如果其他服务也调用该宕机的服务,也会出现线程池打满没有可用的线程,出现宕机,另外的服务也调用了这些宕机的服务时,也会跟着出现级联宕机的情况,整个分布式系统瘫痪只是时间的问题。所以此时就需要一个接口调用超时后自动断开连接的方法、接口突然收到大量访问导致瘫痪时自动暂时停止服务的方法、并作出超时或限流后的备用处理方法,这是hystrix就派上用场了,他就是专门干这个的。所以可以将hystrix形容为分布式系统的“守护天使”。

针对问题4:

? ? ? ? springCloud提供了gateway来作为整个分布式系统的网关。网关就是网络关口嘛。至于为啥要用网关?试想如果不用网关,前端直接通过IP+端口的方式也能调用,但是如果IP或端口变了呢?又或者如果某个微服务是集群的,服务器端又不做负载均衡,前端咋调用?如果使用网关的话,前端只需要调用网关,至于网关怎么去处理该请求就和前端无关了。

? ? ? ? 其实网关就是在前端和后端众多微服务之间加了一层,做了一个代理,这样就可以解耦了,更加的灵活。他有点像代码中代表配置文件的单例配置类,有点像网络中的网关,有点像Nginx中的master进程,总之他就是整个分布式系统的大门,没有网关就是门都没有进不来

????????如果用一个设计模式来形容分布式系统,我觉得会是外观模式,因为对于客户端来说,他只需要向网关发送一个url参数,就可以得到他想要的功能,至于网关内部是怎么实现的,客户端不需要知道,也不愿意知道。又或者是代理模式。

针对问题5:

? ? ? ? springCloud提供了个p,但是springCloudAlibaba倒是提供了一个叫Seata的框架,可以作为分布式事务的解决方案,保证数据的一致性。他提供了一个1+3组件模型来描述工作是如何运转的,挺有意思的,有兴趣的可以去他官网?看看,可以增加你的想象力。

另外,springCloud还提供了诸如

config分布式配置中心,将微服务的配置文件提取出来,可以实现统一的和实时的配置。

sleuth分布式请求链路追踪,可以看到一个请求在整个分布式系统中都经过了哪些微服务处理。

bus分布式消息总线

还有springCloudAlibaba提供的一个组件等。

????????但是综上所述,能使用到springCloud提供的组件将上述5个问题或者前4个问题解决就很好了,不是说人家有啥我就用啥,贪多嚼不烂,适合自己的才是最好的,你说呢?

????????本文主要是对集群、分布式概念做了简单介绍,并对分布式系统构建过程中可能会遇到的问题,以及如何利用springCloud提供的组件来解决这些问题,做了简单介绍,希望能对你有帮助,如果能引起你对分布式系统的兴趣,那就再好不过了,完了,谢谢,鞠躬!

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-02-27 10:57:09  更:2022-02-27 10:57:22 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 11:49:08-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码