introduction to minamina.apache.org/mina-project/resources/acus2007.pdf · 2020-02-25 · • mina...

83
The high-performance protocol construction toolkit. Apache Peter Royal <[email protected] > Originally presented at ApacheCon US 2007 in Atlanta, GA (if you can’t read this, move closer!) 1 Wednesday, November 14, 2007

Upload: others

Post on 20-Jun-2020

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Introduction to MINAmina.apache.org/mina-project/resources/ACUS2007.pdf · 2020-02-25 · • MINA version that wraps and provides additional convenience methods • auto-expanding,

The high-performance protocol construction toolkit.

Apache

Peter Royal <[email protected]>Originally presented at ApacheCon US 2007 in

Atlanta, GA

(if you can’t read this, move closer!)

1Wednesday, November 14, 2007

Page 2: Introduction to MINAmina.apache.org/mina-project/resources/ACUS2007.pdf · 2020-02-25 · • MINA version that wraps and provides additional convenience methods • auto-expanding,

Hi, I’m Peterhttp://fotap.org/~osi

2Wednesday, November 14, 2007

Page 3: Introduction to MINAmina.apache.org/mina-project/resources/ACUS2007.pdf · 2020-02-25 · • MINA version that wraps and provides additional convenience methods • auto-expanding,

MINA hacker since Fall 2005

3Wednesday, November 14, 2007

Page 4: Introduction to MINAmina.apache.org/mina-project/resources/ACUS2007.pdf · 2020-02-25 · • MINA version that wraps and provides additional convenience methods • auto-expanding,

Radar Networkshttp://radarnetworks.com

4Wednesday, November 14, 2007

Page 6: Introduction to MINAmina.apache.org/mina-project/resources/ACUS2007.pdf · 2020-02-25 · • MINA version that wraps and provides additional convenience methods • auto-expanding,

Apache Memberhttp://apache.org

6Wednesday, November 14, 2007

Page 7: Introduction to MINAmina.apache.org/mina-project/resources/ACUS2007.pdf · 2020-02-25 · • MINA version that wraps and provides additional convenience methods • auto-expanding,

What is MINA?

7Wednesday, November 14, 2007

Page 8: Introduction to MINAmina.apache.org/mina-project/resources/ACUS2007.pdf · 2020-02-25 · • MINA version that wraps and provides additional convenience methods • auto-expanding,

MINA?8Wednesday, November 14, 2007

Page 9: Introduction to MINAmina.apache.org/mina-project/resources/ACUS2007.pdf · 2020-02-25 · • MINA version that wraps and provides additional convenience methods • auto-expanding,

MultipurposeInfrastructureNetworkedApplications

http://mina.apache.org

9Wednesday, November 14, 2007

Page 10: Introduction to MINAmina.apache.org/mina-project/resources/ACUS2007.pdf · 2020-02-25 · • MINA version that wraps and provides additional convenience methods • auto-expanding,

Built on Java NIO

10Wednesday, November 14, 2007

Page 11: Introduction to MINAmina.apache.org/mina-project/resources/ACUS2007.pdf · 2020-02-25 · • MINA version that wraps and provides additional convenience methods • auto-expanding,

Non-Blocking

11Wednesday, November 14, 2007

Page 12: Introduction to MINAmina.apache.org/mina-project/resources/ACUS2007.pdf · 2020-02-25 · • MINA version that wraps and provides additional convenience methods • auto-expanding,

Asynchronous

12Wednesday, November 14, 2007

Page 13: Introduction to MINAmina.apache.org/mina-project/resources/ACUS2007.pdf · 2020-02-25 · • MINA version that wraps and provides additional convenience methods • auto-expanding,

Event-Driven(SEDA!)

13Wednesday, November 14, 2007

Page 14: Introduction to MINAmina.apache.org/mina-project/resources/ACUS2007.pdf · 2020-02-25 · • MINA version that wraps and provides additional convenience methods • auto-expanding,

Multiple Transports(framework is really agnostic)

14Wednesday, November 14, 2007

Page 15: Introduction to MINAmina.apache.org/mina-project/resources/ACUS2007.pdf · 2020-02-25 · • MINA version that wraps and provides additional convenience methods • auto-expanding,

