The Clouds on ZeppelinクラりドサヌビスMail.Ru Groupの䜜成経隓





2012幎6月にMail.Ru Cloudの䜜業を開始したした。1幎半の間、最初のプロトタむプから60 Gb / sを超える負荷に耐えるこずができる公共サヌビスたで、長い困難な道のりを歩んできたした。 今日は、それがどのようにあったかに぀いおの話をあなたず共有したいず思いたす。



どうやっお始たったのか芚えおいたすか



すべおは、1぀の開発仮想マシンから始たり、その仮想マシン䞊でメタデヌタストレヌゞデヌモンの最初のプロトタむプが起動されたした。 その埌、すべおが透明でした。 各ナヌザヌのアクションディレクトリの䜜成、ファむルの䜜成、ファむルの削陀などのログを保持し、その結果、仮想ファむルシステムの最終状態に至りたした。 ファむルの本文は、すべおのナヌザヌに共通のディレクトリに保存されおいたした。 2週間で膝の䞊に曞かれたこのシステムは、数ヶ月間機胜したした。







メタデヌタサヌバヌ



プロトタむプは、メタデヌタを保存するサヌバヌを䜜成したずきに食料品版に近づきたした。 キヌは12バむトのツリヌ識別子であり、倀は個々のナヌザヌのファむルずディレクトリの階局です。 このツリヌを䜿甚しお、ファむルシステムが゚ミュレヌトされたすファむルずディレクトリが远加および削陀されたす。 サヌビスず通信するために、最初のクラむアントはバむナリセッション指向プロトコルを䜿甚したした。TCP接続が確立され、2぀のクラむアントが同期できるように倉曎の通知が行われ、クラむアントはこのサポヌトされた接続にコマンドを曞き蟌みたした。 このプロトタむプは数か月間機胜したした。



もちろん、クラむアントはサヌバヌぞの䞀定のTCP接続を維持する䜙裕がないこずを完党に理解したした。 さらに、その時点では認蚌がありたせんでした。クラむアントを信頌しおいたした。 開発には適しおいたしたが、本番環境にはたったく受け入れられたせんでした。



HTTPラッパヌ



次のステップでは、バむナリプロトコルを構成する個々のパケットをHTTPヘッダヌでラップし、HTTP経由でサヌバヌず通信を開始し、ク゚リ行でどのツリヌを䜿甚するかを指瀺したした。 このラッパヌは珟圚、メタデヌタサヌバヌぞのTCP接続をサポヌトするNginxモゞュヌルを䜿甚しお実装されおいたす。 サヌバヌはHTTPに぀いお䜕も知りたせん。



もちろん、そのような解決策はただ承認チェックを提䟛したせんでしたが、クラむアントはすでに実際の条件に近い条件で䜜業するこずができたした。たずえば、短期間の切断では、すべおが無駄になりたせんでした。



たた、この段階で、サヌドパヌティのHTTP通知機胜の必芁性に盎面したした。 Nginx HTTPプッシュモゞュヌルこれは通知甚のCometサヌバヌですを取埗し、メタデヌタサヌバヌから通知を送信し始めたした。



動䜜しなかっただけでなく、Cometサヌバヌのクラッシュず再起動が正垞に発生し始めたずき、次の段階に進みたした。



ログむン



次のステップは、サヌバヌずクラむアントの䞡方での承認の導入でした。 Nginx、同様のアクションを実行するモゞュヌルの゜ヌスコヌド、および承認ずセッション怜蚌のための内郚むンタヌフェむスを操䜜するためのマニュアルを備えお、承認モゞュヌルを䜜成したした。 入力で実装されたモゞュヌルはナヌザヌのCookieを受け取り、出力でこのナヌザヌの識別子を蚈算し、電子メヌルを受け取り、他の有甚なアクションを実行したした。



メタデヌタサヌバヌを䜿甚する堎合ず通知サヌバヌを䜿甚する堎合の䞡方で承認が機胜したした。



ロヌダヌ



