Dubbo服务器宕机,服务下线,如何应对大量流量? (dubbo服务器下线流量)

Dubbo服务器宕机,服务下线,如何应对大量流量?

Dubbo是Alibaba开源的高性能Java RPC框架,常被用于互联网大型分布式系统中,提供服务治理的核心功能。然而,当Dubbo服务器出现宕机故障时,将会导致服务下线,给系统造成极大的影响,特别是在面对大量流量时更是如此。本文将探讨Dubbo服务器宕机故障时应对大量流量的解决方案。

了解Dubbo宕机原因和现象是应对宕机故障的前提。Dubbo服务器宕机主要发生在以下几种情况中:

1.网络问题:包括网络延迟、路由故障等。

2.硬件故障:包括硬盘故障、机器故障等。

3.操作系统问题:包括进程崩溃、内存泄漏等。

Dubbo服务器宕机导致的现象一般有以下几个方面:

1.服务请求超时:因为没有服务可供调用,导致请求超时。

2.服务不可用:服务下线,不可供调用。

3.流量高峰:前期请求未能得到及时响应,请求被积累,目前有大量请求等待被处理。

接下来,针对 Dubbo服务器宕机导致的大量流量应对策略如下:

1. 自动切换服务

Dubbo提供了服务降级和自动切换的机制,当检测到当前服务宕机后,可以自动转换到另一个备用服务上,并向客户端返回正确的响应。虽然自动切换需要一定的成本和实现,但可以避免服务不可用的情况出现,减少对用户的影响。

2.负载均衡

Dubbo提供了多种负载均衡算法,在某个服务不可用时,可以采用负载均衡策略将请求分发到其他健康的服务器上,避免单点故障。选择合适的负载均衡算法,可以有效降低Dubbo服务器宕机造成的流量压力。

3.容错机制

Dubbo提供了多种容错机制,例如重试、失败自动切换和断路器等。当Dubbo服务器出现宕机故障时,容错机制可以自动检测当前的服务状况,并做出相应的处理。重试机制可以尝试多次请求,直到成功;失败自动切换机制,在某个服务不可用时,可以切换到备用服务器上;断路器机制会在一定时间内自动断开不可用的服务,防止服务降级时出现雪崩效应。

4. 科学的紧急预案

Dubbo服务器宕机可能带来的影响是严重的,往往需要秒级响应,尽量减少损失。因此,需要制定科学的紧急预案,以确保在出现Dubbo服务器宕机时能够迅速响应。紧急预案需要包括以下几个方面:

(1)及时发现问题:通过实时监控和告警系统等,发现Dubbo服务器宕机问题。

(2)快速应对问题:有专门的应急流程和团队,能够迅速进行故障定位和处理,调整系统资源等,以确保服务得以恢复。

(3)迅速恢复业务:及时将备用机器接管服务,确保业务正常运转。

综上所述,Dubbo服务器宕机将导致系统出现服务下线和大量流量等问题,为了避免对业务造成严重影响,需要通过自动切换服务、负载均衡、容错机制以及科学的紧急预案等方式来优化服务治理,保证Dubbo服务器在极端情况下也可以保持服务的高可用性。

相关问题拓展阅读:

Dubbo高性能网关–Flurry介绍

从架构的角度来看,API网关暴露http接口服务,其本身不涉及业务逻辑,只负责包括请求路由、负载均衡、权限验证、流量控制、缓存等等功能。其定位类似于Nginx请求转发、但功能要多于Nginx,背后连接了成百上千个后台服务,这些服务协议可能是rest的,也可能是rpc协议等等。

网关的定位决定了它生来就需要高性能、高效率租明的。网关对接着成百上千的服务接口,承受者高并发的业务需求,因此我们对其性能要求严苛,其基本功能如下:

Flurry是云集自研的一款轻量级、异步流式化、针对Dubbo的高性能API网关。与业界大多数网关不同的是,flurry自己实现了 http与dubbo协议互转的流式化的dubbo-json协议,可高性能悉型银、低内存要求的对http和dubbo协议进行转换。除此之外,其基于 netty作为服务容器,提供服务元数据模型等等都是非常具有特点的。下面我们将详细介绍 flurry的特性:

Flurry 网关请求响应基于Netty线程模型,后者是实现了Reactive,反应式模式规范的,其设计就是来榨干CPU的,可以大幅提升单机请求响应的处理能力。

最终,Flurry通过使用Netty线程模型和NIO通讯协议实现了HTTP请求和响应的异步化。

每一次http请求最终都会由Netty的一个Client Handler来处理,其最终以异步模式请求后台服务,并返回一个CompletableFuture,当有结果返回时才会将结果返回给前端。

见下面一段例子:

有了服务元数据,我们就可以不必需要睁宴服务的API包,并能够清晰的知道整个服务API的定义。

这在Dubbo服务Mock调用、服务测试、文档站点、流式调用等等场景下都可以发挥抢到的作用。

小孩子才分对错,成年人只看利弊。额外引入一个元数据生成机制,必然带来运维成本、理解成本、迁移成本等问题,那么它具备怎样的价值,来说服大家选择它呢?上面我们介绍元数据中心时已经提到了服务测试、服务 MOCK 等场景,这一节我们重点探讨一下元数据中心的价值和使用场景。