TCP

15Wednesday, November 14, 2007

Page 16: Introduction to MINAmina.apache.org/mina-project/resources/ACUS2007.pdf · 2020-02-25 · • MINA version that wraps and provides additional convenience methods • auto-expanding,

UDP(being re-written for 2.0)

16Wednesday, November 14, 2007

Page 17: Introduction to MINAmina.apache.org/mina-project/resources/ACUS2007.pdf · 2020-02-25 · • MINA version that wraps and provides additional convenience methods • auto-expanding,

In-VM(great for testing)

17Wednesday, November 14, 2007

Page 18: Introduction to MINAmina.apache.org/mina-project/resources/ACUS2007.pdf · 2020-02-25 · • MINA version that wraps and provides additional convenience methods • auto-expanding,

Apache Portable Runtime (APR)

(under development, alternate TCP/UDP implementation)

18Wednesday, November 14, 2007

Page 19: Introduction to MINAmina.apache.org/mina-project/resources/ACUS2007.pdf · 2020-02-25 · • MINA version that wraps and provides additional convenience methods • auto-expanding,

(and more..)

19Wednesday, November 14, 2007

Page 20: Introduction to MINAmina.apache.org/mina-project/resources/ACUS2007.pdf · 2020-02-25 · • MINA version that wraps and provides additional convenience methods • auto-expanding,

Smartly Designed

20Wednesday, November 14, 2007

Page 21: Introduction to MINAmina.apache.org/mina-project/resources/ACUS2007.pdf · 2020-02-25 · • MINA version that wraps and provides additional convenience methods • auto-expanding,

Follows Inversion of Control Pattern

(plays nicely with PicoContainer, Spring, etc)

21Wednesday, November 14, 2007

Page 22: Introduction to MINAmina.apache.org/mina-project/resources/ACUS2007.pdf · 2020-02-25 · • MINA version that wraps and provides additional convenience methods • auto-expanding,

Separation of Concerns

22Wednesday, November 14, 2007

Page 23: Introduction to MINAmina.apache.org/mina-project/resources/ACUS2007.pdf · 2020-02-25 · • MINA version that wraps and provides additional convenience methods • auto-expanding,

Application Logic

Wire Protocol

Rather than this...23Wednesday, November 14, 2007

Page 24: Introduction to MINAmina.apache.org/mina-project/resources/ACUS2007.pdf · 2020-02-25 · • MINA version that wraps and provides additional convenience methods • auto-expanding,

Concerns are Separated

Wire Protocol

Application Logic

24Wednesday, November 14, 2007

Page 25: Introduction to MINAmina.apache.org/mina-project/resources/ACUS2007.pdf · 2020-02-25 · • MINA version that wraps and provides additional convenience methods • auto-expanding,

Stable and Production-Ready

• v1.0 released Fall 2006

• v1.1 released April 2007

• Same API as v1.0 but uses Java 5 Concurrency primitives

• v2.0 this year

• API simplification based on lessons learned

• Performance boosts too!

25Wednesday, November 14, 2007

Page 26: Introduction to MINAmina.apache.org/mina-project/resources/ACUS2007.pdf · 2020-02-25 · • MINA version that wraps and provides additional convenience methods • auto-expanding,

Many Protocols & Users(here are a few...)

26Wednesday, November 14, 2007

Page 27: Introduction to MINAmina.apache.org/mina-project/resources/ACUS2007.pdf · 2020-02-25 · • MINA version that wraps and provides additional convenience methods • auto-expanding,

Apache Directory

http://directory.apache.org

LDAPv3, NTP, DNS, DHCP and Kerberos

27Wednesday, November 14, 2007

Page 28: Introduction to MINAmina.apache.org/mina-project/resources/ACUS2007.pdf · 2020-02-25 · • MINA version that wraps and provides additional convenience methods • auto-expanding,

SubEthaSTMPhttp://subethasmtp.tigris.org/

SMTP

28Wednesday, November 14, 2007

Page 29: Introduction to MINAmina.apache.org/mina-project/resources/ACUS2007.pdf · 2020-02-25 · • MINA version that wraps and provides additional convenience methods • auto-expanding,

