Mar 17, 2013 16:34
На чем построена система foursquare?
В связи с нашим довольно стремительным ростом мы разработали максимально гибкий и масштабируемый программный стек. Это позволило нам увеличить количество пользователей с нескольких сотен до более пятнадцати миллионов, а также привлечь большое количество великолепных инженеров, готовых делать свой вклад в развитие нашего сервиса.
В настоящее время foursquare размещается на веб-сервисе Amazon EC2 с использованием сотен серверов с сокращенной версией CentOS Linux. Маршрутизация запросов и обработка статичного контента осуществляются NGINX, а распределение нагрузки веб- и API- запросов на сервера осуществляет HAProxy.
А сейчас - самое интересное. Оперативные данные сайта, хранятся в MongoDB (хотя мы также используем Memcache для кэширования группы ресурсоёмких вычислительных процессов). Мы регулярно делаем срезы оперативных данных для проведения оффлайн-анализа и импортируем их в кластер Hadoop. Часть специальных вычислений производятся в MapReduce, однако для большей части вычислений используется простой синтаксис запросов Hive и специально разработанный планировщик заданий. Поиск заведений, подсказок, пользователей и событий реализован на Solr и Elasticsearch. Поиск по гео-индексам использует библиотеку s2 от Google для хранения идентификаторов ячеек в поисковом индексе. Мы используем PostGIS и набор данных от geonames.org для конвертации гео-индексов в координаты, что позволяет нам размещать заведения на карте и включать их в результаты геолокационного поиска. Для обработки асинхронных задач вне очереди пользовательских запросов, мы используем Kestrel. Пользовательские фотографии хранятся на Amazon S3, а доставка контента происходит через Akamai. Конечно, если углубиться в детали, все будет несколько сложнее, но здесь изложено самое главное.
Почти весь код сайта, API и пакетные задания написаны на языкеScala. Веб-часть и API созданы на фреймворке веб-приложений Lift. Мы также используем Python и Bash для автоматизации операционных задач, процессов разработки и внедрения. Наконец, динамическое содержание сайта написано на языке javascript с применением jQuery и Backbone.jsдля моделей объектов и Soy для шаблонов.
Мы используем карты от MapBox, созданные на основе данных проекта © OpenStreetMap, и распространяемых по лицензии CC-BY-SA. Наши интерактивные карты созданы при помощи библиотеки с открытым кодомLeaflet.
на чём построена foursquare