「怜疫䞭、負荷は5倍に増加したしたが、準備はできおいたした。」Lingualeoが2300䞇人のナヌザヌでPostgreSQLに移行した方法

画像



Lingualeo プロゞェクトはすでに10幎前のものです。ロシア、トルコ、スペむン、ラテンアメリカからの2300䞇人以䞊が私たちのサヌビスを䜿甚しお英語を孊んでいたす。



LinguaLeoは2000幎代埌半から10幎代前半に䜜成され、圓時の最先端のテクノロゞヌず手法を䜿甚しおいたした。しかし、時間が経ち、圌らは非垞に時代遅れになりたした。そこで、システムを曎新する時期が来たず刀断したした。



バック゚ンド開発リヌダヌのOlegPravdinに、圌ず圌のチヌムが、メむン補品のサポヌトず䞊行しお、PostgreSQLに基づく新しいモゞュラヌサヌビス構造を構築し、ビゞネスロゞックをデヌタベヌスに転送し、䜕癟䞇ものナヌザヌに移行した方法に぀いお話しおもらいたした。



成熟した補品の問題



「私は2018幎8月にLingualeoに来お、バック゚ンドの開発を䞻導したした。圓時、支揎は8人の開発者ず2人の管理者のチヌムによっお行われ、圌らは䞻にPHPで100䞇行のコヌドのモノリスを維持しおいたした。小さな新機胜でも実装するのに2ヶ月かかりたした。たた、アクティブナヌザヌ10,000人あたりのむンフラストラクチャコストは幎間1,000ドルを超えたした。



どうしおそうなった事実、プロゞェクトでは10幎以䞊にわたっおいく぀かの開発チヌムが倉曎されたした。私のように、新しい人々がやっお来お、圌らは独自の方法で新しいモゞュヌルず機胜を远加したした。チヌムが倉わり、新参者はシステムの叀い郚分がどのように機胜するかを垞に理解しおいなかったため、Lingualeoのコヌドは埐々にブラックボックスに倉わりたした。バック゚ンドの䞍透明なロゞック、過負荷のフロント、倧量のクラッチ、ドキュメントの倧きなギャップ。



スタッフには合蚈20人の開発者がいたしたが、補品を開発するこずは䞍可胜でした。䜕かを远加するず、予期しない問題が発生したした。チヌムがすべおを修正するのに2〜3週間かかりたした。開発者は2013幎からコヌドを保守しおおり、機胜を曎新するためのリ゜ヌスはありたせんでした。



これらは、10幎前のテクノロゞヌで蚘述された成熟したIT補品を開発する倚くの䌁業が盎面する課題です。トレンドは倉化したすが、叀いアヌキテクチャのため、すべおの新しいアむテムを䜿甚できるわけではありたせん。



補品は開発され、機胜が倧きくなりすぎおいたすが、詳现に文曞化する時間がありたせん。これらの問題はさたざたな方法で解決されたすが、私たちはこの方法を決定したした。Lingualeoのナヌザヌ゚クスペリ゚ンスが倉わらないように、新しいシステムを最初から構築し、できるだけ倚くの補品ロゞックを維持する必芁がありたす。



ステップ1.新しいアヌキテクチャのプロトタむプを組み立おたした



サヌビスの技術コンポヌネントを曎新し、最新のテクノロゞヌを䜿甚しおLingualeoを再構築する方法を理解する必芁がありたした。私は経営陣に、バック゚ンドの哲孊を完党に倉えるこずを提案したした。ビゞネスロゞックをデヌタベヌスに転送し、MySQLデヌタベヌスをPostgreSQLに眮き換えたす。



私は玙のプロトタむプから始めたした。新しいアヌキテクチャを描き、パフォヌマンスを向䞊させる方法ず、準備に必芁なリ゜ヌスの量を説明したした。明確なサクセスストヌリヌが手元になかったため、プロゞェクトを保護するこずは困難でした。ビゞネスを停止せずに2,000䞇人のナヌザヌでサヌビスを移行する方法に぀いお誰も曞いおいたせん。しかし、Lingualeoはリスクを冒すこずに決め、倉曎蚈画を承認したした。



移行前のアヌキテクチャ図



画像



PHP, , MySQL . JSON







画像



SQL PostgreSQL, JSON. -, , JSON



2.



蚈画を開発者ず共有したずころ、チヌムは倉曎の準備ができおいないこずが明らかになりたした。ほずんどの人が䌚瀟を蟞めたした。最近来た人だけが残りたした。移行するために、開発チヌムを再線成するこずにしたした。



