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  
  2. 2       “Ne#y  is  an  asynchronous  and  event-­‐driven

      network  applica0on  framework  for  rapid   development  of  maintainable  high  performance   protocol  servers  &  clients.“  
  3. 10   Encoder   Encoder   Ne4y   Writes  

    Ne4y   Reads   Decoder   Decoder  
  4. 11   Encoder   Encoder   Ne4y   Writes  

    Ne4y   Reads   Decoder   Decoder  
  5. 12   Encoder   Encoder   Ne4y   Writes  

    Ne4y   Reads   Decoder   Decoder  
  6. 13   Encoder   Encoder   Ne4y   Writes  

    Ne4y   Reads   Decoder   Decoder  
  7. 14   Encoder   Encoder   Ne4y   Writes  

    Ne4y   Reads   Decoder   Decoder  
  8. 15   Encoder   Encoder   Ne4y   Writes  

    Ne4y   Reads   Decoder   Decoder  
  9. 16   Encoder   Encoder   Ne4y   Writes  

    Ne4y   Reads   Decoder   Decoder  
  10. 17   Outbound   Handler   Outbound   Handler  

    Ne4y   Writes   Ne4y   Reads   Inbound   Handler   Inbound   Handler  
  11. 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  
  12. 25   Handler  Types   •  Encoder   ­  MessageToByte

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

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

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

      •  Websockets   •  SPDY   •  Memcache   •  SerializaAon   •  Socks   •  JBoss  Marshaling   •  Protobuf   •  SSL   •  Zlib  
  16. 34   Why?   •  Efficient  EventLoop/Socket  MulAplexing   • 

    GC  opAmized   ­  Less  allocaPons   ­  Caching/Pooling   ­  StaPc  Instances   ­  Selected  use  of  sun.misc.Unsafe   •  Lots  of  „Mechanical  Sympathy“  
  17. 35   ByteBufs   •  java.nio.ByteBuffer  replacement   ­  Simpler

     API   ­  Feature  rich   ­  Embraces  reusability   ­  CompositeByteBuf   Reader     Index   Writer   Index   Capacity  
  18. 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  
  19. 45   •  Based  on:   ­  Akka‘s  AbstractNodeQueue  

    ­  h4p://www.1024cores.net/home/lock-­‐free-­‐algorithms/queues/non-­‐ intrusive-­‐mpsc-­‐node-­‐based-­‐queue    
  20. 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  
  21. 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?  
  22. 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    
  23. 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