Mackerel をオンプレミスから AWS に移してからの1年半を振り返る / Hatena Engineer Seminar #11
by
astj
×
Copy
Open
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Slide 1
Slide 1 text
MackerelΛΦϯϓϨϛε͔Β AWSʹҠ͔ͯ͠Βͷ 1ΛৼΓฦΔ Hatena Engineer Seminar #11 id:astj
Slide 2
Slide 2 text
id:astjʢ͋͞ͱ͐͡ʔʣ ͯͳ ΞϓϦέʔγϣϯΤϯδχΞ ৽ଔ (2014/04) Mackerel ։ൃνʔϜ (2016/08~) Mackerel ςοΫϦʔυ (2018/05~)
Slide 3
Slide 3 text
Mackerel
Slide 4
Slide 4 text
No content
Slide 5
Slide 5 text
No content
Slide 6
Slide 6 text
No content
Slide 7
Slide 7 text
• 2014ϦϦʔεͷʮαʔόʔࢹαʔϏεʯ • αʔόʔαΠυ: Scala / Go • ػցֶशύʔτʢ։ൃதʂʣ: Python • AWS Lambda : NodeJS
Slide 8
Slide 8 text
ຊͷத • ΦϯϓϨϛε͔ΒAWSʹҠߦͨ͜͠ͱ • Ҡߦͯ͠ಘΒΕͨ͜ͱɾมΘͬͨ͜ͱ
Slide 9
Slide 9 text
༧උࣝ / ͝հ
Slide 10
Slide 10 text
On-Premises DC Office AWS Account A (Main) AWS Account B AWS Account C Dedicated Hosting ͯͳͷΠϯϑϥߏ …
Slide 11
Slide 11 text
ͯͳͷΠϯϑϥߏ On-Premises DC Office AWS Account A AWS Account B AWS Account C Dedicated Hosting … ΦϯϓϨϛεͷDCͱAWSʢͳͲʣΛซ༻ ྺ࢙తܦҢͰڞ௨ͷAWSΞΧϯτ αʔϏεʹΑͬͯಠཱΞΧϯτ
Slide 12
Slide 12 text
Mackerelͷߏ RDBMS (Postgres) Redis Tsdb (nginx) (nginx) reverse proxy (nginx) (nginx) (nginx) app (Scala) (nginx) (nginx) Sub- systems
Slide 13
Slide 13 text
hatena.mackerel.host1.cpu.user 2018/02/01T21:15:00Z 44.00 2018/02/01T21:16:00Z 6.00 2018/02/05T21:17:00Z 8.00 hatena.mackerel.host1.cpu.user 2018/02/01T21:15:00Z 44.00 2018/02/01T21:16:00Z 6.00 2018/02/05T21:17:00Z 8.00 hatena.mackerel.host1.cpu.user 2018/02/01T21:15:00Z 44.00 2018/02/01T21:16:00Z 6.00 2018/02/05T21:17:00Z 8.00 hatena.mackerel.host1.cpu.user 2018/02/01T21:15:00Z 44.00 2018/02/01T21:16:00Z 6.00 2018/02/05T21:17:00Z 8.00 … … ࣌ܥྻσʔλ
Slide 14
Slide 14 text
࣌ܥྻσʔλϕʔε • ΦϯϓϨϛε࣌: Graphite • http://graphite.readthedocs.org/ • AWS Ҡߦޙ: ϓϩμΫτ • ίʔυωʔϜ "diamond"
Slide 15
Slide 15 text
ΦϯϓϨϛε͔ΒAWS
Slide 16
Slide 16 text
ॳظͷ Mackerel ͷߏ • ϩʔϯνॳΦϯϓϨϛε • جຊతʹXenͰԾԽͨ͠VMӡ༻ • TsdbRDBͰϋΠεϖοΫͳཧαʔόΛ ԾԽͤͣར༻ • ioDrive (~380k IOPS Ͱେ༰ྔͰߴ͍)
Slide 17
Slide 17 text
՝ײ • αʔϏεʹ͍՝͕ग़͖ͯͨ • Graphiteͷӡ༻͕͍ͨΜ • σΟεΫ͕ΓΓຒ·ΔɾԽߏͷӡ༻ • εέʔϧΞτʹཧαʔόͷௐୡ
Slide 18
Slide 18 text
=> AWS
Slide 19
Slide 19 text
ʮ࣍ੈMackerelϓϩδΣΫτʯ
Slide 20
Slide 20 text
AWSҠߦ • TsdbͷΩϟύγςΟ֬อͷॊೈԽ • ηΩϡϦςΟରࡦج൫ͷॆ࣮ • ܭը => Ҡߦ·Ͱ͓Αͦ1 • Tsdbͷݕূɾ։ൃʹ࣌ؒͱΛେׂ͖͍ͨ͘
Slide 21
Slide 21 text
TsdbͷAWSҠߦ • ߴεϖοΫཧαʔόಉ༷ͷӡ༻ݫ͍͠ • EBSͰٻΊΒΕͨiopsग़ͤͳ͍ • ΦϯϓϨϛεͷ࣌Ͱӡ༻ෛՙ͋ͬͨ
Slide 22
Slide 22 text
࣍ੈTsdb: diamond DynamoDBΛ࣠ʹͨ͠ϚωʔδυαʔϏε த৺ͷ࣌ܥྻσʔλϕʔεΛ։ൃ • https://blog.yuuk.io/entry/the-rebuild-of-tsdb-on-cloud • https://itchyny.hatenablog.com/entry/2017/11/06/090000 • https://astj.hatenablog.com/entry/2018/02/06/175902
Slide 23
Slide 23 text
http://blog.yuuk.io/entry/the-rebuild-of-tsdb-on-cloud
Slide 24
Slide 24 text
Ҡߦϓϩηε
Slide 25
Slide 25 text
"࣍ੈͰΓ͍ͨ͜ͱ" ແݶʹͰͯ͘Δ
Slide 26
Slide 26 text
·ͣEC2ʹશ෦ͤΔ • είʔϓΛߜΔ • ʢͱ͍͑TsdbdiamondʹҠߦ͢Δʣ • Γ͚Մೳͳ෦͞ΒʹΓ͚Δ • ϦϦʔεཻΛۃྗখ͘͢͞Δ • ιϑτΣΞ։ൃͱಉ༷ʢܧଓతσϦόϦʔʁʣɹ
Slide 27
Slide 27 text
࡞ઓ
Slide 28
Slide 28 text
On-Premises DC AWS nginx app db redis tsdb (Graphite) subsystem Πϝʔδਤ STEP0 (ॳظঢ়ଶ)
Slide 29
Slide 29 text
On-Premises DC AWS nginx app db redis tsdb (Graphite) subsystem tsdb (diamond) Πϝʔδਤ STEP1 (tsdb)
Slide 30
Slide 30 text
STEP1 • ࣌ܥྻσʔλϕʔεͷ৽چ྆ํͷॻ͖ࠐΈ • ৽چͷࠩҟΛࣄલʹ֬ೝ͢Δ • ͜ͷ͋ͱ͠Β͘৽چ྆ํʹॻ͖ଓ͚Δ • ສ͕Ұͷ࣌ͷΓ͠ʹඋ͑Δ
Slide 31
Slide 31 text
On-Premises DC AWS nginx app db redis tsdb (Graphite) subsystem tsdb (diamond) Πϝʔδਤ STEP1 (tsdb)
Slide 32
Slide 32 text
On-Premises DC AWS tsdb (Graphite) subsystem app db redis tsdb (diamond) Πϝʔδਤ HTTP STEP2-1 (app etc) nginx
Slide 33
Slide 33 text
On-Premises DC AWS tsdb (Graphite) subsystem nginx app db redis tsdb (diamond) Πϝʔδਤ HTTP STEP2-2 (app etc)
Slide 34
Slide 34 text
STEP2 • ΞϓϦέʔγϣϯͱಉظతʹ௨৴͢ΔՕॴʢେʣ • subsystemΦϯϓϨϛεͷ·· • HTTPܦ༝ͷඇಉظ௨৴ͳͷͰ༨༟͕͋Δ • diamondͷ͓൸࿐͜ͷλΠϛϯά
Slide 35
Slide 35 text
On-Premises DC AWS tsdb (Graphite) subsystem nginx app db redis tsdb (diamond) Πϝʔδਤ HTTP STEP2 (app etc)
Slide 36
Slide 36 text
On-Premises DC AWS tsdb (Graphite) nginx app db redis tsdb (diamond) subsystem Πϝʔδਤ STEP3 (subsystem)
Slide 37
Slide 37 text
STEP3 • HTTPܦ༝Ͱ௨৴͢ΔαϒγεςϜͷҠઃ • ֎ܗࢹͷΫϩʔϥΛؚΉͷͰग़ޱIP͕มߋ • ࣄલࠂɻ͝ڠྗ͋Γ͕ͱ͏͍͟͝·ͨ͠
Slide 38
Slide 38 text
On-Premises DC AWS tsdb (Graphite) nginx app db redis tsdb (diamond) subsystem Πϝʔδਤ STEP3 (subsystem)
Slide 39
Slide 39 text
On-Premises DC AWS nginx app db redis tsdb (diamond) subsystem Πϝʔδਤ STEP4 (DONE!)
Slide 40
Slide 40 text
Ҡߦྃ • ύϑΥʔϚϯεɺඅ༻ͳͲΓ͠ͳ͠ͷஅ • STEP2͔Β1ϲ݄ଓ͚ͨฒߦՔಇΛऴྃ
Slide 41
Slide 41 text
࣮ࡍͷҠߦ
Slide 42
Slide 42 text
STEP1 (tsdb) • ෛՙࢼݧͯ͠ϦϦʔεՄೳͷஅ • astjSTEP2͕৺ͩͬͨ • ৽ن։ൃ = વաڈͷՔಇ࣮ͳ͍ • ࢥͬͨΑ͏ʹύϑΥʔϚϯεग़Δͷ͔ʁ
Slide 43
Slide 43 text
STEP2 (app etc) • ແఀࢭͷΓସ͑Λ࣮ࢪ • ସ࣌ʹΠϯελϯεোͰҰ෦σʔλফࣦ • ޙௐࠪ༰ͱ࠶ൃࢭࡦΛެ։ • https://mackerel.io/ja/blog/entry/2017/08/15/113803
Slide 44
Slide 44 text
STEP2 (app etc) • ࣌ؒͷΈͱ͍͑σʔλফࣦ • Ϣʔβ͞Μʹ͝໎Λ͓͔͚ͯ͠͠·ͬͨ • Ұํɺdiamond ʹؔͯ͠ͳ͘Քಇ • ؼ͔ͯ͠Βײ֒ʹ;͚͍ͬͯͨ
Slide 45
Slide 45 text
STEP3 (subsystem) • ͕ͭͭͳ͘Γସ͑ • ʢastj͜ͷٳՋͰͨ͠…ʣ
Slide 46
Slide 46 text
Ҡߦྃ
Slide 47
Slide 47 text
Ҡߦྃʁ
Slide 48
Slide 48 text
Ҡߦྃʁ • ʮ·ͣEC2ʹͤͨʯஈ֊ • ϚωʔδυαʔϏε (ex. RDS) ͷҠߦ༨ • “࣍ੈMackerel”ͷεςοϓΞοϓɹ
Slide 49
Slide 49 text
RDSͷ࣮ྫ࣌ؒ͢ ଟͳ͍Ͱ͢
Slide 50
Slide 50 text
RDSҠߦ • EC2Ҡߦॳ PostgreSQL 9.3 (EC2) • ϚωʔδυαʔϏεԽͰ DB ӡ༻ίετΛԼ͛Δ • EC2Ҡߦ࣌ͷΑ͏ͳোΛආ͚Δ͜ͱʹܨ͕Δ • ݕ౼ࣄ߲: Aurora for PostgreSQL
Slide 51
Slide 51 text
RDSҠߦ • 9.3 (EC2) => 9.3 (RDS) => 9.6 (RDS) • 2ճʹ͚ͯҠߦ • ͦΕͧΕఀࢭϝϯςφϯεΛ࣮ࢪ • ͝ཧղ/͝ڠྗ͋Γ͕ͱ͏͍͟͝·ͨ͠
Slide 52
Slide 52 text
ҠߦશମΛৼΓฦΔ • Ҡߦखॱͷׂਖ਼ղ • ΦϖϨʔγϣϯͱͯ͠DBସ͕ϔϏʔ • σʔλফࣦͰ͝໎Λ͓͔͚͠·ͨ͠
Slide 53
Slide 53 text
Ҡߦ͔ͯ͠ΒͷมԽ
Slide 54
Slide 54 text
ΩϟύγςΟ֬อͷॊೈੑ • tsdbͷεέʔϥϏϦςΟͷݒ೦ͷղফ • େنͳεέʔϧΞτ/Πϯ • ؾܰʹԾϚγϯͷ࡞/ഇغ͕ߦ͑Δ • ΠϯϑϥΤϯδχΞͷʮ͓ئ͍ʯ͕ෆཁʹ • ΠϯϑϥͷݕূɾߏஙͷεϐʔυΞοϓ
Slide 55
Slide 55 text
ӡ༻ͷखؒͷݮগ • ཧαʔόΛҙࣝͨ͠ӡ༻͔Βͷղ์ • ϚωʔδυαʔϏεԽ • ετϨʔδͷऔΓճ͠ͷྑ͞ • EBS snapshot
Slide 56
Slide 56 text
ΞʔΩςΫνϟબఆͷࣗ༝্ • ӡ༻ମྗͷඞཁʢͰ͋Ζ͏ʣίϯϙʔωϯτΛ ϚωʔδυͰར༻ग़དྷΔ • Kinesis Data Streams, Lambda, DynamoDB, ... • ৽نߏஙՕॴͰࣗવͱ࠾༻ग़དྷΔ • ػցֶशػೳͰͷ AWS Batch, ...
Slide 57
Slide 57 text
ศར
Slide 58
Slide 58 text
ͱ͍͑
Slide 59
Slide 59 text
ཧڷʹདྷͨΘ͚Ͱͳ͍
Slide 60
Slide 60 text
• αʔόɾωοτϫʔΫোࣗମଘࡏ • Ҿ͖ଓ͖ؤு͍͖ͬͯ·͠ΐ͏ • ԾϚγϯԾϚγϯ • Ҿ͖ଓ͖ؤு͍͖ͬͯ·͠ΐ͏ • ΑΓநͷߴ͍Πϯϑϥʁ
Slide 61
Slide 61 text
• ϚωʔδυαʔϏεʹ͋Θͤͨઃܭɾӡ༻ • ٕज़બఆ • ʮ͑ͦ͏͚ͩͲϋϚΒͳ͍ʯ • AWS APIΛར༻ͨ͠ӡ༻ઃܭ
Slide 62
Slide 62 text
No content
Slide 63
Slide 63 text
·ͱΊ
Slide 64
Slide 64 text
AWSʹҠߦͨ͠ɹ • ΩϟύγςΟΛओͳཁ݅ͱͯ͠AWSʹҠߦ • ஈ֊Λ౿ΜͰҠߦͨ͠ • TsdbDynamoDBத৺ʹ • ͦͷଞҰ୴EC2্ʹ • ͦͷޙঃʑʹϚωʔδυԽ
Slide 65
Slide 65 text
AWSʹҠߦͯ͠ • TsdbͷΩϟύγςΟʹک͑Δੜ׆ʹผΕ • ϚωʔδυαʔϏεΛੵۃతʹऔΓೖΕΒΕΔΑ͏ʹ • ӡ༻ͷखؒΛݮΒ͢ • ։ൃΞʔΩςΫνϟબࢶΛ૿͢ • ϓϩμΫτͷมߋΛߴΊΒΕ͍ͯΔ
Slide 66
Slide 66 text
͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