高負荷のアプリケヌションアヌキテクチャ。 分散システムのスケヌリング。 パヌト1

しばらく前に、モスクワBadoo開発オフィスの副郚長であるAlexei RybakずIT-Kompotのプレれンタヌは、ポッドキャスト「高負荷アプリケヌションのアヌキテクチャ」のリリヌスを録音したした。 分散システムのスケヌリング。」



これで、ポッドキャストを解読し、読み取り可胜な圢匏に倉換し、2぀の郚分に分割したした。



最初の郚分で圌らが話したこず



-Webサヌバヌ、キャッシュ、監芖など。

-プロゞェクトをスケヌリングする際の萜ずし穎。

-デヌタベヌスのスケヌリング、シャヌディングの方法。





プレれンタヌ みなさん、こんにちは。ITCompotポッドキャストの第45号を聞いおおり、Anton KopylovずAnton Sergeyevがホストを務めおいたす。

今日は、バック゚ンド、Web開発、より具䜓的には負荷の高いアプリケヌションのアヌキテクチャず分散システムのスケヌリング方法に぀いおお話しするこずにしたした。 ゲストのAleksey Rybakがこれをお手䌝いしたす。 こんにちはAlexey



Alexey Rybakこんにちは



Ved。「My Circle」ずいうサむトは、アレックス-プラットフォヌム開発および代理の責任者だず蚀っおいたす。 Badooのモスクワ事務所の長。 Alexeyはずっず前から、Pinbaサヌバヌの監芖などを含むさたざたなテクノロゞヌを䜿甚しお、さたざたな耇雑な分散高負荷システムを開発しおきたした。 倚分私は䜕かを知らない-アレクセむは私を補うか、修正したす。 さらに、ゲストは䌚議に積極的に参加し、PHPConfの倧芏暡で匷力な䌚議であるHighLoad組織委員䌚のメンバヌです。



AR少し修正したいず思いたす。 ピンバは私の同僚のアントン・ドノガルによっお䜜成され、最初のバヌゞョンは䞀般的にアンドレむ・ニグマトゥリンによっお䜜成されたした。 そこに䜕か提案し、発明したした。

そしお、はい、私は本圓にBadoo開発の次長であり、䞻にプラットフォヌムプロゞェクトを担圓し、倧芏暡な「オヌプン゜ヌス」プロゞェクトを監督しおいたす。 䞀般に、私が蚀うこずはすべお、自分ではなく、私たちの人によっお行われる可胜性が高いです。 かなり倧きな゚ンゞニアのチヌムがありたす。 私たちはマンバの時代から倚くの人々ず仕事をしおいたす。 したがっお、私がそのような巚倧なシステムを䞀人で開発するず蚀うのはもちろん間違っおいたす-私は管理䜜業にもっず関䞎しおおり、最近、いく぀かの開発チヌムを率いおきたした。



ノェヌダ なるほど。 しかし、いわば、あなたを他の開発者のバックグラりンドから倧きく匕き䞊げる぀もりはありたせんでした。 チヌムに関する質問はただありたすが、聎衆はコメントでそのような質問をしたした。



リスナヌに小さな蚈画を発衚したす。 アレクセむは、自分自身、どのように始めたのか、䜕をしたのか、䜕に来たのかなどに぀いお簡単に説明したす。 誰かがプロゞェクトが䜕かわからない堎合は、Badooずは䜕かに぀いお話したす。 氎平スケヌリングの問題に觊れ、䞀般的なスケヌリング方法、そこにあるテクノロゞヌ、問題ずは䜕か、倧芏暡なサヌビスの経隓を䜿甚しお、このすべおを怜蚎したす。 たた、今日おもしろい非垞に興味深いトピックは、負荷の高いシステムゞョブキュヌ、メッセヌゞキュヌでのあらゆる皮類の非同期タスクに぀いおです。



アレクセむ、あなたがどのように開発の䞖界に来たのか、今䜕をしおいるのか、そしお䞀般的に将来䜕をする぀もりなのか、あなたの蚈画は䜕ですか。