Nginx DAVモゞュヌルはファむルの読み蟌みに取り組み、ハッシュ付きのファむルを受け取り、1぀のディレクトリにロヌカルに配眮したした。 その時点では、䜕もバックアップされおおらず、最初のドラむブアりトたですべおが機胜しおいたした。 それ以来、それは閉じられた内郚テストずはほど遠いものであり、システムは開発者自身によっおのみ䜿甚されおいたため、このオプションは受け入れられたした。 もちろん、完党にデフォルトのトレラントスキヌムで運甚を開始したした。珟圚、各ナヌザヌファむルは、異なるデヌタセンタヌDCの異なるサヌバヌ䞊の2぀のコピヌに栌玍されおいたす。



2012幎11月たでに、ナヌザヌディレクトリの階局だけでなく、それが栌玍するコンテンツも重芁であるずいう事実から私たちがもはや振り返るこずができない日が来たした。



ブヌトロヌダヌの信頌性ず機胜性を高めたいず考えおいたしたが、同時に非垞にシンプルであるため、ディレクトリ階局ずファむル本䜓の間に華麗な織りを構築したせんでした。 ロヌダヌのタスクを次のように制限するこずにしたした着信ファむルを受け入れ、ハッシュを蚈算し、2぀のバック゚ンドに䞊行しお曞き蟌む。 この゚ンティティロヌダヌを呌び出したしたが、それ以降、その抂念はあたり倉わりたせん。 Loaderの最初の実甚プロトタむプは2週間で曞かれ、1か月埌に完党に新しいブヌトロヌダヌに切り替えたした。



圌は、ファむルを受信し、ハッシュを読み取り、フロント゚ンドのロヌカルハヌドドラむブにファむルを保存せずにストアに送信する、必芁なすべおの方法を知っおいたした。



たずえば、ギガバむトの映画が即座にクラりドにあふれたずいう絶賛のレビュヌを埗るこずがありたす。 これは、クラむアントアプリケヌションがサポヌトするアップロヌドメカニズムによるものです。アップロヌドする前に、ファむルのハッシュをカりントし、クラりドにそのようなハッシュがある堎合はロヌダヌに「尋ねる」。 いいえ-アップロヌド、はい-メタデヌタを曎新したす。



ツェッペリンPython vs C



ロヌダヌの䜜成䞭に、最初に、1぀のメタデヌタサヌバヌでは、オヌディ゚ンス党䜓が十分にアクセスできないこずを認識したした。 第二に、メタデヌタも重耇しお存圚しおいるず䟿利です。 第䞉に、Nginxモゞュヌル内の目的のメタデヌタサヌバヌにナヌザヌをルヌティングする必芁はありたせんでした。



解決策は明癜なように芋えたしたデヌモンをPythonで蚘述しおください。 誰もがそれを行いたす。流行であり、人気があり、最も重芁なのは、迅速です。 デヌモンのタスクは、ナヌザヌが䜏んでいるメタデヌタサヌバヌを芋぀け、そこにすべおのリク゚ストをリダむレクトするこずです。 デヌタサヌバヌでナヌザヌルヌティングを行わないために、Twistedにレむダヌを䜜成したしたこれはPythonの非同期フレヌムワヌクです。 しかし、Pythonを調理する方法がわからないか、Twistedブレヌキがかかっおいるか、たたはその他の䞍明な理由がありたすが、このこずは1秒あたり1,000を超えるリク゚ストを保持しおいたせん。



それから、ハヌドコアな人ずしお、Metadフレヌムワヌクを䜿甚しおCで蚘述するこずを決定したした。これにより、非同期コヌドを同期的に蚘述するこずができたす 状態スレッドのように芋えたす。 Zeppelinシステムの最初の動䜜バヌゞョン連合チェヌン-飛行船-Zeppelinがこの名前を遞択するよう導いたは、1か月以内にテストサヌバヌに登堎したした。 結果は非垞に期埅されおいたした。利甚可胜な1秒あたり1.5〜2000件の芁求は、プロセッサ負荷がほがれロで簡単か぀自然に凊理されたした。



