Skaliranje distribuiranih aplikacija uz pomoć AMQP-a

Skaliranje distribuiranih aplikacija uz pomoć AMQP-a

34ac8ea75c650746c8eaf03246b8d6a7?s=128

Goran Jurić

October 26, 2013
Tweet

Transcript

  1. Skaliranje  distribuiranih  aplikacija   uz  pomoć  AMQP-­‐a     Goran

    Jurić Webcamp, Zagreb, 2013.  
  2. Problem   •  razmjena podataka između različitih sustava i platformi

    •  deseci tisuća poruka / sekundi •  asinkrono (fire & forget)  
  3. Riješenje?   •  SOAP, REST ? – Ne postoji nativni queing

    mehanizam – Zahtijeva poslužitelj na svakoj strani koja prima poruke – Tko odlučuje gdje pojedina poruka mora završiti? – blocking – Što s djelomično isporučenim porukama?
  4. Alternative   •  Push vs pull •  Job queueovi (dostupnost

    klijenata, nedostatak naprednih mogućnosti) – Gearman – Resque – Celery – ...  
  5. AMQP   •  Advanced  Message  Queuing  Protocol •  Protokol za

    razmjenu i queueing poruka •  Otvoren standard •  OASIS (v1.0)
  6. Tko koristi AMQP   •  Njemačka burza •  JPMorgan • 

    NASA •  RedHat •  VMWare •  Mozilla •  AT&T •  NASA •  Openstack •  Google
  7. Software   •  Serveri – SwiftMQ – Apache QPID – Apache ActiveMQ – RabbitMQ

     
  8. RabbitMQ   •  Erlang aplikacija •  Klijenti dostupni u svim

    poznatijim programskim jezicima •  Web GUI plugin  
  9. Nomenklatura   •  Poruka •  Producer •  Consumer •  Broker

    (AMQP server)
  10. Arhitektura  

  11. Arhitektura   •  Connection (TCP) – Jedna konekcija prema brokeru • 

    Channel – Više kanala prema Exchange-u
  12. Broker   •  Exchange – Mjesto dostave poruka – Svaka poruka ima

    routing ključ •  Bindings – Povezuju Echange i Qeue preko binding ključa •  Queue – Odredište poruka – Consumer subscribe  
  13. Exchange types   •  Direct •  Default •  Fanout • 

    Topic •  Header
  14. Direct Exchange   •  Svaka poruka ima routing ključ • 

    Queue X se binda na exchange koristeći ključ K •  Poruka se dostavlja u Queue X ukoliko je dostavljena na zadani exchange i ima routing ključ K  
  15. Default Exchange   •  Default exchange nema ime •  Svaki

    kreirani queue je bindan na defaultni exchange preko imena queuea
  16. Fanout Exchange   •  Poruka se dostavlja u svaki bindani

    queue •  Ignorira se routing ključ •  Idealno za broadcast  
  17. Topic Exchange   •  Dostavlja poruku u jedan ili više

    queuova u ovisnosti o routing ključu •  Binding ključ – * jedna riječ – # nula ili više riječi – Bez * i # kao Direct exchange  
  18. Topic Exchange  

  19. RPC   •  reploy_to header •  Client – Privremeni, anonimni i

    ekskluzivni queue – Bez exchangea – Routing ključ = ime queue
  20. RPC  

  21. Durability   •  Exchange durability •  Queue durability •  Message

    persistence  
  22. Oprez!   •  Uvijek declareati exchange i queue prije slanja

    ili primanja poruka •  Persistentcija poruka – Klasična – Transakcijska !!! – Publisher confirm  
  23. Priprema  

  24. Publisher  

  25. Consumer  

  26. Enkodiranje poruka   •  binary blob •  serijalizacija •  JSON

    •  MsgPack •  XML •  Protocol Buffers  
  27. Ostalo   •  Virtual hosts •  Visualiser plugin •  HTTP

    API •  HA clustering •  Flow control – Per connection – Memory – Disk  
  28. Web GUI  

  29. Alternativa AMQP-u   •  ZeroMQ – Low level alternativa – Web scale

    (50-100x brži) – TCP sockets na steroidima
  30. Osobna iskustva   •  185 poslužitelja •  ~ milijardu poruka

    u zadnjih 10 mjeseci •  0 crashes •  0 downtime •  0 lost messages
  31. Kontakt   •  goran@ingop.hr •  @goran_juric