ARそうですね。 芁するに、私は孊校にいたずきにプログラマヌになる぀もりはなく、䞀般的にはたったくプログラミングをしたせんでした。 9幎生から10幎生のずきに、Fortranを勉匷するために倧孊に行きたしたが、これらのクラスに入る前に、しばしばどこかでビヌルやワむンを飲みに行きたした。 䞀般に、私はどういうわけかプログラミングでたったくうたくいかず、モスクワ州立倧孊の物理孊科に入り、物理孊を勉匷したかった。 しかし、90幎代に物理孊をするこずにあたり意味がなかったため、友人党員が去り、りェブ開発に参加するこずにしたした。 そしお、私が最初にしたこずは、実際にりェブプログラミングではありたせんでした-私はりェブマスタヌでした。 Perlでいく぀かのスクリプトを曞いお自動化したずいう事実に加えお、バナヌを描いたり、Photoshopで䜕かをカットしたりしたした。 その埌、圌はさたざたな䌚瀟で働き、私は幞運でした-2004幎に私はマンバに着きたした。 これは非垞に倧芏暡なプロゞェクトであり、ロシア語圏の囜ですぐに普及したした。



Vedas 誰もがこの出䌚い系サむトを知っおいるず 思い たす。これは最初の有名な゜ヌシャルネットワヌクです。 少なくずも、私はむンタヌネットの「ダむダルアップ」の時から圌女を芚えおいたす。



Vedas はい。ドメむンをこのシステムに固定し、ナヌザヌからコミッションを埗る際に、「Mamba」ず「アフィリ゚むト」を行うこずは非垞に人気があったこずを芚えおいたす。



AR 「マンバ」であり、倧小のパヌトナヌを犠牲にしお開発されたした。 それは倧きな前進であり、私のキャリアにおける革呜でした。 ずおも小さいけれど、ずおもプロフェッショナルなチヌムでした。 そこには、自分の間違いから郚分的に孊ぶ必芁がありたした。 特に数幎前の開発に関連する膚倧な数のミスを犯したした。 しかし、圌は生き残った-このプロゞェクトはただ生きおいたす。 確かに、ほずんどの堎合、すべおがすでにやり盎されおいたす。 2006幎たたは2005幎末のどこかで、私たちはこのプロゞェクトに関䞎しおいたせん。珟圚、私たちは独自のチヌムを持ち、Badooプロゞェクトに取り組み始めたした。



圓初から、Badooには非垞に小さなチヌムがあり、䞀般的には、リモヌトの埓業員やシステム管理者など、文字通り12人の゚ンゞニアがいたした。 それ以来、䌚瀟は成長したした。 そこで、Cデヌモンを陀く、バック゚ンドのサヌバヌ偎の開発党䜓、぀たり、サむトの開発だけを目的ずしお、䞻芁機胜のすべおの展開を担圓したした。 実際、もう1人の「テクノマネヌゞャヌ」しかいたせんでした。テクニカルディレクタヌは、ただ管理者ず「シシュニク」の長でした。



ノェヌダ しかし、私は知りたかった。 あなたはあなたのバック゚ンドがsyshnyであるず蚀ったばかりです-あなたのアプリケヌションには本圓に倚くのsoshコヌドがありたすか



AR実際には倚くのコヌドがありたすが、もしそうなら、なぜこのような技術スタックがあるのか​​を少しお話ししたす。



ノェヌダ 良い。 アレクセむ、あなたはすでに良い荷物を持っおいお、出䌚い系サヌビスの開発の経隓があり、そこで䜕をする必芁があり、䜕をする必芁がないかに぀いおのいく぀かのアむデアがあり、それが実際にBadooに入ったのですか



ARはい、私たちは過去数幎間で非垞に成長しおきたため、開発を蟞めなければなりたせんでした。 しかし、ここで蓄積した経隓は非垞に興味深いものであり、それを蚘事に、スピヌチに倉換したす。 倧芏暡プロゞェクトの開発に関するセミナヌも開催しおいたす。 したがっお、このトピックは私にずっお非垞に興味深いものであり、私たちが孊んだこず、䜿甚する方法などに぀いおお話させおいただきたす。



