クレジット:
クレジット:
Gowalla は Ruby ショップであり、その特定の船の船長として、Raymond は Ruby on Rails を使用して人気のある Web アプリを一から構築した豊富な経験を持っています。
最近の電子メールインタビューで、私たちはレイモンドがこれらの経験について何を語ったのか、そして過去 3 年半にわたってそこから何を学んだのかを知りました。
スケーリングに関して、Ruby/Rails の認識されている欠陥については多くのことが言われています。あなたの経験の中で、この言語とフレームワークを使用し、全国の消費者向けにアプリを拡張しようとする際に特有の課題は何ですか?
「Rails ではスケールできない」というノイズのほとんどは時代遅れであるか、そもそも間違った方向に導かれていました。一般に、スケーラビリティの問題は、言語やフレームワークのレベルではなく、アーキテクチャとシステムのレベルに当てはまります。
そうは言っても、言語とフレームワークには、考慮する必要のあるパフォーマンスと効率の特性があるのは確かです。 Ruby の標準インタプリタは高速であるという評判はあまり高くありませんが、大規模で適切に設計されたシステムの一部としてボトルネックになることはほとんどありません。
したがって、人気のあるサービスの開発者としては、どのアクションが最も頻繁に要求されるか、どのデータ タイプが最も急速に増加するか、どのアクションがパフォーマンスに最も敏感かを予測することが課題となります。私の経験から言えば、こうしたことを予測するのは思っているよりも難しいです。私は、問題にならなかったアプリの部分を「事前スケール」するのに何時間も費やしてきましたが、これがメンテナンスの頭痛の原因となることがよくあります。
みなさんは、アプリのために大量の位置データを収集して保存しています。このタイプのデータをこの量で処理するには、Ruby と Rails をどのように使用しますか?
当社では、さまざまな目的に応じてさまざまなストレージ システムを使用しています。私たちの最大のデータベースは PostgreSQL です。現在、ユーザー、スポット、チェックインなど、ほとんどのデータの正規レコードが保存されています。
また、友情、カウンター、キューなど、あらゆる面で Redis に大きく依存しています。一時的なものには memcached を、HTTP キャッシュには Varnish を、あいまいなスポット検索を高速に保つために Solr を使用します。
アクティビティ フィードや監査ログなど、多くのストリームのようなデータを保存するために Cassandra を使用することが増えています。今年は Cassandra の使用が大幅に増加し、データをより深く理解するために Hadoop にも依存し始めると予想しています。
以下は、Cassandra がサポートする Chronologic と呼ばれるカスタムビルドのタイムライン サービスを使用して、チェックインを保存および取得する方法の簡略化された例です。
Ruby でコーディングしていないときは、他にどのような言語やツールを使用しますか?あるいは、Gowalla で別の言語を選択しなければならないとしたら、何になりますか?
最近、仕事でコーディングしているときは、たいてい iOS クライアント上で作業しています。そのため、ほとんどの時間を Cocoa/Objective-C に費やしています。
しかし、サーバー側の作業に関しては、よりサービス指向のアーキテクチャに徐々に移行していると思います。私たちは現在、常にアプリケーションを観察し、独自のデータ ストレージと展開パターンを持つサービスに分離できる機能の部分を特定しようとしています。これまでのところ、これらのサービスはすべて Ruby で書かれていますが、そのうちのいくつかが Scala で書かれることになったとしても、私は驚かないでしょう。Node.js、または他のもの。しかし、gowalla.com を動かす中心的な Web アプリケーションに関して言えば、私はそれが Ruby/Rails であることに非常に満足しています。
以下は、Gowalla iPhone アプリケーションのビュー コントローラーの 1 つのセクションです。このコードは、サードパーティのサービスによる認証を処理します。
からツイッター経由のファン: 従来の ActiveRecord モデリングで十分でしたか、それとも NoSQL の代替を使用する必要がありましたか?
私がこれまでに取り組んできたすべての Rails アプリは、ある時点で、アプリの一部で「ActiveRecord 方式」から脱却する必要がありました。しかし、それは一か八かの質問ではありません。ほとんどの場合、標準的なリレーショナル/ActiveRecord アプローチは完全にうまく機能し、Rails のゴールデン パスに従う利便性は完全に価値があります。ただし、ほとんどの興味深いアプリでは、標準ツールが機能しなくなる箇所が少なくともいくつかあり、別の方法でデータにアクセスする必要があります。
幸いなことに、今は代替データ ストアにとって素晴らしい時期です。 Heroku アドオン ページに目を通すと、Redis、MySQL、CouchDB、Memcache、MongoDB、Solr などがあり、すべてホストされたサービスとして利用できます。事前のインストールや構成を気にせずにこれらのツールをいじることができるのは、信じられないほど自由です。
2 番目の質問の例は、その典型的な例です。リレーショナル データベースを使用してアクティビティ ストリームをかなりリアルタイムでスケーリングするのは難しいです。1 人のユーザーに数百万人のフォロワーがいる場合、または 1 人のユーザーが他のユーザーを何百万人もフォローしている場合、失敗することがよくあります。これを機能させるために、あらゆる種類のタイムラインを管理し、比較的単純なインターフェイスを Rails アプリケーションに公開する Chronologic というサービスを作成しました。 Chronologic は内部的にはストレージの大部分に Cassandra を使用しています。
使用している場合、どのような種類の宝石検査を使用していますか?
Ruby/Rails コードのテストには、Shoulda、Factory Girl、FlexMock を使用します。各コミットの後、ローカルの継続的インテグレーション サーバーがテスト スイートを実行し、失敗があれば Campfire 経由で開発者に通知します。
あなたは現在どのようなサイドプロジェクトに取り組んでいますか?
最近の私の「サイド」プロジェクトのほとんどは、仕事に関係したもので、新しいデータベースやライブラリについて学ぶための小さな実験、新しい Web サービスを試すため、または新しい技術の概念実証として行われます。私の仕事には、iPhone クライアントの何十もの小さな書き直しが散りばめられており、それぞれが新しい UI アイデアやネットワークの最適化などを検討しています。
Rackspace がサポートするシリーズ
クレジット:
のウェブ開発シリーズによってサポートされていますラックスペース、ホスティングを行うためのより良い方法。 Web ホスティングの稼働時間を心配する必要はもうありません。パッチの適用、更新、監視、データのバックアップなどの最新情報を維持するために時間、エネルギー、リソースを費やす必要はもうありません。その理由を学びましょう。
Mashable のその他の開発および設計リソース:
-方法: ブログを WordPress.com から WordPress.org に移行する [ビデオ]