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

Skaliranje distribuiranih aplikacija uz pomoć AMQP-a

Skaliranje distribuiranih aplikacija uz pomoć AMQP-a

Goran Jurić

October 26, 2013
Tweet

More Decks by Goran Jurić

Other Decks in Programming

Transcript

  1. Problem   •  razmjena podataka između različitih sustava i platformi

    •  deseci tisuća poruka / sekundi •  asinkrono (fire & forget)  
  2. 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?
  3. Alternative   •  Push vs pull •  Job queueovi (dostupnost

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

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

    NASA •  RedHat •  VMWare •  Mozilla •  AT&T •  NASA •  Openstack •  Google
  6. RabbitMQ   •  Erlang aplikacija •  Klijenti dostupni u svim

    poznatijim programskim jezicima •  Web GUI plugin  
  7. 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  
  8. 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  
  9. Default Exchange   •  Default exchange nema ime •  Svaki

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

    queue •  Ignorira se routing ključ •  Idealno za broadcast  
  11. 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  
  12. RPC   •  reploy_to header •  Client – Privremeni, anonimni i

    ekskluzivni queue – Bez exchangea – Routing ključ = ime queue
  13. Oprez!   •  Uvijek declareati exchange i queue prije slanja

    ili primanja poruka •  Persistentcija poruka – Klasična – Transakcijska !!! – Publisher confirm  
  14. Enkodiranje poruka   •  binary blob •  serijalizacija •  JSON

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

    API •  HA clustering •  Flow control – Per connection – Memory – Disk  
  16. Osobna iskustva   •  185 poslužitelja •  ~ milijardu poruka

    u zadnjih 10 mjeseci •  0 crashes •  0 downtime •  0 lost messages