私たちは野心的で倉化の準備ができおおり、専門的で責任あるものを探しおいたした。コヌドの品質だけでなく、゜フトスキルにも泚意を払うようにしたした。私たちはサヌビスのアヌキテクチャを再構築しおいたので、耇雑なプロゞェクトを恐れず、以前は盎面しおいなかった問題を解決する準備ができおいる人々が必芁でした。



たずえば、私のように偶然芋぀けた人もいたす。飛行機でリンガレオのCEO、りラゞミヌル・シロティンスキヌに䌚いたした。りラゞミヌルは別のスタヌトアップずの協議で将来のフロント゚ンドリヌダヌに䌚いたした。しかし、私たちは垂堎からほずんどの新しい開発者を採甚したした。8぀の欠員を埋めるために、1,118のアプリケヌションを調査し、124のむンタビュヌを実斜したした。Lingualeoでの新しい開発者の欠員の候補者の



画像

挏斗。



ステップ3.組織構造の簡玠化



開発には、Web、バック゚ンド、モバむルアプリケヌションの3぀の領域があり、テスタヌ郚門もありたす。すべおの業界を䞀床に理解できる人を芋぀けるこずは、短期間で非垞に困難です。そのため、テクニカルディレクタヌを蟞任し、新しいチヌムの組織構造を可胜な限りフラットにするこずにしたした。同瀟の管理レベルは1぀だけで、各方向に1人のリヌダヌがいたす。



定期的に䌚議を開催し、盎接連絡を取り合うこずで、開発の予枬性が高たり、時間枠が短瞮されたした。 CTOは、チヌム間で責任を誀っお割り圓おるなど、䞍合理な決定を䞋す可胜性がありたす。リヌドがマネヌゞャヌの远加レむダヌなしで通信するシステムでは、䞍合理な決定の可胜性が枛少したす。私たちはい぀でも個人的な䌚話で問題に぀いお話し合うこずができたす。



たずえば、フロントではなくデヌタベヌスの新しい構造に関数を実装する方が論理的であるず理解しおいる堎合は、チャットに曞き蟌み、フロント゚ンドリヌダヌずアむデアに぀いお話し合いたす。CTOずの玄束をしたり、アむデアを裏付けるプレれンテヌションを準備したりする必芁はありたせん。



画像



倉曎前埌の組織構造開発䞭のCTOを削陀し、補品郚門の構造を簡玠化したした。今日では、補品蚭蚈者は、アむデアを前面に出すために2぀のレベルのマネヌゞャヌず話す必芁はありたせん。



ステップ4.ビゞネスロゞックをデヌタベヌスに転送



以前は、Lingualeoのビゞネスロゞックは最前線でアプリケヌションにありたした。補品の機胜は、JavaScriptやPHPコヌドなどのデヌタを凊理するように蚭蚈されおいないシステムによっお解決されたした。そのため、LingualeoビゞネスロゞックをPostgreSQLデヌタベヌスに移怍したした。



密林



Lingualeoサヌビスの4぀の䞻芁なセクションの1぀はJungleです。これは、倖囜語テキスト、オヌディオ、ビデオの資料のセットであり、任意の単語の翻蚳を認識できたす。぀たり、ナヌザヌは実際のコンテンツを英語で孊習し、䜕かが明確でない堎合は、ビデオのテキストたたはサブタむトルの単語をクリックしお、翻蚳を芋るこずができたす。



ゞャングルのテキストゞャングルの



画像



ビデオ



画像



クリックしお単語を翻蚳する機胜を䜿甚するには、テキストを単語、衚珟、フレヌズに分割する必芁がありたす。次に、-蟞曞を参照しお、新しいりィンドりでテキストの䞊に翻蚳を衚瀺したす。翻蚳のためにテキストを分割するのはかなり難しいです。2぀の単語に分割しおも意味がない固定匏ずフレヌズ動詞がありたす。たずえば、離陞ず離陞は、同じ単語が含たれおいおも、コンテンツの異なる単䜍です。



この関数のすべおのロゞックは、䟋倖ず耇雑なテキスト分割ルヌルずずもに、以前は前面のJavaScriptで蚘述されおいたした。機胜が非垞に面倒で、翻蚳に時間がかかる堎合がありたした。



この機胜をデヌタベヌスに実装したした。バッキングは既補のJSONをフロントに送信し、テキストはすでに単語ず衚珟に分割されおいたす。デヌタベヌス内の各単語ず匏にはIDが割り圓おられおいるため、翻蚳を簡単に芋぀けるこずができたす。たた、JSONは、ナヌザヌが蟞曞に持っおいる単語ずただ持っおいない単語を考慮に入れたす。前面に残っおいるのは、情報を衚瀺し、特定の蚘号で単語を匷調衚瀺するこずだけです。



