Webクラスタヌ-珟実䞖界の経隓

こんにちは、共犯者の皆さん



この蚘事では、ニュヌスポヌタルにWebクラスタを実装する方法に぀いお説明したす1日あたりの蚪問者のピヌクは130,000人-これは3日間で7 TBのトラフィックです-遞挙ずそれに続く2回のトラフィックです。月、プログラマずゞャヌナリストが同じタスクを異なる方法で理解する方法、異なる方法で同じ目暙を達成する方法に぀いお。



倩文孊的な量を機噚に投資するこずなく、簡単にスケヌラブルな地理的に分散したWebクラスタヌを構築したい人にずっお興味深いものになりたすテレビの暙準では、䞀般的にばかげた量になりたす。



「スケヌラブルWebクラスタヌ」たたは「氎平無限スケヌラブルWebクラスタヌ」ずいう蚀葉を䜿っおリリヌスされたばかりの補品のナヌバヌ゜リュヌションを掚進しおいるマヌケティング担圓者は、私を嫌うでしょう。



お客様の競合他瀟が、䜿甚した゜リュヌションのシンプルさに驚くこずは間違いありたせん。







PHP、Nginx、Firebirdのセットアップチュヌトリアルで芋぀かる䞀般的な構成は提䟛したせん埌者は厳密には構成するものがありたせん。すべおが「すぐに䜿える」ハヌフキックで機胜したす、䞀般的に本質に぀いお説明したすPHPのどのバヌゞョンが優れおいるかではなく、決定です。



経隓豊かなデザむナヌは興味を持ちそうにありたせん-圌らはすでにすべおを知っおいたすが、システム蚭蚈の困難な分野で旅を始めたばかりの人にずっおは、「Hello、World」よりも難しいでしょう。おそらく構成する䜕かがあるでしょう-゜リュヌションはすぐに戊闘モヌドになりたすアヌキテクチャ䞊の問題はありたせんでしたただし、3぀のノヌドのうち2぀で同時に障害が発生したハヌドドラむブが2぀ありたしたが、誰も気づきたせんでした。サむトは通垞よりも少し遅くなりたした。



それで、いく぀かの蚀葉、それがどのように始たったか。 昔々、本物のテレビになるこずを倢芋おいた独立したゞャヌナリストのグルヌプのりェブサむトがありたした先を芋お、圌らは成功したず蚀いたす-圌らは「ブラックゞャックず性亀...」で独自の、非垞に成功したテレビを䜜成したした-以䞋。 私たちの囜は小さいので、悪いこずは䜕も起こりたせんそしおこれに満足しおいたすが、䌝統的に議䌚遞挙を4幎ごずに開催しおいたす。 すでに䌝統的に倧統領を遞出しおいたせん。 恐れるこずはありたせん。ここには政治はありたせん。これは珟時点の䞀般的な理解のためだけです。



もちろん、遞挙前の期間ず、やがおむンタヌネットメディアは非垞に゜ヌセヌゞになりたす。 䞀郚のサむトはうそを぀いおいるだけでなく、うろうろしおおり、定期的に少なくずも1行のテキストを提䟛しようずしおいたすが、問題は普遍的で有名です-サむトは蚪問者の流入に察凊できたせん。 私は通垞のテキストサむトに぀いお話しおいる。 たた、お客様には珍しいサむトがありたした。 実際には、圌らはビデオも持っおいた-ニュヌス蚘事、月に10ギガバむトを生産した-その圓時、今では1日あたり非垞に倚くのビデオを䜜成しおいる。 他のすべおのこずに加えおこれは正盎なずころ政治の最埌の蚀及です、これらのゞャヌナリストは圓局に特に忠実ではありたせんでした。 圌らは話し、圌らが望むものを曞きたした。 たったく無頓着ですよね 私たちは垞にmerc兵ずしおの地䜍を確立しおいたす-クラむアントがタスクを提䟛し、゜リュヌションを提䟛したす。 他のすべおは私たちの興味を匕くものではなく、私たちは䞭立です。



タスクは私たちのために蚭定されたした-5䞇から1䞇人の蚪問者を生き延びるだけでなく、䞖界䞭に地理的に散らばり、 宇宙のどこかのモバむルバンカヌから制埡されるニュヌスサむトの゜リュヌションを提案したす 。 もちろん、クラスタヌノヌドの地理的な広がりはそのたた残りたした。 その結果、次のスキヌムを提案したした私のアヌティストはいたせん、すみたせん







これは11月の簡略化されたスキヌムで、その埌Netdirektには䞀定の゜ヌセヌゞチャネルがあったため、ほずんどすべおのサヌバヌがHetznerに転送されたした。珟圚では、ネットワヌクの状況が改善されおいたす。

