尽管JDK提供了丰富的NIO类库,网上也有很多NIO学习例程,但是直接使用Java NIO类库想要开发出稳定可靠的通信框架却并非易事,原因如下:

1)NIO的类库和API繁杂,使用麻烦,你需要熟练掌握 Selector、Server Socket Channel
SocketChannel、ByteBuffer等。

2) 需要具备其他的额外技能做铺垫,例如熟悉Java多线程编程。这是因为NIO编程涉及到 Reactor模式,你必须对多线程和网路编程非常熟悉,才能编写出高质量的NIO程序。

3)可靠性能力补齐,工作量和难度都非常大。例如客户端面临断连重连、网络闪断、半包读写、失败缓存、网络拥塞和异常码流的处理等问题,NIO编程的特点是功能开发相对容易,但是可靠性能力补齐的工作量和难度都非常大。

4) JDK NIO的BUG,例如臭名昭著的epoll bug,它会导致Selector空轮询,最终导致CPU100% 。官方声称在JDK16版本的 updateI8修复了该问题,但是直到JDK1.7版本该问题仍旧存在,只不过该BUG发生概率降低了一些而已,它并没有被根本解决。该BUG以及与该BUG相关的问题单可以参见以下链接内容:

http://bugsjava.com/bugdatabase/viewbug.do?bugid=6403933
http:/bugs.javacom/bugdatabase/viewbugdo?bugid=2147719

随着开源NO框架的发展,目前越来越多的商用系统采取直接集成开源NO框架的方式代替之前的自研方案。以最成熟的NIO框架Netty为例,它已经得到成百上千的商用项目验证。例如 Hadoop的RPC框架avro使用Netty作为底层通信框架、实时流式计算框架Sum底层通信框架也采用的是Netty,还有 Twitter内部使用的RPC框架 Finagle,其底层通信框架也基于Netty构建。

Netty的优势总结如下:

◎API使用简单,开发门槛低。

◎功能强大,预置了多种编解码功能,支持多种主流协议。

◎定制能力强,可以通过 ChannelHandler对通信框架进行灵活地扩展。

◎性能高,通过与其他业界主流的NO框架对比,Netty的综合性能最优。

◎成熟、稳定,Nety修复了已经发现的所有 JDK NIO BUG,业务开发人员不需要再为N1O的BUG而烦恼。

◎社区活跃,版本迭代周期短,发现的BUG可以被及时修复。同时,更多的新功能会加入。

◎经历了大规模的商业应用考验,质量得到验证。在互联网、大数据、网络游戏、企业应用、电信软件等众多行业得到成功商用,证明了它已经完全能够满足不同行业的商业应用了。

Netty的表现如此优秀,因此我们的通信框架基于Netty进行设计和开发。
 
本文参考李林锋《分布式服务框架原理与实践》,上海尚学堂Java培训整理,阅读更多Java技术文章请返回本栏目,获取java技术资料或学习视频,请联系客服小姐姐。

以下文章值得一读:《分布式服务架构原理和功能特性_上海java培训》、《什么是微服务架构?微服务架构与SOA架构区别》、《RPC架构与原理,以及业界主流的RPC框架简介》、《经典的垂直应用框架-MVC框架介绍

