Slide 1

Slide 1 text

Scalable Architecture with RabbitMQ IDCϑϩϯςΟΞ UX։ൃ෦ ౉ᬑঘޗ 2015/11/24

Slide 2

Slide 2 text

Slides’ URI https://speakerdeck.com/nownabe/scalable- architecture-with-rabbitmq

Slide 3

Slide 3 text

Who? ౉ᬑঘޗ @nownabe Programmer Drummer

Slide 4

Slide 4 text

History 2013೥4݄ IDCFೖࣾ 2013೥7݄ ΧελϚʔαʔϏεຊ෦ϓϥοτϑΥʔϜαʔϏε෦Ϋϥ΢υάϧʔϓ • Ϋϥ΢υج൫ӡ༻ɾݕূ • αόϑΣε্ཱͪ͛ • MBaaSαʔϏε։ൃ 2014೥4݄ ٕज़։ൃຊ෦R&Dࣨ • MBaaSαʔϏε։ൃ • RDBαʔϏε։ൃ 2015೥1݄ ٕज़։ൃຊ෦UX։ൃ෦ • RDBαʔϏε։ൃ • ϩʔυόϥϯαʔαʔϏε։ൃ (now!)

Slide 5

Slide 5 text

Favorites Ruby Itamae Ruboty React esa Daemon Chain Drive (double) Aquiles Priester

Slide 6

Slide 6 text

Scalable Architecture with RabbitMQ

Slide 7

Slide 7 text

͸΍Γͷ Publish / Subscribe ͱ Microservices ΍ͬͯΈͨ

Slide 8

Slide 8 text

Which service? ݱࡏ։ൃத IDCF Cloudͷ৽αʔϏε ϩʔυόϥϯαʔαʔϏεͷόοΫΤϯυ ͦΖͦΖʁϦϦʔε༧ఆ

Slide 9

Slide 9 text

What service? 7. 7. 7. … 4DBMBCMF #BDLFOE -# -# … *%$'$MPVE $MPVE4UBDL ࡞ͬͨΓফͨ͠Γ ૿΍ͨ͠ΓݮΒͨ͠Γ ؂ࢹͨ͠Γम෮ͨ͠Γ

Slide 10

Slide 10 text

8PSLFS … $POUSPMMFS … "1* … .POJUPS … -#OPEF -#OPEF ……… Scalable architecture

Slide 11

Slide 11 text

8PSLFS … $POUSPMMFS … "1* … .POJUPS … -#OPEF -#OPEF ……… Scalable architecture 3&45"1*ड͚Δ΍ͭ ؂ࢹɾ՝ۚ͢Δ΍ͭ ࡞ͬͨΓফͨ͠Γ͢Δ΍ͭ ϩʔυόϥϯαʔຊମ ͍Ζ͍Ζ΍Δ΍ͭ

Slide 12

Slide 12 text

Development style Ruby Github Qiita:Team Slack

Slide 13

Slide 13 text

Today’s topics ࿩͢ RabbitMQ (Publish / Subscribe) Microservices ࿩͞ͳ͍ RabbitMQͷෛՙ෼ࢄ/৑௕Խ Monitoring (Sensu)

Slide 14

Slide 14 text

RabbitMQ

Slide 15

Slide 15 text

What is RabbitMQ? ϝοηʔδͷड৴ͱ഑৴ Advanced Message Queuing Protocol OSS࣮૷ Erlang

Slide 16

Slide 16 text

Why RabbitMQ? MicroservicesԽͰશ෦REST API͸͖͍ͭ ߴػೳ ୯ମͰಈ࡞͢Δ υΩϡϝϯτ͕ॆ࣮ͯͨ͠

Slide 17

Slide 17 text

Publish / Subscribe Producer (Publisher) Queueʹ഑৴ Consumer (Subscriber) Queue͔Βߪಡ Queue ✉ ✉ ✉ ✉ ✉ ✉ ✉ ✉ ✉

Slide 18

Slide 18 text

Exchange ϝοηʔδΛQueueʹ഑ୡ͢Δਓ ͍ͭ͜ͷ͓͔͛Ͱ഑৴ܦ࿏͕ॊೈ

Slide 19

Slide 19 text

Example: Fanout ✉ ✉ ✉ ✉ ✉ &YDIBOHF ✉ ඥͮ͘͢΂ͯͷ Queueʹ഑ୡ

Slide 20

Slide 20 text

Example: Roundrobin ✉ &YDIBOHF ✉ ✉ ✉ ✉ ✉ ʮՋͳਓʹ഑৴ʯ΋Մ

Slide 21

Slide 21 text

Example: RPC ✉ ✉ Request/Response (Exchange͸লུ) ฦ৴༻Queue

Slide 22

Slide 22 text

More complecated routings ͔ͳΓෳࡶͳϧʔςΟϯά΋Մೳ

Slide 23

Slide 23 text

Microservices

Slide 24

Slide 24 text

8PSLFS … $POUSPMMFS … "1* … .POJUPS … -#OPEF -#OPEF ……… Components 3&45"1*ड͚Δ΍ͭ ؂ࢹɾ՝ۚ͢Δ΍ͭ ࡞ͬͨΓফͨ͠Γ͢Δ΍ͭ ϩʔυόϥϯαʔຊମ ͍Ζ͍Ζ΍Δ΍ͭ

Slide 25

Slide 25 text