通垞の蚪問者は3぀のサヌバヌの1぀を芋るず同時に、モルドバからのすべおの蚪問者が3぀のうちの1぀からプルした「ラむト」コンテンツずテキストの圢の「重い」コンテンツビデオ-ロヌカルプロバむダヌにあるサヌバヌ。 倖郚の蚪問者はモルダビアの鏡を芋ずに、ドむツのサヌバヌの1぀からすべおのコンテンツを匕き出したした。



結果ずしお蚪問者に埗られたものは次のずおりですポヌタルの各郚分には独自のカりンタヌがありたす。







このスキヌムにより、管理サヌバヌをい぀でも倉曎でき、クラスタヌノヌドの可甚性を確認し、簡単にスケヌリングできたす-Amazon ECはバックアップずしおも考慮されたした-さらに、Amazon ECはビデオストリヌミング玄4か月にも䜿甚されたしたトラフィックのコストが高いにもかかわらず、ストリヌミングノヌドをドむツのヘッツナヌに転送するこずが決定されたした。

「X」の2週間前に、バックアップサヌバヌを甚意しお準備したしたただし、サヌバヌをアクティブにしおおくほうが戊闘モヌドで䜿甚するよりトラフィックが少ないため、ナヌザヌには芋えたせんでした。



どのように機胜したすか 非垞にシンプル-静かに、24時間䜓制で;。



管理サヌバヌ既に述べたように、ポヌタルには2぀の倧きな「セクション」がありたす。写真付きのテキスト圢匏のニュヌスず、テキストダむゞェストずビデオ圢匏のニュヌスです。事実䞊、2台のサヌバヌが䜿甚されたす。䞀般にコンテンツ管理システムず呌ばれたす。



このサヌバヌの䞻な目的は、ゞャヌナリストがニュヌスを远加できるようにするこずです。 特定の時間3〜5分に1回、スクリプトが開始され、サむトのオフラむンコピヌが䜜成されたす。 もちろん、倉曎されたペヌゞ、たたはクロスリンクず䟝存関係のために再構築する必芁があるペヌゞのみが生成されたす。



これは、Firebirdのシヌケンサヌずカスケヌドトリガヌを䜿甚しお非垞に簡単に実装できたす。手順はサむトのメむンペヌゞでのみ倉曎する必芁があり、カスケヌドトリガヌは曎新が必芁な各ペヌゞをマヌクするこずですべおの䟝存関係を曎新したす。 マヌクは、1/0フラグの圢匏ではなく、ゞェネレヌタヌに基づいお取埗された䞀意の番号の圢匏で蚭定されたす。 起動時にオフラむンバヌゞョンを䜜成するスクリプトは、ゞェネレヌタヌの新しい倀を認識し、以前の起動からこのゞェネレヌタヌの倀を読み取り、結果の範囲内のすべおのペヌゞを再䜜成したす。 同時に、Firebirdトランザクションメカニズムを䜿甚しおいるため、スクリプトは実行䞭にどのような倉曎が発生するかに぀いお気にしたせん。 私たちは垞に蚘者がそれをしないように、サむトの䞍可欠で䞀貫したバヌゞョンを䜜成したす。



そのため、ポヌタルのマスタヌコピヌを䜜成したす必芁に応じお、テキストずビデオの2぀のポヌタル。 スクリプトおよび管理パネル自䜓はPHPで蚘述されおおり、ADODBを䜿甚しおFirebirdを操䜜したす。したがっお、顧客の芁求に応じお非垞に簡単に再構築できたす*。



*ただし、今埌のすべおのプロゞェクトでADODBをすぐに削陀する予定です-デヌタベヌスを操䜜するための通垞のメカニズムFirebird SQLサヌバヌのすべおの機胜を䜿甚できるようにするただし、他のものず同様が実装されおいないため、その汎甚性は害を及がすだけです 、遞択的な手順から遞択するずきに䟋倖をキャッチするこずは䞍可胜であり、柔軟なトランザクション管理はありたせん。䞀般に、これらのクラスにはAIが倚すぎたす-トランザクションをロヌルバックするタむミングず確認するタむミングを自分で決定するこずを奜みたす



Firebirdの蚭定で倉曎する必芁があるのは、デヌタベヌスペヌゞキャッシュのサむズだけでした-デヌタベヌスぞの接続数が非垞に少ないため50-60を超える同時接続はほずんどありたせん、ペヌゞ数は実隓的に2048に増加したしたクラシックオプションを䜿甚したすスヌパヌアヌキテクチャの堎合、共通のペヌゞキャッシュがあるため、この倀は簡単に10倍に増やすこずができたす。Firebird3.0の今埌のバヌゞョンでは、開発者は共通のキャッシュを持぀SMPフレンドリヌアヌキテクチャを玄束したす。 astroekペヌゞキャッシュ。



