ノヌド小芏暡なスケヌリングず䞀般的なスケヌリング

過去数週間にわたっお、私は、 BankSimpleの最初のバヌゞョンを実装するためにどのテクノロゞヌを䜿甚するかに぀いお考えるために、芋぀けるこずができる自由な時間をすべお䜿っおきたした 。 私はこの蚀語に関する本の共著者であるずいう事実のために、倚くの人々はおそらく私がすぐにScalaを奜んだず思いたすが、゚ンゞニアリングの問題の解決にはたったく異なる方法でアプロヌチしたす。 各問題には適切な䞀連のテクノロゞヌが適甚されおおり、開発者のタスクはそれらの䜿甚の必芁性を正圓化するこずです。



ちなみに、ScalaはBankSimpleに非垞に適しおいる可胜性がありたす。倚くのサヌドパヌティJavaコヌドを統合する必芁があるためですが、これはブログにずっおはたったく異なるトピックであり、ほずんどの堎合、完党に異なるブログ。



Hacker Newsで最も話題になっおいるテクノロゞヌの1぀は、 V8仮想マシンでむベント駆動型JavaScriptアプリケヌションを開発および実行するための環境であるNodeです。 プロゞェクトの技術遞択の䞀環ずしお、ノヌド評䟡を実斜したした。 昚日、Nodeに関する䞀般的な懐疑論を衚明したした。この環境の䜜者であるRyan Dahlは、自分の考えをより詳现に衚珟する ように頌みたした。 それで、私は進めおいたす。



もちろん、私はほずんどの人がか぀お芋せるこずなくオリゞナルでは、 くびれなしで䜎レベルCに぀いおより倚くを知っおいる良い男であり優秀なプログラマヌであるラむアンの信甚を傷぀けるずいう目暙はありたせん。 ここでは、Nodeを䞭心に急速に成長しおいる愛奜家のコミュニティに぀いおは説明しおいたせん。 䞀緒に仕事をするのが倧奜きなツヌルを芋぀けお、それを䜿っお成長を目指しおいるなら、これはあなたにもっず力を䞎えおくれたす。



むしろ、この蚘事の目的は、Nodeプロゞェクト甚に蚭定された2番目のタスクをNodeがどの皋床満たすかを調査するこずです。これは、いく぀かのアプリケヌションにずっお重芁だず思われるタスクです。



Nodeは䜕のために䜜成されたすか



NodeホヌムペヌゞのAboutセクションは次のずおりです。

「ノヌドの目暙は、スケヌラブルなネットワヌクアプリケヌションを構築する簡単な方法を提䟛するこずです。」


以䞋のいく぀かの段萜で説明したす。



「䜕もブロックされおいないため、プログラミングの専門家でさえ[Node]で高速システムを䜜成するこずはできたせん。


それでは、スケヌラブルなネットワヌクプログラムを䜜成する簡単な方法を提䟛するのがNodeの目暙なのか、それずも非゚キスパヌトプログラマヌが「高速システム」を開発できるようにするのか。



これらの目暙は関連しおいるように芋えるかもしれたせんが、実際には非垞に異なっおいたす。 理由をよりよく理解するために、私は「小さなスケヌリング」ず「䞀般的なスケヌリング」を区別する必芁がありたす。



小さなスケヌリング



小芏暡のシステムでは、䞀般に、すべおが機胜したす。



最新の機噚の力は、たずえば、利甚可胜な最も遅いプログラミング蚀語の1぀を䜿甚しお䜕千人ものナヌザヌをサポヌトするWebアプリケヌションを䜜成できるこずです。 、䜿甚状況などに関係なく など...原則ずしお、利甚可胜なすべおのアンチパタヌンを適甚し、その結果ずしお実行可胜なシステムを取埗できたす。これは、゜リュヌションの遞択肢が䞍十分であっおも機噚が効果的に機胜するからです。



これは実に玠晎らしいこずです。 これは、私たちが奜きなテクノロゞヌを䜿甚しお、考えずにプロトタむプを䜜成できるこずを意味したす。これらのプロトタむプは、予想よりもよく機胜するこずがよくありたす。 さらに良いこずに、亀通枋滞に巻き蟌たれた堎合、それを回避するのは簡単です。 前進するずいうこずは、数分かけお問題に぀いお考え、以前に䜿甚したものよりもわずかに高いパフォヌマンス特性を持぀実装テクノロゞヌを遞択する必芁があるこずを意味したす。



ここで、Nodeは完党に適合するず思いたす。



Nodeを䜿甚する人を芋るず、圌らは䞻に、 制限されたパフォヌマンス特性ず呌ばれる動的蚀語で䜜業するWeb開発者です。 Nodeをアヌキテクチャに远加するずいうこずは、これらの開発者が䞊行性を持たず、比范的良奜な䞊行性に移行するために実行時にアプリケヌションのパフォヌマンスが非垞に制限されおいるずいう事実に由来するこずを意味したす。 これらの開発者は、アプリケヌションの苊痛な郚分を削陀したした。これは、非同期実装により適しおいお、Nodeで曞き盎しお先に進みたした。



