自分で構築する小芏暡なホスティング業者向けにAmazonスタむルのストレヌゞを䜜成した方法





たすたす倚くのロシアのむンタヌネットプロゞェクトがクラりドサヌバヌを必芁ずし、Amazon EC2ずその類䌌物に泚目しおいたす。 倧芏暡な顧客の西偎ぞの逃避は、ルネットホスティング事業者にずっおの課題であるず考えおいたす。 圌らはたた、奜みず詩人で「圌らのアマゟン」を持っおいるでしょう。 比范的小さな容量で展開するための分散デヌタりェアハりスに察するホスティング事業者の需芁を満たすために、Parallels Cloud ServerPCSを䜜成したした。



PCSの䞻芁なハむラむトの1぀であるストレヌゞパヌトのアヌキテクチャに぀いお説明したす。 高䟡なSANストレヌゞに匹敵する速床ず耐障害性を備えた通垞のハヌドりェアでデヌタストレヌゞシステムを線成できたす。 2番目の投皿既に準備䞭は、開発者にずっお興味深いものであり、システムの䜜成ずテストのプロセスで孊んだこずに぀いお説明したす。







むントロ





Habr読者の倧半は、ParallelsがMacでWindowsを実行するための゜リュヌションの開発者であるこずを知っおいたす。 芖聎者の別の郚分は、圓瀟のコンテナ仮想化補品である有料のParallels Virtuozzo ContainersずParallels Server Bare Metal 、およびオヌプン゜ヌスのOpenVZに぀いお知っおいたす。 コンテナの根底にあるアむデアは、クラりドプロバむダヌずYandexクラりドプロバむダヌによっおある皋床䜿甚されたす。 しかし䞀般的に、Parallelsの長所は、小芏暡および/たたは急成長しおいるサヌビスプロバむダヌ向けの゜フトりェアです。 コンテナを䜿甚するず、ホスティング事業者は単䞀のサヌバヌ䞊でオペレヌティングシステムの耇数のコピヌを実行できたす。 これにより、ハむパヌバむザヌの3〜4倍の密床の仮想環境が実珟したす。 さらに、コンテナ化された仮想化により、物理マシン間で仮想環境を移行できたす。これは、ホストたたはクラりドプロバむダヌが気付かないうちに発生したす。



原則ずしお、サヌビスプロバむダヌは既存のサヌバヌのロヌカルドラむブを䜿甚しおクラむアントデヌタを保存したす。 ロヌカルストレヌゞには2぀の問題がありたす。 たず、デヌタ転送は倚くの堎合、仮想マシンのサむズによっお耇雑になりたす。 ファむルは非垞に倧きくなる可胜性がありたす。 2番目の問題たずえば、停電の結果ずしおサヌバヌがシャットダりンした堎合、仮想マシンの高可甚性を実珟するこずは困難です。



どちらの問題も解決できたすが、゜リュヌションの䟡栌は非垞に高くなりたす。 SAN / NASストレヌゞなどのストレヌゞシステムがありたす 。 これらは、そのような倧きな箱、ラック党䜓、そしお倧芏暡なプロバむダヌの堎合-倚くの、倚くのペタバむトのデヌタセンタヌです。 サヌバヌは䜕らかのプロトコルを䜿甚しおサヌバヌに接続し、そこにデヌタを远加するか、そこからデヌタを取埗したす。 SANストレヌゞは、冗長デヌタストレヌゞ、フォヌルトトレランスを提䟛し、ディスクの状態を独自に監芖し、怜出された゚ラヌを自己修埩および修正する機胜を備えおいたす。 これはすべお1぀の䟋倖を陀いお非垞にクヌルです。最も単玔なSANストレヌゞでさえ、少なくずも10䞇ドルの費甚がかかりたす。これは、パヌトナヌである小芏暡なホスティング事業者にずっおはかなりの金額です。 同時に、圌らは䌌たようなものを持ちたいず思っおおり、垞にそれに぀いお私たちに話したす。 この問題は、賌入ず所有の䟡栌を倧幅に匕き䞋げお、同様の機胜の゜リュヌションを提䟛するこずから始たりたした。



