UTALI

みんなの役に立つ情報をどんどん公開していきます

TwitterはScalaを捨ててNode.jsに移ったそうです。

f:id:mochizuki_p:20161005031521j:plain

世界で最も大きなトラフィックを捌いているサービスの1つであるTwitterはそのバックエンドをScalaで独自開発したフレームワーク(Finagle)を採用していましたが、ここ数ヶ月の間にこれをNode.js(Express)に置き換えたそうです。

以下はTwitterのエンジニアであるNicolas Gallagherさんのツィートより

github.com

本日をもってTwitterのモバイルWeb版のトラフィック(たくさん)を僕たちの新しいWebスタックに移行した。つまり、Node.js、ExpressそしてReact Progressive Web Appだ。

このJavaScriptのスタックは今から9ヶ月前から実運用に入っていた。ログイン済みのモバイルWebユーザー向けにね。

2年の間、ログインしていないユーザーのトラフィックはScalaとGoogleのClosureテンプレートを中心に捌いていた。

数ヶ月間にCharlie Croomがログインしていないユーザーのトラフィックの一部をJavaScriptのスタックに置き換える実験を始めた。

今週にはJames Bellenger(僕たちのチームのNode.jsの帝王)が残りのログインしていないユーザーのトラフィックをScalaからJavaScriptに移行した。

個人的な意見ですが、Scalaは美しい仕様を持つ素晴らしい言語ですが、関数型+オブジェクト指向という特徴から、学習コストが高すぎると感じました。そして実運用をするには、それに加えてJavaのライブラリの知識やJVMのパフォーマンスに気を配る必要があります。つまり、面倒すぎる言語なのでしょう。

一方でNode.jsはチープなマシンでも高いパフォーマンスが出せるような設計になっており、何よりJavaScriptであることからフロントエンドと使用する言語を共通化できるという利点があります。

これについてはTwitterのエンジニアでもある James Bellengerさんも

Node.jsは今まで致命的な問題が発見されたことはなく、そしてサーバーと同じコードで動作させることができるという利点はとても大きい。

これには、Twitterの特殊事情がありそうで、REST APIがjson形式でデータをやり取りしていることから、そのパースにかかる計算コストが大幅に削減されたことがありそうです。JSONはJavaScriptのデータ型そのものですからね。

Node.jsの導入による最高の収穫はTwitterのRest APIの性能の改善だ。それに加えてたくさんの収穫がある。

総合すれば、JSONのパースにかかる時間の削減がとても効果的だった。graphQLの導入も視野に入れているよ

とにかく秒間10万アクセスにも及ぶ大量のトラフィックを捌いているTwitterがNode.jsを採用したことで、またNode.jsの優位性を証明する結果になりました。