`
jieke_ZJ
  • 浏览: 43310 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

dubbo底层之Netty

 
阅读更多

背景

  1. Java线程:由开始的单线程,到通过new Thread()创建的多线程,再到现如今的线程池,Java多线程编程的效率和性能有了很大的提升
  2. Reactor模型:基于事件驱动,适合处理海量I/O事件

    1)  单线程模型,所有的IO操作都在一个NIO线程上完成

    存在性能和可靠性上的问题

    2)  多线程模型,有一组NIO线程处理IO操作

    有一个专门的NIO线程-Acceptor线程用于监听服务端,接收客户端的TCP连接请求;

    有一个NIO线程池,负责消息的读取、发送、编码、解码;

    一个NIO线程能负责N条链路,一条链路只能由一个线程负责(防止发生并发操作问题)

    3)  主从多线程模型

    添加主线程池用于处理客户端的连接请求,一旦链路建立成功(经过握手、认证等过程),就将链路注册到从线程池的IO线程上,由IO线程负责后续的IO操作

Netty线程模型

  1.线程模型分类

    1)  服务端线程模型,类似于Reactor的多线程模型

    2)  客户端线程模型:由客户端创建SocketChannel,发起连接,线程池判断连接结果,如果连接成功,则监听读操作位,否则监听连接操作位,一旦连接成功就监听读操作位

  2.Reactor线程NioEventLoop

    1)  作为服务端Acceptor线程,处理客户端的连接请求

    2)  作为客户端的connector,注册监听连接操作位,判断异步连接结果

    3)  作为IO线程,监听读操作位,负责从SorcketChannel中读取报文

    4)  作为IO线程,监听写操作位,负责向SocketChannel写入报文发送给对方

    5)  作为定时线程,执行定时任务(链路空闲检测,心跳检测)

    6)  作为线程执行器,可以执行普通的任务线程

  3.NioEventLoop设计原理

    1)  串行化设计理念:NioEventLoop线程池中有若干个NioEventLoop线程,每一个NioEventLoop线程串行执行Handler链;每当有一个客户端接入,从线程池中获取一个可用的NioEventLoop线程,当数组到达上限之后,从0开始(负载均衡);每个客户端连接一个线程,这样保证了数据的安全性(避免多个线程同时访问)

    2)  定时任务和时间轮算法:客户端连接超时,链路空闲检测

    Netty的定时任务调度就是基于时间轮调度算法,首先查看任务队列中是否有超时的定时任务或者普通任务,有则执行(按照时间片原则分配运行时间),没有就等待定时任务中延迟最小的任务(即即将第一个超时的任务)的延迟时间,然后将扫描定时任务,将超时的定时任务加入任务队列,在任务执行时,Netty每执行64个定时任务就检测一次是否达到执行时间上限,达到则退出,如果没有执行完就放到下次轮询时再处理。

    3)  Netty是个异步高性能NIO框架,不是业务处理容器,不需要也不应该提供业务容器和业务线程,,只需要提供和管理NIO线程,关于业务层模型由用户自己集成。

Netty结构

 

Dubbo通信层(利用Netty)的实现过程

 

分享到:
评论

相关推荐

    深入浅析Netty 在 Dubbo 中是如何应用的

    国内知名框架 Dubbo 底层使用的是 Netty 作为网络通信,那么内部到底是如何使用的呢?今天通过本文给大家详细讲解,对Netty 在 Dubbo中应用相关知识感兴趣的朋友跟随小编一起看看吧

    java聊天源码,springboot2聊天源码,dubbo聊天源码,netty聊天源码,java即时通信源码.zip

    数据库技术是软件开发中的必备技能,咱们从数据库基本操作到掌握数据库设计的能力,层层深入学习数据库设计思想,一个软件项目的底层逻辑中,数据的存储结构是重中之重,因此,数据库技术也是面试中常被面试官拿来...

    mic面试文档(九月份已更新).pdf

    3. Dubbo 底层使用 Netty 框架,基于 TCP 协议传输,配合 Hession 序列化完成 RPC 通信 4. Spring Cloud 是基于 Http 协议+Rest 接口调用远程过程的通信 Dubbo 是一个高性能、轻量级的开源 RPC 框架,提供了分布式...

    netty4.1.jar

    java NIO的封装框架 netty,可在android和web端使用。分布式开源框架中dubbo、Zookeeper,RocketMQ底层rpc通讯使用就是netty。

    Netty架构图,横向面一定要广

    dubbo,底层的网络传输,nio,Netty 是一款异步的事件驱动的网络应用程序框架,支持快速地开发可维护的高性能的面向协议的服务器和客户端

    消息推送中台websocket部分 + netty 手写 RPC

    1. 基于socketio实现websocket长链接 2. 基于原生netty实现rpc通讯 项目实现包含了消息推送关键理念,及DubboRPC通讯底层关键概念

    Netty高性能网络应用框架.rar

    Netty是一款高性能的网络通信框架,其应用也很广泛,比如常用的消息队列RocketMQ,RPC框架Dubbo在底层都有使用到Netty。在学习Netty之前,我们需要对IO模型要有一定的了解,其中最重要的就是NIO,所以今天打算先对NIO...

    JAVA版基于netty的物联网高并发智能网关.rar

    对于开发者,框架是易于使用的,屏蔽了底层细节,换来的是对原理的深入理解不够,对性能调优和理论的淡化,在很多优秀的线上产品dubbo、spark、zookeeper、elasticSearch等等,使用了netty作为底层通信IO框架支持后...

    Netty学习笔记

    Dubbo多协议RPC的支持 2、直接做服务器(消息推送服务,游戏后台) Netty如何确定要使用那些编码器和解码器 很简单,去看API文档 Netty自带的编码器可以解决99%的业务需求 1%自己编码 Netty中大文件上传的那个handler...

    停车场收费管理小程序源码

    后端开发语言java,框架oauth2+springboot2+dubbo,数据库mysql/mongodb/redis,即时通讯底层框架netty4,安卓和ios均为原生开发,后台管理模板vue-typescript-admin-template 源码安装方法 小程序 下载该代码到你...

    Netty教程:十二个实例带你轻松学习Netty

    在Java界,Netty无疑是开发网络应用的拿手菜。你不需要太多关注复杂的NIO模型和底层网络的细节,使用其丰富的接口,可以很容易的实现复杂的通讯功能。... 多款开源框架中应用了Netty,如阿里分布式服务框架 Dubbo

    Dubbo服务框架-其他

    提供高性能的基于代理的远程调用能力,服务以接口为粒度,为开发者屏蔽远程调用底层细节。 2、智能负载均衡 内置多种负载均衡策略,智能感知下游节点健康状况,显著减少调用延迟,提高系统吞吐量。 3、服务自动注册...

    java开发的智能微信停车场小程序源码+前端+部署文档 兼容市面上主流的多家摄像机.zip

    ①本停车场系统兼容市面上主流的多家...后端开发语言java,框架oauth2+springboot2+dubbo,数据库mysql/mongodb/redis,即时通讯底层框架netty4,安卓和ios均为原生开发,后台管理模板vue-typescript-admin-template

    java开发的停车场小程序源码+前端+部署文档 兼容市面上主流的多家摄像机

    功能介绍】: ①本停车场系统兼容市面上...后端开发语言java,框架oauth2+springboot2+dubbo,数据库mysql/mongodb/redis,即时通讯底层框架netty4,安卓和ios均为原生开发,后台管理模板vue-typescript-admin-template

    JAVA开发的智能微信停车场小程序源码+前端+部署文档 兼容市面上主流的多家摄像机.rar

    JAVA开发的智能微信停车场小程序源码+...后端开发语言java,框架oauth2+springboot2+dubbo,数据库mysql/mongodb/redis,即时通讯底层框架netty4,安卓和ios均为原生开发,后台管理模板vue-typescript-admin-template

    百度地图毕业设计源码-netty-projects:网络项目

    百度地图毕业设计源码 第一章:高并发编程Netty实战课程介绍 ...Hadopp子项目Avro项目,使用Netty作为底层通信框架 3)阿里巴巴开源的RPC框架 Dubbo 地址:http://dubbo.apache.org/zh-cn/ Netty在Dubbo里面使用的地址 ...

    停车场系统源码 停车场小程序源码 含前后端+部署说明 源码

    后端开发语言java,框架oauth2 springboot2 dubbo,数据库mysql/mongodb/redis,即时通讯底层框架netty4,安卓和ios均为原生开发,后台管理模板vue-typescript-admin-template 创建数据库名为caifeng的数据库,字符...

    停车场系统源码,停车场小程序源码含前后端+部署说明.rar

    后端开发语言java,框架oauth2+springboot2+dubbo,数据库mysql/mongodb/redis,即时通讯底层框架netty4,安卓和ios均为原生开发,后台管理模板vue-typescript-admin-template 创建数据库名为caifeng的数据库,字符...

    基于socket的rpc

    一个底层基于使用socket通信的rpc,实现了类似dubbo远程服务调用,版本一。 接着会继续开发底层通信使用netty, 注册中心使用zk, 实现动态获取服务器资源。

Global site tag (gtag.js) - Google Analytics