Tracks flow зсередини

Що таке вкладений MVC? Як в одному проекті уживаються три бекенд-сервера Node, php-fpm і IIS? Чи можна запустити музичний сервіс на своєму ноутбуці? І як взагалі працює tracksflow.com зсередини?

Tracks flow зсередини


На старті проекту tracksflow.com стояло завдання зробити музичний сервіс, який:

На момент старту розробки у нас було:

Рішення, які ми прийняли на самому старті

Оскільки у нас планується кілька клієнтів і сайт буде виконаний у вигляді веб-додатки, ми будемо жорстко відокремлювати базу даних (модель) від уявлень.

Відокремлювати модель від уявлення будемо за допомогою API в форматі REST - платформонезалежна технологія, проста в реалізації на всіх клієнтах.

Формат передачі даних - JSON. Тут виникли запеклі суперечки з iOS командою, але шляхом грубої сили змусили їх працювати з JSON - так зручніше більшості.

Було зрозуміло, що робота з декількома сторонніми сервісами буде привносити в роботу сайту і iOS пріоженія елемент випадковості - ніколи не можна бути впевненим, що тобі щось повернеться і, якщо повернеться, то коли. Нам також хотілося мати єдиний формат передачі даних для всіх сторонніх сервісів. У цей момент і народилася ідея використовувати Node.js як легкого MVC-контролера, який буде асинхронно взаємодіяти з API сторонніх сервісів, попутно приводячи результати в потрібний вид.

У свою чергу у всіх клієнтських додатках і в .NET використовувався MVC як внутрішній патерн. Ось вам і матрьошка з MVC :)

Далі виявилося, що використовувати Node.js для проксінг запитів до власного бекенд на .Net не дуже зручно - нода була явно зайвою ланкою і ми її від цієї роботи позбавили, направивши запити від клієнтів до .Net бекенд «безпосередньо» через nginx.
Так, всі запити шолом через нгінкс. Це позбавляє нас від проблем з кросдоменнимі запитами, закриває backend-сервери від прямого доступу. Також nginx дозволяє в разі чогось непередбаченого перенаправити запити на іншу збірку / сервер.

Що на чому написано?

Бекенд написаний на ASP.NET MVC 3. У роботі над попередніми проектами зв'язка horosho з .NET MVC 3 показала себе з хорошого боку - REST API робиться легко і красиво. Для доступу до БД використовується Entity Framework 4.2 beta.

Мобільний (iOS) додаток написано силами newonder нативними засобами. У додатку реалізовано багато цікавих елементів: меню навігації, розкривається по змахування; змахування елементів таблиці; система міграції моделей даних. Додаток вже в AppStore.

Клієнтська частина сайту реалізована vmkcom з використанням MVC за допомогою зв'язки backbone.js + underscore.js. Роутінг здійснюється на основі pushState і використовує history API в тих браузерах, де підтримується, в інших - хештеги.
За роботу з DOM відповідає старий добрий jQuery.
З цікавих особливостей:

  • ми використовуємо HTML5 / Flash / SilverLight плеєр mediaelement.js, який автоматично визначає підтримку в браузері того чи іншого кодека і запускає потрібний плагін для відтворення,
  • Використовується зв'язка socket.io з Node.js для відправки push-повідомлень про нові події.

Разом на весь сервіс 4 ядра, 340 GB Hdd, 8 Гбайт пам'яті: tracksflow.com можна сміливо запускати на ноутбуці :)

Схожі статті