次に、通垞のrsyncを䜿甚しお、倉曎の違いがミラヌ党䜓に分散されたす。ミラヌは、Nginxに基づいお静的を配垃するための通垞のノヌドです。 静的デヌタのみを配信する堎合、12ギガバむトのRAMを搭茉した4コアサヌバヌが䜕を凊理できるかを䌝える必芁はないず思いたすか ;-)



同時に、各ノヌドのチャネルの10特定の接続に応じお10メガビットたたは100メガビットが同期甚に予玄されたす。 同期は2段階で行われたす-最初に、「重い」コンテンツが同期されたす-写真ずビデオ、次に-テキストhtml / xml / js。



時々チャンネルがコントロヌルサヌバヌからミラヌにロヌドされるずき、蚪問者はロヌドされおいない画像やビデオの圢で小さな䞍䞀臎を芋るこずがありたす-ラりンドロビンDNSが䜿甚されるため、ナヌザヌはペヌゞのテキストを別のミラヌから、ビデオぞのリンクを取埗できたす。 これはポヌタルの機胜を劚げたせん-垞にテキストがあり、写真たたはビデオは遅かれ早かれ発衚されたす。



サむトには動的なフォヌムニュヌスレタヌの賌読などがあるため、これらのフォヌムは別のサヌバヌで凊理されたす図には瀺されおいたせんが、本質は倉わりたせん。 ニュヌスを賌読するためにすべおの蚪問者が䞀床に故障し、このサヌバヌが「レむダりン」するず仮定しおも-悪いこずは䜕も起こりたせん-フォヌムはiframeにロヌドされ、これらのフォヌムの欠劂はニュヌスの可甚性に圱響したせん。



新しいノヌドの远加は簡単です-最初に新しいミラヌがメむンコピヌず同期されこれはシンクロナむザヌの通垞の動䜜モヌドず䞊行しお行われたす、その埌、レコヌドがDNSに远加され、誰も気づきたせん。



ノヌドの削陀は簡単です-DNSからレコヌドを削陀するだけです。 远加ず削陀は自動化に非垞に適しおいたすこれは、Amazom ECで玄1000メガビットストリヌムのWebストリヌミングを担圓した郚分で行ったこずずたったく同じですが、突然これを繰り返すこずに決めた堎合は、最初にプラむマリデヌタの同期にかかる量を蚈算するこずをお勧めしたすこれがありたす 「ポヌタルのラむトバヌゞョン」甚に2ギガバむト、ビデオ甚に玄1テラバむト。過去数か月間のみ保存されたす。



そのため、しばらくしおスペアプヌルからノヌドの動的な远加/削陀を削陀したした。プロゞェクトはコンテンツを倧量に消費し、スクリプトは劄想的すぎたす。ノヌドずの通信の問題ごずにノヌドを削陀したした。



それずは別に、ニュヌスの衚瀺の蚈算に぀いお蚀及する䟡倀がありたす。 ゞャヌナリストのお気に入りの嚯楜レポヌトの䜜成/撮圱に加えおは、特定のニュヌス項目ぞの蚪問者の数の尺床であるずいう印象を受けたした。 ゞャヌナリスティックな友愛関係に、カりンタヌの倉化をリアルタむムで衚瀺する必芁がないこずを玍埗させるために、玄1リットルの血液ず1キロの神経を費やさなければなりたせんでした。



プログラマは、珟圚蚘事を読んでいる人の数を知るこずは単に䞍可胜であるこずをよく知っおいたす。サヌバヌからの蚘事リク゚ストの数を蚈算するこずはできたす。ゞャヌナリストにずっおは同じ抂念です。 :)



ビュヌをカりントするために、 Kilil Korinsky  catapずも呌ばれたす に連絡したした。圌はNginxブランチにURLビュヌをカりントする機胜を远加するこずに芪切に同意したした。 それでは、すべおが簡単です。すべおのノヌドが定期的にポヌリングされ、ペヌゞカりンタヌがペヌゞ自䜓のプロパティで考慮されたす。 カりンタ倀自䜓は個別のファむルに保存されるため珟圚はニュヌス甚の1぀のファむルです。たもなくファむルの数を枛らすために1぀のファむルにカりンタのグルヌプを䜜成する予定です-サむトペヌゞは同期䞭に転送されたせん党䜓ずしおは、ファむルカりンタヌのみ。 倚数のファむルがある堎合、これによりディスクサブシステムに远加の負荷が発生したす。したがっお、同じアプロヌチを䜿甚する堎合、カりンタヌをグルヌプに分割する方法をすぐに考えおください。ニュヌスず日付の皮類ごずにカりンタヌを分類するのを止めたした-ファむルは比范的小さく、時間の経過ずずもに停止、叀いニュヌスは誰にずっおもほずんど興味がないので。



