Upgrade to Pro — share decks privately, control downloads, hide ads and more …

検索基盤を安全にElasticsearchに置き換えるためにやったこと

 検索基盤を安全にElasticsearchに置き換えるためにやったこと

Feature Toggleとダークローンチで安全にElasticsearchクラスタをリリースした話。

5c29b6a44d2463092e8bd5e93eedad8a?s=128

Hiroki Sakamoto

May 12, 2018
Tweet

Transcript

  1. Hiroki Sakamoto
 @taisho6339 ݕࡧج൫Λ҆શʹ
 Elasticsearchʹஔ͖׵͑ΔͨΊʹ΍ͬͨ͜ͱ

  2. ຊࢿྉͰऔΓ্͛Δ಺༰ DBݕࡧ͔ΒElasticsearchʹ҆શʹஔ͖׵͑Δͱ͖ʹɺ μʔΫϩʔϯν΍FeatureToggleΛ׆༻ͯ҆͠શʹϦϦʔεͨ͠஌ݟ 
 https://www.elastic.co/jp/

  3. ຊࢿྉͰड़΂ͳ͍͜ͱ • ESͷجૅతͳ෦෼ • ESͷΠϯσοΫεɺΫϥελઃܭ • ΠϯσΫγϯά΍ݕࡧͷࡉ͔͍࣮૷ʹ͍ͭͯ • Feature Toggleͷ۩ମతͳ࣮૷ʹ͍ͭͯ

  4. ࣮ࢪͨ͠αʔϏεཁ݅ • Ϣʔβ਺100ສਓҎ಺ఔ౓ͷձһ੍SNSαʔϏε • Ϣʔβͷݕࡧػೳ͕͋Δ • ଐੑ஋(ੑผɺ೥ྸɺझຯͳͲ)ΛݩʹύϥϝʔλͰݕࡧ • MySQLαʔό΁SELECTจΛൃߦ͢Δ͜ͱͰݕࡧΛ࣮ݱ •

    ϑϦʔϫʔυݕࡧͳͲ͸ͳ͍
  5. αʔϏεͷ՝୊ײ ݕࡧύϥϝʔλ͸छྨఔ౓ࢦఆͰ͖ɺ
 શͯͷύϥϝʔλʹΠϯσοΫε͕ޮ͘Θ͚Ͱ͸ͳ͍ ςʔϒϧϑϧεΩϟϯ͕සൃ
 αʔό୆਺ͰεέʔϧͰ͖ͳ͍

  6. αʔϏεͷ՝୊ײ ύϑΥʔϚϯεΛग़͠ɺ͔ͭαʔϏεͷ੒௕ʹ߹Θͤͯ
 εέʔϧͤ͞ΒΕΔج൫͕ඞཁͩͬͨ

  7. ElasticsearchΫϥελͷߏங

  8. ΞʔΩςΫνϟ master data ؂ࢹ΍؅ཧ ΞϓϦέʔγϣϯαʔό ݕࡧ όοναʔό ΠϯσΫγϯά

  9. ΞʔΩςΫνϟ • ϕʔγοΫͳESΫϥελ • master͸৑௕Խ & εϓϦοτϒϨΠϯରࡦͰ3୆ • data͸৑௕Խ͢Δ࠷খ୯ҐͰ2୆ •

    ΞϓϦέʔγϣϯαʔό͔Βdataϊʔυʹରͯ͠ݕࡧ • ΠϯσΫγϯά͸όονͰఆظతʹߦ͏(χΞϦΞϧλΠϜ) • ߋ৽ର৅͸ΩϡʔΠϯά
  10. ϦϦʔεʹ൐͏՝୊ײ ݕࡧ݁Ռଥ౰ੑͷ୲อ Կ͔͋ͬͨͱ͖ͷ &4ো֐࣌ͷݕࡧ͸Ͳ͏ͳΔͷ͔ʁ

  11. ϦϦʔεʹ൐͏՝୊ײ ݕࡧ݁Ռଥ౰ੑͷ୲อ &4ো֐࣌ͷݕࡧ͸Ͳ͏ͳΔͷ͔ʁ ଧͪख μʔΫϩʔϯν

  12. μʔΫϩʔϯν ʮμʔΫ ϩʔϯνͱ͸Կ͔ : CRE ͕ݱ৔ͰֶΜͩ͜ͱʯ
 https://cloudplatform-jp.googleblog.com/2017/08/CRE-life-lessons- what-is-a-dark-launch-and-what-does-it-do-for-me.html

  13. μʔΫϩʔϯν ΞϓϦέʔγϣϯαʔό MySQL ྆ํʹݕࡧཁٻ

  14. μʔΫϩʔϯν ΞϓϦέʔγϣϯαʔό MySQL ݕࡧ݁ՌΛൺֱ

  15. μʔΫϩʔϯν ΞϓϦέʔγϣϯαʔό MySQL ҰఆҎ্ͷࠩҟ͕͋Δͱ͖ʹ
 ूܭ༻ʹϩάΛు͘

  16. μʔΫϩʔϯν ΞϓϦέʔγϣϯαʔό MySQL ࣮ࡍʹฦ͢ͷ͸DBͷ݁Ռ Ϩεϙϯε

  17. μʔΫϩʔϯν ϩάूܭݕূ σϓϩΠ վम ζϨ͕ڐ༰஋Λ੾Δ·Ͱ
 վળαΠΫϧΛ܁Γฦͨ͠

  18. ϦϦʔεʹ൐͏՝୊ײ &4ো֐࣌ͷݕࡧ͸Ͳ͏ͳΔͷ͔ʁ &4ো֐࣌ͷݕࡧ͸Ͳ͏ͳΔͷ͔ʁ ଧͪख Feature Toggleͷ׆༻

  19. Feature Toggle • σϓϩΠແ͠ͰಈతʹػೳͷON/OFFΛ͢ΔͨΊͷ֓೦ɻ • ༗໊ͳ࣮૷ϥΠϒϥϦͩͱJava੡ͷFF4JͳͲ͕͋Δɻ • ୯७ͳON/OFF͚ͩͰͳ͘ɺಛఆͷ৚݅ͷϢʔβʹ௨ৗͱ͸ҧ ͏΋ͷΛग़͠෼͚ͨΓ͢Δ͜ͱ͕Ͱ͖Δ •

    FeatureToggles
 https://martinfowler.com/articles/feature-toggles.html#OpsToggles

  20. Feature Toggle ࣮૷Πϝʔδ if( isEnableFeature(“FEATURE_ES_SEARCH”) ) { // ElasticsearchͰͷݕࡧ }

    else { // DBͰͷݕࡧ } ͜ͷΑ͏ͳ࣮૷Λ͓ͯ͘͠ͱɺ
 ؅ཧը໘͔ΒಈతʹϑϥάΛOFFʹͰ͖Δ
  21. Feature Toggle ࣮૷Πϝʔδ ग़య: http://ff4j.org/ ͜͜ͷON/OFFͰϑϥά͕มΘΔ!

  22. Feature Toggleͷ׆༻ ΞϓϦέʔγϣϯαʔό MySQL Toggle͕ON

  23. Feature Toggleͷ׆༻ ΞϓϦέʔγϣϯαʔό MySQL Toggle͕OFF Toggle͕OFFͷͱ͖͸DBͰݕࡧͤ͞Δ

  24. Feature Toggleͷ׆༻ data ΞϓϦέʔγϣϯαʔό ݕࡧ όοναʔό ΠϯσΫγϯά Τϥʔൃੜʂ Τϥʔൃੜʂ ElasticsearchͰΠϯσΫγϯάɺ΋͘͠͸ݕࡧͰɺ


    Τϥʔ͕ҰఆҎ্ग़ͨ৔߹͸ࣗಈతʹToggleΛOFFʹ͢Δ
  25. Feature Toggle ؅ཧը໘͔Βͷखಈ੾Γସ͑ɺESΤϥʔݕग़࣌ͷࣗಈ੾Γସ͑ʹ ΑͬͯɺσϓϩΠແ͠ͰDBݕࡧ΁ϑΥʔϧόοΫ Կ͔͋ͬͨͱͯ͠΋Ϣʔβ΁ͷӨڹΛ࠷খݶʹ

  26. ݁Ռ • ϦϦʔεޙ2ϲ݄ܦա͍ͯ͠Δ͕ো֐ൃੜ0݅ɻ • (ϨεϙϯελΠϜ͸28ഒվળ)

  27. ·ͱΊ • Լهͷγϯϓϧͳ͕Βڧྗͳߟ͑ํͰো֐0ͰϦϦʔε • μʔΫϩʔϯνͰຊ൪؀ڥͷτϥϑΟοΫͰ݁ՌݕূΛߦͬͨ • Feature Toggleͷ׆༻Ͱ͙͢ʹϑΥʔϧόοΫ