Как я разрабатывал сервис воспоминаний
1 февраля 2014 Tuffle 9546 просмотров
Речь пойдет про мой основной проект Tuffle.com, который я и наша команда разрабатываем уже год. Думаю, из этого выйдет целый цикл статей, так как проделано и делается многое. Начну с представления проекта, основных концепций, подходах. И со временем будем углубляться в техническую сторону.

Идея

Так что же такое Tuffle? Это копилка воспоминаний, которые являются ключевым объектом этого сервиса. Из воспоминаний уже строятся другие объекты. Память - это профиль в Tuffle, может быть как индивидуальной так и коллективной, т.е. память двух и более людей, в которой можно отследить пересечения с другими людьми. Хронология - так называемый альбом жизни с воспоминаниями в хронологическом порядке. Связи - это люди, с которыми вы когда-либо пересекались, тут концепция Tuffle сильно отличается от других социальных сервисов. Тем, что тут нет добавления друзей. С человеком можно установить связь, если создать с ним общее воспоминание. А раз воспоминания общие, то и управлять ими можно коллективно. Помимо всего этого в Tuffle присутствуют основные социальные возможности, которые уже не являются ключевыми, но имеют важную роль в инфраструктуре проекта.

Технический обзор

Тут я выделю, из чего технически состоит Tuffle. Начинали мы с основного сайта. Далее создали отдельную версию для мобильных устройств. Когда-то всё это было на одном облачном сервере, но проект нацелен на Highload, поэтому лучше сразу переходить на более расширяемое и независимое решение. Вообще, серверная часть Tuffle тянет на отдельную статью. Тут я перечислю коротко, что у нас есть: 2 сервера для приложения с load balancer, 2 сервера для mysql с master-slave репликацией, сервер для изображений, сервер для видео, сервер для аватаров, сервер для MongoDB. Так как мы оперируем иногда с приватным содержимым (да, воспоминания могут быть приватными), то всё работает через https. Есть небольшой блог на Wordpress. Совсем скоро выйдет в свет приложение для iOS. Поэтому у Tuffle есть API, пока оно приватное, но в планах сделать его публичным.

Backend

Мы используем давно ставшую стандартом схему LAMP, но модифицированную. Например, у нас на входе стоит Nginx, который занимается статикой, а Apache работает с динамикой. Но до Nginx еще есть load balancer, который определяет, какой сервер менее нагружен, чтобы отправить запрос на него. PHP версии 5.4, Zend Framework 1.12.0. MySQL 5.5, которому помогает MongoDB для избежания множества JOIN’ов, счетчиков и т.д. На серверах стоит Debian 7. Код лежит на GitHub в приватном репозитории. Насчитано более 5000 коммитов за время существования проекта. С видео работает библиотека FFMPEG.

Frontend

Мы - современные ребята, поэтому только HTML5, только хардкор. Всякие старые IE, Оперы мы не поддерживаем. Активно используется CSS3, компилится всё из LESS. Пока для работы с DOM используем jQuery, каких-либо MVC штук не используем, говорю же, хардкор. Стараемся использовать SVG-графику. Например, в мобильной версии все иконки в SVG.

Локализация

Сначала Tuffle был только на русском языке. Недавно мы реализовали систему локализации, начали с английского. Язык определяется по системным настройкам или в некоторых случаях по IP, также его можно изменить в настройках. Реализовано стандартными средствами Zend_Translate, используя адаптер gettext и утилиту POEdit.

API

Обычное REST-API, для авторизации используется OAuth 2.0. В процессе разработки нашли один удобный инструмент - apiary, где и храним документацию. Там же можно настроить запуски API-методов на тестовом окружении. Сейчас используется только приложением iOS.

Командная работа

В проекте принимают участие 7 человек. Автор проекта Эдуард Бабарико, дизайнер Игорь Гамаюнов, верстальщик Максим Лобович, ios-разработчик Дмитрий Дулеба, 2 маркетолога и я, backend-frontent программист. Весь рабочий процесс фиксируется в Jira.

Думаю, этого достаточно, чтобы понять с чем мы имеем дело. Но я всё же хотел бы углубиться в техническую составляющую. Поэтому ждите нового материала. Буду очень рад предложенным темам.

И да, записывайте воспоминания с Tuffle.com.