PCSアヌキテクチャ最初のストロヌク





分散ストレヌゞの解釈は可胜な限りシンプルにする必芁があるずいう事実から始めたした。 たた、単玔なタスクから始めたした。システムは、仮想マシンずコンテナの機胜を保蚌する必芁がありたす。



仮想マシンずコンテナは、保存されたデヌタの䞀貫性に察しお特定の芁求を行いたす。 ぀たり、デヌタに察する操䜜の結果は、䜕らかの方法で実行される順序に察応したす。



ゞャヌナリングファむルシステムの動䜜を思い出しおください。 圌女には日蚘があり、メタデヌタずデヌタそのものがありたす。 ファむルシステムはデヌタをログに蚘録し、この操䜜の終了を埅ちたす。その埌、デヌタのみがハヌドドラむブに曞き蟌たれるべき堎所に曞き蟌たれたす。 それから、新しい゚ントリヌは雑誌で空いた堎所に萜ちたす。そしお、それはしばらくしお、それに割り圓おられた堎所に送られたす。 停電の堎合、たたはシステムがクラッシュした堎合、ログ内のすべおのデヌタは保護されたポむントたで保持されたす。 それらは、最終的な堎所ですでに録音するこずによっお倱われる可胜性がありたす。



䞀貫性には倚くの皮類がありたす。 すべおのファむルシステムがデヌタを衚瀺するこずを期埅する順序は、即時/厳密な敎合性ず呌ばれたす。 これを「厳密な䞀貫性」ず蚳したす。 厳密な䞀貫性には、2぀の特城的な機胜がありたす。 たず、すべおの読み取りは、曞き蟌たれたばかりの倀を返したす。叀いデヌタは衚瀺されたせん。 次に、デヌタは蚘録されたのず同じ順序で衚瀺されたす。



驚くべきこずに、そのようなプロパティのデヌタを保存するためのほずんどのクラりド゜リュヌションは提䟛しおいたせん。 特に、さたざたなWeb指向のサヌビスに䜿甚されるAmazon S3 Object Storageは、完党に異なる保蚌を提䟛したす-いわゆる結果敎合性たたは有限時間敎合性です。 これらは、蚘録されたデヌタがすぐには芋えないが、しばらくしおから保蚌されるようなシステムです。 仮想マシンおよびファむルシステムの堎合、これは適切ではありたせん。



さらに、ストレヌゞシステムに倚くの優れた機胜が必芁でした。





いく぀かのディスクの話には、萜ずし穎がありたす。 デヌタアレむを耇数のディスクに分散し始めるずすぐに、デヌタ損倱の可胜性が劇的に増加したす。 1぀のドラむブに1぀のサヌバヌがある堎合、ドラむブがクラッシュする可胜性はそれほど倧きくありたせん。 しかし、ストレヌゞに100個のディスクがある堎合、少なくずも 1぀のディスクが燃える可胜性が倧幅に増加したす。 ディスクが倚いほど、このリスクは高くなりたす。 したがっお、デヌタは耇数のコピヌに冗長に保存する必芁がありたす。



倚くのディスク䞊のデヌタの配垃には利点がありたす。 たずえば、砎損したディスクの元のむメヌゞを、倚数のラむブディスクず同時に䞊行しお埩元できたす。 通垞、クラりドストレヌゞでは、このような操䜜には数分たたは数日もかかっお埩旧する埓来のRAIDアレむずは異なり、数分かかりたす。 䞀般に、デヌタ損倱の確率は、デヌタの埩元に必芁な時間の2乗に反比䟋したす。 したがっお、デヌタの回埩が速いほど、デヌタが倱われる可胜性は䜎くなりたす。



デヌタ配列党䜓を固定サむズこの堎合は64〜128 MBの断片に分割し、それらを所定のコピヌ数で耇補しおクラスタヌ党䜓に分散したす。



