December 13, 2005 ApacheCon US 2005 2
Agenda
• Overview• In-depth View• Implementation Demo• Future• Conclusion
OverviewA Multipurpose Infrastructure for Network Applications
December 13, 2005 ApacheCon US 2005 4
What is MINA?
• An acronym forA Multipurpose
InfrastructureFor Network
Applications
• A network application framework• A subproject of
• the Apache Directory Project
Overview
December 13, 2005 ApacheCon US 2005 5
Features
• Unified API• Easy• Event-driven• Abstracted from existing I/O APIs• Elegant application design
Overview
December 13, 2005 ApacheCon US 2005 6
Supported Transport Layers
• Out-of-the-box• Based on Java NIO (New I/O)
• Socket (TCP/IP)• Datagram (UDP/IP)
• In-VM pipe
• Pending:• Multicast• Serial and parallel port• <your favorite one>
Overview
December 13, 2005 ApacheCon US 2005 7
Elegant Application Design
• Unit test friendly• The Abstract API lets you test your
application without a real client or server via mock objects.
• Extensible• Runtime modification of application
behavior using ‘filters’
• Maintainable and Reusable• Separation of networking code (MINA),
protocol codec, and business logic
Overview
December 13, 2005 ApacheCon US 2005 8
Who Uses MINA?• The Apache Directory Project
• QuickFIX – QuickFIXEngine.org• Financial Information eXchange Protocol
• RED5 Server – OSFlash.org• Macromedia Flash Media RTMP
• JStyx – JStyx.sf.net• Styx, a file sharing NFS-like protocol
• Proprietary SMPP / SMS servers
• DNS• NTP
• LDAP• Kerberos
Overview
In-depth ViewA Multipurpose Infrastructure for Network Applications
December 13, 2005 ApacheCon US 2005 10
At the First GlanceRemote Peer
IoSessionManager
IoHandler
IoFilterChain
Core
Extension Point
Protocol Implementation
Legend
IoFilter #1
IoFilter #2
IoFilter #3
IoSession
• IoSessionManager• Where real I/O occurs• Generates I/O events• Processes I/O requests
• IoFilters• Filters I/O events and requests
• IoHandler• <Your protocol logic>
• IoSession• Represents a connection
In-depth
December 13, 2005 ApacheCon US 2005 11
IoSessionManagersIn-depth
IoAcceptor IoConnector
nio::DatagramConnector
nio::SocketConnector
vmpipe::VmPipeAcceptor vmpipe::VmPipeConnector
nio::DatagramAcceptor
nio::SocketAcceptor
IoSessionManagerServer-side:
Accepts clientsClient-side:Connects to a server
And their implementations
December 13, 2005 ApacheCon US 2005 12
IoSession
• A connection between an IoHandler and a remote peer• Provides ways to send an I/O request
• Write a message• Close the current connection
• State information• Idleness• Last I/O time
• Transport layer parameters• Attributes: Protocol-specific data storage
In-depth
December 13, 2005 ApacheCon US 2005 13
IoHandler• Where you implement your network
application
«interface»common::IoHandler
~ sessionCreated(IoSession) : void~ sessionOpened(IoSession) : void~ sessionClosed(IoSession) : void~ sessionIdle(IoSession, IdleStatus) : void~ exceptionCaught(IoSession, Throwable) : void~ messageReceived(IoSession, Object) : void~ messageSent(IoSession, Object) : void
In-depth
December 13, 2005 ApacheCon US 2005 14
IoFilter
• A reusable event & request interceptor• Hot-deployable
• Scope:• An IoSession or an IoSessionManager
In-depth
December 13, 2005 ApacheCon US 2005 15
IoFilter (Cont’d)
• Out-of-the box filters:• SSL / TLS• Remote peer blacklisting• Thread pool• Logger
• Pending filters:• Profiler• Traffic throttle• Lightweight firewall• Overload prevention
In-depth
December 13, 2005 ApacheCon US 2005 16
IoAcceptor IoHandler
No thread pool: single thread setting for minimal latency
Thread Pooling with IoFilter
IoAcceptorThread
PoolFilter
IoHandler
One thread pool: general setting for high throughput
In-depth
December 13, 2005 ApacheCon US 2005 17
Protocol Codec
• By default,• IoHandler uses a ByteBuffer to do I/O⇒ Tight coupling of
protocol codec and business logic :(
• ProtocolCodecFilter is an IoFilter• Performs transformation between
a ByteBuffer and a POJO (Plain Old Java Object)
⇒ Clear separation
In-depth
December 13, 2005 ApacheCon US 2005 18
Protocol Codec (Cont’d)Remote Peer
IoSessionManager
IoHandler
IoFilterChain
Core
Extension Point
Protocol Implementation
Legend
IoSession
ProtocolCodecFilterEncode
Decode
In-depth
December 13, 2005 ApacheCon US 2005 19
In-VM Pipe Transport Type
• A virtual pipe• Requires no protocol codec• I/O events and requests are converted into
direct method invocations.
• Two MINA servers in the same VM• Can bypass:
• Protocol codec• Network latency
In-depth
Implementation DemoA Multipurpose Infrastructure for Network Applications
December 13, 2005 ApacheCon US 2005 21
More Complex Examples
• Realistic examples:• Visit Here:
http://directory.apache.org/subprojects/network/getting_started.html
Demo
FutureA Multipurpose Infrastructure for Network Applications
December 13, 2005 ApacheCon US 2005 23
Integration with Apache ASN.1 for complex protocols
Users can build customized servers with ready-made protocol codecs.
Design custom protocols just like drawing a UML!
MINA as a PlatformFuture
HTTP
SMTP
FTP
……
Popular Protocols
Visual Protocol Designer
(ASN.1-based)
Rapidly Prototyped Protocol
Others
December 13, 2005 ApacheCon US 2005 24
Real-Time Management System
• A universal management view• JMX console and Web browser• Real time access
• Server traffic• IoFilter Hot-deploy• Which client is sending what message now?• Which message takes toolong to process?• And <what you want to monitor>
Future
December 13, 2005 ApacheCon US 2005 25
We Need Your Participation!
• Sounds exciting?• Please help MINA team!
• Try MINA• Ask questions• Criticize• Report bugs• Benchmark• Contribute code• Contribute a tutorial
Future
ConclusionA Multipurpose Infrastructure for Network Applications
December 13, 2005 ApacheCon US 2005 27
Conclusion
• MINA is an extensible network application framework that helps you implement your network application elegantly without compromising productivity.
• MINA can be a complete network application development & management platform if we get our effort together.
Conclusion
December 13, 2005 ApacheCon US 2005 28
Resources
• Homepage• http://directory.apache.org/subprojects/network/
• Mailing List• [email protected]
(Please use ‘[mina] prefix)
Thank You!Q & A