那么,Dubbo服务元数据能够利用到哪些场景呢?下面我们来详细描述。

Http请求,数据通过ON传输,其格式严格按照接口POJO属性。返回结果再序列化为Json返回前端。现在大多数开源的网关,在dubbo协议适配上都是采用的泛化模式来做到协议转换的,这其中就包括 Soul 等。

JsonString -> ONObject(Map) -> Binary

将ON 字符串转换为 ON 对象模型(ONObject),此处通过第三方ON映射框架(如Google的Gson, 阿里的FastON等)来做,然后将Map通过Hessian2 协议序列化为Binaray。

自定义的Dubbo-Json协议参考了 dapeng-soa 的流式解析协议的思想,详情请参考: dapeng-json

针对上述泛化模式转换Dubbo协议的缺点,我们在flurry-core 中的 Dubbo-Json 序列化协议做到了这点,下面我们来讲解它是如何高效率的完成JsonString到 dubbo hessian2 序列化buffer的转换的。

虽然大部分情况下的ON请求、返回都是数据量较小的场景, 但作为平台框架, 也需要应对更大的ON请求和返回, 比如1M、甚至10M. 在这些场景下, 如果需要占用大量的内存, 那么势必导致巨大的内存需求, 同时引发频繁的GC操作, 也会联动影响到整个网关的性能.

Dubbo-Json参考了XML SAX API的设计思想, 创造性的引入了ON Stream API, 采用流式的处理模式, 实现ON 对 hessian2 的双向转换, 无论数据包有多大, 都可以在一定固定的内存规模内完成.

流式协议,顾名思义就是边读取边解析,数据像水流一样在管道中流动,边流动边解析,最后,数据解析完成时,转换成的hessian协议也已全部写入到了buffer中。

这里处理的核心思想就是实现自己的Json to hessian2 buffer 的语法和此法解析器,并配合前文提及的元数据功能,对每一个读取到的json片段通过元数据获取到其类型,并使用 hessian2协议以具体的方式写入到buffer中。

首先我们来看看ON的结构. 一个典型的ON结构体如下

其对应Java POJO 自然就是上述三个属性,这里我们略过。下面是POJO生成的元数据信息

相比XML而言,ON数据类型比较简单, 由 Object/Array/Value/String/Boolean/Number 等元素组成, 每种元素都由特定的字符开和结束. 例如Object以'{‘以及’}’这两个字符标志开始以及结束, 而Array是”. 简单的结构使得ON比较容易组装以及解析。

如图,我们可以清晰的了解ON的结构,那么对上述ON进行解析时,当每一次解析到一个基本类型时,先解析到key,然后根据key到元数据信息中获取到其value类型,然后直接根据对应类型的hessian2序列化器将其序列化到byte buffer中。

当解析到引用类型,即 Struct类型时,我们将其压入栈顶,就和java方法调用压栈操作类似。

通过上面的步骤一步一步,每解析一步Json,就将其写入到byte buffer中,最终完成整个流式的解析过程。

拿上面json为例:

总结:

上述整个请求和响应,网关处理如下:

请求和响应中没有像泛化模式中的中间对象转换,直接一步到位,没有多余的临时对象占用内存,没有多余的数据转换,整个过程像在管道中流式的进行。

如上图所示,flurry dubbo网关不必依赖任何dubbo接口API包,而是直接通过获取服务元数据、并通过dubbo-json流式协议来调用后端服务。其本身不会耦合业务逻辑。

硬件部署与参数调整

对基于Y-Hessian的 异步化、流式转换的Yunji Dubbo API网关进行性能压测,了解它的处理能力极限是多少,这样有便于我们推断其上线后的处理能力,以及对照现有的Tomcat接入层模式的优势,能够节约多少资源,做到心里有数。

性能测试场景

上述场景均使用wrk在压测节点上进行5~10min钟的压测,压测参数基本为12线程256连接或者512连接,以发挥更大的压测性能。

flurry集Dubbo网关、异步、流式、高性能于一身,其目标就是替代一些以tomcat作为dubbo消费者的接入层,以更少的节点获得更多的性能提升,节约硬件资源和软件资源。

后续在flurry的基础上,将实现鉴权管理、流量控制、限流熔断、监控收集等等功能

Flurry : 基于Dubbo服务的高性能、异步、流式网关

dubbo-json : 自定义的Dubbo协议,支持流式序列化模式,为flurry网关序列化/反序列化组件。

Yunji-doc-site : 与元数据集成相关的项目,以及文档站点

dapeng-soa : Dapeng-soa 是一个轻量级、高性能的微服务框架,构建在Netty以及定制的精简版Thrift之上。 同时,从Thrift IDL文件自动生成的服务元数据信息是本框架的一个重要特性,很多其它重要特性都依赖于服务元数据信息。 最后,作为一站式的微服务解决方案,Dapeng-soa还提供了一系列的脚手架工具以支持用户快速的搭建微服务系统

dubbo服务器下线流量的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于dubbo服务器下线流量,Dubbo服务器宕机,服务下线,如何应对大量流量?,Dubbo高性能网关–Flurry介绍的信息别忘了在本站进行查找喔。


数据运维技术 » Dubbo服务器宕机,服务下线,如何应对大量流量? (dubbo服务器下线流量)