Apache (incubating)

Qpidhttp://cwiki.apache.org/qpid/

Advanced Messaging Queuing Protocol (AMQP)

(from Wall Street!)

29Wednesday, November 14, 2007

Page 31: Introduction to MINAmina.apache.org/mina-project/resources/ACUS2007.pdf · 2020-02-25 · • MINA version that wraps and provides additional convenience methods • auto-expanding,

red5http://www.osflash.org/red5

RTMP(talk to Flash player)

31Wednesday, November 14, 2007

Page 32: Introduction to MINAmina.apache.org/mina-project/resources/ACUS2007.pdf · 2020-02-25 · • MINA version that wraps and provides additional convenience methods • auto-expanding,

...and more!(maybe you, next time!)

32Wednesday, November 14, 2007

Page 33: Introduction to MINAmina.apache.org/mina-project/resources/ACUS2007.pdf · 2020-02-25 · • MINA version that wraps and provides additional convenience methods • auto-expanding,

Key Concepts

33Wednesday, November 14, 2007

Page 34: Introduction to MINAmina.apache.org/mina-project/resources/ACUS2007.pdf · 2020-02-25 · • MINA version that wraps and provides additional convenience methods • auto-expanding,

ByteBuffer

• Core NIO construct

• MINA version that wraps and provides additional convenience methods

• auto-expanding, string encoding

• MINA gives control...

• allocate from the Heap or Stack

• optional Pooling

• (in v2, will be non-pooled and heap-only, as it provides the best performance)

34Wednesday, November 14, 2007

Page 35: Introduction to MINAmina.apache.org/mina-project/resources/ACUS2007.pdf · 2020-02-25 · • MINA version that wraps and provides additional convenience methods • auto-expanding,

Future

• Represents a function call that completes asynchronously

• Provides blocking functions to retrieve the result

• MINA allows callbacks to be invoked upon completion, so invoking thread can “fire and forget”

• (unlike the Java 5 Future)

35Wednesday, November 14, 2007

Page 36: Introduction to MINAmina.apache.org/mina-project/resources/ACUS2007.pdf · 2020-02-25 · • MINA version that wraps and provides additional convenience methods • auto-expanding,

IoService

IoHandler

IoFilter

IoFilter

IoFilter

IoProcessor

Reads

Writes

36Wednesday, November 14, 2007

Page 37: Introduction to MINAmina.apache.org/mina-project/resources/ACUS2007.pdf · 2020-02-25 · • MINA version that wraps and provides additional convenience methods • auto-expanding,

IoHandler

IoProcessor

IoFilter

IoFilter

IoFilter

IoService

Reads

Writes

Two Versions

37Wednesday, November 14, 2007

Page 38: Introduction to MINAmina.apache.org/mina-project/resources/ACUS2007.pdf · 2020-02-25 · • MINA version that wraps and provides additional convenience methods • auto-expanding,

IoHandler

IoProcessor

IoFilter

IoFilter

IoFilter

IoService

Reads

Writes

IoAcceptor“act as server”

single thread for new connections

38Wednesday, November 14, 2007

Page 39: Introduction to MINAmina.apache.org/mina-project/resources/ACUS2007.pdf · 2020-02-25 · • MINA version that wraps and provides additional convenience methods • auto-expanding,

IoHandler

IoProcessor

IoFilter

IoFilter

IoFilter

IoService

Reads

Writes

IoConnector“act as client”

39Wednesday, November 14, 2007

Page 40: Introduction to MINAmina.apache.org/mina-project/resources/ACUS2007.pdf · 2020-02-25 · • MINA version that wraps and provides additional convenience methods • auto-expanding,

IoHandler

IoProcessor

IoFilter

IoFilter

IoFilter

IoService

Reads

Writes

Connection instance is an IoSession

40Wednesday, November 14, 2007

Page 41: Introduction to MINAmina.apache.org/mina-project/resources/ACUS2007.pdf · 2020-02-25 · • MINA version that wraps and provides additional convenience methods • auto-expanding,

IoHandler

IoProcessor

IoFilter

IoFilter

IoFilter

IoService

Reads