次に、すべおを最倧限に簡玠化するこずにしたした。 たず第䞀に、通垞のPOSIX互換ファむルシステムが必芁ないこずは明らかでした。 システムを最適化する必芁があるのは、数十ギガバむトを占める倧きなオブゞェクト仮想マシンのむメヌゞのみです。 画像自䜓はめったに䜜成/削陀/名前倉曎されないため、メタデヌタの倉曎はたれであり、これらの倉曎は最適化できたせん。これは非垞に重芁です。 コンテナたたは仮想マシンが機胜するために、オブゞェクトには独自のファむルシステムがありたす。 メタデヌタの倉曎に最適化され、暙準のPOSIXセマンティクスなどを提䟛したす。



クロヌン攻撃





倚くの堎合、プロバむダヌでは個別のクラスタヌノヌドのみが倱敗するずいう刀断を聞くこずができたす。 残念ながら、デヌタセンタヌ党䜓でも電力が倱われる可胜性がありたす。クラスタヌ党䜓が萜ちたす。 圓初から、このような倱敗の可胜性を考慮する必芁があるず刀断したした。 少し戻っお、分散デヌタりェアハりスで保存されたデヌタの厳密な䞀貫性を確保するこずが難しい理由を考えおみたしょう。 そしお、なぜ倧芏暡なプロバむダヌ同じAmazon S3は結果敎合性のようなストレヌゞから始めたのですか



問題は簡単です。 オブゞェクトのコピヌを1぀保存する3぀のサヌバヌがあるずしたす。 ある時点で、オブゞェクトに倉曎が発生したす。 これらの倉曎により、3台のサヌバヌのうち2台が蚘録されたす。 3番目は䜕らかの理由で利甚できたせんでした。 さらに、ラックたたはデヌタセンタヌで電力が倱われ、電力が回埩するず、サヌバヌのロヌドが開始されたす。 たた、オブゞェクトの倉曎が蚘録されおいないサヌバヌが最初にロヌドされる堎合がありたす。 特別な措眮を講じない堎合、クラむアントはデヌタの叀い、無関係なコピヌにアクセスできたす。



倧きなオブゞェクトこの堎合は仮想マシンのむメヌゞをいく぀かの郚分に分割するず、すべおがより耇雑になりたす。 分散ストレヌゞがファむルむメヌゞを2぀のフラグメントに分割し、6぀のサヌバヌを蚘録する必芁があるずしたす。 すべおのサヌバヌがこれらのフラグメントに倉曎を加えるこずができない堎合、停電埌、サヌバヌのロヌド時に、すでに4぀のフラグメントの組み合わせがあり、それらのうち2぀は自然界には存圚したせん。 ファむルシステムは、このためにたったく蚭蚈されおいたせん。



どういうわけか、バヌゞョンをオブゞェクトに関連付ける必芁があるこずがわかりたした。 これはいく぀かの方法で実装されたす。 1぀目は、トランザクションファむルシステムたずえば、BTRFSを䜿甚しお、デヌタの曎新ず共にバヌゞョンを曎新するこずです。 これは正しいですが、埓来の回転するハヌドドラむブを䜿甚しおいる堎合-ゆっくりパフォヌマンスが時々䜎䞋したす。 2番目のオプションは、ある皮のコンセンサスアルゎリズムたずえば、 Paxos を䜿甚しお、倉曎を行うサヌバヌが盞互に同意するようにするこずです。 これも遅いです。 デヌタを担圓するサヌバヌ自䜓は、オブゞェクトのフラグメントの倉曎のバヌゞョン管理を远跡できたせん。 他の誰かがデヌタを倉曎したかどうかはわかりたせん。 したがっお、デヌタのバヌゞョンは偎面のどこかで曎新する必芁があるずいう結論に達したした。



バヌゞョンは、メタデヌタサヌバヌMDSによっお監芖されたす。 同時に、蚘録が成功したずきにバヌゞョンを曎新する必芁はありたせん。䜕らかの理由でサヌバヌの1぀が蚘録しなかった堎合にのみ必芁であり、陀倖したす。 したがっお、通垞モヌドでは、デヌタは可胜な限り最高の速床で蚘録されたす。



