Tracks Flow
Компания
32,56
рейтинг
16 июля 2012 в 14:16

Разное → Tracks Flow изнутри

Что такое вложенный MVC? Как в одном проекте уживаются три бэкенд-сервера Node, php-fpm и IIS? Можно ли запустить музыкальный сервис на своем ноутбуке? И как вообще работает tracksflow.com изнутри?

Схема tracksflow.com


На старте проекта tracksflow.com стояла задача сделать музыкальный сервис, который:
  • будет брать контент и метаданные к нему из открытых источников,
  • будет иметь собственную базу пользователей с привязанными к ним плейлистами / лайками и прочим,
  • будет содержать социальные инструменты,
  • будет иметь несколько входов — веб / мобильные приложения,
  • сайт будет выполнен как web-приложение (никаких перезагрузок страниц, реализация части логики на клиенте).


На момент старта разработки у нас было:
  • 5 лицензий Windows server 2003,
  • 2 лицензии MS SQL Server 2008 (по лицензии на процессор),
  • система хранения файлов на php с клиентской библиотекой на C#,
  • три JS-программиста, один .NET программист два Objective-C программиста.


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


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

Отделять модель от представления будем с помощью API в формате REST — платформонезависимая технология, простая в реализации на всех клиентах.

Формат передачи данных — JSON. Тут возникли жаркие споры с iOS командой, но путем грубой силы заставили их работать с JSON — так удобнее большинству.

Было понятно, что работа с несколькими сторонними сервисами будет привносить в работу сайта и iOS приожения элемент случайности — никогда нельзя быть уверенным, что тебе что-то вернется и, если вернется, то когда. Нам также хотелось иметь единый формат передачи данных для всех сторонних сервисов. В этот момент и родилась идея использовать Node.js в качестве легкого MVC-контроллера, который будет асинхронно взаимодействовать с API сторонних сервисов, попутно приводя результаты в нужный вид.

Таким образом, у нас сложилась концепция MVC на уровне компонентов системы. Веб- и мобильные приложения выступали в роли представлений. Node.js — контроллер. .Net и сторонние сервисы — модель.
Единственное — vk.com пришлось привязывать напрямую в клиентах т. к. их API накладывает ограничения на количество запросов с одного IP-адреса, привязывает сессии к IP и вообще всячески пропагандирует реализацию методов работы с vk.com API на клиенте.

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

Далее оказалось, что использовать Node.js для проксирования запросов к собственному бэкенду на .Net не очень удобно — нода была явно лишним звеном и мы ее от этой работы избавили, направив запросы от клиентов к .Net бэкенду «напрямую» через nginx.
Да, все запросы шлем через нгинкс. Это избавляет нас от проблем с кросдоменными запросами, закрывает backend-серверы от прямого доступа. Также nginx позволяет в случае чего-то непредвиденного перенаправить запросы на другую сборку / сервер.

Что на чем написано?


Для хранения аватарок мы использовали проверенную временем систему на php, которая обеспечивала в fidel.ru хранение 120 Тбайт данных. Место под нее, конечно, уменьшили.

Бэкенд написан на 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-уведомлений о новых событиях.


Железо


Cейчас сервис tracksflow.com работает в облаке DataLine из трех виртуальных машин:
linux система с nginx + php-fpm + node.js. Характеристики 2 Гбайт памяти, 32Gb hdd, 1 ядро CPU Xeon 2.67GHz.
Windows Server 2003 IIS 6 с бэкендом на .NET MVC. Характеристики 2 Гбайт памяти, 60Gb hdd, 1 ядро CPU Xeon 2.67GHz.
Windows Server 2003 SQL Server 2008. Характеристики 4 Гбайт памяти, 250Gb hdd, 2 ядра CPU Xeon 2.67GHz.

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

Нагрузки


Не претендуем на high-load проект. Была нагрузка в 50 запросов в секунду при публикации позапрошлого поста в блоге — выдержали на пределе. Узким место стала пара join-ов, выполнявшихся Entity Framework'ом на стороне веб-сервера. Сейчас оптимизировали узкие места, протестировали — вышло около 500 запросов в секунду.

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