分布式服务框架介绍:最成熟的开源NIO框架Netty的更多相关文章

  1. Java框架介绍-13个不容错过的框架项目

    本文转自互联网,个人收藏所用. 下面,我们将一同分享各有趣且颇为实用的Java库,大家请任取所需.不用客气~ 1.极致精简的Java Bootique是一项用于构建无容器可运行Java应用的极简技术. ...

  2. 【原创】NIO框架入门(一):服务端基于Netty4的UDP双向通信Demo演示

    申明:本文由作者基于日常实践整理,希望对初次接触MINA.Netty的人有所启发.如需与作者交流,见文签名,互相学习. 学习交流 更多学习资料:点此进入 推荐 移动端即时通讯交流: 215891622 ...

  3. 开源分享 Unity3d客户端与C#分布式服务端游戏框架

    很久之前,在博客园写了一篇文章,<分布式网游server的一些想法语言和平台的选择>,当时就有了用C#做网游服务端的想法.写了个Unity3d客户端分布式服务端框架,最近发布了1.0版本, ...

  4. dubbo 分布式服务框架 介绍

    Dubbo是阿里巴巴内部的SOA服务化治理方案的核心框架,每天为2000+ 个服务提供3,000,000,000+ 次访问量支持,并被广泛应用于阿里巴巴集团的各成员站点.Dubbo自2011年开源后, ...

  5. 微软开源 WCF 分布式服务框架,并入 .NET 基金会项目

    微软北京时间2015.5.20 在其 .NET Foundation GitHub 开源项目页中开放了 WCF 分布式服务框架的代码.WCF突然之间成为一个热门话题,在各大网站上都有不同的报道:dot ...

  6. 阿里巴巴分布式服务框架Dubbo介绍(1)主要特色

    引言 互联网服务和BS架构的传统企业软件相比,系统规模上产生了量级的差距.例如 传统BS企业内部门户只需要考虑数百人以及几千人的访问压力,而大型互联网服务有时需要考虑的是千万甚至上亿的用户: 传统企业 ...

  7. [推荐]dubbo分布式服务框架知识介绍

    [推荐]dubbo分布式服务框架知识介绍 CentOS+Jdk+Jboss+dubbo+zookeeper集群配置教程    http://wenku.baidu.com/view/20e8f36bf ...

  8. 【转】Dubbo是Alibaba开源的分布式服务框架

    Dubbo是Alibaba开源的分布式服务框架,它最大的特点是按照分层的方式来架构,使用这种方式可以使各个层之间解耦合(或者最大限度地松耦合).从服务模型的角度来看,Dubbo采用的是一种非常简单的模 ...

  9. Dubbo阿里Alibaba开源的分布式服务框架

    [获奖公布]"我的2016"主题征文活动    程序猿全指南,让[移动开发]更简单!      [观点]移动原生App开发和HTML 5开发,你更看好哪个?   博客的神秘功能 D ...

随机推荐

  1. python socket.error: [Errno 24] Too many open files

    以openwrt AR9331开发板为例,socket连接到1019个就报错 “python socket.error: [Errno 24] Too many open files” 1.查看开发板 ...

  2. SQL语句完整的执行顺序(01)

    一.sql语句的执行步骤:  1)语法分析,分析语句的语法是否符合规范,衡量语句中各表达式的意义.  2) 语义分析,检查语句中涉及的所有数据库对象是否存在,且用户有相应的权限.  3)视图转换,将涉 ...

  3. 远程链接mysql

    一. 设置账户密码 1. 创建用户:CREATE USER 'jiang'@'%' IDENTIFIED BY '1'; //%表示所有端口 2. 授予权限: GRANT ALL PRIVILEGES ...

  4. SSM框架中写sql在dao文件中以注解的方式

    1以注解方式 //两个参数其中一个是对象需写,对象.属性 @Update("update delivery_address set consignee = #{address.consign ...

  5. C#冒泡法排序源码

    如下内容内容是关于C#冒泡法排序的内容,应该对码农有一些用途. int[] myArray = new int[] { 10, 8, 3, 5, 6, 7, 4, 6, 9 }; for( int j ...

  6. hackerrank杂记

    https://www.hackerrank.com/challenges/py-set-discard-remove-pop/forum 知识点: *list:将list中的值取出,取出的数据大小是 ...

  7. [原创]X-HDL 4.2安装与使用

    由于涉及到VHDL工程,但实际工作中,用Verilog更多些,因此安装X-HDL进行转换,安装步骤与使用如下: X-HDL进行破解,破解如下: 安装完毕后,打开一个带转换的文件,进行如下操作: 链接: ...

  8. c/c++再学习:C++中public、protect、private的访问权限控制

    C++中public.protect.private的访问权限控制 访问权限 一个类的public成员变量.成员函数,可以通过类的成员函数.类的实例变量进行访问 一个类的protected成员变量.成 ...

  9. UOJ#24. 【IOI2014】Rail 交互题

    原文链接www.cnblogs.com/zhouzhendong/p/UOJ24.html 题解 我们将 C 型车站称为 左括号 '(', D 型车站称为右括号 ')' ,设括号 i 的位置为 p[i ...

  10. ConcurrentHashmap详解以及在JDK1.8的更新

    因为hashmap本身是非线程安全的,如果多线程对hashmap进行put操作的话,就会导致死循环等现象.ConcurrentHashMap主要就是为了应对hashmap在并发环境下不安全而诞生的,C ...