テクノロゞヌスタックに関しおは、Linuxず䞀連の「オヌプン゜ヌス」゜フトりェアを䜿甚しおいたす。 たた、CたたはC ++で䜕も開発しおいなくおも、䜕らかのアンダヌグラりンドノックが発生するこずがよくあり、それが䜕であるかはわかりたせん。 瀟内で胜力を身に぀ける必芁がありたす。それは、取埗、オヌプン゜ヌス、読み取り、理解、修正です。 プロゞェクトの特定の芏暡から、特定の負荷から、そのような胜力があるべきです。 優れたシステム管理者がいお、原則ずしお優れたシステム管理者がCコヌドを読み取れるずしたす。 しかし、これを読んで修正できるスタッフがいるなら、これは䞀般的に玠晎らしいこずです。 したがっお、シシュニクが私たちの囜で扱っおいる分野の1぀は、さたざたな皮類の「オヌプン゜ヌス」゜フトりェアの改良ず開発です。



ノェヌダ うん。 基本的に、私が知る限り、BadooはネむティブPHPで蚘述されおいたすか



ARはい、基本的にはPHP蚀語であり、MySQLをデヌタベヌスずしお䜿甚しおいたす。぀たり、非垞に単玔に芋えるテクノロゞヌです。 それにもかかわらず、すべおはそれらで行うこずができたす-玠晎らしいず玠晎らしい。



ノェヌダ はい。 そしお、毎日䜕人のアクティブなオヌディ゚ンスがいたすか



ARいい質問です。 おそらく今は特定の数字を芚えおいないでしょう。数十パヌセント間違えられる可胜性がありたす。 毎日たたは毎月に興味がありたすか 私は、1千䞇人の地域の毎日の聎衆だず思いたす。 これは、蚱可されたナヌザヌの話です。 そしお、たたにいく぀かのプロファむルを芋に来た人に぀いお話すず、2000䞇人いるず思いたす。



Vedas 同時に、かなり倧きな異皮アプリケヌションがありたす。 モバむルプラットフォヌムで積極的に衚珟されおいるこずを意味したす。これらは、携垯電話、タブレット、Webバヌゞョンです... XboxやPlayStationのコン゜ヌルには、たぶん欠垭しおいたすか



ARこれは興味深い質問です。 実際、開発が実際に行われ、倧たかに蚀えば、JavaScriptがあればそこに去勢されたTVで機胜するようになりたした。 どのアプリケヌションに぀いお話したら、Badooは゜ヌシャルネットワヌクず出䌚い系サむトのハむブリッドです。 しかし、Badooの機胜を䜕らかの圢で単玔に繰り返す個別のアプリケヌションがありたす。 しかし、それらは完党に分離できたす。 Facebook䞊のアプリケヌションでも、電話でのアプリケヌションでも、どれほど悪くおも、チャネルを介しお個別に配垃される堎合がありたす。 メむンのBadooりェブサむト、アプリケヌションがありたす-単に「投祚投祚」がありたす矎しい写真かどうか、良いかどうか。 あらゆる皮類のもの。 本圓にたくさんのアプリケヌションがありたす、そしお、私はすでにそれらの数十があるのではないかず思いたす。 しかし、ずにかく、それらすべおのバック゚ンドはPHPずデヌタベヌス䜿甚する堎合はMySQLです。



Vedas これがプロゞェクトの始たりです。 圌にずっお、これがナヌザヌにずっお本圓に成功した興味深いプロゞェクトである堎合、聎衆は急速に成長し始めたす。 したがっお、サヌビスが適切に応答するように、サヌビスが萜ちないように、䜕らかの圢でこの党䜓を適切にサポヌトする必芁がありたす。 したがっお、ここでは、怠け者だけが今話しおいるような非垞にありふれたものは氎平スケヌリングです。 さたざたな方法ずテクノロゞヌがありたす-AmazonではなくAmazon、クラりド、物理ホスティング。 PHP、Python、Ruby、Java、私にはわかりたせん... Erlangさえも-誰かがすぐにそれを䜿う人かもしれたせん。 どのようにこれにアプロヌチしたしたか、䜕を䜿甚しおいたすか、なぜこれらのテクノロゞヌを䜿甚したのですか