Writes

Handles reads and writes

41Wednesday, November 14, 2007

Page 42: Introduction to MINAmina.apache.org/mina-project/resources/ACUS2007.pdf · 2020-02-25 · • MINA version that wraps and provides additional convenience methods • auto-expanding,

IoHandler

IoProcessor

IoFilter

IoFilter

IoFilter

IoService

Reads

Writes

Instance count scales with CPU/Load

42Wednesday, November 14, 2007

Page 43: Introduction to MINAmina.apache.org/mina-project/resources/ACUS2007.pdf · 2020-02-25 · • MINA version that wraps and provides additional convenience methods • auto-expanding,

IoHandler

IoProcessor

IoFilter

IoFilter

IoFilter

IoService

Reads

Writes

Session fixed to an Instance(under review for v2)

43Wednesday, November 14, 2007

Page 44: Introduction to MINAmina.apache.org/mina-project/resources/ACUS2007.pdf · 2020-02-25 · • MINA version that wraps and provides additional convenience methods • auto-expanding,

IoHandler

IoProcessor

IoFilter

IoFilter

IoFilter

IoService

Reads

Writes

Chain of IoFilter’s

44Wednesday, November 14, 2007

Page 45: Introduction to MINAmina.apache.org/mina-project/resources/ACUS2007.pdf · 2020-02-25 · • MINA version that wraps and provides additional convenience methods • auto-expanding,

IoHandler

IoProcessor

IoFilter

IoFilter

IoFilter

IoService

Reads

Writes

Per Connection

45Wednesday, November 14, 2007

Page 46: Introduction to MINAmina.apache.org/mina-project/resources/ACUS2007.pdf · 2020-02-25 · • MINA version that wraps and provides additional convenience methods • auto-expanding,

IoHandler

IoProcessor

IoFilter

IoFilter

IoFilter

IoService

Reads

Writes

Reusable

46Wednesday, November 14, 2007

Page 47: Introduction to MINAmina.apache.org/mina-project/resources/ACUS2007.pdf · 2020-02-25 · • MINA version that wraps and provides additional convenience methods • auto-expanding,

IoHandler

IoProcessor

IoFilter

IoFilter

IoFilter

IoService

Reads

Writes

Hot Deployable

47Wednesday, November 14, 2007

Page 48: Introduction to MINAmina.apache.org/mina-project/resources/ACUS2007.pdf · 2020-02-25 · • MINA version that wraps and provides additional convenience methods • auto-expanding,

IoHandler

IoProcessor

IoFilter

IoFilter

IoFilter

IoService

Reads

Writes

Filter all eventsRead / Write / Idle / etc

48Wednesday, November 14, 2007

Page 49: Introduction to MINAmina.apache.org/mina-project/resources/ACUS2007.pdf · 2020-02-25 · • MINA version that wraps and provides additional convenience methods • auto-expanding,

IoHandler

IoProcessor

IoFilter

IoFilter

IoFilter

IoService

Reads

Writes

Application Logic Lives Here

49Wednesday, November 14, 2007

Page 50: Introduction to MINAmina.apache.org/mina-project/resources/ACUS2007.pdf · 2020-02-25 · • MINA version that wraps and provides additional convenience methods • auto-expanding,

Large Library of IoFilter’s

50Wednesday, November 14, 2007

Page 51: Introduction to MINAmina.apache.org/mina-project/resources/ACUS2007.pdf · 2020-02-25 · • MINA version that wraps and provides additional convenience methods • auto-expanding,

Protocol Conversion

• Framework to plug in your own codecs to handle conversion to/from a ByteBuffer

• Existing codecs

• Text-based

• Java Serialization

51Wednesday, November 14, 2007

Page 52: Introduction to MINAmina.apache.org/mina-project/resources/ACUS2007.pdf · 2020-02-25 · • MINA version that wraps and provides additional convenience methods • auto-expanding,

Blacklist

52Wednesday, November 14, 2007

Page 53: Introduction to MINAmina.apache.org/mina-project/resources/ACUS2007.pdf · 2020-02-25 · • MINA version that wraps and provides additional convenience methods • auto-expanding,

Logging(great for debugging!)

