Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Michael Nitschinger on State of the art JVM networking with Netty

Michael Nitschinger on State of the art JVM networking with Netty

More Decks by Enterprise Java User Group Austria

Other Decks in Technology

Transcript

  1. 1  
    State  Of  The  Art  JVM  Networking  
    with  Ne6y  
    Michael  Nitschinger,  SDK  Engineer  

    View Slide

  2. 2  
     
     
    “Ne#y  is  an  asynchronous  and  event-­‐driven  
    network  applica0on  framework  for  rapid  
    development  of  maintainable  high  performance  
    protocol  servers  &  clients.“  

    View Slide

  3. 3  
    PragmaAsm  
    Enthusiasm  
    Encouragement  
    Simplicity  

    View Slide

  4. 4  
    PragmaAsm  
    Enthusiasm  
    Encouragement  
    Simplicity  

    View Slide

  5. 5  
    CommunicaAon  

    View Slide

  6. 6  
    Half-­‐Duplex    
     
    (HTTP)  
    Full-­‐Duplex  
    (Websockets)  

    View Slide

  7. 7  

    View Slide

  8. 8  

    View Slide

  9. 9  
    Pipelines  

    View Slide

  10. 10  
    Encoder  
    Encoder  
    Ne4y  
    Writes  
    Ne4y  
    Reads  
    Decoder  
    Decoder  

    View Slide

  11. 11  
    Encoder  
    Encoder  
    Ne4y  
    Writes  
    Ne4y  
    Reads  
    Decoder  
    Decoder  

    View Slide

  12. 12  
    Encoder  
    Encoder  
    Ne4y  
    Writes  
    Ne4y  
    Reads  
    Decoder  
    Decoder  

    View Slide

  13. 13  
    Encoder  
    Encoder  
    Ne4y  
    Writes  
    Ne4y  
    Reads  
    Decoder  
    Decoder  

    View Slide

  14. 14  
    Encoder  
    Encoder  
    Ne4y  
    Writes  
    Ne4y  
    Reads  
    Decoder  
    Decoder  

    View Slide

  15. 15  
    Encoder  
    Encoder  
    Ne4y  
    Writes  
    Ne4y  
    Reads  
    Decoder  
    Decoder  

    View Slide

  16. 16  
    Encoder  
    Encoder  
    Ne4y  
    Writes  
    Ne4y  
    Reads  
    Decoder  
    Decoder  

    View Slide

  17. 17  
    Outbound  
    Handler  
    Outbound  
    Handler  
    Ne4y  
    Writes  
    Ne4y  
    Reads  
    Inbound  
    Handler  
    Inbound  
    Handler  

    View Slide

  18. 18  

    View Slide

  19. 19  
    ChannelHandlers  

    View Slide

  20. 20  
    Handlers  are  your  Workers  
    Each  handler  receives  messages  and  poten;ally  emits  
    messages.  
    •  Use  them  for  
    ­  Encoding  &  Decoding  („Codec“)  
    ­  Business-­‐Logic  
    ­  State  Changes  
    ­  Event  NoPficaPons  

    View Slide

  21. 21  
    Handler  Hierachy  
    ChannelHandler  
    ChannelInboundHandler  
    ChannelInboundHandlerAdapter  
    ChannelOutboundHandler  
    ChannelOutboundHandlerAdapter  

    View Slide

  22. 22  

    View Slide

  23. 23  

    View Slide

  24. 24  

    View Slide

  25. 25  
    Handler  Types  
    •  Encoder  
    ­  MessageToByte  
    ­  MessageToMessage  
    •  Decoder  
    ­  ByteToMessage  
    ­  MessageToMessage  
    •  Hybrid  Codecs  
    ­  ByteToByte  
    ­  ByteToMessage  
    ­  MessageToMessage  
    •  Useful  Decoders  
    ­  Replay  
    ­  FixedLengthFrame  
    ­  LengthFieldBasedFrame  
    ­  LineBasedFrame  
    ­  DelimiterBasedFrame  

    View Slide

  26. 26  
    Handler  Types  
    •  Encoder  
    ­  MessageToByte  
    ­  MessageToMessage  
    •  Decoder  
    ­  ByteToMessage  
    ­  MessageToMessage  
    •  Hybrid  Codecs  
    ­  ByteToByte  
    ­  ByteToMessage  
    ­  MessageToMessage  
    •  Useful  Decoders  
    ­  Replay  
    ­  FixedLengthFrame  
    ­  LengthFieldBasedFrame  
    ­  LineBasedFrame  
    ­  DelimiterBasedFrame  

    View Slide

  27. 27  
    Provided  Codecs  
    •  HTTP  
    •  HTTP2  
    •  Websockets  
    •  SPDY  
    •  Memcache  
    •  SerializaAon  
    •  Socks  
    •  JBoss  Marshaling  
    •  Protobuf  
    •  SSL  
    •  Zlib  

    View Slide

  28. 28  
    Provided  Codecs  
    •  HTTP  
    •  HTTP2  
    •  Websockets  
    •  SPDY  
    •  Memcache  
    •  SerializaAon  
    •  Socks  
    •  JBoss  Marshaling  
    •  Protobuf  
    •  SSL  
    •  Zlib  

    View Slide

  29. 29  
    Bootstrap  

    View Slide

  30. 30  
    PragmaAsm  
    Enthusiasm  
    Encouragement  
    Simplicity  

    View Slide

  31. 31  
    Performance  

    View Slide

  32. 32  
    Couchbase  &  Ne6y  

    View Slide

  33. 33  
    Techempower  Round  9  
    Plaintext  i7  

    View Slide

  34. 34  
    Why?  
    •  Efficient  EventLoop/Socket  MulAplexing  
    •  GC  opAmized  
    ­  Less  allocaPons  
    ­  Caching/Pooling  
    ­  StaPc  Instances  
    ­  Selected  use  of  sun.misc.Unsafe  
    •  Lots  of  „Mechanical  Sympathy“  

    View Slide

  35. 35  
    ByteBufs  
    •  java.nio.ByteBuffer  replacement  
    ­  Simpler  API  
    ­  Feature  rich  
    ­  Embraces  reusability  
    ­  CompositeByteBuf  
    Reader    
    Index  
    Writer  
    Index  
    Capacity  

    View Slide

  36. 36  
    The  extra  mile  

    View Slide

  37. 37  

    View Slide

  38. 38  
    NaAve  Epoll  Transport  
    •  JNI  based  wrapper  around  Linux  Epoll  for  TCP  and  UDP  
    •  GC  opAmized  
    •  Support  for:  TCP_CORK  and  SO_REUSEADDR  
    ­  TCP_CORK:  Helps  with  data  batching  
    ­  SO_REUSEADDR:  UDP  MulPcast  

    View Slide

  39. 39  
    NaAve  Bootstrap  

    View Slide

  40. 40  
    PrimiAve  CollecAons  

    View Slide

  41. 41  
    ByteBuf  Pooling  
    h6ps://blog.twi6er.com/2013/ne6y-­‐4-­‐at-­‐twi6er-­‐reduced-­‐gc-­‐overhead  

    View Slide

  42. 42  
    PragmaAsm  
    Enthusiasm  
    Encouragement  
    Simplicity  

    View Slide

  43. 43  
    Reusability  

    View Slide

  44. 44  
    Regular  Releases  

    View Slide

  45. 45  
    •  Based  on:  
    ­  Akka‘s  AbstractNodeQueue  
    ­  h4p://www.1024cores.net/home/lock-­‐free-­‐algorithms/queues/non-­‐
    intrusive-­‐mpsc-­‐node-­‐based-­‐queue  
     

    View Slide

  46. 46  
    PragmaAsm  
    Enthusiasm  
    Encouragement  
    Simplicity  

    View Slide

  47. 47  

    View Slide

  48. 48  

    View Slide

  49. 49  
    Jestan  Nirojan,  Cruz  Julian  Bishop,  Frédéric  Brégier,  Jeff  Pinner,  
    Veebs,  Michael  Nitschinger,  vibul,  Craig  P.  Motlin,  Daniel  Bevenius,  
    Vibul  Imtarnasan,  Luke  Wood,  Cruz  Bishop,  Bill  Gallagher,  ab,  
    alepar,  bgallagher,  Andy  Taylor,  Ngoc  Dao,  John  Fallows,  Jakob  
    Buchgraber,  Andrei  PozoloPn,  Frederic  Bregier,  Shawn  Silverman,  
    Evan  Meagher,  iainmcgin,  Prajwal  Tuladhar,  Derek  Troy-­‐West,  ursa,  
    dantran,  alexey,  kerr,  Aaron  Riekenberg,  Andrei.PozoloPn,  kxbmap,  
    Courtney  Robinson,  Sun  Ning,  zhen9ao,  Alex  Petrov,  Bruce  
    Mitchener,  Chris  Mowforth,  Edwin  Mol,  Evans  Yang,  Guido  García,  
    James  Abley,  Jeff  Griffith,  Jeff  Smick,  Leonardo  Freitas  Gomes,  Mike  
    Heath,  Mike  Schore,  Mirko  Caserta,  Roman  Stoffel  

    View Slide

  50. 50  
    Vladimir  Schafer,  alain,  fredericBregier,  izstas,  radimch,  Greg  SolPs,  
    Michael  Grove,  George  Cao,  MiddleBen,  nibin,  Andrew  Cox,  
    pfisterer,  Felix  Trepanier,  Eric  Charles,  Olaf  Bergner,  Phillip  
    Schichtel,  Dennis  Boldt,  Rogie  Sulzbach,  Adam  Vandenberg,  Ryan  
    Shelley,  Sasha  Zverev,  David  Dossot,  Stephane  Landelle,  Dao  Ngoc,  
    Sunng,  Tony  Rice,  CoNDoRip,  ValenPn  Kovalenko,  Carl  Byström,  
    Brian  Roach,  Vladimir  Krivosheev,  shreyharia,  Will,  William  Kemper,  
    Wolfgang  Profer,  Brendt  Lucas,  tsingxu,  Bourne,  Geoff,  Benoit  
    Sigoure,  Atsuhiko  Yamanaka,  bk1te,  cmcmaugh,  coltnz,  AtKaaZ,  
    Andrej  Golovnin,  hepin1989,  Artur  Dryomov,  irelandKen,  Alexey  
    Diomin,  jwilson,  Arron  Norwell,  Jamie  Furness,  JaPnder,  Andrew  
    Gaul,  James  Roper,  marius  a.  eriksen,  Ionuț  G.  Stan,  Johan  Rask,  Ian  
    Barfield,  Josh  Wilson,  JusPn  Santa  Barbara,  milenkovicm,  Ma4hias  
    Wessendorf,.....  ...you?  

    View Slide

  51. 51  
    Geing  Help  
    •  Start  here:  ne6y.io  
    •  IRC:  #ne6y  on  Freenode  
    •  Mailing  List:    
    h6ps://groups.google.com/forum/#!forum/ne6y  
    •  Stackoverflow:  „ne6y“  tag  
    •  Bugtracker:  h6ps://github.com/ne6y/ne6y/issues  
     

    View Slide

  52. 52  
    Ne6y  in  AcAon  
    by  Norman  Maurer  
    manning.com/maurer  
     

    View Slide

  53. 53  
    ContribuAng  
    1.  Read:  h6p://ne6y.io/wiki/developer-­‐guide.html  
    2.  Fork:  h6ps://github.com/ne6y/ne6y  
    3.  Submit  PR:  h6ps://github.com/ne6y/ne6y/pulls  
    4.  Be  prepared  for  some  feedback/improvement  cycles!  
    5.  Get  menAoned  in  the  release  notes  

    View Slide

  54. 54  
    QuesAons?  

    View Slide