FinLab – платформа для трейдинга на Facebook

Задача
Создание
форекс-платформы
с нуля
Оптимизация под высокие нагрузки и бесперебойная работа
Реализация в виде facebook приложения
Задачи
Особенности проекта
Один из наиболее технически сложных проектов, который мы писали
Объем разработки
4000
рабочих часов
Сроки разработки
6
месяцев
Команда разработки
7
человек
Дизайн в стиле крупных торговых платформ, ничего лишнего
Интеграция с Facebook. Покупки внутри приложения: сервисы, аналитика, торговые новости, сувениры
Подключение высокоскоростного источника реальных данных по котировкам
Тщательное документирование всех аспектов разработки, включая 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 для вертикального и горизонтального масштабирования.

FinLab
Технологии

PHP
Python

require.js

Symfony2

Backbone.js

сокеты:redchet.php,
autobahn.js

очереди:ZNQ

тестирование:phpunit, behat/mink,
selenium

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

мониторинг
производительности:
new relic

Postgresql,
Mongodb

PAAS Jelastic

  • PHP
    Python

    require.js

    Symfony2

    Backbone.js

  • сокеты:redchet.php,
    autobahn.js

    очереди:ZNQ

    тестирование:phpunit, behat/mink,
    selenium

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

  • мониторинг
    производительности:
    new relic

    Postgresql,
    Mongodb

    PAAS Jelastic

< >