$30 off During Our Annual Pro Sale. View Details »

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. Skaliranje  distribuiranih  aplikacija  
    uz  pomoć  AMQP-­‐a  
     
    Goran Jurić
    Webcamp, Zagreb, 2013.  

    View Slide

  2. Problem  
    •  razmjena podataka između različitih
    sustava i platformi
    •  deseci tisuća poruka / sekundi
    •  asinkrono (fire & forget)  

    View Slide

  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?

    View Slide

  4. Alternative  
    •  Push vs pull
    •  Job queueovi (dostupnost klijenata,
    nedostatak naprednih mogućnosti)
    – Gearman
    – Resque
    – Celery
    – ...  

    View Slide

  5. AMQP  
    •  Advanced  Message  Queuing  Protocol
    •  Protokol za razmjenu i queueing poruka
    •  Otvoren standard
    •  OASIS (v1.0)

    View Slide

  6. Tko koristi AMQP  
    •  Njemačka burza
    •  JPMorgan
    •  NASA
    •  RedHat
    •  VMWare
    •  Mozilla
    •  AT&T
    •  NASA
    •  Openstack
    •  Google

    View Slide

  7. Software  
    •  Serveri
    – SwiftMQ
    – Apache QPID
    – Apache ActiveMQ
    – RabbitMQ  

    View Slide

  8. RabbitMQ  
    •  Erlang aplikacija
    •  Klijenti dostupni u svim poznatijim
    programskim jezicima
    •  Web GUI plugin  

    View Slide

  9. Nomenklatura  
    •  Poruka
    •  Producer
    •  Consumer
    •  Broker (AMQP server)

    View Slide

  10. Arhitektura  

    View Slide

  11. Arhitektura  
    •  Connection (TCP)
    – Jedna konekcija prema brokeru
    •  Channel
    – Više kanala prema Exchange-u

    View Slide

  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  

    View Slide

  13. Exchange types  
    •  Direct
    •  Default
    •  Fanout
    •  Topic
    •  Header

    View Slide

  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  

    View Slide

  15. Default Exchange  
    •  Default exchange nema ime
    •  Svaki kreirani queue je bindan na
    defaultni exchange preko imena
    queuea

    View Slide

  16. Fanout Exchange  
    •  Poruka se dostavlja u svaki bindani queue
    •  Ignorira se routing ključ
    •  Idealno za broadcast  

    View Slide

  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  

    View Slide

  18. Topic Exchange  

    View Slide

  19. RPC  
    •  reploy_to header
    •  Client
    – Privremeni, anonimni i ekskluzivni queue
    – Bez exchangea
    – Routing ključ = ime queue

    View Slide

  20. RPC  

    View Slide

  21. Durability  
    •  Exchange durability
    •  Queue durability
    •  Message persistence  

    View Slide

  22. Oprez!  
    •  Uvijek declareati exchange i queue prije
    slanja ili primanja poruka
    •  Persistentcija poruka
    – Klasična
    – Transakcijska !!!
    – Publisher confirm  

    View Slide

  23. Priprema  

    View Slide

  24. Publisher  

    View Slide

  25. Consumer  

    View Slide

  26. Enkodiranje poruka  
    •  binary blob
    •  serijalizacija
    •  JSON
    •  MsgPack
    •  XML
    •  Protocol Buffers  

    View Slide

  27. Ostalo  
    •  Virtual hosts
    •  Visualiser plugin
    •  HTTP API
    •  HA clustering
    •  Flow control
    – Per connection
    – Memory
    – Disk  

    View Slide

  28. Web GUI  

    View Slide

  29. Alternativa AMQP-u  
    •  ZeroMQ
    – Low level alternativa
    – Web scale (50-100x brži)
    – TCP sockets na steroidima

    View Slide

  30. Osobna iskustva  
    •  185 poslužitelja
    •  ~ milijardu poruka u zadnjih 10 mjeseci
    •  0 crashes
    •  0 downtime
    •  0 lost messages

    View Slide

  31. Kontakt  
    •  [email protected]
    •  @goran_juric

    View Slide