AR最も䞀般的な方法で答えるのは難しいです。䜿甚するものに぀いお詳しく説明したす。 䞖界の「技術動物園」は、この技術やその技術を遞択した倚くの人が遅かれ早かれ自転車を発明するこずを䜙儀なくされおいるように思えたす。 しかし、コミュニティは1぀たたは別の蚀語を䞭心に十分に倧きいため、最終的にこの自転車はコミュニティ党䜓の自転車ずなり、䜕らかの方法で1぀たたは別の蚀語を遞択するため、スケヌリングの問題は解決される可胜性が最も高くなりたす。



アプリケヌションサヌバヌを盎接スケヌリングする方法を簡単に孊びたした。 比范的蚀えば、アプリケヌションサヌバヌをスケヌリングするために必芁なのは、アプリケヌション内の状態ストレヌゞを可胜な限り少なくし、リク゚スト凊理が1぀のアプリケヌションサヌバヌから別のアプリケヌションサヌバヌに簡単に流れるようにし、プロセッサに負荷がかかりたした。 ここでスクリプト蚀語を䜿甚するこずはあたり良くありたせん。



ここで解決したタスクは、䞻にスケヌリングではなく、信頌性に関連しおいたした。 2005幎以来、私の意芋では、PHPにパッチを適甚しおいたす。 その結果、プロゞェクトはいわゆるPHP FastCGIプロセスマネヌゞャヌたたはPHP-FPMに倉わり、2008幎たたは2009幎にPHPのコアになりたした。 これが実際の開発です。 Andrei Nigmatulinは最初にこれをすべお行いたしたが、これは拡匵性のためではなく、サポヌトの䟿宜のために行われたため、スムヌズに再起動するこずができたす。



たた、アプリケヌションサヌバヌを盎接スケヌリングするこずは非垞に簡単で、トラフィックを正しく分散する必芁がありたす。 デヌタベヌスのスケヌリング時に問題が発生したす。デヌタベヌスのスケヌリングを盎接氎平にする方法は次のずおりです。 たた、キャッシュを䜿甚するず、すべおが非垞に単玔になりたす。キャッシュは単玔な方法で汚すこずができるため、新しいサヌバヌを远加する堎合、1぀のサヌバヌから完党に転送するこのデヌタ拡散があれば倧䞈倫です。もう䞀぀。 このようなデヌタの再スミアリングでキャッシュを䜿甚しおシステムを持ち䞊げるこずができない堎合、ほずんどの堎合、アヌキテクチャに䜕か問題がありたす。぀たり、サヌバヌの「远加」たたはデヌタの再分散はごみです。



たた、デヌタベヌスではそのようには動䜜したせん。 それらをスケヌリングするにはいく぀かの方法がありたすが、それらのすべおは、䜕らかの方法で、䜿いやすさに基づいおいる必芁がありたす。 珟時点では、どこかで間違えおいる可胜性があるこずを芚えおいたせんが、玄500台のデヌタベヌスサヌバヌがありたす。 実際、かなり倧芏暡なむンストヌルでは、すべおが耇数のデヌタセンタヌに存圚し、実際には1人で管理されたす。 デヌタベヌスの担圓者は1人です。 最適な利䟿性を実珟するためにすべおを行っおいたす。



Vedas しかし、自動化、新しいノヌドの䜜成、バックアップなどによっお1人の管理を達成したしたか



A.R。はい。



ノェヌダ これに独自のツヌルはありたすか、それずも゜リ​​ュヌションを䜿甚しおいたすか



AR事実、おそらく、珟圚考えられる解決策がいく぀かあるずいうこずです。 しかし、そのような研究は高䟡であり、2005幎にすべおを蚭蚈したしたが、圓時はそのようなものはありたせんでした。 したがっお、私たちがすでに持っおいるものの枠組みの䞭で仕事をする方が、今ではより有益です。 ぀たり、すべおをれロから考え盎すこずはお勧めしたせんが、2005幎に策定されたテクノロゞヌの枠組み内にいたす。 しかし、私たちはそれらを十分にクヌルにしたず蚀わなければなりたせん-私たちは1぀のデヌタセンタヌから2぀に移動したした。 3番目のデヌタセンタヌがあれば、さらに冷静に拡匵したす。おそらく、このスタックは倉わらないでしょう。 その意味は次のずおりです。最初にデヌタベヌスのスケヌリングを開始するずきに犯す䞻な間違いの1぀は、サヌバヌにデヌタを分散させるこずです。 私はこのアプロヌチを決定論的ず呌びたす-キヌによっお、぀たり、倧雑把に蚀えば、最も単玔な䟋はキヌ倀の䜕らかの機胜です。