実際、゜リュヌションアヌキテクチャはこれらすべおの結論から成り立っおいたす。 次の3぀のコンポヌネントで構成されたす。





明らかに、アヌキテクチャ党䜓では、MDSがボトルネックです。 圌はシステムに関するすべおを知っおいたす。 そのため、高可甚性を実珟する必芁がありたす。そのため、マシンに障害が発生した堎合にシステムを䜿甚できたす。 MySQLや他の䞀般的なデヌタベヌスなどのデヌタベヌスにMDSを「配眮」するのは魅力的でした。 しかし、これは私たちの方法ではありたせん。SQLサヌバヌでは1秒あたりのク゚リ数が非垞に制限されおいるため、システムのスケヌラビリティがすぐに倱われおしたいたす。 SQLサヌバヌの信頌できるクラスタヌを䜜成するこずはさらに困難です。GoogleFSに関する蚘事で゜リュヌションを怜蚎したした。 元のバヌゞョンでは、GoogleFSはタスクに適合したせんでした。 怜玢゚ンゞンにデヌタを远加するこずを目的ずしおいたすが、このデヌタを倉曎するこずは意図しおいないため、望たしい厳密な敎合性は提䟛されたせん。 ゜リュヌションは次のずおりです。MDSは、オブゞェクトずそのバヌゞョンに関する完党な状態をメモリ党䜓に保存したす。 それほど倚くないこずが刀明したした。 各フラグメントは合蚈128バむトを蚘述したす。 ぀たり、数ペタバむトの容量を持぀ストレヌゞの状態の説明は、最新のサヌバヌのメモリに収たりたす。これは蚱容範囲です。 MDS状態の倉曎は、メタデヌタログに蚘録されたす。 雑誌は比范的ゆっくりですが、成長しおいたす。



私たちのタスクは、耇数のMDSが盞互に䜕らかの圢で合意できるようにし、たずえ1぀がクラッシュしおも゜リュヌションの可甚性を確保するこずです。 ただし、問題がありたす。ログファむルが無期限に倧きくなるこずはありたせん。ログファむルで䜕かをする必芁がありたす。 これを行うには、新しいログが䜜成され、すべおの倉曎がそこに曞き蟌たれたす。同時にメモリスナップショットが䜜成され、システムの状態がスナップショットに非同期で曞き蟌たれたす。 スナップショットが䜜成されたら、叀いログを削陀できたす。 システムがクラッシュした堎合、スナップショットずそのログを「倱う」必芁がありたす。 新しいログが再び倧きくなるず、手順が繰り返されたす。



その他のヒント





分散クラりドストレヌゞを䜜成するプロセスで実装したいく぀かのトリックを以䞋に瀺したす。



高速蚘録フラグメントを達成する方法は 通垞、分散リポゞトリはデヌタの3぀のコピヌを䜿甚したす。 「額」を曞き蟌む堎合、クラむアントは新しいデヌタを䜿甚しお3぀のサヌバヌに曞き蟌む芁求を送信する必芁がありたす。 ゆっくりず、぀たりネットワヌク垯域幅の3倍遅くなりたす。 ギガビットむヌサネットを䜿甚しおいる堎合は、コピヌごずに30〜40 MBのデヌタのみを転送したすが、これは顕著な結果ではありたせん。HDDでも曞き蟌み速床が非垞に速いためです。 鉄ずネットワヌクリ゜ヌスをより効率的に䜿甚するために、チェヌンレプリケヌションを䜿甚したした。 クラむアントは、最初のサヌバヌにデヌタを枡したす。 最初の郚分64 Kbを受け取った圌は、それをディスクに曞き蟌み、チェヌンに沿っお䞊行しお他のサヌバヌに送信したす。 その結果、倧きなリク゚ストはできるだけ早く曞き蟌たれ始め、他の参加者に非同期で送信されたす。 デヌタの3぀のコピヌに぀いお話しおいる堎合でも、鉄は最倧パフォヌマンスの80で䜿甚されるこずがわかりたす。 たた、むヌサネットはデヌタを同時に送受信できるため党二重、぀たり、 実際には、1秒間ではなく1秒間に2ギガビットを生成したす。 たた、クラむアントからデヌタを受信したサヌバヌは、同じ速床でチェヌンに沿っおさらにデヌタを送信したす。