И, к слову, мы ищем супер людей в наш отличный офис на Красном Октябре.
Автор: @Andrey_Kuprikov
Tracks Flow
рейтинг 32,56
Компания прекратила активность на сайте
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Комментарии (33)

  • –4
    Инвайт получил, но не работает :(
    Не играет вообще ничего.
  • +1
    А можно попросить рассказать более подробно про использование Entity Framework: чем пользуетесь для профилирования запросов? Насколько доминирует Entity SQL над LINQ to Entities?
    • 0
      В целом мы стараемся писать очень простые запросы. Стараемся писать на LINQ to Entities. Есть пара сложных запросов с джойнами на Entity SQL — на нем получается понятнее. Совсем сложные запросы выносим в хранимки.
      Запросы отлаживаем в Managmant Studio предварительно получив текст запроса в VS.
      • 0
        Интересовало больше противостояние Entity SQL vs LINQ to Entities в свете производительности =)
        • 0
          А какая разница — все равно все в конечном итоге выполняется на СУБД. Производительность попутных операций парсинга и преобразования в объекты не столь существенна.
          Вообще, если говорить о производительности, то всегда стоит обращать внимание на время выполнения разовых запросов (скорость работы сайта без нагрузки) — мы за этим стараемся следить. Если частота запросов растет и это начинает сказываться на скорости работы, то используем кеш.
          • 0
            Разница во времени, необходимом на создание Object Service уровня. Написав Entity SQL, я подразумевал Entity SQL to Entity Client.
      • 0
        А почему не старые добрые процедуры?
        Как вы решаете задачу модификации группы объектов по заданным критериям? (например удалить неактивных пользователей)
        • 0
          С процедурами работать не очень удобно. Например при изменении списка параметров надо:
          1. Поменять код процедуры в Managment Studio
          2. Обновить Entity Data Model
          3. Внести соответствующие правки в код.

          Запросы править прямо в коде проще. Да и вообще мы стараемся делать только то, что действительно необходимо.
          Еще есть очевидный плюс в деплое — структура БД при нашем подходе меняется мало и не надо отслеживать изменения в БД. В случае с процедурами надо учитывать все правки и перенакатывать их на боевую СУБД в момент выкладки сайта.
  • 0
    Кстати клиент под Linux / Win не планируется?
    Мне удобно когда плеер в трее болтается, а не в браузере вкладка маячит.
    • 0
      Клиенты будут. Сейчас пытаемся понять какой функционал там будет.
  • +1
    Без привязки аккаунта ВКОНТАКТЕ толком послушать ничего не удалось :(
  • +2
    Нашел 5 треков, которые не мог найти ранее нигде. Это гууууд!!! Вот скачать бы их…
    • 0
      Если не секрет, что за треки?
      • 0
        Patti Boulaye -You Stepped Into My Life (Secret Button Bureau
        Brothers Johnson — Stomp (Yasumo

        и т.д.
  • 0
    Если мне не изменяет память, то вы хотели еще с juno сотрудничать… Не так ли?
    • 0
      Да, именно так.
      • 0
        Это радует! Буду ждать анонса! Еще раз спасибо за сервис!

        Кстати, если мне понравился трек, как я могу его скачать/купить? Будет ли инфа на этот счет?
        • 0
          Мы собираемся размещать линки на музыкальные магазины. С juno, кстати, будет именно так.
  • +1
    Сервис понравился, но программа на айфоне работает ужасно медленно.
    • 0
      Есть такой момент, но уже засабмитили апдейт. будет сильно быстрее
  • 0
    Вы молодцы. Ждем клиентов и трансформацию в спотифай для СНГ.
  • +3
  • 0
    Куда-то пропало окно комментариев в «связи с разработчиком», есть только окно email и надпись: «Опишите, пожалуйста, подробно суть проблемы или вашего предложения:» а место где писать нету!!!
    Mozilla Firefox 13.0.1
    • 0
      Ого, спасибо — сейчас исправим.
  • 0
    Сервис мне понравился. Правда, если не соединить аккаунт ВК, то много песен остаются без источника, поэтому и соединил аккаунт ВК, но и тут была проблема — если выйти из аккаунта ВК, то tracksflow пишет «подключите аккаунт ВКонтакте», учитывая то, что я его подключил, но вышел. У Аудиотории такая же ситуация, кажется это из-за API VK.

    И у меня такая проблема возникла. В приглашении даётся три ссылки (одноразовые). Я часто стираю куки/кэш, и уже последней ссылкой мз письма воспользовался. Как мне потом заходить на ваш сервис? Зарегистрировался, но входа нету, если кэш и куки стёр…не хочется лишаться доступа в сервису из-за обычной чистки кук/кэша.
    • 0
      С ВКонтакте часто возникают проблемы, поэтому в первоочередных планах у нас — расширение открытых источников контента.

      С инвайтами — временное решение на стадию альфа-тестирования. В ближайшее время система инвайтов будет переработана и вы отовсюду сможете получать доступ к серсису в любое время
      Пока можете писать письмо в support@tracksflow.com с указанием Логина на сайте и мы решим проблему инвайтов
  • 0
    Можно ли получить приглашение для регистрации?
    • 0
      Вчера вечером мы изменили систему инвайтов, авторизации и создания аккаунта. У администрации инвайтов больше нет, ищите инвайты у пользователей Tracks Flow.
      • 0
        То есть теперь я, как зарегистрированный пользователь, смогу заходить отовсюду без инвайтов?
  • 0
    Каким инструментом нарисована блок-схема?
    • 0
      Adobe Illustrator

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.

Самое читаемое Разное