Why microservices? ScalableͳઃܭΛٻΊΒΕͨ • CloudStack͕ҰຕؠͰεέʔϧ͠ʹ͍͘ઃܭ ֤ίϯϙʔωϯτͷ໾ׂ෼ׂ͕໌֬ͩͬͨ • ͋Δఔ౓Ͳ͏෼͚Ε͹͏·͍͖ͦ͘͏͔෼͔͍ͬͯͨ ΞδϟΠϧʹ׳Ε͍ͯͳ͍ • ΢ΥʔλʔϑΥʔϧͬΆ͘ॎׂΓ։ൃ

Slide 26

Slide 26 text

Our Microservices

Slide 27

Slide 27 text

API gateway ֎෦ϦΫΤετΛ࠷ॳʹॲཧ͢Δड෇৖ REST APIΛఏڙ Ϣʔβͷೝূ౳ ControllerʹϦΫΤετΛ఻͑Δ

Slide 28

Slide 28 text

Controller ͍Ζ͍Ζ൑அͯ͠ࢦࣔΛग़͢Ϙε ϝΠϯDBͱ΍ΓͱΓͰ͖Δ

Slide 29

Slide 29 text

Worker ࣮ࡍʹಇ͘࿑ಇऀ Controller͔ΒͷࢦࣔͰಇ͘ ඇಉظͰ͕͔͔࣌ؒΔॲཧΛ͜ͳ͢ ऴΘͬͨΒControllerʹใࠂ

Slide 30

Slide 30 text

Node agent LB nodeʹજΉΤʔδΣϯτ LB nodeͷॳظઃఆ Worker͔ΒͷࢦࣔͰίϚϯυΛ࣮ߦ ֤छϝτϦΫεΛMonitorʹใࠂ

Slide 31

Slide 31 text

Monitor ؂ࢹ΍՝ۚॲཧΛߦ͏ݟுΓ໾ Agent͔ΒͷϝτϦΫεΛूܭ Կ͔͋Ε͹Controllerʹใࠂ

Slide 32

Slide 32 text

Via RabbitMQ શίϯϙʔωϯτ͕RabbitMQܦ༝Ͱ΍ΓͱΓ 8PSLFS $POUSPMMFS /PEFBHFOU ࢦࣔ ࢦࣔ/ใࠂ ใࠂ ඇಉظ ಉظ

Slide 33

Slide 33 text

Good

Slide 34

Slide 34 text

Scalable! εέʔϧΞ΢τ͕؆୯ • ৽͍͠ίϯϙʔωϯτ͕ͭͳ͗ʹ͍͚ͩ͘ RabbitMQ͕ϘτϧωοΫʹͳΓಘΔʁ • ͠͹Β͘৺഑ͳͦ͞͏

Slide 35

Slide 35 text

RabbitMQ is nice ϧʔςΟϯά͕ॊೈ ͱͯ΋ָ: Pub/Sub΍ඇಉظॲཧ ͱͯ΋ָ: ෛՙ෼ࢄ • Producer/Consumer͸ࣗ෼Ͱͭͳ͗ʹ͘Δ • LBͰ෼ࢄ͠Α͏ͱ͢Δͱ…

Slide 36

Slide 36 text

Nice microservices ྑ͍ײ͡ʹίϯϙʔωϯτ෼ׂͰ͖ͨ • ໾ׂ΍ෛՙ ֤୲౰ऀͰҰؾʹฒߦ։ൃͰ͖ͨ 1୆ڞ௨ͷRabbitMQ͕͋Ε͹݁߹ςετ΋؆୯ • ϩʔΧϧͱϩʔΧϧΛ؆୯ʹͭͳ͛Δ

Slide 37

Slide 37 text

Sensu ·͞ʹΫϥ΢υ࣌୅ͷ؂ࢹπʔϧ ͍ͭ͜΋RabbitMQΛ࢖͏ Pub/SubͰ؂ࢹ

Slide 38

Slide 38 text

Not Good

Slide 39

Slide 39 text

Bad microservices ͏·͘Θ͚ΒΕͳ͔ͬͨ෦෼΋ • MonitorͱControllerͰಉ͡DBΈͯΔ ίϯϙʔωϯτԣஅͰΈΔͱDRY͡Όͳ͍ ΠϯϑϥίετͰ͔͍ • ࣍͸ίϯςφԽ͍ͨ͠

Slide 40

Slide 40 text

RPC is not good RPC͍ͬͺ͍࢖ͬͯΔ RabbitMQ͸ຊདྷRPC͢Δ΋ͷ͡Όͳ͍ ͦΕREST APIͰͰ͖ͳ͍ͷʁ • ͸͍ɺͰ͖·͢

Slide 41

Slide 41 text

Insufficient information ৘ใ͕গͳ͍ ެࣜυΩϡϝϯτ͸ॆ࣮ • ӳޠΦϯϦʔ

Slide 42

Slide 42 text

Summary MicroservicesͱPub/SubͰScalableʹʂ✨ MicroservicesͱPub/Subͷ૬ੑ͸ΠΠʂ શ෦RabbitMQܦ༝Ͱ͸ͳ͘దࡐదॴʹʂʂ

Slide 43

Slide 43 text

Thank you for your attention MicroservicesͱPub/SubͰScalableʹʂ✨ MicroservicesͱPub/Subͷ૬ੑ͸ΠΠʂ શ෦RabbitMQܦ༝Ͱ͸ͳ͘దࡐదॴʹʂʂ