Apache mina,Netty的起源和历史

  Genesis of MINA    by Trustin Lee   文章来自:Apache mina   http://mina.apache.org/mina-project/road-map.html#genesis-of-mina

In June 2004, I released a network application framework, 'Netty2'. It was the first network application framework that provides event-based architecture in Java community. It attracted network application programmers because of its simplicity and ease of use. As the Netty2 community matured, its problems also arose. Netty2 didn't work fine with text protocols and had a critical architectural flaw that prevents users from using it for applications with many concurrent clients.

在2004年6月,我发布了一个网络应用程序框架,叫做“Netty2” .这是在java社区中第一个基于事件驱动的应用网络框架。因为“Netty2”的简单和容易使用,"Netty2"吸引了众多的程序开发者。 伴随着Netty社区的流行,Netty2在文本吸引和架构流上面不能够为开发者提高大量的并发客户端。

Quite a large amount of information was collected about what users like about Netty2 and what improvements they want from it for 6 months. It was clear they like its ease of use and unit-testability. They wanted support for UDP/IP and text protocols. I had to invent a cleaner, more flexible, and more extensible API so that it is easy to learn yet full-featured.

在这之后的6个月内,关于使用Netty的大量信息被收集来完善Netty2. Netty2是一个完整测试和容易使用。用户想Netty2能够支持UDP/IP和文本吸引。作者不得不实现一个聪明,灵活和容易拓展,容易学习的特性。

