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

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

tomoya yokota
July 13, 2021
270

レガシー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. τʔΫφΠβͱ͸ʁ • શจݕࡧͷࡧҾ৘ใ͸จষΛҰఆͷϧʔϧͰ
 ෼ׂͨ͠୯ޠͱจষͷIDͰΠϯσοΫεΛ࡞੒͢Δ • (Ex) ࠓ೔͸ྑ͍ఱؾͩ → ࠓ೔ɺྑ͍ɺఱؾ
 ͱจষIDͰυΩϡϝϯτอଘ

    • (ࠓ೔ or ྑ͍ or ఱؾ) ΛݕࡧΩʔϫʔυʹ͢Δͱ
 (Ex)ͷจষ͕ݕࡧώοτ͢Δ • ෼ׂͷϧʔϧ͸τʔΫφΠβʹΑͬͯҟͳΓ·͢ • ༗໊ͳτʔΫφΠβ͸Kuromoji, N-gram ͳͲɻ༻్ʹΑͬͯ࢖͍෼͚Δ
  2. τʔΫφΠβ͕յΕΔͱ…? • τʔΫφΠβA͕࣍ͷΑ͏ʹ෼ׂ͢Δͱ͢Δ • Ex) ౦ژ౎ → ౦ژ, ژ౎Ͱ෼ׂ
 👉

    ౦ژ or ژ౎Ͱώοτ • ݡ͍τʔΫφΠβ → ౦ژ, ౦ژ౎Ͱ෼ׂ
 👉 ౦ژ or ౦ژ౎Ͱώοτ • ݕࡧϊΠζ͕ݮΔͨΊɺҰൠతʹ͸Bͷํ͕ݡͯ͘ྑ͍ͱ͞ΕΔ
  3. ͭΒ͍ΠϯσοΫεͷ࠶࡞੒ • SRE͕ࡉ͔͍ঢ়ଶ؅ཧ • ΠϯσΫγϯάର৅ͷςφϯτ • ΠϯσΫγϯάର৅ͷϓϩμΫτ • ΠϯσΫγϯάର৅ͷϨίʔυͷҐஔ •

    ΠϯσοΫεͷ࠶࡞੒͕௕ظԽ͢Δςφϯτ͕ݱΕ͸͡ΊΔ • SREΦϖϨʔγϣϯͷߟྀ࿙ΕͰ࡞੒தͷΠϯσοΫε͕
 յΕΔࣄނ͕ى͖ΔΑ͏ʹͳΔ • ͜ͷࣄނ͕ى͖Δͱͦͷςφϯτ͸ΠϯσοΫεͷ΍Γ௚͠
  4. Solr EOLͱϏόʔΫ • ར༻͍ͯ͠ΔSolr͕End of life(EOL)΁ • EOLରԠͷΈΛ໨తͱͨ͠
 શจݕࡧαʔόʔҠߦΛ໛ࡧ •

    ొࢁ༻ޠͰۓٸආ೉Λҙຯ͢ΔϏόʔΫͱͨ͠ • NecoͰΞʔΩςΫνϟతʹ͖Ε͍ͳղʹ
 ࢸΕ͹Α͍ɻ͍Θ͹࣌ؒՔ͗
  5. ΠϯσοΫε਺ͷ੍ݶ • Elasticsearchෆ҆ఆԽ໰୊Λௐࠪͯ࣍͠ͷΑ͏ʹ݁࿦ΛಘΔ • େن໛Ϋϥελߏ੒Ͱى͖Δ • େྔΠϯσοΫεɺγϟʔυ͕Ϋϥελ্ʹଘࡏ͍ͯ͠Δඞཁ͕͋Δ • ΠϯσοΫε࡞੒͑͞Ͱ͖Ε͹ͦͷޙ͸໰୊ͳ͘ӡ༻Ͱ͖Δ •

    Solrͱಉ͡ߏ੒ɺγϯϓϧͳΫϥελͰσϓϩΠ͢Ε͹໰୊ΛճආͰ͖Δ • ΫϥελΛෳࡶԽ͗͢͠ͳ͍ɾΠϯσοΫε਺Λ੍ݶͰ͖Δ • ͱ͍͏͜ͱͰʰSolrͱ΄΅ಉߏ੒ʱΛSREʹଧ਍ • SREతʹ΋Ϋϥελߏங޻਺͸ѹॖͰ͖Δɻӡ༻؀ڥͷमਖ਼΋͋Δఔ౓૝ఆ಺ʹऩ·Δɻ • ͜ΕͰΑ͠ͱ͍ͯ͠Δͷ͸Solrͷߏ੒ͱಉ౳ͷߏ੒ͱͳΔͨΊ
  6. 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
  7. ετϥϯάϥʔύλʔϯ • Ҡߦύλʔϯͷ͏ͪͷҰͭ • ϨΨγʔͳίϯϙʔωϯτΛঃʑʹݮΒ͢ • ໰୊͕͋Ε͹ϨΨγʔʹ੾Γ໭͠ • νʔϜ͝ͱͷ޻਺΍࣮૷଎౓΋มΘΔ •

    ରԠ׬ྃͨ͠ϓϩμΫτ͔ΒΠϯσοΫε։࢝ • Ϋϩʔϧऴྃͨ͠؀ڥ͔ΒElasticsearch੾Γସ͑ • ϏοΫόϯϦϥΠτɾϏοΫόϯϦϦʔε͸Ͱ͖Δ͚ͩ͠ͳ͍
  8. Ҡߦ༻ͷػೳΛAPIͱ࣮ͯ͠૷ • ͜͜·ͰΛߟ͑ΔͱϓϩμΫτAPIͰ࡞ͬͯ΋Βͬͨ΄͏͕ద੾ • SRE͸Ͱ͖Δ͔͗ΓAPIͷ࣮ߦʹపͯ͠΋Β͏ • Ϋϩʔϥʔͷ։࢝APIΛ࣮ߦ • ਐḿ֬ೝAPIΛ࣮ߦ •

    Elasticsearch/Solr੾Γସ͑APIΛ࣮ߦ • Ϋϩʔϧͷਐḿঢ়گΛ಺෦తʹ࣋ͯΔͷͰSREͷΦϖϨʔγϣϯͰ
 ࠶ΠϯσοΫε͕ഁغ͞ΕΔ͜ͱ΋ͳ͍
  9. ΧφϦΞϦϦʔεͲ͏Ͱ͔ͨ͠ • 100%ݕࡧΤϥʔʹͳΔো֐͕͋ͬͨ • ElasticsearchͷαʔΩοτϒϨΠΧʔൃಈ • ͍ͬͨΜఘΊͯSolr΁੾Γ໭͠ • ݪҼΛղੳɾઃఆมߋɾ࣮૷มߋΛͯ҆͠ఆӡ༻ʹ͚͍͗ͭͯ͜Δ •

    ʰࣦഊ͸૝ఆ͓ͯ͘͠΂͖ʱɻͱͯ΋Αֶ͍ͼʹͳͬͨ • ࣦഊέʔε͸ݱ࣮ಀආ͕ͪ͠… • ࡉ͔͍έʔε͸ߟྀͰ͖ͳͯ͘΋ࣦഊ࣌ͷΤεέʔϓϧʔτΛ֬อ͓ͯ͜͠͏