Node.jsの作成者:「サーバーの場合、Go以外の言語は想像できません」

Node.jsの作成者であるRyan Dahlとのインタビューからの抜粋の翻訳。プログラミングモデルとGo言語について説明しています。



-Nodeの初期開発がどのように進んだか教えてください。 すでにかなり前のことでしたが、2009年にNodeを作成しました。



ライアン :-個人的には、彼らが言うように、あなたがフローにあり、あなたが強く信じているという考えを持っているとき、人生でより良い瞬間はないと思います。 そして、座って実際に作業する時間があります。 そして、Nodeは誰かがそれをつかむのを待っていたまさにそのようなアイデアであり、もしそれが私のためでなければ、他の誰かがそれをしたでしょう。 しかし、たまたま仕事からかなり自由になり、時間がありました。そして、最初のバージョンをロールアウトするのに必要な数か月間、ノンストップで仕事をすることができました。 そう、それは素晴らしい時期でした。



-すごい、すごい。 Nodeは、「完全に非同期な」プログラミングモデルのアイデアに基づいて構築されています。 Nodeで成功しましたか?



ライアン :-はい、これは非常に興味深い質問です。 数年間、私はNodeで作業していません。まあ、2012年か2013年のどこかです。そしてもちろんNodeは今日の大きなプロジェクトです。 そうです...彼女が出てきたとき、私は周りを回って会議で話し、人々に彼らがすべきであると納得させようとしました...多分私たちはI / Oサブシステムを完全に間違っていると、おそらく誰もがノンブロッキングですべてを始めたならスタイルを使用すると、Nodeでのプログラミングにおける膨大な数の問題を解決できます。 たとえば、スレッドを完全に忘れて、プロセスの抽象化とそれらの間のシリアル通信のみを使用することができます。 しかし、1つのプロセスで、一度に多くの要求を完全に非同期で処理できます。 当時私はこのアイデアを熱心に支持していましたが、数年後、これがプログラミングのすべての問題を解決する最良のアイデアではないことに気付きました。 特に、Go言語が出てきたとき...より正確には、Goはずっと前に出てきましたが、私がそれについて初めて聞き始めたとき、それは2012年のどこかで、彼らは実際に非常に素晴らしいランタイムを持っていました。 「グリーンストリーム」」と、彼らは実際にそれらの周りに抽象化を構築し、I / Oを再びブロックすることを考え始めました-よく、引用符で「ブロック」-それは再び「グリーンストリーム」... Goとオペレーティングシステムの間で、本質的には、まだノンブロッキングI / Oです。



しかし、ユーザーに提供するインターフェイスは依然としてブロックされており、実際にははるかに便利なプログラミングモデルを提供しているように思えます。 また、ブロックされている場合、多くの場合、実際に何をしているかをより明確に理解できます。 まあ、それは一種のようです、あなたがいくつかのアクションを持っているなら、あなたがそう考えることができればそれは良いことです。 次に、Bを行い、答えを待ち、エラーを確認します。 Nodeでは、このために別の関数の呼び出しにジャンプする必要があるため、はるかに複雑です。



-はい、Goのプログラミングモデルも気に入っています。 ゴルーチンを使用する方がはるかに簡単で楽しいです。 ところで、分散システムにはGo at Workも使用します。



ライアン :-はい、サーバーなどの特定のクラスのアプリケーションでは、サーバーを作成する場合、Go以外の言語は想像できないと思います。 一般に、Nodeのノンブロッキングパラダイムは、スレッドがないJavaScriptで非常にうまく機能しました。 そして、あなたがやっていることを完了するためにたくさんの異なる関数に飛び込む必要があるときのコールバック地獄の問題の多くは、最近ではJavaScriptを使っているので、最近ではかなりうまく解決されていると思います。 つまり、新しいバージョンのJavascriptを使用すると、作業が少し楽になります。 このすべてを考えると、Nodeは大規模なWebサーバーに最適なシステムではないと言うでしょう。これにはGoを使用します。 そして、正直なところ、これがNodeを離れた理由です。 それは認識でした。ああ、まあ、本当に、これはサーバーソフトウェアに最適なシステムとはほど遠いです。



はい、Nodeはクライアント側で実際に、奇妙なことに十分に表示されたと思います。 ウェブサイトを構築するためのスクリプティング、ブラウザ化、またはクライアント側のJavascriptコードのバンドルなど。 さて、またはクライアント側のJavastiptコードを処理するこのサーバー側の部分をすべて行うことができます。 そして、ご存知のように、純粋に開発用の小さなサーバーがあちこちに存在する可能性があり、実トラフィックを受信する実稼働サーバーが存在する可能性があります。 ノードが役立つ場合もあれば、単に選択する場合もあります。 ただし、分散DNSサーバーを作成している場合は、ノードを選択しません。



All Articles