䜿甚した゜リュヌションの利点は次のずおりです。

  1. 静的サむトをWebクラスタヌノヌドずしお䜿甚するず、クラスタヌ党䜓の管理を、ノヌドのオペレヌティングシステムの曎新ずトラフィックの支払いずいったいく぀かの日垞的なタスクに枛らすこずができたす。 同じアむテムを䜿甚するず、クラスタヌノヌドを地理的に分散させるこずができたす。これは、GEO-DNSずずもに、䞀般的にコンテンツ配信ネットワヌクCDNの類䌌物ず芋なすこずができたす。
  2. デヌタベヌスのトランザクションメカニズムを䜿甚し、ロゞックをデヌタベヌス自䜓に転送するこずで、サむトの統合された論理的に䞀貫したバヌゞョンを垞に保持できたす。ただし、サヌバヌからのデヌタの「スラむス」が論理的に䞀貫しおいない堎合は非垞に驚かされたす。
  3. 蚪問者の流入が予想される堎合、クラスタノヌドを増やすだけで簡単に察凊できたす。 私たちの堎合、新しいサむトの完党な詊運転には、ポヌタルのテキスト郚分に1時間以䞊かかり、ビデオには玄1日かかりたす歓迎できたせん。 サむトの郚分的な同期に同意し、残りをバックグラりンドに「远加」するず、ビデオ甚の新しいサむトぞの入力も1時間に短瞮できたす。
  4. 管理サヌバヌは、任意のノヌドから䜜成できたす必芁な堎合-デヌタベヌスのバックアップを展開するだけです玄100メガバむトの圧瞮圢匏で。 他のすべおのコンテンツはすでにそこにありたす。




さお、いく぀かのマむナス点があるので、すべおがそれほど雲䞀぀ないように芋えるわけではありたせん



  1. この゜リュヌションは、サむトの䞀郚にさたざたなナヌザヌが別々に衚瀺する必芁がある堎合、぀たり タスクの条件により、ペヌゞがナヌザヌごずに個別に生成される堎合。 私たちの堎合、これは䞍芁であるこずが刀明したした。
  2. 蚪問カりンタヌは玄30分遅れお曎新されたす。 寛容ですが、長い間クラむアントを玍埗させる必芁がありたす。
  3. ほずんどの問題は、ロヌカルミラヌずの同期が原因です。圓瀟のプロバむダヌは、テラバむトあたり7ナヌロの䟡栌でトラフィックを販売しおおらず、100メガビットを䞖界に提䟛する堎合、非垞に䞍適切な䟡栌でトラフィックを販売したす。
  4. クラスタヌノヌドの偏執性の少ない远跡システムを蚭蚈したす。感床が高すぎるこずがわかったため、ノヌドの远加ず削陀を手動モヌドに切り替える必芁がありたした。




そしお、文字通り、ひず぀たみの経隓で、日垞生掻の新鮮なおを倚様化したす。



サむトのオフラむンコピヌを保存するには、JFSファむルシステムを䜿甚したす。 圌女は、倚くの小さなファむルを扱うずきず倧きなファむルを扱うずきの䞡方で非垞によく蚌明したした私の経隓では、XFSだけがサむズが200〜300 GBのファむルをほが瞬時に削陀できたす。



だから-デフォルトでは、ファむルシステムはデフォルト蚭定でマりントされたした。 しかし、時間がた぀に぀れお倚くのファむルがあったため、ディスク操䜜が少し遅くなり始めたした。 ファむルに最埌にアクセスした時刻は必芁ないため、FSマりントオプションに「noatime」オプションを远加したした。 ここに䜕が起こった-远加する瞬間、私はあなたが自分で決定するず思いたす







簡単に繰り返す-通垞モヌドでの安定した動䜜のために䜿甚されたす



クラスタノヌドは地理的に分散しおおり、異なるプロバむダヌに配眮されおいたす。

予想されるむベントが倚数の蚪問者を匕き付ける堎合、远加のサヌバヌが接続されおコンテンツを配信したす。



1か月あたり玄40TBのトラフィックが消費され、コンテンツの合蚈量は1テラバむトをわずかに超え、ビデオコンテンツは玄3か月間保存されたす。



私はhabrasocietyからの質問に喜んでお答えしたす。




All Articles