FinLab - торговая платформа для Facebook

Приложение на Facebook для игры на Forex. Лучшие игроки получают денежные выигрыши.

Задача

  • Созданиефорекс-платформыс нуля
  • Оптимизация под высокие нагрузки и бесперебойная работа
  • Реализация в виде facebook приложения

Особенности проекта

Один из наиболее технически сложных проектов, который мы писали

  • Объем разработки 4000 рабочих часов
  • Сроки разработки 6 месяцев
  • Команда разработки 7 человек
  1. Дизайн в стиле крупных торговых платформ, ничего лишнего
  2. Интеграция с Facebook. Покупки внутри приложения: сервисы, аналитика, торговые новости, сувениры
  3. Подключение высокоскоростного источника реальных данных по котировкам
  4. Тщательное документирование всех аспектов разработки, включая API общения между клиентской и серверной частями, и инструкций для серверного администрирования

Техническая реализация

Подход к реализации

Проект реализован как одностраничное приложение на базе библиотеки Backbone.js.

Свой API

Написан API с хорошей документацией и песочницей (для тестирования методов API) для общения между клиентской частью и бэкендом.

Кеширование

Приложение мультиязычное, для каждого языка JS код собирается помодульно в один файл, который кешируется у каждого клиента. Этот подход увеличивает скорость загрузки при повторных обращениях.

Графики

Для построения графиков котировок на open-source решения была написана библиотека под нужды заказчика.

Многопоточное получение котировок

Подключение к высокоскоростному источнику данных по котировкам. Для максимально эффективного использования ресурсов сервера на Python написан многопоточный скрипт обработки с кешированием.

Для отображения данных по каждому временному интервалу создается свой поток через веб-сокет, и при входе нового клиента он подключается к одному из этих каналов, а не создает новый.

Базы данных

Две базы данных: PostgreSQL и MongoDB. Большая часть финансовой логики реализована как процедуры в PostgreSQL. Процедуры тестировались с помощью unit-тестов. MongoDB используется как хранилище логов для анализа и статистических данных поведения пользователей.

Выдача данных клиентам

Обмен данными между клиентом и сервером реализован через веб-сокет, как наиболее производительный метод работы с постоянным потоком данных.

Backend фреймворк

Backend реализован на MVC фреймворке Symfony2.

Нагрузочное тестирование

Нагрузочное тестирование с помощью Jmeter. Проверяли производительность и находили узкие места с помощью NewRelic.

Автотесты

Весь проект покрыт автотестами на Behat. Для тестирования клиентской части использовался Selenium.

Масштабирование

Реализовано автоматическое масштабирование. Проект разделен на модули для того, чтобы модули с большой нагрузкой можно было распределять между несколькими серверами. Процесс масштабирования максимально автоматизирован – используется решение PAAS Jelastic для вертикального и горизонтального масштабирования.

Технологии

  • PHP Python
  • require.js
  • Symfony2
  • Backbone.js
  • Sockets: redchet.php, autobahn.js
  • Queues: ZNQ
  • Testing: phpunit, behat/mink, selenium
  • Load testing: jmeter
  • Monitoring ofperformance: new relic
  • Postgresql, Mongodb
  • PAAS Jelastic

Facebook app

finigames.com

Другие проекты
Назад к портфолио