53Wednesday, November 14, 2007

Page 54: Introduction to MINAmina.apache.org/mina-project/resources/ACUS2007.pdf · 2020-02-25 · • MINA version that wraps and provides additional convenience methods • auto-expanding,

SSL / TLS

54Wednesday, November 14, 2007

Page 55: Introduction to MINAmina.apache.org/mina-project/resources/ACUS2007.pdf · 2020-02-25 · • MINA version that wraps and provides additional convenience methods • auto-expanding,

Compression

55Wednesday, November 14, 2007

Page 56: Introduction to MINAmina.apache.org/mina-project/resources/ACUS2007.pdf · 2020-02-25 · • MINA version that wraps and provides additional convenience methods • auto-expanding,

Read Throttling(write throttling is in 2.0)

56Wednesday, November 14, 2007

Page 57: Introduction to MINAmina.apache.org/mina-project/resources/ACUS2007.pdf · 2020-02-25 · • MINA version that wraps and provides additional convenience methods • auto-expanding,

Thread Models(a necessary evil)

57Wednesday, November 14, 2007

Page 58: Introduction to MINAmina.apache.org/mina-project/resources/ACUS2007.pdf · 2020-02-25 · • MINA version that wraps and provides additional convenience methods • auto-expanding,

“single threaded”

58Wednesday, November 14, 2007

Page 59: Introduction to MINAmina.apache.org/mina-project/resources/ACUS2007.pdf · 2020-02-25 · • MINA version that wraps and provides additional convenience methods • auto-expanding,

One IoProcessor Thread

59Wednesday, November 14, 2007

Page 60: Introduction to MINAmina.apache.org/mina-project/resources/ACUS2007.pdf · 2020-02-25 · • MINA version that wraps and provides additional convenience methods • auto-expanding,

Scalability sucks

60Wednesday, November 14, 2007

Page 61: Introduction to MINAmina.apache.org/mina-project/resources/ACUS2007.pdf · 2020-02-25 · • MINA version that wraps and provides additional convenience methods • auto-expanding,

Add more IoProcessor Threads

(at least one per CPU core)

61Wednesday, November 14, 2007

Page 62: Introduction to MINAmina.apache.org/mina-project/resources/ACUS2007.pdf · 2020-02-25 · • MINA version that wraps and provides additional convenience methods • auto-expanding,

Lowest latencyScales nicely

(connection latency to be addressed in v2)

62Wednesday, November 14, 2007

Page 63: Introduction to MINAmina.apache.org/mina-project/resources/ACUS2007.pdf · 2020-02-25 · • MINA version that wraps and provides additional convenience methods • auto-expanding,

“multi threaded”

63Wednesday, November 14, 2007

Page 64: Introduction to MINAmina.apache.org/mina-project/resources/ACUS2007.pdf · 2020-02-25 · • MINA version that wraps and provides additional convenience methods • auto-expanding,

use ExecutorFilter

64Wednesday, November 14, 2007

Page 65: Introduction to MINAmina.apache.org/mina-project/resources/ACUS2007.pdf · 2020-02-25 · • MINA version that wraps and provides additional convenience methods • auto-expanding,

IoProcessor threads only do reads & writes

(the intent)

65Wednesday, November 14, 2007

Page 66: Introduction to MINAmina.apache.org/mina-project/resources/ACUS2007.pdf · 2020-02-25 · • MINA version that wraps and provides additional convenience methods • auto-expanding,

Filters execute on a different thread.

(filter location is key!)

66Wednesday, November 14, 2007

Page 67: Introduction to MINAmina.apache.org/mina-project/resources/ACUS2007.pdf · 2020-02-25 · • MINA version that wraps and provides additional convenience methods • auto-expanding,

Work for a session is serialized(queued per session)

67Wednesday, November 14, 2007

Page 68: Introduction to MINAmina.apache.org/mina-project/resources/ACUS2007.pdf · 2020-02-25 · • MINA version that wraps and provides additional convenience methods • auto-expanding,

Work is delegated to an Executor

(generally a java.util.concurrent.ThreadPoolExecutor)

68Wednesday, November 14, 2007

