Dubbo线程模式和多协议与Netty线程模式详解分析

概述

Dubbo线程模型

IO线程组:负责IO流形式监听客户端的所有行为(连接、断开、发送读、写请求)

业务线程池:堆积和处理业务消息,默认fixed、同步阻塞队列、过载丢弃等属性

dispatcher:任务调度器,根据配置(默认all)把IO线程组监听到的事件派发到业务线程池。简单的操作,可以直接在IO线程组里做,复杂和慢的操作必须丢给业务线程池,比如数据库操作,因为IO线程组是 Nio多路复用一个 Selector 阻塞执行的,慢操作会导致其它请求的处理阻塞。

Dubbo多协议:

Dubbo协议:长连接、异步NIO、适合小数据高并发业务场景

Http协议:短连接,SpringCloud的Feign就是http协议交互的。

WebService 、Redis、Memcache、RMI等等协议

线程模型

IO线程:配置在netty连接点的用于处理网络数据的线程,主要处理编解码等直接与网络数据打交道的事件。

调用交互中,每个Provider都是一个Netty的Server端,每个Consumer都是Neety的Client端,Netty的Reactor模型中的 woker线程,就是这里指的IO线程。

每个Consumer连接成功后都有1个SocketChannel,都需要绑定在woker线程池的其中一个线程中,这里的关系是 1 对多的,1个IO线程可以绑定N个consumer的连接,从而实现 1个Provider对N个Consumer循环监听调用事件。

所以说Dubbo协议适用于 小数据量、高并发、服务提供者远小于消费者的业务场景的原理所在

业务线程:用于处理具体业务逻辑的线程,可以理解为自己在provider上写的代码所执行的线程环境。

这里也可以体现Dubbo协议框架的安全性,其实在Server端是具有一定的限流和堆积的作用。不过这种堆积是堆积在java内存中,宕机数据会丢失

防止过度的Consumer调用,导致Provider性能不足而宕机的风险。

业务线程池的饱和策略是直接抛弃且报错,结合Dubbo的多种重试策略,这个请求会很快转发到其它Provider上,从而提升了响应速度,使消费的负载更均衡

下面小编为大家整理了相关技术点如下:

需要相关资料的加群810589193免费获取!!!

Dubbo应用及源码解读

Dubbo简介及初入门

Dubbo管理中心及监控系统安装部署

领域驱动之如何正确划分Dubbo分布式服务

通讯协议TCP、UDP、HTTP分析

Dubbo负载均衡机制探析

如何完成Dubbo服务只订阅及只注册模式

架构师必备技术之如何设计Dubbo服务接口

Dubbo设计原理及源码分析

Dubbo容错机制及高扩展性分析

Dubbo服务与Docker虚拟化技术集成实战

线程模型设计的好坏,决定了系统的吞吐量,并发性和安全性能架构质量属性。Netty线程模型被精心的设计,既提升了并发性,又在很大程度避免锁,局部进行了无锁优化。

Netty线程模型

Netty服务端在启动的时候,创建了两个NioEventLoopGroup,它们实际是两个独立的Reactor线程池,一个用于接收客户端的TCP连接,另一个用于处理I/O相关的读写操作,或者执行系统Task,定时任务Task等。

Netty用于接收客户端请求的线程池职责如下:

接收客户端TCP连接,初始化Channel参数

将链路状态变更事件通知给ChannelPipeline

Netty处理I/O操作的线程池职责如下:

异步读取通信对端的数据报,发送读事件到ChannelPipeLine

异步发送消息到通信对端,调用ChannelPipeLine的消息发送接口

执行系统调用Task

执行定时任务Task

最佳实践

Netty的多线程编程最佳实践如下:

尽量不要再ChannelHandler中启动用户线程(解码后用于将POJO消息派发到后端业务线程的除外)

解码要放在NIO线程调度用的解码Handler中进行,不要切换到用户线程完成消息的解码。专门的类做专门的事,Netty内部提供了编码与解码的抽象类

如果用户业务逻辑复杂,不要再NIO线程上完成,建议派发到业务线程中执行,以保证NIO线程尽快被释放

如果用户业务逻辑简单,可以直接在NIO线程上完成。

下面小编为大家整理了相关技术点如下:

需要相关资料的加群810589193免费获取!!!

高性能Netty框架

Netty简介

I/O 演进之路及NIO 入门

Netty 开发环境搭建安装

TCP 粘包/拆包问题的解决之道

分隔符和定长解码器的应用

Netty 多协议开发和应用

WebSocket 协议开发

Netty源码分析

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,980评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,178评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,868评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,498评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,492评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,521评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,910评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,569评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,793评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,559评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,639评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,342评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,931评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,904评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,144评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,833评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,350评论 2 342

推荐阅读更多精彩内容

  • 概述 Dubbo线程模型 IO线程组:负责IO流形式监听客户端的所有行为(连接、断开、发送读、写请求) 业务线程池...
    黄靠谱阅读 672评论 0 7
  • 作者:李林锋 原文:http://www.infoq.com/cn/articles/netty-high-per...
    杨鑫科阅读 3,960评论 0 64
  • 1、Netty基础入门 Netty是由JBOSS提供的一个java开源框架。Netty提供异步的、事件驱动的网络应...
    我是嘻哈大哥阅读 4,686评论 0 31
  • RPC协议 RPC:远程过程调用,原则上来说系统间跨进程的调用都属于RPC范畴 RMI/HTTP/dubbo/Sp...
    目睹了整个事件的索先生阅读 10,199评论 0 1
  • 处女座的人真好啊 她家是那么干净 像一个五星级酒店 她的柜子上有世界地图,有油画,有一张倒牛奶的农妇明信片 她的客...
    翠西王阅读 138评论 0 0