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

Transcript

  1. 1   State  Of  The  Art  JVM  Networking   with

     Ne6y   Michael  Nitschinger,  SDK  Engineer  
  2. 2       “Ne#y  is  an  asynchronous  and  event-­‐driven

      network  applica0on  framework  for  rapid   development  of  maintainable  high  performance   protocol  servers  &  clients.“  
  3. 3   PragmaAsm   Enthusiasm   Encouragement   Simplicity  

  4. 4   PragmaAsm   Enthusiasm   Encouragement   Simplicity  

  5. 5   CommunicaAon  

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

    (Websockets)  
  7. 7  

  8. 8  

  9. 9   Pipelines  

  10. 10   Encoder   Encoder   Ne4y   Writes  

    Ne4y   Reads   Decoder   Decoder  
  11. 11   Encoder   Encoder   Ne4y   Writes  

    Ne4y   Reads   Decoder   Decoder  
  12. 12   Encoder   Encoder   Ne4y   Writes  

    Ne4y   Reads   Decoder   Decoder  
  13. 13   Encoder   Encoder   Ne4y   Writes  

    Ne4y   Reads   Decoder   Decoder  
  14. 14   Encoder   Encoder   Ne4y   Writes  

    Ne4y   Reads   Decoder   Decoder  
  15. 15   Encoder   Encoder   Ne4y   Writes  

    Ne4y   Reads   Decoder   Decoder  
  16. 16   Encoder   Encoder   Ne4y   Writes  

    Ne4y   Reads   Decoder   Decoder  
  17. 17   Outbound   Handler   Outbound   Handler  

    Ne4y   Writes   Ne4y   Reads   Inbound   Handler   Inbound   Handler  
  18. 18  

  19. 19   ChannelHandlers  

  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  
  21. 21   Handler  Hierachy   ChannelHandler   ChannelInboundHandler   ChannelInboundHandlerAdapter

      ChannelOutboundHandler   ChannelOutboundHandlerAdapter  
  22. 22  

  23. 23  

  24. 24  

  25. 25   Handler  Types   •  Encoder   ­  MessageToByte

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

      ­  MessageToMessage   •  Decoder   ­  ByteToMessage   ­  MessageToMessage   •  Hybrid  Codecs   ­  ByteToByte   ­  ByteToMessage   ­  MessageToMessage   •  Useful  Decoders   ­  Replay   ­  FixedLengthFrame   ­  LengthFieldBasedFrame   ­  LineBasedFrame   ­  DelimiterBasedFrame  
  27. 27   Provided  Codecs   •  HTTP   •  HTTP2

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

      •  Websockets   •  SPDY   •  Memcache   •  SerializaAon   •  Socks   •  JBoss  Marshaling   •  Protobuf   •  SSL   •  Zlib  
  29. 29   Bootstrap  

  30. 30   PragmaAsm   Enthusiasm   Encouragement   Simplicity  

  31. 31   Performance  

  32. 32   Couchbase  &  Ne6y  

  33. 33   Techempower  Round  9   Plaintext  i7  

  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“  
  35. 35   ByteBufs   •  java.nio.ByteBuffer  replacement   ­  Simpler

     API   ­  Feature  rich   ­  Embraces  reusability   ­  CompositeByteBuf   Reader     Index   Writer   Index   Capacity  
  36. 36   The  extra  mile  

  37. 37  

  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  
  39. 39   NaAve  Bootstrap  

  40. 40   PrimiAve  CollecAons  

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

  42. 42   PragmaAsm   Enthusiasm   Encouragement   Simplicity  

  43. 43   Reusability  

  44. 44   Regular  Releases  

  45. 45   •  Based  on:   ­  Akka‘s  AbstractNodeQueue  

    ­  h4p://www.1024cores.net/home/lock-­‐free-­‐algorithms/queues/non-­‐ intrusive-­‐mpsc-­‐node-­‐based-­‐queue    
  46. 46   PragmaAsm   Enthusiasm   Encouragement   Simplicity  

  47. 47  

  48. 48  

  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  
  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?  
  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    
  52. 52   Ne6y  in  AcAon   by  Norman  Maurer  

    manning.com/maurer    
  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  
  54. 54   QuesAons?