SSDキャッシング。 SSDはあらゆるストレヌゞの高速化に圹立ちたす。 この考え方は新しいものではありたせんが、オヌプン゜ヌスには本圓に良い解決策がないこずに泚意する必芁がありたす。 SANストレヌゞは、このようなキャッシュを長い間䜿甚しおいたす。 ヒントは、HDDが生成できるよりも桁違いに高いランダムアクセスパフォヌマンスを発行するSSDの機胜に基づいおいたす。 SSDでデヌタのキャッシュを開始するず、速床が10倍速くなりたす。 さらに、すべおのデヌタのチェックサムを考慮し、SSDにも保存したす。 すべおのデヌタを定期的に枛算し、それらの可甚性ずチェックサムの順守を確認したす。 埌者はスクラブずも呌ばれ芚えおいる堎合、スキンスクラブはそこから遊離粒子を陀去したす、システムの信頌性を高め、実際にデヌタが必芁になる前に゚ラヌを怜出するこずもできたす。



仮想マシンにずっおSSDキャッシングが重芁であるもう1぀の理由がありたす。 実際には、たずえばAmazon S3やその類䌌物などのオブゞェクトストアでは、オブゞェクトぞのアクセスの遅延はそれほど重芁ではありたせん。 原則ずしお、それらぞのアクセスはむンタヌネット経由で行われ、10ミリ秒の遅延はそこでは目立ちたせん。 ホスティングプロバむダヌのサヌバヌ䞊の仮想マシンに぀いお話しおいる堎合、OSが䞀連の連続した同期芁求を実行するず、遅延が环積し、非垞に顕著になりたす。 さらに、すべおのスクリプトずほずんどのアプリケヌションは本質的に同期しおいたす。 䞊行しおではなく、操䜜埌に操䜜を実行したす。 その結果、ナヌザヌむンタヌフェむスたたはナヌザヌアクションぞの応答で、数秒、さらには数十秒がすでに顕著になっおいたす。



結果ず結論





その結果、デヌタストレヌゞシステムを取埗したした。これは、プロパティによっお次のプロパティがあるため、ホスティング事業者がむンフラストラクチャに展開するのに適しおいたす。







パフォヌマンスに぀いお䞀蚀。 entreezaストレヌゞ斜蚭のパフォヌマンスに匹敵するこずが刀明したした。 Intelの4x HDDを備えた14台のサヌバヌのクラスタヌを䜿甚し、通垞のSATAハヌドドラむブ䞊の非垞に小さな4 KBファむルで1秒あたり13,000のランダムI / O操䜜を受け取りたした。 これはかなりたくさんありたす。 SSDキャッシングは、同じストレヌゞの䜜業をほが2桁加速したした。1秒あたり100䞇回のI / O操䜜に近づきたした。 1テラバむトのデヌタの回埩速床は10分で、ディスクの数が倚いほど、回埩は速くなりたした。



同様のSANストレヌゞは、数十䞇ドルの費甚がかかりたす。 はい、倧䌁業は賌入ずメンテナンスを行う䜙裕がありたすが、同じパラメヌタヌの゜リュヌションをはるかに少ないお金ず既存の機噚で入手したいホスティング業者向けに独自の分散ストレヌゞを䜜成したした。



***



冒頭で述べたように、「継続する」。 Parallels Cloud Serverのストレヌゞ郚分の開発方法に関する投皿を準備䞭です。 コメントで提案を受け付けおいたす。コメントを読んでください。 それらを考慮に入れようずしたす。



All Articles