Meanwhile around 2003 at Apache Directory, Alex Karasulu was wrestling with a network application framework he developed based on the [Matt Welsh's SEDA (Staged Event Driven Architecture)|http://www.eecs.harvard.edu/~mdw/proj/seda/]. After several iterations Alex realized it was very difficult to manage, and started to research other network application frameworks looking for a replacement. He wanted something for Java that would scale like SEDA yet was simple to use like [ACE|http://www.cs.wustl.edu/~schmidt/ACE.html]. Alex encountered Netty2 at [gleamynode.net|http://gleamynode.net/] and contacted me asking if I wanted to work with him on a new network application framework.

同时,在Apache Directory 项目也在2003年左右。Alex Karasulu根据SEDA模式来开发一个网络框架。但是经过几次迭代,发现框架很难管理,并开始需求一个框架来代替。

Alex 因为Netty2找到了我,并邀请我一起完成一个网络框架。

In September 2004, I formally joined the Apache Directory team. Alex and I decided to mix concepts between the two architectures to create a new network application framework. We exchanged various ideas to extract the strengths of both legacy frameworks to ultimately come up with what is today's 'MINA'.

在2004年9月,作者加入了Apache Directory团队。Alex和作者准备混合两种框架的观念。经过多次交换大量思想后就形成了今天的Apache mina.


作者教育工作背景:

1999 年  – 2003 年  Yonsei University    信息来自:http://www.linkedin.com/in/trustin
          延世大学(Yonsei University)是一所位于韩国首尔的基督教私立研究型综合大学,韩国一流高等学府,与首尔大学(Seoul National University)和高丽大学(Korea University)被称为韩国大学的一片天(S.K.Y.)。
延世大学创建于1885年,是韩国历史最为悠久的大学之一。2011年,该校在亚洲排名16.  信息来自百度百科。

         Apple Inc. 2011 年 8 月 – 2011 年 10 月 (3 个月) As a full-time contractor, I troubleshoot Netty-based application performance issues

在2004年6月  可以找到作者发布的第一个Netty2版本。    信息来自:http://www.theserverside.com/discussions/thread.tss?thread_id=26416

Netty 2 is an event-driven network application framework. It provides an easy event-based API (like Swing) to develop high-performance, maintainable TCP/IP server/client application. Netty handles many essential features such as readiness selection, thread pooling, and buffer reuse which are required to build high- performance and capacity network applications in Java.

Netty 2's interesting features are:

  • Each messages of the user defined protocol are mapped to message classes; Protocols are maintainable in object-oriented way such as inheritance and polymorphism.
  • Utilizes Java NIO.
  • Thread pooling is implemented out-of-the-box.
  • NIO direct buffer is reused to reduce direct buffer allocation overhead.
  • I/O threads and event process threads are separated to avoid I/O to slow down from business logic.
在2004年又陆续发布了几个Netty2版本    http://www.theserverside.com/discussions/thread.tss?thread_id=27070

Netty 2 provides an easy event-based API (like Swing) to develop high-performance, maintainable TCP/IP server/client application. Netty provides many essential features such as readiness selection, thread pooling, write buffer DoS prevention, and buffer reuse which are required to build high- performance and capacity network applications.

New Features:

* 'Write buffer full' prevention: 
  * Detects too slow clients 
  * Throttles outgoing messages to avoid resource shortage 
* JMX-compliant: Thread pools and common configuration are MBean.
* The priority of all threads are now configurable on-the-fly.

Full Feature list:

* Event-based API: Netty handles all low level I/O call 
* Separation of message format and workflow 
* Protocol messages are represented as classes: Protocol implementation in object-oriented way! 
  * Polymorphism enables 'pluggable protocol'. 
  * Inheritance enables 'message part hierarchy'. 
* Java NIO: Better scalability 
* Built-in thread pool: 
  * I/O and event processing threads are separated. 
  * All thread priorities are configurable. 
* Direct byte buffer pooling: No direct buffer allocation overhead 
* Customizable event dispatcher: Flexible thread scheduling 
* 'Write buffer full' prevention: 
  * Detects too slow clients 
  * Throttles outgoing messages to avoid resource shortage 
* JMX-compliant: Thread pools and common configuration are MBean.



在2005年5月  mina 第一个版本在ApacheDS 项目中使用,并官方发布了第一个版本mina0.7.1    May 17 2005 04:54 EDT

信息来自:http://www.theserverside.com/discussions/thread.tss?thread_id=33969

The Apache Directory project team proudly announces the first official release of MINA 0.7.1.

MINA (Multipurpose Infrastructure for Network Applications) is a network application framework which helps users develop network applications easily by providing abstractions of network and protocol I/O layers.

在2009年 netty 3.1版本发布:

Netty 3.1.0.GA, the first major stable release of 3.1 branch, has been released.
 A lot of effort has been put into this release for more than a half year since the previous GA version was released. 
 The Netty project is an effort to provide an asynchronous, event-driven network application framework and tools for rapid development of maintainable, high-performance, high-scalability protocol servers and clients.
 In other words, Netty is a NIO client server framework that enables quick and easy development of network applications such as protocol servers and clients. 
 It simplifies and streamlines network programming such as TCP and UDP socket servers. Success Stories:
 Several community members shared his and her success stories with Netty since its beginning, and their stories were published to the official web site today. 
 Check out the testimonials and performance stories from real users. Changes Since 3.0: There were numberless improvements in features, performance, and API usability.
 The following is the list of the most noteworthy features:
Easier large data streaming
Easier protocol codec unit-testing
I/O timeout and idle state detection
Easier and safer application shutdown
More reliable OutOfMemoryError prevention
New transports:
OIO and NIO based UDP transport
Local transport (a.k.a. in-VM transport)
HTTP tunneling transport that bypasses a firewall
New out-of-the-box codecs:
HTTP client and server
Various utilities for proprietary protocol implementations
Integration with various technologies:
Google Protocol Buffers
JBoss Microcontainer, OSGi, Guice, and Spring



总结:Apache mina 和Netty作者作为韩国一流学府计算机科学的本科毕业生,从毕业就开始开发Java网络框架。JDK1.4在2003年开始出现Java NIO.

从起先的Netty 到 Apache Mina ,中间穿插着XSocket另外一个java网络框架,又到JBoss Netty  ,直到今天的Netty网络框架。

作者在世界顶级公司,苹果,推特和红帽子都有工作经验。可以说十年磨一剑。造就了今天Apache mina和Netty 这些经典网络框架被世界所使用。

今天的Netty依旧不断在维护更新,Netty的另外一个作者normanmaurer 也是一个具有十年+开发的经验。每一个月Netty都有在持续不断的更新。

Netty 必然会成为以后java工作者必不可少的工具。



你可能感兴趣的:(apache,mina)