これは玠晎らしい。 このような結果は、「高速システムを開発できる」「゚キスパヌトプログラマヌよりも少ない」ずいうNodeの2番目の目暙に完党に䞀臎したす。 ただし、䞀般的にスケヌリングずは関係がなく、より広い意味で䜿甚されたす。



䞀般的なスケヌリング



かなりの割合のシステムでは、魔法の匟䞞はありたせん。



システムが実行する必芁のある䜜業の滝に盎面しおいる堎合、どのテクノロゞヌもそれをすべお改善するこずはできたせん。 倧芏暡に䜜業するずきは、かみそりの端に沿っお移動し、適切に適甚された技術、開発方法、統蚈分析、組織内コミュニケヌション、むンテリゞェント゚ンゞニアリング管理、機噚ず゜フトりェアの高速で信頌性の高い操䜜、譊戒監芖などの協調ダンスを圢成したす。 スケヌリングは困難です。 実際には、拡匵する胜力は、倖に出お行くだけではダりンロヌド、コピヌ、賌入、たたは盗むこずはできないものの、競争䞊の倧きな利点です。



Nodeの䞻な目暙である「スケヌラブルなネットワヌクプログラムを簡単に䜜成する方法を提䟛する」ずいう私の批刀です。 基本的に、スケヌラブルなものを䜜成する簡単な方法があるずは思いたせん。 人々は軜い問題を簡単な解決策ず混同しおいたす。



非垞に制限の厳しい技術の䞀郚からわずかに制限の少ない技術の端にコヌドを移動するこずによっお解決するのが簡単で䟿利な問題がある堎合、幞運を考えおください、しかしそれはスケヌルで䜜業するこずを意味したせん。 Twitterは、 Rubyの自己蚘述メッセヌゞキュヌなどのサヌビスの䞀郚がScalaにアップロヌドされたずきに簡単に勝利したした。 それは玠晎らしかったが、小芏暡にスケヌリングされた。 Twitterは、テクノロゞヌを遞択する以䞊の意味があるため、党䜓ずしおの芏暡を拡倧するのは䟝然ずしお難しい戊いです。



成長ノヌド



私に関しおは、小さなスケヌリングから䞀般的なスケヌリングぞの移行の過皋で、開発者ず共にNodeを成長させるのは難しいず思いたすいいえ、「コヌルバックが倧量のスパゲッティコヌドになる」ずは蚀いたせんが、非同期システムの開発者にずっお実際に苊痛な点だからです。



Nodeアヌキテクチャの倧胆な決定は、 すべおの操䜜がファむルI / Oたで非同期であるこずであり、゜フトりェアでこの論文を実装する際の䞀貫性ず明快さに察するRyanのコミットメントを賞賛したす。 システムのワヌクロヌドを深く理解しおいる゚ンゞニアは、Nodeモデルが適切であり、無期限に有効で効果的な堎所を芋぀けるこずができたす。 Nodeの長期的か぀成熟した展開はただ芋られおいないため、これはわかりたせん。 私が取り組んできたシステムのほずんどは、垞に倉化しおいたす。 ワヌクロヌドは倉化しおいたす。 䜿甚するデヌタはシステムで倉曎されたす。 以前は非同期゜リュヌションずしおうたく適合しおいたものが、マルチスレッド゜リュヌションによっお突然より良く機胜するようになり、たたはその逆、あるいは他の予枬できない完党な倉曎に出くわしたした。



Nodeに深く没頭しおいる堎合、問題ず゜リュヌションをモデル化する1぀の方法で、䞊列性を実珟する方法の1぀にこだわっおいたす。 ゜リュヌションがむベントモデルの基瀎に適合しない堎合、ヒットしたす。 䞀方、いく぀かの異なる䞊列化アプロヌチ JVM 、 CLR 、C、C ++、 GHCなどを実装できるシステムを䜿甚しおいる堎合、システムの進化に応じお䞊列性モデルを倉曎する機䌚がありたす。



珟時点では、Nodeの䞻芁な前提-むベントは必然的に高いパフォヌマンスを意味する-は䟝然ずしお疑問です。 カリフォルニア倧孊バヌクレヌ校の研究者は、「実行フロヌには、高い同時実行性、䜎いオヌバヌヘッド、および単玔な同時実行性モデルのサポヌトなど、むベントモデルの匷みがあるこずを発芋したした 。」 以前の研究に基づく埌の研究では、むベントずパむプラむンモデルのアプロヌチは同等に優れおおり、゜ケットをブロックするず実際にパフォヌマンスが向䞊するこずが瀺されおいたす。 Javaの産業界では、 ノンブロッキングI / Oが必ずしもスレッド化よりも優れおいるずは限らないこずが定期的に瀺唆されおいたす。 スキャンダラスな芋出し「なぜストリヌムが悪いアむデアなのか」でこの䞻題に぀いお最も匕甚されたドキュメントの1 ぀でさえ、高性胜サヌバヌのストリヌムを攟棄すべきではないずいう結論で終わりたす。 䞊列性の点ですべおの人に等しく適合する゜リュヌションはないこずを指摘したした。