Page 69: Introduction to MINAmina.apache.org/mina-project/resources/ACUS2007.pdf · 2020-02-25 · • MINA version that wraps and provides additional convenience methods • auto-expanding,

Size thread pool to “active” session count

(too much in queue == OOM!Use the Read Throttle filter)

69Wednesday, November 14, 2007

Page 70: Introduction to MINAmina.apache.org/mina-project/resources/ACUS2007.pdf · 2020-02-25 · • MINA version that wraps and provides additional convenience methods • auto-expanding,

“recommended application pattern”

• use ExecutorFilter as first in chain

• unless you need really low latency

• use ProtocolCodecFilter

• convert the wire protocol into a Java representation

• put application logic into an IoHandler

• store state in the IoSession

• minimum of Java 5

• java.util.concurrent rocks!

70Wednesday, November 14, 2007

Page 71: Introduction to MINAmina.apache.org/mina-project/resources/ACUS2007.pdf · 2020-02-25 · • MINA version that wraps and provides additional convenience methods • auto-expanding,

Example Time!

71Wednesday, November 14, 2007

Page 72: Introduction to MINAmina.apache.org/mina-project/resources/ACUS2007.pdf · 2020-02-25 · • MINA version that wraps and provides additional convenience methods • auto-expanding,

Everybody loves a Haiku

72Wednesday, November 14, 2007

Page 73: Introduction to MINAmina.apache.org/mina-project/resources/ACUS2007.pdf · 2020-02-25 · • MINA version that wraps and provides additional convenience methods • auto-expanding,

This is our Haiku validator73Wednesday, November 14, 2007

Page 74: Introduction to MINAmina.apache.org/mina-project/resources/ACUS2007.pdf · 2020-02-25 · • MINA version that wraps and provides additional convenience methods • auto-expanding,

Simple Protocol

• Connect

• Send 3 lines of text

• Receive HAIKU! or NOT A HAIKU:

• (plus a little reason why not)

74Wednesday, November 14, 2007

Page 75: Introduction to MINAmina.apache.org/mina-project/resources/ACUS2007.pdf · 2020-02-25 · • MINA version that wraps and provides additional convenience methods • auto-expanding,

ProtocolCodecFilter + TextLineCodecFactory

Bytes to Java String’s. For free!

75Wednesday, November 14, 2007

Page 76: Introduction to MINAmina.apache.org/mina-project/resources/ACUS2007.pdf · 2020-02-25 · • MINA version that wraps and provides additional convenience methods • auto-expanding,

ToHaikuIoFilterThree String’s to a Haiku

76Wednesday, November 14, 2007

Page 77: Introduction to MINAmina.apache.org/mina-project/resources/ACUS2007.pdf · 2020-02-25 · • MINA version that wraps and provides additional convenience methods • auto-expanding,

Filter is very testable(mock objects rock!)

77Wednesday, November 14, 2007

Page 78: Introduction to MINAmina.apache.org/mina-project/resources/ACUS2007.pdf · 2020-02-25 · • MINA version that wraps and provides additional convenience methods • auto-expanding,

IoHandler is very simpleValidate Haiku, send result

78Wednesday, November 14, 2007

Page 79: Introduction to MINAmina.apache.org/mina-project/resources/ACUS2007.pdf · 2020-02-25 · • MINA version that wraps and provides additional convenience methods • auto-expanding,

Also very testable79Wednesday, November 14, 2007

Page 80: Introduction to MINAmina.apache.org/mina-project/resources/ACUS2007.pdf · 2020-02-25 · • MINA version that wraps and provides additional convenience methods • auto-expanding,

Very easy to hook it all up80Wednesday, November 14, 2007

Page 81: Introduction to MINAmina.apache.org/mina-project/resources/ACUS2007.pdf · 2020-02-25 · • MINA version that wraps and provides additional convenience methods • auto-expanding,

Questions?(I’m here all week!)

81Wednesday, November 14, 2007

Page 83: Introduction to MINAmina.apache.org/mina-project/resources/ACUS2007.pdf · 2020-02-25 · • MINA version that wraps and provides additional convenience methods • auto-expanding,

http://mina.apache.org

83Wednesday, November 14, 2007