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. 2.

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

    •  deseci tisuća poruka / sekundi •  asinkrono (fire & forget)  
  2. 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?
  3. 4.

    Alternative   •  Push vs pull •  Job queueovi (dostupnost

    klijenata, nedostatak naprednih mogućnosti) – Gearman – Resque – Celery – ...  
  4. 5.

    AMQP   •  Advanced  Message  Queuing  Protocol •  Protokol za

    razmjenu i queueing poruka •  Otvoren standard •  OASIS (v1.0)
  5. 6.

    Tko koristi AMQP   •  Njemačka burza •  JPMorgan • 

    NASA •  RedHat •  VMWare •  Mozilla •  AT&T •  NASA •  Openstack •  Google
  6. 8.

    RabbitMQ   •  Erlang aplikacija •  Klijenti dostupni u svim

    poznatijim programskim jezicima •  Web GUI plugin  
  7. 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  
  8. 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  
  9. 15.

    Default Exchange   •  Default exchange nema ime •  Svaki

    kreirani queue je bindan na defaultni exchange preko imena queuea
  10. 16.

    Fanout Exchange   •  Poruka se dostavlja u svaki bindani

    queue •  Ignorira se routing ključ •  Idealno za broadcast  
  11. 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  
  12. 19.

    RPC   •  reploy_to header •  Client – Privremeni, anonimni i

    ekskluzivni queue – Bez exchangea – Routing ključ = ime queue
  13. 20.
  14. 22.

    Oprez!   •  Uvijek declareati exchange i queue prije slanja

    ili primanja poruka •  Persistentcija poruka – Klasična – Transakcijska !!! – Publisher confirm  
  15. 26.

    Enkodiranje poruka   •  binary blob •  serijalizacija •  JSON

    •  MsgPack •  XML •  Protocol Buffers  
  16. 27.

    Ostalo   •  Virtual hosts •  Visualiser plugin •  HTTP

    API •  HA clustering •  Flow control – Per connection – Memory – Disk  
  17. 29.
  18. 30.

    Osobna iskustva   •  185 poslužitelja •  ~ milijardu poruka

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