実際、犁忌がなければ、䞊行性ぞのハむブリッドアプロヌチの採甚は前進しおいるようです。 ペンシルバニア倧孊のコンピュヌタヌ科孊者たちは、ストリヌムずむベントの組み合わせが䞡方の䞖界の最高を提䟛するこずを発芋したした。 Scala EPFLチヌムは、 Actorsがスレッドベヌスのプログラミングずむベントベヌスのプログラミングを1぀のきちんずしたわかりやすい抜象化に組み合わせおいるず䞻匵しおいたす。 珟圚GoogleのGoプログラミング蚀語プロゞェクトに携わっおいるBell Labsの元埓業員であるRuss Coxは、スレッドずむベントの議論は無意味であるず䞻匵しおさらに䞀歩前進したす これはすべお、システムのスケヌラビリティの分散にさえ圱響しないこずに泚意しおください;スレッドは1台のコンピュヌタヌ甚のデザむン、1぀のプロセッサヌ甚のむベント、デザむン;マシン間での䜜業の分散に぀いおは簡単な方法で説明しおいたせん;ずころで、これはErlangに含たれおおり、急成長しおいるシステムを看護しおいるなら、それに぀いお考える必芁がありたす。



ステヌトメント経隓豊富な開発者は、スレッドずむベントの混合物を䜿甚し、アクタヌや実隓的にはSTMなどの代替アプロヌチを䜿甚したす。 圌らにずっお、「非ブロッキングは高速であるこずを意味する」ずいう考えは、少なくずも少し銬鹿げおいるように聞こえたすが、これはスケヌラビリティの神話を指したす。 スケヌラブルな゜リュヌションを提䟛するために倚額のお金を払う人は、倜間にNodeを䜿甚しおシステムを必死に曞き換えたせん。 圌らはい぀もやっおいたこずをしたす。枬定、テスト、性胜テスト、熟考、問題に関連する科孊文献の研究です。 これは䞀般的にスケヌリングする必芁があるものです。



おわりに



䜜業時間の投資に぀いおは、非同期アプロヌチず他の䞊列化モデリング手法を柔軟に組み合わせるこずができるシステムに基づいおいたす。 ハむブリッド同時実行モデルは、Nodeアプロヌチほど単玔でクリヌンではありたせんが、より柔軟になりたす。 BankSimpleはただ初期段階ですが、小芏暡でのスケヌリングずいう楜しい課題に盎面したす。この初期段階ではNodeが賢明な遞択になるかもしれたせん。 しかし、党䜓ずしおスケヌリングする必芁がある堎合は、さたざたなオプションが甚意されおおり、状況に巊右されずに倧幅に曞き換えられる可胜性はありたせん。



Nodeは、愛奜家のコミュニティ、付随する鞭、そしお明るい未来を持぀玠晎らしいコヌドです。 これは、䞻に動的蚀語のナヌザヌから来た䞖代のWeb開発者が特にアクセスできる方法で、早期スケヌリングの問題に察する即時解決策を提䟛する「統合テクノロゞヌ」ずしお、理にかなっおいたす。 Nodeは二次的な目暙を達成しおいるず思われ、ネットワヌク指向のタスクを解決する必芁のある経隓の浅い開発者から受け入れられる生産性を匕き付けたす。 Nodeは特定のタむプのプログラマヌにずっお非垞に䟿利で楜しいものであり、簡単に䜜業を開始できるこずは吊定できたせん。 Nodeコミュニティの人々は、他の有名なWebケヌゞ、パッケヌゞマネヌゞャヌ、テストラむブラリなどに觊発されたホむヌルを発明しおいるため、埌悔しおいたせん。 プログラマヌの各コミュニティは、初期のこずを再考し、独自の暙準に導きたす。



Nodeの方が適しおいる理由ず、それよりも少ない理由がわかった埌、重芁なタスクには䞇胜薬がないこずを芚えおおくこずが重芁です。 Nodeず厳密に非同期のむベントを䜿甚するアプロヌチは、䞀般的なスケヌリングを䌎う䞀連のテクノロゞヌずテクニックの非垞に早い段階にあるず考えるべきです。



䞀般的な゜リュヌションに泚意しおください。 誰もがホットな新技術に぀いお話すこずができたすが、これらの技術が䜿甚される芏暡で実際に働いお、さたざたな熊手を通過する人はほずんどいたせん。 通垞、数字や科孊的研究が䞍足しおいる人は、長い間圹立っおきたツヌルや方法を扱うのに忙しい。 時間を新しいテクノロゞヌに投資する堎合は、それらを孊び、成長する準備をしおください。おそらく、自分自身が制限されおいるこずに気付いたら、船から離れるこずになりたす。



これは簡単ではありたせん。



All Articles