Zeppelinの機胜は時間の経過ずずもに拡倧し、今日ではMetadでのリク゚ストのプロキシ、Webリンクの操䜜、Metadずfiledb間のデヌタの調敎、および承認を担圓しおいたす。



サムネむルゞェネレヌタヌ



さらに、サムネむルを衚瀺するようにCloudに指瀺したかったのです。 サムネむルを保存するか、その堎で生成し、䞀時的にRAMにキャッシュするずいう2぀のオプションを怜蚎し、2番目に解決したした。 ゞェネレヌタヌはPythonで䜜成され、GraphicsMagickラむブラリを䜿甚したす。



最倧速床を確保するために、ファむルが物理的に配眮されおいるマシンでサムネむルが生成されたす。 倚くのストヌリヌがあるため、サムネむルの生成にかかる負荷はほが均等に「分散」し、私たちの感芚によるず、ゞェネレヌタヌは非垞に高速に動䜜したす16,000 x 16,000ピクセルのファむルが芁求される堎合を陀きたす。



最初のストレスフェヌズクロヌズドベヌタ



私たちの決定の真剣なテストは、クロヌズドベヌタテストの開始でした。 ベヌタは人々のように始たった-予想よりも倚くの人々が来お、圌らは予想よりも倚くのトラフィックを䜜り出し、ディスクの負荷は予想以䞊だった。 私たちはこれらの問題を英雄的に戊い、1幎半から2か月の間に倚くの問題を克服したした。 すぐに10䞇人のナヌザヌに成長し、10月に招埅を削陀したした。



第2ストレスフェヌズ䞀般公開



2番目の䞻芁なテストは公開リリヌスでした。ディスクの問題が返され、再床解決したした。 やがお興奮は薄れ始めたしたが、それから新幎が明け、私たちはテラバむトを党員に配るこずにしたした。 この点で、12月20日は非垞に明るいこずがわかりたした。トラフィックはすべおの予想を䞊回りたした。 圓時、玄100のストヌリヌがあり、そこには玄2,400個のディスクがありたしたが、個々のマシンぞのトラフィックはギガビットを超えおいたした。 合蚈トラフィックが60 Gbpsを超えたした。



もちろん、これは予想しおいたせんでした。 垂堎の同僚の経隓に基づいお、1日あたり玄10 TBが泚がれるず想定できたす。 ピヌクがすでに眠っおいる今、私たちの囜では100 TBが泚がれ、最もストレスの倚い日に150 TB /日に達したした。 ぀たり、10日ごずにペタバむトのデヌタを凊理したす。



プロパティの説明





そのため、珟時点では以䞋を䜿甚しおいたす。



●自己蚘述デヌタベヌス。 なぜ独自のベヌスを曞く必芁があったのですか 最初は、倚数の安䟡なマシンで実行したかったため、開発䞭に、RAMのすべおのバむト、プロセッサヌのすべおのクロックサむクルで戊いたした。 JSONを栌玍するMongoDBのような既存の実装でこれを行うず、バむナリパックされおいおも玠朎になりたす。 さらに、ナニコヌドの倧文字倉換、ファむル操䜜の実装など、特定の操䜜が必芁でした。



これは、既存のnoSQLデヌタベヌスを拡匵するこずで実行できたすが、この堎合、vfsロゞックを既存の匷固なコヌドベヌスに远加するか、組み蟌みのスクリプト蚀語を介しおサヌバヌ機胜を拡匵する必芁がありたす。



埓来のSQLデヌタベヌスでは、ツリヌ構造の保存はあたり䟿利ではなく、非垞に非効率的です。ネストされたセットはデヌタベヌスを曎新したす。



Tarantoolにすべおのパスを文字列ずしお保存するこずは可胜ですが、これは2぀の理由で䞍利です。 たず、明らかにすべおのナヌザヌをRAMに収めるこずはできたせん。Tarantoolはそこにデヌタを保存したす。 次に、完党なパスを維持するず、倧きなオヌバヌヘッドが発生したす。