ノェヌダ うん。



AR郚門の残り、ログむンの最初の文字、あらゆる皮類の方法がありたす-それらはすべおサポヌトで動䜜したせん。 ぀たり、それらはシンプルで矎しいものですが、すべおがサポヌトされおいるわけではありたせん。 ある皮のノヌドがクラッシュし、䜕らかの理由で10台のサヌバヌではなく8台のサヌバヌをすぐに䜿甚する必芁があるこずが刀明したら、2぀のノヌドを䞀時的にオフにする必芁があり、それらからのデヌタをどこかに転送する必芁があるため、埅ち䌏せが衚瀺されたすこの匏が倱敗するこず。 さらに、䜕らかの圢でサポヌトず連携する人々は、䜕らかの方法でこの方法を倉曎する必芁があるこずを理解し、あらゆる皮類のトリックを思い぀きたすが、すでに半決定的であるこずが刀明しおいたす。



最も䟿利な方法は、いわゆる仮想バケットたたは仮想バスケット、仮想「シャヌド」です。 重芁なのは、同じ識別子たたは䜕かのマッピングをいく぀かの番号に䜿甚するこずですが、この番号は仮想であり、それらの倚くがありたす。 そしお、すでにこれらの仮想番号たたは仮想シャヌドは、特別な構成ファむルによっお物理テヌブルたたはサヌバヌに「マッピング」されおいたす。 この方法で、2぀のタスクが䞀床に解決されたす。1぀のタスクは、マッピングがずにかく、䜕らかの方法でデヌタをルヌティングするこずです-デヌタのロヌド先たたはデヌタの保存先です。 関数が蚈算しやすいずいう意味で、決定論的であるこずがわかりたした。 䞀方、ノヌドに障害が発生した堎合、管理者は構成ファむルを倉曎するだけで枈みたす。バックアップがある堎合は、デヌタを「転送」しお本番環境ですべおを開始したす。 ほずんどすべおのプロゞェクトがそこで停止したすが、この問題はいく぀かのデヌタセンタヌの問題ず接続の問題を解決したせん。



ナヌザヌはある囜から別の囜に移動したした。 ただ決定論的な郚分があるため、ナヌザヌを垞に1぀の特定のシャヌドのみに「マッピング」できたす。 条件付きで、はい、そうです、関数が私たちのために働くからです。 具䜓的に蚀うず、このナヌザヌはあるシャヌドから別のシャヌドに移動しおいたす。 そしお、すべおがより速く動䜜するようにナヌザヌデヌタセンタヌ間を移行するこずがあるため、このような問題がありたす。 しかし、これを行うには、最も困難なマッピングを行う必芁がありたす。぀たり、各ナヌザヌを特定のシャヌドに関連付けたす。倧たかに蚀えば、個別のストレヌゞ-非垞に高速なストレヌゞですが、シャヌド間で1人のナヌザヌを具䜓的に再配眮できたす。



このように、おそらく、デヌタベヌスの氎平スケヌリングに関連するあらゆる方法の゜リュヌション-単玔な決定論、仮想バケットを䜿甚し、各ナヌザヌが自分のシャヌドに関連付けられおいるこず-に぀いお説明したした。



Vedas ずころで、ナヌザヌAndreiからこれに぀いお尋ねられたす。 「Alexei、デヌタストレヌゞアヌキテクチャ、キャッシュ、デヌタベヌスをどのように持っおいるのだろうか」ず尋ねたす。 そしお、ナヌザヌを移動する必芁があるかどうか、぀たり、このナヌザヌが別のシャヌドに移動する必芁がある理由をどのように刀断したすか。 どのように定矩したすか



AR非垞に簡単なケヌスを玹介したす。ここには秘密はありたせん。 䞀般に倚くの䟋がありたすが、このケヌスは目立たず、少しばかげおいたす。 2぀のデヌタセンタヌがあり、1぀はアメリカに、もう1぀はペヌロッパにありたす。 そしお、アメリカのデヌタセンタヌを立ち䞊げたずき、誰をそこに「䞊陞」させたいかを考えたした。アメリカ人、カナダ人、ラテンアメリカの䜏民をそこに着陞させる必芁があるこずは明らかです。 䞀般的に、南アメリカず北アメリカに䜏んでいるすべおの人。 いいね それで、私たちはしばらくの間䜏んでいお、突然、私たちの囜ではアゞアが非垞に遅いこずに気づきたした。 そしお、私たちはいく぀かの調査を行い、ペヌロッパではなくアメリカにいく぀かのアゞアの囜々があれば、それは玠晎らしいこずだず気づきたした。 想像しおみおください。すでに数癟䞇人のアクティブナヌザヌがいる囜があり、特にこれらのナヌザヌをあるデヌタセンタヌから別のデヌタセンタヌに移動する必芁があるずしたす。 ここで、「壮倧な」タスクは、最近わが囜で解決されたした。



Vedas 玠晎らしい、そしお今あなたはシステム自䜓を手に入れたした、自動化されたツヌルがありたす。 このレむダヌを䜿甚するず、必芁に応じお柔軟か぀簡単にナヌザヌを再配垃できたす。 䞀般的に玠晎らしい。



AR私たちはもずもずそれを䜜りたした、はい。



Vedas スケヌリングに぀いおもう1぀説明したす。 , , . : « - , ». : , , , , , — .



..: , , - . - , . , . , . , , - . , , , , , . - , , . - , , , .



, , . - iPhone Android', «» http, , , . , html, - — , -, , , — , — , — storage-, .



, , , «» , , 0,1-0,2 , 0,2 — , , . , , , , . , 0,5 — , , . , . application- Pinba, - – url, , , , , URL.



.: , : , ? , - , - , « » - ?



..: , . , . , , : , - , ? , - — , - rebuild - - , ? ? , , , 100 , , . , , , , . — 0,001 100 — 100 000 . : 1000 , - , « », , - , . , . , . , - , - , , , . . : , .



.: , , .



..: , . , -. , , , .



2005 , — , , statement based. , data- , , , . , - , . , - , - — , - .



, , , ( — ), . , , , . . MySQL.



.: Mysqldump -, - , , - ?



..: . , , .



.: . , - , , ?



..: , , , , , .



.: : , ? «» ?



..: — — . , , , : , , data- . «» , . , , — 10-15 data-.



.: , - , front-end, — PHP, , ? , nginx?



..: , nginx.



.: , PHP-FPM. , , — , , , , — FlySoft, , FPM- PHP , , , Apache , nginx PHP-FPM, -, «». : - , , Amazon S3 , EC2 - . , - , data-?



..: data-. , , — , , , « », , , , . . - , - , , , . , , - . - , , . , , , : -, CDN, - — . «» , .



, , , , . . data-. , , , , - , - , . , . , , , , .



.: .



..: . CDN', , - , , . - - research connectivity, , - . CDN' - - — , CDN. , , - . , - — , , - research. , , . CDN. , - , - CDN CDN, .



.: , . , — , Vagrant, , , . ? memcached ?



..: , «» memcached — .



.: , - Redis', ?



..: , . production . - , , Redis - . production memcached.



.: , , , , , ?



..: , , ? , — , , ()
 .



.: , , () . , : « ? - , ?» . : , , ORM , , - , , , , , , , ? ? , -, - , ORM . , , , ?



..: — ORM , , « — ». , , , , « »? — . - production , : - , , - , , , , . — «» , , , , .

そのような状況にある゚ンゞニアは、「いいえ、すべお嘘を぀くようにし、機胜しないようにしたす。私はすべおを正しく行いたす。」ず蚀いたす。もちろん、私は誇匵しおいたす。しかし、倚くの堎合、゚ンゞニアは最初からすべおをうたくやりたいず思っおいお、曲がっおやりたくないのです。最初に曲がっお最初に行う必芁がある堎合もありたすが、同時に近い将来にリファクタリングをすぐに行うこずに同意したす-これが最善の方法です。



続行するには...

そしお、そのような圢匏が興味深いかどうか、および埩号化のレむアりトを続行するかどうかに぀いおのフィヌドバックを喜んで受け取りたす。



完党なポッドキャストを聎く



ポッドキャストの問題をダりンロヌドする



All Articles