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

モンストのサーバー負荷との戦い 〜あけおめ2018編〜 / bcu_30_server_9

モンストのサーバー負荷との戦い 〜あけおめ2018編〜 / bcu_30_server_9

スマホアプリ「モンスターストライク」のサーバー負荷は、年末年始に1年のピークを迎えます。2018年元旦のサーバー負荷に立ち向かうために実施した対策の一例として、データベースサーバー(MySQL)を安全に水平分割した事例を紹介します。見積もりから計画、実施に至るまでを時系列で振り返ります。

More Decks by 浜田 恭平 (Kyohei Hamada)

Other Decks in Programming

Transcript

  1. About me •඿ా ګฏ @haman29 •https://twitter.com/haman29 •XFLAG ελδΦ SREάϧʔϓ •ओʹࠃ಺൛ϞϯελʔετϥΠΫʢ௨শɺϞϯετʣͷ։ൃɾӡ༻ɾෛՙରࡦ

    Λ୲౰ɻ •هࣄ •ʮhbstudyˌ76 SREେશ: XFLAG ελδΦฤʯͰൃද͠·ͨ͠ɻ (2017.8) •ΤϯδχΞͬͯڅྉԿʹ࢖ͬͯΔͷʁۚમࣄ৘ʹ͍͍ͭͯΖ͍Ζฉ͍͖ͯͨʛ CodeIQ MAGAZINE 3ਓ໨ (2016.3) •झຯ͸ϘϧμϦϯά 2
  2. ΦʔϒDB • Φʔϒɹɹɹ ʹ Ϣʔβ༷ͷେࣄͳ͓ۚ • ਺ԯϨίʔυ • ϐʔΫ࣌ͷUpdateΫΤϦ͕਺ສqpsʢΦʔϒͷফඅʹؔΘΔશͯʣ •

    ෛՙରࡦ • ͢ͰʹɺIndex΍ΫΤϦ͸࠷దԽࡁΈ • ͢Ͱʹɺਨ௚෼ׂࡁΈʢ1୆ͷ෺ཧϚγϯΛઐ༗ʣ • ͢Ͱʹɺߴ͍IOੑೳΛ࣋ͭioMemoryΛ࢖͍ͬͯΔ 10
  3. DBͷਫฏ෼ׂʢShardingʣͱ͸ 13 user_id orb 10001 100 10002 200 10003 300

    10004 400 10005 500 10006 600 10007 700 user_id orb 10001 100 10005 500 user_id orb 10002 200 10006 600 user_id orb 10003 300 10007 700 user_id orb 10004 400 • 4෼ׂͷྫ • shard_key Λݩʹ෼ׂ • modulo(৒༨) • auto_increment id ͕ར༻Ͱ͖ ͳ͍ͷͰࣗલͰ࠾൪ orbs_id_seq 10007 ࠾൪
  4. 1. ৽چDB΁ͷDouble Write 18 app چDB Read Write app app

    shard_1 shard_2 shard_N ɾɾɾ چDB΁ͷWriteΛϑοΫͯ͠৽DBʹ΋Write͢Δ ৽DB INSERT or UPDATE
  5. 2. εΫϦϓτʹΑΔίϐʔͱݕূ 20 app چDB Read Write app app shard_1

    shard_2 shard_N ɾɾɾ ৽DB copy script INSERT or UPDATE Double Write͸ܧଓͨ͠··ίϐʔʢ਺ԯϨίʔυʣ INSERT IGNORE INTO … ※ϢχʔΫΩʔ੍໿ҧ൓ͷ࣌ʹ͸Կ΋͠ͳ͍
  6. 21 app چDB Read Write app app shard_1 shard_2 shard_N

    ɾɾɾ ৽DB copy script verify script Verify ৽چDBͷσʔλ͕׬શʹҰக͍ͯ͠Δ͜ͱΛݕূ͢Δ INSERT or UPDATE 2. εΫϦϓτʹΑΔίϐʔͱݕূ
  7. 22 app چDB Read Write app app shard_1 shard_2 shard_N

    ɾɾɾ ৽DB copy script verify script Verify ͜͜Ͱෆ੔߹͕͋ͬͨ৔߹͸࠶౓ίϐʔͱݕূΛ࣮ࢪ INSERT or UPDATE 2. εΫϦϓτʹΑΔίϐʔͱݕূ
  8. 23 app چDB Read Write app app shard_1 shard_2 shard_N

    ɾɾɾ ৽DB copy script verify script Verify 8ฒྻͰ࣮ߦ͓ͯ͠Αͦ1ϲ݄Ͱ׬૸ʢcopy1पɺverify3पʣ INSERT or UPDATE 2. εΫϦϓτʹΑΔίϐʔͱݕূ ʹ ׬શʹಉظʂ
  9. 25 app چDB Read Write app app shard_1 shard_2 shard_N

    ɾɾɾ ৽DB seq ʢ࠾൪ʣ ׬શʹRead/Write͍ͯ͠ͳ͍ঢ়ଶʹ͢Δʢϝϯςφϯεʣ 3. ৽چDBͷRead/Write੾Γସ͑ʢϝϯς࣌ʣ
  10. 26 app چDB Read Write app app shard_1 shard_2 shard_N

    ɾɾɾ ৽DB script seq ʢ࠾൪ʣ insert auto_increment id چDBͷ auto_increment id ͷ஋Λɺ৽DBͷ࠾൪ςʔϒϧʹ൓ө͢Δ 3. ৽چDBͷRead/Write੾Γସ͑ʢϝϯς࣌ʣ
  11. 27 app چDB Read Write app app shard_1 shard_2 shard_N

    ɾɾɾ ৽DB seq ʢ࠾൪ʣ ੾Γସ͑ɻ੾Γ໭͠Λߟྀͯ͠چDB΁ͷWrite͸ܧଓ͢Δ 3. ৽چDBͷRead/Write੾Γସ͑ʢϝϯς࣌ʣ
  12. 4. چDB΁ͷWriteΛࢭΊΔ 29 app چDB Read Write app app shard_1

    shard_2 shard_N ɾɾɾ ৽DB seq ʢ࠾൪ʣ Τϥʔ0݅ɺෆ੔߹ͳ͘େ੒ޭ