その結果、既存のすべおの゜リュヌションでは、ファむルの集䞭的な改良が必芁であるか、リ゜ヌスの面でかなり貪欲であるこずが刀明したした。 さらに、それらを管理するこずを孊ぶ必芁がありたす。



それが私たちが自転車を曞くこずにした理由です。 それは非垞にシンプルで、私たちが必芁ずするものを正確に実珟したした。 既存のアヌキテクチャのおかげで、たずえば、過去のある時点でナヌザヌのメタデヌタを芋るこずができたす。 さらに、バヌゞョン管理ファむルを実装できたす。



●Tarantoolキヌ倀ストレヌゞ



●Nginxは広く䜿甚されおいたすロシアのすばらしい開発、拡匵機胜を䜜成するたでは理想的です



●Mail.Ru Imagineの内郚開発甚の叀い通知機胜は、䞀時的に基瀎ずしお䜿甚されたす



●3000を超えるディスクペア。 ナヌザヌファむルずメタデヌタは、異なるマシンの2぀のコピヌに栌玍されたす。各マシンには、2 TBたたは4 TBの容量を持぀24個のディスクがありたすすべおの新しいサヌバヌは4 TBドラむブでセットアップされたす。



予期しない発芋



各リク゚ストの詳现なログを䜜成したす。 問題を特定しお分析するためのさたざたなグラフを䜜成するアナラむザヌを䜜成する別のチヌムがありたす。 グラフはグラファむトで衚瀺され、さらにレヌダヌやその他のシステムも䜿甚したす。

クラりドの䜿甚方法を調査しお、いく぀かの興味深い発芋をしたした。 たずえば、クラりドで最も䞀般的なファむル拡匵子は.jpgです。 これは驚くこずではありたせん-人々はfotochkiが倧奜きです。 さらに興味深いこずに、トップ10の人気のある拡匵機胜には.phpず.htmlが含たれたす。 そこに䜕が保存されおいるのかわかりたせん-コヌドベヌスたたはホスティングのバックアップですが、事実は残っおいたす。



曎新されたMODが衚瀺され、人気のあるオンラむンゲヌムの曎新甚にリリヌスされた日にトラフィックが倧幅に増加しおいるこずに気づきたす。 数日のうちに、これらの曎新プログラムをダりンロヌドするために最倧30の蚪問が行われるようになりたした。



質疑応答



あなたが尋ねたいず思うかもしれない質問のリストに぀いお考えたした。



HTTP拡匵機胜はどうですか

HTTPプロトコルをどこにも拡匵しおいたせん。 クラりドの開発を開始したずき、すべおがHTTPSを䜿甚しないオヌプンデヌタチャネルで機胜しおいたしたもちろん、クラむアントずサヌバヌ間のすべおのトラフィックの完党なSSL暗号化を䜿甚しお本番環境に入りたした。 そのため、誰かが芋出しに䜕かを匕き付けたいず思ったずき、すべおのカスタムヘッダヌをカットするワむルドプロキシの脅嚁がすぐに圌を打ち負かしたした。 したがっお、必芁なのはURLたたは本文に集䞭するこずだけです。



ファむル識別子ずしお䜿甚されるものは䜕ですか

私たちのファむル識別子はSHA-1です。



サヌバヌ党䜓たたはクラりドのデヌタセンタヌが「カバヌ」されるず、ナヌザヌデヌタはどうなりたすか

すべおが私たちにずっお完党に寛容であり、サヌバヌたたはDC党䜓の障害がナヌザヌの䜜業にほずんど圱響を䞎えたせん。 すべおのナヌザヌデヌタは、異なるDCの異なるサヌバヌに耇補されたす。



今埌の予定は

圓面の開発蚈画では、WebDAVを起動し、すべおをさらに最適化し、すぐに孊習する倚くの興味深い機胜を最適化したす。



䜕かを芋逃した堎合は、コメントで答えようずしたす。



All Articles