foursquare のソフトウエアスタック
4sq のアバウトページに 4sq のシステム構成が割りとガチに書いてあるらしいので読んでみた.
サーバ構成
- EC2
- CentOS
- nginx でリバースプロキシ. リクエストを static なものとそうでないものに振り分け
- HAProxy でロードバランス
データストア
- live site data (?) は MongoDB に保存
- memcached でキャッシュ
- オフラインでのデータ解析は, 定期的にデータを Hadoop クラスタにインポート
- 基本的に Hive
- Solr と Elasticsearch で検索. 位置, Tips, ユーザ, イベントの検索に.
- geo-indexing 検索は Google s2 library, サーチインデックス内に cellid を保管 (?)
- PostGIS と geonames.org のデータセットで geocode address を座標に変換
- Kestrel を非同期タスクのためのキューとして使用
- 写真は Amazon S3 に保存して Akamai で配信
アプリケーションフレームワーク
- Web サイト, API, バッチの多くは Scala
- サイトと API は Lift web framework
- ビルドの自動化やデプロイ, オペレーションの自動化には Python や シェルスクリプト
- フロントエンドは Backbone.js + jQuery + Soy (templating)
地図データ
- 地図データは MapBox と OpenStreetMap のデータ
Refs
- Amazon Elastic Compute Cloud (Amazon EC2)
- www.centos.org - The Community ENTerprise Operating System
- nginx
- HAProxy - The Reliable, High Performance TCP/HTTP Load Balancer
- MongoDB
- memcached - a distributed memory object caching system
- Welcome to Apache™ Hadoop™!
- Welcome to Hive!
- Apache Lucene - Apache Solr
- elasticsearch - - Open Source, Distributed, RESTful, Search Engine
- s2-geometry-library - A Library for Spherical Math - Google Project Hosting
- PostGIS : Home
- GeoNames
- robey/kestrel
- Amazon Simple Storage Service (Amazon S3)
- アカマイ:ウェブアプリケーションの高速化、パフォーマンス管理、ストリーミング・メディア・サービスならびにコンテンツデリバリーにおけるグローバルリーダー
- Lift :: Home
- The Scala Programming Language
- jQuery: The Write Less, Do More, JavaScript Library
- Backbone.js
- Closure Tools — Google Developers
- MapBox
- OpenStreetMap