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

レガシーSolrの
Elasticseach移行 Cybozu Tech Meetup #14

tomoya yokota
July 13, 2021
200

レガシーSolrの
Elasticseach移行 Cybozu Tech Meetup #14

サイボウズのクラウドサービスでは、サービス開始当初から長年にわたり、全文検索サーバーとしてSolrを採用していました。 そんなサイボウズのクラウド黎明期から運用し続けていたSolrサーバーを、Elasticsearchに置き換えるプロジェクトが先日完了しました。プロジェクトの完了報告は、以下の記事から読むことができます。

魔窟と化した全文検索サーバーとふっかつのじゅもん - Cybozu Inside Out
https://blog.cybozu.io/entry/2021/06/16/080000K

今回のCybozu Tech Meetupでは、Elasticsearch移行プロジェクトのメンバーの1人から、Cybozu Inside Outでは語り切れなかった苦労話や、これからの進展についてお話しします。

Youtube Live:
https://www.youtube.com/watch?v=GRDx1PFdFUQ

tomoya yokota

July 13, 2021
Tweet

Transcript

  1. ϨΨγʔSolrͷ

    ElasticseachҠߦ
    Cybozu Tech Meetup #14

    View Slide

  2. ͸͡Ίʹ
    • ϨΨγʔSolrͷElasticsearchҠߦ͝ࢀՃ͋Γ͕ͱ͏͍͟͝·͢
    • ʰຐ۸ͱ͔ͨ͠શจݕࡧαʔόʔͱ;͔ͬͭͷ͡Ύ΋Μʱͱ

    ΄΅ಉ͡಺༰ʹͳΓ·͢
    • ࣭໰ʹͰ͖ΔݶΓ౴͍͑ͨͱߟ͓͑ͯΓ·͢
    • ϒϩάΛಡΜͰͷ࣭໰ɾποίϛ΍

    ಉ͡Α͏ͳڥ۰ͷํͰ೰ΜͰ͍Δํ͕͍Ε͹

    ࣾ֎ൿ৮Εͳ͍ఔ౓ʹڞ༗͍͚ͯͨͩ͠ΔͱҰॹʹ೰Έ·͢ɻ

    View Slide

  3. ࣭໰ͳͲ͋Ε͹͓ؾܰʹ
    • Twitter΋#CybozuTechͷ

    ϋογϡλάΛ͚ͭͯ

    ͭͿ΍͍͍͚ͯͨͩΔͱ

    ࣭໰Λर͑Δ͔΋͠Ε·ͤΜ

    View Slide

  4. ຊ୊ͷલͷΤΫεΩϡʔζ
    • ʰϨΨγʔʱͱ͍͏ݴ༿ʹରͯ͠ωΨςΟϒͳ͖ͭ·ͱ͍͕ͪͰ͢
    • ϨΨγʔԽͯ͠͠·ͬͨOSSΛᄀΊΔҙਤ͸͋Γ·ͤΜ
    • աڈɾݱࡏؔΘͬͨϝϯόʔΛᄀΊΔҙਤ͸͋Γ·ͤΜ
    • Solr͕αΠϘ΢ζͷΫϥ΢υᴈ໌ظΛࢧ͑ͨͷ͸

    ༳Δ͗ͳ͍ࣄ࣮Ͱ͢
    • ࠓճ࠾༻ͨ͠ΞʔΩςΫνϟ͸

    Elasticsearch͕ਪ঑͍ͯ͠Δߏ੒ͱ͸શ͘ҟͳΓ·͢

    View Slide

  5. Solrͱcybozu.com

    View Slide

  6. શจݕࡧαʔόʔʹ͍ͭͯ
    • αΠϘ΢ζͰ͸SolrΛར༻͍ͯͨ͠
    • JettyʹwarܗࣜͷSolrΛόϯυϧ͢Δ

    ߏ੒Ͱӡ༻؀ڥʹσϓϩΠ
    • ࣗࣾΧελϚΠζΛߦ͍ͬͯͨ
    • Ψϧʔϯ/ϝʔϧϫΠζ/kintoneͰશจΛར༻

    View Slide

  7. Ϋϥ΢υͷߏ੒ʹ͍ͭͯ
    • ӡ༻ʹඞཁͳίϯϙʔωϯτ͝ͱʹVMʹ഑ஔ
    • Solr΋͜ͷ಺ͷҰͭ
    • Ұఆ਺ͷςφϯτ͝ͱΛ·ͱΊͯ

    ͦΕͧΕʹಠཱͨ͠؀ڥΛఏڙ͍ͯ͠Δ

    View Slide

  8. cybozu.comͷΫϥ΢υ֓ཁਤ
    ςφϯτID={1, 2, 3}
    ςφϯτID={6,7,8}
    ςφϯτID={4,5}
    ςφϯτID, ϓϩμΫτ͝ͱʹ

    SolrͷΠϯσοΫεΛ࡞੒

    View Slide

  9. ຐ۸ͱԽ͢·Ͱͷྺ࢙

    View Slide

  10. SolrͱΫϥ΢υͷྺ࢙
    • Ϋϥ΢υαʔϏεᴈ໌ظ͔Βͷ

    શจݕࡧͷج൫ٕज़
    • SolrͷόʔδϣϯΞοϓʹΑΓ

    τʔΫφΠβͷޓ׵ੑ͕յΕΔ͜ͱ͕Θ͔Δ
    • Solr΁ͷόʔδϣϯΞοϓΛ͍ͬͨΜఘΊΔ

    View Slide

  11. τʔΫφΠβͱ͸ʁ
    • શจݕࡧͷࡧҾ৘ใ͸จষΛҰఆͷϧʔϧͰ

    ෼ׂͨ͠୯ޠͱจষͷIDͰΠϯσοΫεΛ࡞੒͢Δ
    • (Ex) ࠓ೔͸ྑ͍ఱؾͩ → ࠓ೔ɺྑ͍ɺఱؾ

    ͱจষIDͰυΩϡϝϯτอଘ
    • (ࠓ೔ or ྑ͍ or ఱؾ) ΛݕࡧΩʔϫʔυʹ͢Δͱ

    (Ex)ͷจষ͕ݕࡧώοτ͢Δ
    • ෼ׂͷϧʔϧ͸τʔΫφΠβʹΑͬͯҟͳΓ·͢
    • ༗໊ͳτʔΫφΠβ͸Kuromoji, N-gram ͳͲɻ༻్ʹΑͬͯ࢖͍෼͚Δ

    View Slide

  12. τʔΫφΠβ͕յΕΔͱ…?
    • τʔΫφΠβA͕࣍ͷΑ͏ʹ෼ׂ͢Δͱ͢Δ
    • Ex) ౦ژ౎ → ౦ژ, ژ౎Ͱ෼ׂ

    👉 ౦ژ or ژ౎Ͱώοτ
    • ݡ͍τʔΫφΠβ → ౦ژ, ౦ژ౎Ͱ෼ׂ

    👉 ౦ژ or ౦ژ౎Ͱώοτ
    • ݕࡧϊΠζ͕ݮΔͨΊɺҰൠతʹ͸Bͷํ͕ݡͯ͘ྑ͍ͱ͞ΕΔ

    View Slide

  13. ݡ͍ݕࡧ͸خ͍͠͸ͣ…ʁ
    • kintoneʹ͸ϨίʔυߜΓࠐΈػೳ͕͋Γ

    ςΩετΛؚΉ৚݅ͰߜΓࠐΉػೳ͕͋ͬͨ
    • ߜΓࠐΈ͕ώοτ͢Δɾ͠ͳ͍͕มΘΔͷ͸

    kintoneʹͱͬͯ͸ΫϦςΟΧϧͳޓ׵ੑͷ

    ഁյͱͳΔ
    • kintoneͷߜΓࠐΈػೳ͕τʔΫφΠβͷ࢓༷ʹ

    ҉໧తʹີ݁߹͍ͯ͠Δ

    View Slide

  14. KintoneͷߜΓࠐΈ
    ߜΓࠐΈͷΩʔϫʔυ͕શจݕࡧͰώοτ͢Δͱ

    Ϩίʔυͱͯ͠දࣔ͞ΕΔ

    View Slide

  15. ຐ۸ͱԽ͢Solr
    • 1೥Ͱ1TBΠϯσοΫε͕૿Ճ͢Δςφϯτ
    • ΠϯσοΫεංେԽʹΑΓݕࡧੑೳͷྼԽ
    • GaroonͰ͸ݕࡧੑೳྼԽ͕ݦஶ
    • ݕࡧϦΫΤετ͕਺ेඵ͔͔ͬͯ

    ௐࠪͰλΠϜΞ΢τ͢Δ͜ͱ͕Θ͔͍ͬͯͨ
    • ҰํͰɺkintoneͷޙํޓ׵ੑ͸ଥڠͰ͖ͳ͍…
    • खΛՃ͑Δ͜ͱ͕Ͱ͖ͳ͍ࣄ࣮͕ੵΈ্͕ͬͯਏ͍

    View Slide

  16. ͞Βʹຐ۸ͱԽܾ͢ఆଧΛ

    ඥղ͍͍ͯ͘

    View Slide

  17. ΠϯσΫγϯάͷྺ࢙

    View Slide

  18. ΠϯσΫγϯάͱ͸
    • શจݕࡧ༻ͷࡧҾσʔλ࡞੒Λࢦ͢
    • Ϣʔβʔͷૢ࡞ʹରͯ͠ࡧҾΛ௥Ճɾߋ৽ɾ࡟আΛߦ͏
    • ͢Ͱʹଘࡏ͢ΔσʔλΛΫϩʔϧͯ͠ࡧҾΛ࠶࡞੒͢Δ
    • τʔΫφΠβͷมߋ࣌ʹ͸࠶ΠϯσΫγϯά͕ඞཁʹͳΔ
    • ϓϩμΫτ͸ΠϯσΫγϯάΛ࡞੒͢ΔAPIΛ࣋ͭ
    • ͜ΕΛSRE͕࣮ߦ͢Δ࢓૊Έ

    View Slide

  19. ΠϯσΫγϯάͷ֓ཁਤ
    ΠϯσοΫεͷ࠶࡞੒
    ϢʔβʔೖྗͷΠϯσοΫεߋ৽

    View Slide

  20. ͭΒ͍ΠϯσοΫεͷ࠶࡞੒
    • SRE͕ࡉ͔͍ঢ়ଶ؅ཧ
    • ΠϯσΫγϯάର৅ͷςφϯτ
    • ΠϯσΫγϯάର৅ͷϓϩμΫτ
    • ΠϯσΫγϯάର৅ͷϨίʔυͷҐஔ
    • ΠϯσοΫεͷ࠶࡞੒͕௕ظԽ͢Δςφϯτ͕ݱΕ͸͡ΊΔ
    • SREΦϖϨʔγϣϯͷߟྀ࿙ΕͰ࡞੒தͷΠϯσοΫε͕

    յΕΔࣄނ͕ى͖ΔΑ͏ʹͳΔ
    • ͜ͷࣄނ͕ى͖Δͱͦͷςφϯτ͸ΠϯσοΫεͷ΍Γ௚͠

    View Slide

  21. ϩετςΫϊϩδʔԽ
    • ΠϯσοΫεͷ࠶࡞੒͸ආ͚Δงғؾ͕ࣾ಺Ͱৢ੒͞ΕΔ
    • ͦ͏͍ͯ͠Δؒʹ໼໘ʹཱ͍ͬͯͨίΞϝϯόʔ͕ୀ৬
    • ΠϯσοΫεͷ࠶࡞੒Λ࠷ޙ·Ͱ਱ߦ͢Δ

    ύϫʔΛ࣋ͬͨਓʹڧ͘ґଘ࣮ͨ͠૷ͩͬͨ
    • ׬શʹ৮Ε͍ͯ͸͍͚ͳ͍ຐ۸΁
    • ͦΜͳͱ͖ʹզʑͷલʹݱΕͨͷ͸…

    View Slide

  22. Elasticsearchͷ୆಄

    View Slide

  23. ʰ஖ᥨͷࢳʱΛٻΊͯ R&D
    • ࠷ߴͷΠϯσΫγϯάɺ࠷ߴͷΫϥελ
    • τʔΫφΠβͷޓ׵ੑ͸ɺElasticsearchͰ΋ͳ͍··

    👉 ϏδωεαΠυΛઆಘͯ͠ɺͳΜͱ͔͢Δ
    • ࠶ΠϯσοΫε͸ఆظϝϯςதʹ΍Γ͖ΔΒ͍͠

    👉 Ϗδ..(ry

    View Slide

  24. ʰ஖ᥨͷࢳʱ͸੬͔ͬͨ
    • Elasticsearch6͸େྔͷΠϯσοΫεΛ࣋ͭͱ

    Ϋϥελ͕ෆ҆ఆԽ͢Δ
    • Elasticsearchͷߏ੒Ҋ͸͢΂ͯͷςφϯτΛ

    ̍ͭͷΫϥελʹऩΊΔߏ૝ͩͬͨ

    View Slide

  25. ΞʔΩςΫνϟͷߏ੒มߋਤ

    View Slide

  26. ͞ΑͳΒ ͨΓͳ͍ΞʔΩςΫνϟ
    • ໰୊Λղܾ͢Δʹ͸৭ʑ଍Γͳ͍
    • ෳࡶͳΫϥελ؅ཧ
    • ϚϧνςφϯτͰ࢖͑ΔαʔϏεɾσΟεΧόϦ
    • ޻਺ɾ޻਺ɾ޻਺
    • ࣮ݱෆೳͷᖻҹΛԡ͞ΕͯϓϩδΣΫτఀࢭ
    • ࠓࢥ͏ͱR&Dͱ͍͏ݴ༿ʹݱ࣮ಀආ͍ͯͨ͠

    View Slide

  27. ຐ۸·ͱΊ
    • τʔΫφΠβͱີ݁߹ͨ͠ػೳʹΑΓ

    ਎ಈ͖͕औΕͳ͘ͳΔ
    • ࠶ΠϯσοΫε༻ͷπʔϧ͕࢖͍෺ʹͳΒͳ͘ͳΔ
    • ڊେԽɾੑೳ͕ѱԽ͚ͭͮ͠Δݕࡧαʔόʔ
    • ଐਓԽɾϩετςΫϊϩδʔԽ
    • ࠷ޙʹ͕ͬͨ͢Elasticsearch΋ແཧͩͬͨ

    View Slide

  28. Solr End of Life ͱ 

    ϏόʔΫϓϩδΣΫτ

    View Slide

  29. Solr EOLͱϏόʔΫ
    • ར༻͍ͯ͠ΔSolr͕End of life(EOL)΁
    • EOLରԠͷΈΛ໨తͱͨ͠

    શจݕࡧαʔόʔҠߦΛ໛ࡧ
    • ొࢁ༻ޠͰۓٸආ೉Λҙຯ͢ΔϏόʔΫͱͨ͠
    • NecoͰΞʔΩςΫνϟతʹ͖Ε͍ͳղʹ

    ࢸΕ͹Α͍ɻ͍Θ͹࣌ؒՔ͗

    View Slide

  30. ϏόʔΫͷείʔϓ
    • Solr͔Βͷ୤٫ʰͷΈʱΛείʔϓͱ͢Δ

    ࣮֬ʹϓϩδΣΫτΛऴΘΒͤΔ
    • ໨త͸SolrͷηΩϡϦςΟϦεΫΛআڈͷΈ
    • ҠߦΛ੒ޭͤ͞ΔͨΊʹʰ΂͖࿦ʱ͸͠ͳ͍
    • ΞʔΩςΫνϟ͔͋͘Δ΂͠࿦͸͠ͳ͍
    • ੑೳͰக໋తͳ໰୊͕ग़ͳ͍ݶΓ͸ҠߦΛଧ਍

    View Slide

  31. ٕज़બఆ
    • SolrΛόʔδϣϯΞοϓ͢ΔҊ΋͋ͬͨ
    • ࠷৽ͷSolrͰ͸ࣾ಺Ͱఏڙ͍ͯͨ͠ܗࣜͰͷ

    ܧଓఏڙ͢Δͷ͕೉͘͠ɺSolrʹͩ͜ΘΔՁ஋͕௿͔ͬͨ
    • Kintone࣍ੈ୅ΞʔΩςΫνϟͱݺ͹ΕΔ΋ͷ͕͋Γɺٕज़ελοΫΛ߹Θͤͨ
    • Elasticsearch͸debύοέʔδΛఏڙ͍ͯͯ͠SRE͕ѻ͍΍͍͔ͬͨ͢
    • Elasticsearch͸Ԙ௮͚໰୊ΛղܾͰ͖Δػߏ͕͏·͘Ͱ͖͍ͯͨ
    • ElasticsearchΛୈҰީิͱͯ͠ɺੑೳݕূΛߦͬͯΈͨ

    View Slide

  32. ੑೳݕূͷ݁Ռ
    • چ SolrͱElasticsearchൺֱͰσΟεΫ༰ྔ40%ݮ
    • ੑೳݕূ࣌(2018/12)ʹ

    SolrͰ࠷େͷΠϯσοΫε༰ྔ͸2.8TB
    • ElasticsearchʹҠߦ͢Δͱ1.4TBʹͳΔ
    • Ψϧʔϯ͸ݕࡧੑೳ͕10ഒվળ
    • Ψϧʔϯ͸͜ͷλΠϛϯάͰσʔλߏ଄Λݟ௚͠
    • ϝʔϧϫΠζɾkintone͸ྼԽͳ͠

    View Slide

  33. Solr͔Β୤٫͢Δʹ͸ʁ
    • ղܾ͢Δ΂͖໰୊͸̏఺
    • ΠϯσοΫε਺ͷ੍ݶΛͲ͏͢Δ͔ʁ
    • τʔΫφΠβͷޓ׵ੑΛͲ͏อ͔ͭʁ
    • ΠϯσοΫεͷ࠶࡞੒ΛͲ͏͢Δ͔ʁ

    View Slide

  34. ΠϯσοΫε਺ͷ੍ݶ
    • Elasticsearchෆ҆ఆԽ໰୊Λௐࠪͯ࣍͠ͷΑ͏ʹ݁࿦ΛಘΔ
    • େن໛Ϋϥελߏ੒Ͱى͖Δ
    • େྔΠϯσοΫεɺγϟʔυ͕Ϋϥελ্ʹଘࡏ͍ͯ͠Δඞཁ͕͋Δ
    • ΠϯσοΫε࡞੒͑͞Ͱ͖Ε͹ͦͷޙ͸໰୊ͳ͘ӡ༻Ͱ͖Δ
    • Solrͱಉ͡ߏ੒ɺγϯϓϧͳΫϥελͰσϓϩΠ͢Ε͹໰୊ΛճආͰ͖Δ
    • ΫϥελΛෳࡶԽ͗͢͠ͳ͍ɾΠϯσοΫε਺Λ੍ݶͰ͖Δ
    • ͱ͍͏͜ͱͰʰSolrͱ΄΅ಉߏ੒ʱΛSREʹଧ਍
    • SREతʹ΋Ϋϥελߏங޻਺͸ѹॖͰ͖Δɻӡ༻؀ڥͷमਖ਼΋͋Δఔ౓૝ఆ಺ʹऩ·Δɻ
    • ͜ΕͰΑ͠ͱ͍ͯ͠Δͷ͸Solrͷߏ੒ͱಉ౳ͷߏ੒ͱͳΔͨΊ

    View Slide

  35. τʔΫφΠβͷޓ׵ੑ
    • Elasticsearch͸ΞφϥΠβͷ

    ϓϥάΠϯػߏ͕͋Γ૊ΈࠐΈ΍͍͢
    • Solrͷݹ͍τʔΫφΠβΛϓϥάΠϯͱͯ͠

    Ҡ২͢Δͷ͸ݱ࣮తͩΖ͏͔ʁ
    • ޙํޓ׵ੑͷഁյΛೲಘͯ͠΋Β͏ͷʹ࣌ؒΛ

    ༹͔͢ͷͱτʔΫφΠβͷϝϯςφϯείετΛෛ͏
    ͷ͸ͲͪΒ͕Ϛγʁ

    View Slide

  36. ϓϥάΠϯ؅ཧίετ͸௿ͦ͏
    • ϓϥάΠϯ͸Jarͱͯ͠෼཭Ͱ͖Δ
    • OSSʹύονΛ౰ͯͯ࠶Ϗϧυෆཁ
    • ίϚϯυϥΠϯͰ؆୯Πϯετʔϧ
    • όʔδϣϯΞοϓ࣌ʹ͸ϓϥάΠϯΛ࠶Ϗϧυ
    • ӡ༻؀ڥ͸debύοέʔδͰ഑෍͍ͯ͠ΔͷͰ

    Elasticsearch഑෍ͷdebύοέʔδΛमਖ਼ͯ͠

    ϓϥάΠϯΛόϯυϧ͍ͯ͠Δ

    View Slide

  37. DockerfileͰ͔ΜͨΜ
    # Stage1: download custom plugin source from github
    FROM quay.io/cybozu/ubuntu-dev:20.04 AS plugin-source
    ARG CLASSIC_CJK_ANALYSIS_PLUGIN_VERSION="7.10.2"
    WORKDIR /work
    RUN git clone https://github.com/cybozu/classic-cjk-analysis-plugin.git -b "$
    {CLASSIC_CJK_ANALYSIS_PLUGIN_VERSION}" .
    # Stage2: build plugin
    FROM amazoncorretto:11.0.8 AS plugin-build
    COPY --from=plugin-source /work /work
    WORKDIR /work
    RUN ./gradlew clean zipPlugin
    # Stage3: custom install
    FROM docker.elastic.co/elasticsearch/elasticsearch:7.10.2
    COPY --from=plugin-build /work/build/dist/classic-cjk-analysis-plugin-0.0.1-es-7.10.2.zip /tmp/classic-cjk-
    analysis-plugin-0.0.1-es-7.10.2.zip
    RUN bin/elasticsearch-plugin install --batch file:///tmp/classic-cjk-analysis-plugin-0.0.1-es-7.10.2.zip

    View Slide

  38. ΠϯσοΫε࠶࡞੒ͷ໰୊
    • Building microservicesΛ

    ࢀߟʹҠߦҊΛݕ౼
    • ϚΠΫϩαʔϏεͷݪଇΛ

    ҙࣝ͠ͳ͕ΒҠߦΛઃܭ͢Δ

    View Slide

  39. ϞϊϦε͔ΒϚΠΫϩαʔϏε΁
    • ҠߦʹಛԽͨ͠ϊ΢ϋ΢͕

    ٧·͍ͬͯΔͷͰ

    ͪ͜Β΋͓͢͢ΊͰ͢
    • ϚΠΫϩαʔϏεʹݶΒͣ

    ಡΜͰ͓͘ͱࠔͬͨͱ͖ʹ

    ॿ͚ͯ͘ΕΔ͔΋͠Ε·ͤΜ

    View Slide

  40. ઃܭͰॏཁࢹͨ͜͠ͱ
    • ա৒ͳ੹຿ͷ෼ׂ
    • ಺෦࣮૷ΛӅṭ͢Δ͜ͱ
    • αʔϏεॴ༗ऀ͕ओମతʹಈ͖΍͍͢ઃܭมߋ
    • ΧφϦΞϦϦʔε
    • ετϥϯάϥʔɾύλʔϯ

    View Slide

  41. SREͷ੹຿ͷ෼ׂͱҠৡ
    • աڈͷ࠶ΠϯσοΫεͷ࣮૷͸ΞϓϦͷ

    ࣮૷ͷΧϓηϧԽ͕ద੾Ͱ͸ͳ͍ͱ͍͏໰୊ΛղऍΛͨ͠
    • ϩδοΫ͸ॻ͖΍͍͢ͱ͜Ζʹूத͢Δ

    ܏޲͕͋ΔɻSREʹूத͍͗ͯͨ͢͠ɻ
    • Ϋϥ΢υͷᴈ໌ظʹ։ൃͨ͠࠶ΠϯσοΫεπʔϧͷ࣮૷͸

    ѻ͑Δσʔλྔɾෳࡶ͞Λ໌Β͔ʹ௒͑ͯɺ࢖͍෺ʹͳΒͳ͍ɻ
    • SRE͸ςφϯτ͝ͱͷ࠶ΠϯσοΫεΛ։࢝͢ΔλΠϛϯάͷ

    ίϯτϩʔϧʹूதͤ͞Δ(੹຿ͷ෼ׂͱҠৡ)

    View Slide

  42. ϓϩμΫτ͕ओମతʹಈ͖΍͍͢ઃܭมߋ
    • SREͷίʔυʹϩδοΫ͕ूத͍ͯͨ͠ͷͰ

    ϓϩμΫτͰओମతʹઃܭมߋ͠ʹ͍͘ঢ়گ
    • ϓϩμΫτͷؔ৺͝ͱ͸ՄೳͳݶΓӅṭ͢Δ
    • ࢓༷Λक͍ͬͯΕ͹ଞͷνʔϜ͸ؔ஌͠ͳ͍
    • ϓϩμΫτ͕ओମతʹઃܭมߋͰ͖ΔΑ͏ʹͳΔ
    • কདྷతͳվળ΋ߦ͍΍͘͢ͳΔ(…͸ͣ)

    View Slide

  43. ΧφϦΞϦϦʔεΛ੝ΓࠐΉ
    • ໰୊͕͋ͬͨͱ͖ʹSolrʹ੾Γ໭ͤΔΑ͏ʹ
    • Solrʹ੾Γ໭ͤΔAPIΛϓϩμΫτʹ࣮૷
    • Solr/ElastcisearchͷΠϯσοΫε

    ྆ํΛߋ৽͢Δฒߦӡ༻ظؒΛઃ͚Δ
    • ΤεέʔϓϧʔτΛ૊ΈࠐΜͰ͓͘

    👉 ਓΛઆಘ͠΍͍͢

    View Slide

  44. ετϥϯάϥʔύλʔϯ
    • Ҡߦύλʔϯͷ͏ͪͷҰͭ
    • ϨΨγʔͳίϯϙʔωϯτΛঃʑʹݮΒ͢
    • ໰୊͕͋Ε͹ϨΨγʔʹ੾Γ໭͠
    • νʔϜ͝ͱͷ޻਺΍࣮૷଎౓΋มΘΔ
    • ରԠ׬ྃͨ͠ϓϩμΫτ͔ΒΠϯσοΫε։࢝
    • Ϋϩʔϧऴྃͨ͠؀ڥ͔ΒElasticsearch੾Γସ͑
    • ϏοΫόϯϦϥΠτɾϏοΫόϯϦϦʔε͸Ͱ͖Δ͚ͩ͠ͳ͍

    View Slide

  45. ҠߦΠϝʔδ
    • ϓϩμΫτ͝ͱʹ

    Solr͔ΒElasticsearchʹ

    Ҡߦ͍ͯ͘͠
    • Fig1͸Kintoneฒߦӡ༻

    Fig2͸Ψϧʔϯฒߦӡ༻
    • ※ݫີʹ͸ฏߦӡ༻ظؒ͸Φʔόϥοϓ

    View Slide

  46. Ҡߦ༻ͷػೳΛAPIͱ࣮ͯ͠૷
    • ͜͜·ͰΛߟ͑ΔͱϓϩμΫτAPIͰ࡞ͬͯ΋Βͬͨ΄͏͕ద੾
    • SRE͸Ͱ͖Δ͔͗ΓAPIͷ࣮ߦʹపͯ͠΋Β͏
    • Ϋϩʔϥʔͷ։࢝APIΛ࣮ߦ
    • ਐḿ֬ೝAPIΛ࣮ߦ
    • Elasticsearch/Solr੾Γସ͑APIΛ࣮ߦ
    • Ϋϩʔϧͷਐḿঢ়گΛ಺෦తʹ࣋ͯΔͷͰSREͷΦϖϨʔγϣϯͰ

    ࠶ΠϯσοΫε͕ഁغ͞ΕΔ͜ͱ΋ͳ͍

    View Slide

  47. WebAPIͱ࣮ͯ͠૷
    ϓϩμΫτνʔϜͱSREνʔϜ͕࡞ͬͨঢ়ଶભҠਤ

    View Slide

  48. ͔͜͜Β͸ҠߦৼΓฦΓ

    View Slide

  49. Solr͔Βͷ׬શ୤٫ʹ੒ޭ
    • 2021೥6݄ͷఆظϝϯςφϯεؚΊͯ

    શϓϩμΫτͷαϙʔτظؒऴྃ
    • ͢΂ͯͷ؀ڥ͸Elasticsearchஔ͖׵͑׬ྃ
    • ϏόʔΫͷείʔϓɾ໨త͸ୡ੒Ͱ͖ͨ
    • ໋͔Β͕Β…ऴΘΓ·ͨ͠

    View Slide

  50. Ҡߦͯ͠ੑೳ͸Ͳ͏Ͱ͔ͨ͠ʁ
    • ੑೳݕূͰಘΒΕͨ݁Ռ௨ΓͰتͼͷ੠௖͍͓ͯΓ·͢

    ※ Ψϧʔϯ͸σʔλߏ଄ͷվળͷӨڹ͕େ͖͍Ͱ͢

    View Slide

  51. τʔΫφΠβͲ͏Ͱ͔ͨ͠ʁ
    • kintoneͷߜΓࠐΈͷมԽ͸΄΅ؾ͔ͮΕͳ͔ͬͨ(≒ޮՌ͸͹͙ͭΜͩʂ)
    • ඍົͳ࢓༷ࠩҟ͕͋ͬͨΓͨ͠ͷͰαϙʔτͷΈͳ͞Μͷਚྗʹײँ
    • ޓ׵ੑʹͯ͠ΫϦΞͰ͖͍ͯͨͷͰҙࢥܾఆ·Ͱͷ࣌ؒΛѹॖͰ͖ͨ
    • ϓϥάΠϯ΋΄΅ࣗಈԽ͍ͯ͠ΔͷͰίετ͸΄΅̌
    • ϓϥάΠϯʹͳͬͨͷͰޓ׵ੑҡ࣋ͷ఺Ͱ͸Ұ҆৺
    • ո͘͠΋͋Δ͕ɺΫϨόʔͳحࡦͱ͍͏͜ͱͰ͜͜͸ऩΊ͓͖ͯ·͢

    View Slide

  52. ࠶ΠϯσΫγϯάͲ͏Ͱ͔ͨ͠ʁ
    • ڊେσʔλ؀ڥͷҠߦʹ΋੒ޭ
    • ࠷ऴతʹSolrͷΠϯσοΫε͸4TBʹୡͨ͠
    • ͋Δఔ౓ͷπϥϛ͸؇࿨Ͱ͖ͨͷͰ

    ੒ޭ·Ͱ͚͗ͭ͜ΒΕͨ
    • ϓϩμΫτνʔϜɾSREνʔϜʹ৽͍͠

    ेࣈՍΛഎෛΘͤͯ΋͍ΔͷͰ…೉͍͠

    View Slide

  53. ΧφϦΞϦϦʔεͲ͏Ͱ͔ͨ͠
    • 100%ݕࡧΤϥʔʹͳΔো֐͕͋ͬͨ
    • ElasticsearchͷαʔΩοτϒϨΠΧʔൃಈ
    • ͍ͬͨΜఘΊͯSolr΁੾Γ໭͠
    • ݪҼΛղੳɾઃఆมߋɾ࣮૷มߋΛͯ҆͠ఆӡ༻ʹ͚͍͗ͭͯ͜Δ
    • ʰࣦഊ͸૝ఆ͓ͯ͘͠΂͖ʱɻͱͯ΋Αֶ͍ͼʹͳͬͨ
    • ࣦഊέʔε͸ݱ࣮ಀආ͕ͪ͠…
    • ࡉ͔͍έʔε͸ߟྀͰ͖ͳͯ͘΋ࣦഊ࣌ͷΤεέʔϓϧʔτΛ֬อ͓ͯ͜͠͏

    View Slide

  54. ετϥϯάϥʔύλʔϯͲ͏Ͱ͔ͨ͠
    • νʔϜʹΑͬͯ޻਺ɾ։ൃ଎౓͕มΘΔͷͰ

    ঃʑʹݮΒ͍ͯ͘͠ํ਑͸ͱͯ΋Α͔ͬͨ
    • Ҡߦϓϩηε͸ஸೡʹઃܭ͢Δඞཁ͕͋ͬͯ

    ϊ΢ϋ΢΋ଘࡏ͢Δྑֶ͍ͼʹͳͬͨ
    • ҠߦϓϩηεΛஸೡʹઃܭ͢Δͱ

    ͏·͍͘͘(͜ͱ΋͋ΔΒ͍͠)

    View Slide

  55. ࠷ޙʹ Neco΁

    View Slide

  56. ϏόʔΫ͸׬ྃ
    • ϓϩδΣΫτ໊ͱঢ়گΛরΒ͠߹ΘͤΔͱ

    ۓٸආ೉͔Βখ߁ঢ়ଶ·Ͱ͍྇ͩঢ়ଶ
    • ঢ়گ͕ѱԽ͢ΔલʹNecoͷ্ʹߦ͖·͠ΐ͏
    • NecoͷΞʔΩςΫνϟʹότϯλον
    • ࣌ؒΛ͔͙ͤɾϊ΢ϋ΢ΛಘΔʹ͸े෼͗͢Δ

    ϝϦοτ͕͋ͬͨ


    View Slide

  57. ·͞ʹ͜Ε͔ΒҠߦຊ൪
    • ϏόʔΫͰ࠶ΠϯσοΫε΍

    ޓ׵ੑͷ໰୊͸ղܾͷ໨ॲ͕ͨͬͨ
    • ϏόʔΫͰ͏·͘΍Εͳ͔ͬͨ໰୊ɺ

    ΞʔΩςΫνϟతʹະ஌਺ͳ෦෼ͳͲ
    • ͦͷ͋ͨΓͷ࿩͸ɺҠߦޙ͕ऴΘͬͨΒɺ

    ࠓ౓͸ϦΞϧͰଓ͖ͷ࿩Λ͠·͠ΐ͏

    View Slide

  58. We’re Hiring!
    • Kubernetes։ൃΛߦ͏Neco͕ਓؾͰ͕͢
    • Kubernetes্ʹҠߦ͍ͯ͘͠

    ManekiνʔϜ΋͋Γ·͢
    • ॾखΛڍ͛ͯק༠͸͠ʹ͍͘Ͱ͕͢ڵຯ͕͋Ε͹ɺԠื͓଴͓ͪͯ͠Γ·͢

    View Slide