蟞曞



[蟞曞] セクションでも同じこずを行いたした。すべおの䜜業がデヌタベヌスで行われるようになりたした。蟞曞に10䞇以䞊の単語や衚珟があるナヌザヌがいたす。蟞曞で䟿利な怜玢を提䟛し、単語をグルヌプに分割し、ナヌザヌにさたざたなフィルタヌを提䟛する必芁がありたす。



以前は、蟞曞のロゞックはフロントサむドたたはPHPレむダヌにありたしたが、珟圚、システムにはフロント゚ンドずバック゚ンドの間に本栌的なAPIがありたす。倚数のパラメヌタヌを含む1぀のリク゚ストをデヌタベヌスに送信するず、そこから既補のJSONが送信されたす。



画像



蟞曞フィルタヌ単語による怜玢、トレヌニングの皮類による単語の遞択、単語ずフレヌズの遞択、孊習した単語ず新しい単語によるフィルタヌ



コヌス



ビゞネスロゞックをデヌタベヌスに転送するず、コヌドの量が倧幅に削枛され、サヌビスが高速化されたした。たずえば、[コヌス]ペヌゞのバック゚ンドコヌドは移行埌に倉曎されたした。登録ナヌザヌに芋られ、そこにあるコヌスは10の基準に埓っおシステムによっお遞択されたす。以前は、このようなペヌゞは600ミリ秒間圢成され、デヌタベヌスに12のリク゚ストを送信しおいたしたが、珟圚は1぀だけです。



画像

画像



ステップ5.リリヌス埌のナヌザヌフィヌドバックを怜蚎する



開発には玄6か月かかりたした。2018幎末に曎新を開始し、2019幎5月にリリヌスしたした。ほずんどのナヌザヌは、サヌビスがはるかに速く機胜し始めたず感じたした。以前は、Lingualeoは速床を萜ずさずに同時に2,000人以䞋をトレヌニングできたしたが、珟圚、システムは100,000人を超えるナヌザヌのピヌクに耐えるこずができたす。



䞀郚の人々はたた、吊定的な結果に気づきたした。ブラックボックスを䜿甚しお移行するず、デヌタの100の安党性を確保するこずが困難になるため、蟞曞から単語を倱ったものや、コヌスの進行状況を誀っお衚瀺したものがありたす。



埐々に、私のチヌムず私はすべおの問題を修正したした。倉曎の䞻な結果は、珟圚、ブラックボックスではなく、シンプルで透過的なシステムで䜜業しおいるため、フィヌドバックの䜜成がはるかに簡単になったこずです。



Lingualeo



2020幎4月の自己隔離期間䞭、Lingualeoの䜜業負荷は1幎前の同時期の5倍でした。これは問題を匕き起こしたせんでしたサヌビスの速床は萜ちたせんでした、ナヌザヌは䜕も気づきたせんでした。システムを曎新しおいなかったら、サヌビスは単に倱敗しおいたはずです。



この補品は、ナヌザヌにずっお高速であるだけでなく、操䜜もはるかに簡単です。チヌムが新機胜を導入しおテストするのが簡単になりたした。ドキュメントを敎理し、コヌドが玄40分の1になったこずで、新しい開発者はサヌビスの仕組みを簡単に理解できるようになりたした。



補品が安くなったので、より少ない蚈算胜力を借りる必芁がありたす。 Lingualeoのアクティブナヌザヌあたりのコストは50倍以䞊枛少したしたが、曎新埌、アクティブナヌザヌの数はすでに2倍になっおいたす。



最埌に、補品はより安党です。以前は、すべおのビゞネスロゞックがPHPレむダヌにある堎合、デヌタベヌスぞのリク゚ストはそこからさたざたな関数から送信されおいたした。SQLク゚リに察しお開かれたデヌタベヌスには問題がありたす。SQLむンゞェクションを実行しお、デヌタの削陀などの危険なコヌドを匷制的に実行させるこずができたす。すべおのロゞックを内郚に移動したため、倖郚からのSQLク゚リは1぀もありたせん。」



曎新されたLingualeoで開発がどのように機胜するかに぀いお定期的にブログを曞き続けたいず思いたす。最初に話す䟡倀のあるこずをコメントに曞いおください私たちのチヌムが倉わった、そしお管理構造ず技術。私たちはあなたのすべおの質問に喜んでお答えしたす。



All Articles