アーキテクチャについて

投稿者
金曜日, 2008年5月23日金曜日

ここTwitter本社で働いている僕たちは、先週末にかけてあったTwitterのアーキテクチャに関する活発な議論について耳を閉ざしているわけではない。技術に詳しいTwitterユーザーたちにとって、Twitterが落ちている時間は、不具合の原因が何でどうやったらそれを解決できるかについて考えてくれる機会にもなったようだ。Twitterでいま起こっていることは僕にとっても非常に興味深いもので、連日の作業は苦ではない。

活発な議論のきっかけの一つは、「Twitter社がアーキテクチャが抱える問題について対処していないのではないか」という疑問を多くのユーザーが抱いたことにある。システムが落ちていたり、反応が鈍かったり、不安定だったり、といった不具合が今週のように頻繁に起こると、ユーザーは、僕らの技術開発が停滞しているのではないかと思うようだ。Twitterチームがこの1年間、こうした問題の解決に当たってきたのだから、システムが落ちるなんてことは本来起こるはずがないと思うのが、ユーザーの素直な気持ちだと思う。「もっと多くのマシンをつぎ込めなかったのか」ってね。

こうした疑問に対する僕らの答えは「まだ開発途上にある」というものだ。システムは進化しているし、1年前に比べればスケーラビリティは確実に向上している。でもまだ、信頼性や拡張性の面で十分スケーラブルなものにはなっていない。なぜかって?それは、僕らのゴールにたどりつくには、システムのさまざまな部分を書き直さなければならないからだ。

Twitterは、基本的にはメッセージングシステムだ。でもアーキテクチャそのものはメッセージングシステムとして設計されたものではない。効率を優先したため、現在のシステムは、コンテンツ管理システム(CMS)向けの技術やそれで培われた経験が基になっている。過去1年半にわたって僕らは、システムをできるだけメッセージングシステムとして動くように手直ししてきた。ところがその結果、システムが複雑になり、ときどき予想外の動作をするようになってしまった。危機モードになった場合にまずやることは解決の手がかりを得るために、現在のアーキテクチャ内部の相互動作を把握するための機能を加える作業だった。もちろん、これは最適な解決方法とはいえない。

僕らの向かっているのは要素ごとに、Twitterが成長するにつれて明らかになった要求仕様を満たすパーツに置き換えることによって、現在のシステムを刷新する方向だ。なかでも真っ先に優先すべきは安定性の確保だと認識している。そのために段階的に移行する予定を立てている。つまり、現在のシステムを維持しながら新しいパーツを開発し、完成したパーツごとに新しいものに置き換えていく。そうではない方法、つまりいまのシステムをすべて放り投げてまったく新しいものに置き換えるというやり方は、僕らのような小さなエンジニアリング・チームには難しい。

これからも僕らは、Twitterのアーキテクチャに関するユーザーの皆さんの議論に真摯に耳を傾けていくつもりだ。コミュニティからのポストの中で特に僕らが気に入ったのは、Twitterに似たサービスを実際に開発しようとしてくれたユーザーによるものだ。スケーラビリティに関するすぐれた知見の多くは、ソーシャル・メッセージング特有の問題解決には適用できない。うまく利用できそうな多くのできあいの技術も、よく調査をしてみると僕らの要求には応えられないことが分かった。いずれにしても僕らは、Twitterユーザーの技術コミュニティが、現在の問題を解決するためにさまざまな提案をしてくれていることに感謝する。でも、そう簡単に解決できないというのもまた事実なのだ。

コミュニティーでの議論が、僕らのモチベーションになっていることをぜひ知ってもらいたい。どうやったらシステムをより良いものにできるかについて夢中で考えている。そしてコミュニティの中から生まれるすばらしいアイデアを参考にしながら、僕らの進む方向をクリアにしている。ブログでTwitterのアーキテクチャについて情報を発信している人は、求人ページをぜひ見てほしい。Twitterをより良くするための一番の方法は、エンジニアチームに加わって一緒に仕事をすることだと思う。アイデアについて議論することも大切だけれど、言葉よりコードの方が多くを語るのだから。

(Twitter社の開発者ブログより)