| |
|
开发:
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: ????????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提供的组件来解决这些问题,做了简单介绍,希望能对你有帮助,如果能引起你对分布式系统的兴趣,那就再好不过了,完了,谢谢,鞠躬! |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |