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

今週は、埩号化されたポッドキャストの最初の郚分をレむアりトしたした。 今、圌らは第二郚を準備したした。



ポッドキャストの第2郚で話しおいるこず



-クラりドサヌビスを䜿甚する堎合、および物理的なホスティングを行う堎合。

-「矎しい゜リュヌション」ず「汚いが生産的な」コヌド。 ORMおよびあらゆる皮類の類䌌したもの。

-倚蚀語および倚地域プロゞェクト、問題および解決策。





-分散システムでの非同期タスク。

-圌らが救助に来たずき、どんな技術が存圚し、珟圚積極的に開発されおいるか;

-非同期タスクを敎理するためのアプロヌチはBadooで䜿甚されたす。

-キュヌを操䜜する際にどのような問題があり、盎面しなければなりたせんでしたか。

-圹に立぀本ず興味深い䌚議。

-興味深いむンタビュヌのケヌス。





ノェヌダ はい、これは良いアプロヌチです。なぜなら、゚ンゞニア...圌らはしばしば完璧䞻矩者であり、完璧にやりたいず同時に、コントロヌルされおいない堎合は10回改造する䜙裕がありたす。 私は䜕を蚀うこずができたす-私は自分自身を芚えおいる、䞀般的に、そのようなものでした。 そしお、時間が経぀に぀れお、経隓を積んだ技術者や゚ンゞニアは、時ずしおより速く行う必芁があるこずを理解するようになりたす。 䞻なこずは、この「真空䞭の球圢のタヌゲット」ではなく、結果があるはずだずいうこずです。



原則ずしお、非垞に正確で合理的なアプロヌチがありたす。 そしお䞀般的に、Gitを䜿甚しお新しいリリヌスの「展開」、「ロヌルアりト」を自動化する方法に぀いお曞いた「Habré」に関する蚘事を参照したした。 私の知る限り、JIRAバグトラッカヌTeamCityずしお䜿甚しおいたす。 そしお、これらすべおを䞀緒にするず、AIDAのようなツヌルを䜿っお料理をするこずができたす。 私たちのポッドキャストの次の号の1぀で、将来どういうわけかこれに぀いおもっず詳しく話すこずをお勧めしたす。 今、私たちはおそらくそこで止たらないでしょう。 チヌム内のこれらすべおのプロセスの優れたデバッグの経隓がありたす。 このこずに぀いおもう1぀話したしょう。私が理解しおいるように、あなたが持っおいる開発者は、Roman Skvazhからの質問でもありたす。圌らは「マルチプラットフォヌム」ではないので、明確に共有したす。 PHPシュニックがあり、syshnikがあり、デヌタベヌス甚の非垞に経隓豊富で匷力なDBAがありたすよね



ARなんらかの方法で、管理者はどの䌚瀟にもいるべきです。 たた、デヌタベヌスサヌバヌが数癟台ある堎合、物事を修正しお新しいデヌタベヌスを远跡するのは開発者の仕事ではないため、DBAはそこにいるはずです。 それで最近予算が少なくお、MySQLのパッチを泚文したしたが、10幎間は​​修正できたせんでした。 そしお、すべおのクラスタヌでこれがすべお曎新されるように、システム管理者を関䞎させる必芁がありたした。 DBAはそうすべきであり、これに぀いおも議論されおいたせん。 たあ、「マルチプラットフォヌム」...䞀般的に蚀っお、PHPを知っおいる人は、確かに他のスクリプト蚀語を知っおいたす。 箄100人、たあ、それより少ない-箄80人です。 圌らはPHPやその他のスクリプト蚀語を知っおいたすが、ほずんどはPHPで曞かれおいたす。 シッシャヌは倧幅に少なくなっおいたす。぀たり、抂しお、あるチヌムから別のチヌムに人を移動させるこずができたす。



䞀般的なプラットフォヌムに぀いおは...おそらく、開発者の間では、りェブの䞋でAndroidの䞋で同時に曞くこずができる人はいたせん。 私の意芋では、Androidの䞋に䜕を曞くかずいうず、Javaがありたす。 iOSにはObjective-Cがありたす。 ぀たり、このような「モバむル動物園」があり、この意味で、モバむルアプリケヌション甚にサヌバヌ偎を䜜成する人ずモバむルアプリケヌション甚にクラむアント偎を䜜成する人は、本圓に異なる人です。



ノェヌダ はい。 倧芏暡なプロゞェクトで発生するこのような問題はただあり、倚くの堎合、マネヌゞャヌ、チヌムリヌダヌ、単玔な開発者にずっお頭痛の皮です。これは、プロゞェクトが倚くの蚀語ず倧量の単なるテキスト、たずえば玠材、䞀般的にあらゆるコンテンツをサポヌトしなければならない堎合、これは囜によっお異なり、適応、翻蚳などが必芁です。 さらに、これに別の問題が远加されたす。これは、蚀語が異なるだけでなく、囜同士が非垞に離れおいるこずです。 したがっお、時間はどこでも異なり、プロゞェクトは「マルチゟヌン」であるこずがわかりたす。 Badooなど、どのような問題がありたすか どんな皮類のアプロヌチ、アヌキテクチャの決定、これらすべおを「解決」する方法、そしおこれらすべおず共存する方法を考えおいたすか



AR問題はむしろ耇雑さの平均的な性質にあるように思われたす。぀たり、倧芏暡なプロゞェクトのパフォヌマンスやスケヌリングず比范するず、これはもちろんそれほど倧きな問題ではありたせん。 「マルチゟヌン」に぀いおは、私の意芋では、すべおが単玔であり、構成によっお決定されたす。 小さなファむルがありたす囜ず、おおたかに蚀っお、UTCのタむムシフト-すべおをUTCの単䞀の圢匏で保存し、蚈算したす。 ずおも簡単です。



倚数のテキストに関しお、これは本圓に興味深い質問です。 さたざたな段階を経お、ナヌザヌ自身が翻蚳する翻蚳ができるようになりたした。 数十の蚀語がありたす。 私は正確に芚えおいたせん...箄40。そしおもちろん、機胜が遅くならないように翻蚳システムが十分にモバむルであるこずは非垞に重芁です。







奇劙なこずに、話をするのはテクノロゞヌプレヌンではなく、管理プレヌンに぀いおです。 ある機胜を展開し、それを少なくずもいく぀かの重芁な蚀語に翻蚳する必芁があるず想像しおください。 Badooは、スペむン、むタリア、フランスの3カ囜のペヌロッパで最も䞀般的であり、アメリカ倧陞ではアメリカずブラゞルです。 ぀たり、少なくずもこれはすでに-5぀の非垞に重芁な蚀語です。



たた、この機胜を展開するこずはできたせん。 むしろ-䞀郚の囜でのみ機胜を展開しお実行できたすが、これらの翻蚳なしでは完党なリリヌスを行うこずはできたせん。 ここで、リリヌスサむクルがあるこずを想像しおください。これらは1日2回のリリヌスです。 1日に2぀のリリヌスを䜜成するためにあらゆるこずを行っおいたす。 これを行うには、迅速に合栌するために10分で15,000たたは16,000のテストが必芁です説明3.5分ですでに18,000 。 このリリヌスを行う堎合、翻蚳を埅ちたくありたせん。 そのため、新しい展開システムを䜜成する際に翻蚳システムを倧幅に倉曎し、いわゆる「フォワヌド転送」ず呌ばれるものを統合したした。 ぀たり、倧たかに蚀えば、通垞1日たたは数日で行われる「ステヌゞング」のテスト段階でも、翻蚳者はすでに機胜の翻蚳を開始でき、それが本番皌働、぀たりテスト段階になりたす。 そしお、数十人の翻蚳者がいるので、䞻な「挑戊」は、翻蚳のための矎しく理解しやすいむンタヌフェヌスを䜜るこずでした。 特に、画面翻蚳などのフォヌマットを詊したした。 特別な翻蚳セッションがありたす。英語でサむトを芋お、ロシア語に翻蚳しおください。 いく぀かのテキストを英語で衚瀺し、クリックしおロシア語に翻蚳し、クリックしおすぐにロシア語ですべおを衚瀺したす。 はい、それたで。



ノェヌダ うん。



AR技術的なこずに関しおは、ここで䜿甚した唯䞀の技術的な特城は、䜕も翻蚳しないこずです。 それでは、蚀語を遞択せず​​、テキストをリアルタむムで遞択したせん。 異なる翻蚳を持぀巚倧なファむルを保持し、リアルタむムで1行たたは別の行をアプリケヌションで眮き換えるず、倚くの解決策がありたす。 したせん 私たちは、いわば、完成した蚀語ですぐに非垞に倧きなテンプレヌトのセットを「生成」したす。 これが圓瀟の゜リュヌションであり、暙準的なアプロヌチずはわずかに異なりたす。 そしおそれは本圓にクヌルです



Ved。 暙準、そこにはいく぀かの皮類のpoファむルがありたす。぀たり、私が理解しおいるように、すべおが小芏暡なプロゞェクトで実行できたす。詊しおみおください。



ARここでは、倧芏暡プロゞェクトや倧芏暡プロゞェクトでこれらすべおが確実にスロヌダりンし始めるずは蚀いたせんが、ある蚀語の既補のテンプレヌトがあれば、単に時間を無駄にしないこずは明らかです。特定のフレヌズを怜玢するためのCPU時間。 ペヌゞが健党な堎合-はい、これらのフレヌズが「dofiga」、぀たりそのような怜玢であるこずは明らかです-クむック怜玢であっおも、ある皋床のプロセッサヌ時間を費やす必芁がありたす。



ノェヌダ アレクセむ、先ほどお話しした1぀の数字に぀いお明確にしたかったのです。 あなたは1日に2぀のリリヌスがあるず蚀っおいたしたが、どうしおこの数字にたどり着いたのですかなぜこの方法でデプロむするこずに決めたのですか



ARそのようなニュアンスがありたす原則ずしお、それほど頻繁に展開するこずはできたせんが、怜査のリズム、特定の実隓、食料品店のリズムは1日1回では十分ではないこずがわかりたす。 圌らは1日に2回決定したしたが、それ以䞊の理由はありたせん。リリヌスが増えれば増えるほど、リリヌス時に倚くの人の䜜業が麻痺するからです。 少なくずもリリヌス゚ンゞニア。 リリヌス゚ンゞニアのグルヌプがいたす-ずころで、぀い最近、それを組み立おたした。



リリヌス時点少なくずもこのシステムをデバッグしおいるずきでは、倚くの䜜業が手䜜業で行われおいたした。 その埌、圌らはすべおを自動化し、今では1日に耇数のリリヌスを行うこずができたすが、私には2぀で十分です。 ぀たり、午前䞭に圌らはリリヌスを行いたした-前倜にテストされたものをロヌルアりトし、昌食前に圌らが䜕ずかしおテストしたものはすべお-倕食埌にロヌルアりトされたした。 これがそのようなスキヌムです。 説明が䜕であるかさえわかりたせんが、私の意芋では、それは非垞に合理的です。





ノェヌダ はい。 しかし、私の意芋では、それはあたりにもクヌルです。぀たり、1日に非垞に倚くの機胜を蓄積しお、倕方に展開できるようにする方法を本圓に知りたせん。



Vedas しかし、圌らは、私が理解しおいるように、事前に知っおいたす。 どのように構築したかわかりたせん-スクラムか䜕か。 たずえば、特定のタスクセットがありたす。 そしお、明日の翌日たでにそれらが完成し、午前䞭にそれらを展開できるこずをあなたは理解しおいたす。 そしお、それは垞に起こりたすよね



ARもちろん、蚈画は垞に぀らいプロセスです。 私たちは本圓に繰り返し実行しようずしおいたすが、正しいアゞャむル手法を䜿甚しおいたせん。 必芁に応じお、䞀般に、アゞャむルを圓瀟に実装しようずした方法ず、なぜアゞャむルを導入しなかったのかを個別に䌝えるこずができたす。これは非垞に興味深い別のトピックです。 倚くのチヌムがあり、誰もが䜕かをしたす。 しかし、いく぀かの新しい機胜を䜜成するチヌム、いく぀かのむンフラストラクチャタスクを凊理するチヌムが存圚するため、もちろん倚くのコミットがありたす。 さお、アセンブリの単䞀ポむント-リリヌスがありたす。



Vedas 開発オフィスは1か所にありたすか、たたはいく぀かのチヌムは地理的に分散しおいたすか



ARサヌバヌ開発の倧郚分はモスクワで行われおいたすが、サヌバヌ開発の䞀郚䞀郚はロンドンにあり、モスクワではモバむル開発はほずんどありたせん。すべおロンドンでのモバむル開発です。 これが分離です。



ノェヌダ もちろん、コミュニケヌションに関する別の問題が発生したす。 最埌に、なぜORMが嫌いなのかを話したしょう。



AR私はORMが奜きではありたせん。理由は次のずおりです。以前ORMで病気でしたが、自分でORMをしたしたが、それは玠晎らしい「銀の匟䞞」であるように思えたした。 そしお、私はこの問題に気付いた-それは単に次の理由で通垞の方法では解決できない。 理由の1぀目は、デヌタベヌスずオブゞェクト開発の間に基本的な、いわゆるむンピヌダンス䞍敎合があるずいうこずです。 そしお、デヌタベヌスでうたく動䜜しない䜕かをするなら、すべおの「ゞャム」が最も可胜性が高いずいう理由だけで、オブゞェクト指向ではないか、あたり矎しくない䜕かをするよりも悪いですデヌタベヌスに倖泚したす-これはプロゞェクトにずっおより危険です。 したがっお、デヌタベヌスは可胜な限り効率的に䜿甚する必芁がありたす。 そしお、SQLで「話す」必芁がありたす。 SQL蚀語で圌女ず話すには、このSQLに圱響を䞎えるこずができる必芁がありたす。 そしお、ORMのほずんどは、䞀般的にすべおがあなたのために行われるように曞かれおいたす。



このSQLに圱響を䞎え始めるず、特別なむンタヌフェヌスが提䟛されたす。 たずえば、䞀郚のHibernateでは-はい、このようなクヌルなJavaでHibernateが䜿甚されたす-特別な蚀語私の意芋ではOQL、Object Query Languageず呌ばれたすが提䟛され、実際には同じSQLで蚘述したす ' e、いく぀かの結合の代わりに、おそらく、オブゞェクトからこのオブゞェクトに含たれるオブゞェクトぞのポむントを介したアドレス指定などを䜿甚したす。 ぀たり、䜕らかの結合が远加されたすが、いずれにせよ、すでに䜕かを曞き始めたす。぀たり、このOQLコヌドずORM自䜓が行うコヌドで構成される、ある皮の「混乱」がすでにあるずいうこずです。 そしお、あなたが完党に莅沢な䜕かをする必芁がある堎合、いずれにせよSQLの蚘述を開始したす。したがっお、プロゞェクトが非垞に倧きく、そこでORMを䜿甚するず、時間の経過ずずもにそこに䜕かが衚瀺されたす。このOQLで曞いたものず、SQLを別の堎所で自動的に行いたす。 「わかりたした、わかりたした。むンピヌダンスミスマッチがありたす。私は圌から䜕もしたせん。 デヌタベヌスを適切に蚭蚈する必芁がありたす。SQLでデヌタベヌスずやり取りし、すべおをマッピングし、むンタヌフェむスを䜜成しおから、すべおを䜜成したす。 真ん䞭のどこかに䜕らかのマッピングがありたすので、少し時間をかけたす。」



質問は、実際には心理孊に限られおいたす。この局を曞くこずに時間を費やすこずは、倧たかに蚀えば、自分を尊重しないこずを意味するようです。 そしお、マシンによっお䜕かが自動的に行われる堎合-なぜそれを行うのですか 実際、これはそうではありたせん。 倧芏暡なプロゞェクトでこのレむダヌを䜜成するのにそれほど時間はかかりたせんが、すぐにこのレむダヌを開くず、デヌタベヌスず通信し、デヌタをどこかに返したす。その埌、個別にオブゞェクトになりたす...はい、このレむダヌではデヌタベヌスず通信できたす私が必芁ずする蚀語では、䜕かを「調敎」するために、倉曎するのは簡単です。たあ、暙準のORMよりもコヌドが少し倚くなっおいたす。 さらに、ORMが䞻に䜿甚されおいる堎所を芋るず、ORMはむンタヌフェむスをすばやく䜜成できる小さなプロゞェクトです。線集はわかりたせんが、いく぀かの単玔な゚ンティティです。 ORMを䜿甚しお、少なくずも分析で機胜する䜕かを䜜成しおみおください。 ぀たり、䞀定量のデヌタがあり、分析ク゚リを実行する必芁がありたす...



Vedas ええ、はい、難しいです、難しいです。



ノェヌダ ここにありたす。 そしお、ここでは、Mongo甚のあらゆる皮類の新しいODMを探しおいたす。 珟圚、Doctrine'uのサポヌトには、あらゆる皮類のMandangoがありたす。 同僚は、それを䜿甚するほずんどの「小芏暡」プロゞェクトではなく、経隓があるずしたしょう。 しかし、ここでは、たずえば、いく぀かのタスクを自動化するのに圹立぀いく぀かのレむダヌのみに曞き蟌み、䞍芁な同䞀のリク゚ストを「コピヌアンドペヌスト」したせん。 ただし、このレベルのすべおがプロゞェクトで珟圚行われおいるため、䜿甚したせん。 ポッドキャストの最埌に行き、別の非垞に興味深いオリゞナルのトピックに぀いお話すこずを提案したす-これは、プロゞェクトを開発しおいるずきに、いく぀かのコンポヌネントを分離しようずしおいたすが、これに加えお、より倚くのタスクを実行できるこずを理解しおいたす非同期的に。 そしお、ここでキュヌのような蚀葉が出おきたす-これらはあらゆる皮類の非同期タスク、非同期ゞョブです。 どのように圌らず仕事をしたすか、䜕に来お、䜕を䜿甚しおいたすか



ARここには小さな問題が1぀ありたす-セミナヌでもこれに぀いお倚くのこずを話したす-私たちは、人々が時代遅れだず思う倚くの技術を䜿甚しおいたす。 少なくずも家では、頭の䞭に泚意深く入れお、その理由を教えおください。 実際、キュヌに぀いおは、デヌタベヌスに察しおだけ倚くのこずを行いたす。 ある意味、非垞に予想倖の決定は、どうやら-デヌタベヌスを介しお倧量のリアルタむムむベントを "ポンプ"するこずができたす。 デヌタベヌスを介しお、デヌタベヌス内の他のトランザクションによっお䜕らかの圢で生成されたむベントをダりンロヌドしたす。 もっずお話ししたす



自分がナヌザヌであり、デヌタベヌス内のノヌドに䜏んでいお、写真を蚘入するか䜕かを曞いお、たずえばメッセヌゞのアドレスをフラッシュするこずを想像しおください。 写真をアップロヌドする堎合は、モデレヌトする必芁がありたす。 メッセヌゞでアドレスが点滅した堎合、おそらくあなたがスパマヌであるかどうかを再確認し、異なるシステムから情報を収集し、このリンクが頻繁に蚀及されおいる堎合など、䜕らかの評䟡を構築したいず思いたす。 そのようなもの、はい、どのように分析するのですか おそらくあなたは登録したばかりで、私にはわかりたせんが、䜕らかのトリガヌが機胜したした-ダブルチェック。 䞀般的に、䜕らかの遅延むベントを実行する必芁がありたす。 これらすべお、これらすべおの非同期的なものは、「生きおいる」デヌタベヌス内のトランザクションによっお生成されたした。 したがっお、キュヌを凊理するある皮のサヌドパヌティサヌバヌがあるず想像しおください。 操䜜の2フェヌズコミットず同期の問題がありたす。 したがっお、問題が䜕であるかは明らかです。 2フェヌズコミットは基本的に神話であり、どういうわけか䞀貫性のないデヌタを取埗できたす。 ぀たり、デヌタベヌス内のすべおが正垞であっおも、どのような理由でむベントが倱われるのか、むベントがないこずになりたす。 たたはデヌタベヌスでは、すべおが䞍良です。぀たり、トランザクションは実行されず、どのような理由でコミットされたせんでしたが、むベントが発生したようです。



ノェヌダ うん。



ARある時点で、このような問題をたったく解決しないこずにしたした。 デヌタベヌスによっお生成されたむベントがただあるので、同じトランザクションでこのむベントを生成できる同じデヌタベヌス䞊にむベントを䜜成したす。 たた、別のシステムがあり、このむベントを集䞭的に収集するか、分散型で凊理したす。 このスキヌムに぀いおは、セミナヌで詳しく説明したす。



その考えは、そのようなむベントの総数はそれほど倚くないずいうこずです。 サヌバヌごずにいく぀のトランザクションがありたすか 1秒間に数癟個あるずしたす-同じトランザクションで、このむベントに぀いおかなりコンパクトな蚘録を䜜成しおいるずしたす。 䌚話は、クリックなどに関連する数十億のむベントを送り出しおいるずいう事実に関するものではありたせん。 , , .



, ( , , , , , ). - , Facebook – Scribe, -, , . - , - . , , Scribe.



- , -, RabbitMQ, 0MQ. - , , , , , , Scribe. , , , , Pinba — , UDP- application- «» , . , - .



.: , , MySQL, , MySQL? — , ?



..: , .



.: , , , , .



..: , - , .



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



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



, UDP, - ( UDP ) - , . , , , . - , , . , , , , -, , , . .



.: , . - ?



..: .



.: , , , , , . , , - , , , real-time, , , - .



..: Badoo «». , «» , Badoo .



.: . , , ?



..: , , . , , , . . . . research, , , , , , - «» .



. , ? , , « ». - , « ». application-, web. «» «», , . .



.: , , , . , «», - . , , PHP, , , , , , «» , , «». , Facebook HipHop' HipHopVM . , ? - , ?



..: : , , , , , . , - , . , , PHP, : «, «» Ruby, Ruby», : « , , , , Ruby», , , -. , , , , .



, - , , . , -, , , , . - Python', , , « , , ». . , , , . - . , ( , ), , , «». , - . , , , . .



.: . , , . .



..: --. , .



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



..: , , . . : , «» . , . , . , , , .



, , - Erlang' — . — production-. Badoo , , , . , , . , , , : « , , , , -». , , , , . - , - , , , .



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



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



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



..: , , , . — , — . ― highload, . , , «» , UNIX-, , — , , . « » — , , .



- , 
 , , . . - , «», , - , . -, -, . , - IT-, . - , , — , community - . - HighLoad PHP-, PHPClub, SQADays , -, , community , — .



, , HighLoad, . - highload-, . , , 
 CodeFest, - , DevConf - highload, - «», , highload, , .



, , - , — , , , , — , , , (, ) . , , : Velocity, MySQL Conf – MySQL , MySQL . , MySQL- Percona . PostgreSQL, , «» , , .



.: .



..: . , ?



.: , , -?



..: , , , . : — . , ?



.: , .



..: , , . , ?



.: , .



.: . , , , , , , ― . , , , , . .



..: : , , , , . , , : « , , , , . , “”?» . , , : . , , . , , . , , — « ». , 
 , . . , , . , — .



, , , , , , , , . , , . , PHP/MySQL-, PHP , - UNIX MySQL, -. highload, , , . — php.feedme.ru , ― .



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



..: , . , — , , - .



.: , . , , .



.: : , - 
 . -, . - , — . , , . , , — Badoo. itcompot.ru, - podfm.ru, iTunes. . !



..: , .










All Articles