Pull to refresh

Как мы пишем веб-сервис для миллиарда пользователей

Reading time6 min
Views9K
IT-директор проекта BeSmart.net Максим Модель про работу над глобальным обучающим сервисом

image

Наша команда работает над проектом BeSmart. Сейчас у нас девять программистов, включая IT-директора, то есть меня самого (само собой, есть дизайнеры, маркетологи и другие специалисты — всего более 20-ти человек). Мы работаем в белорусском Витебске, известном в России по фестивалю «Славянский базар».

BeSmart.net — это сервис для размещения обучающих лекций в формате видео, аудио и PDF, которые, как мы надеемся, со временем будут смотреть по всему миру. Амбиций много, но пока мы отставим их в сторону и расскажем, какие две цели стоят перед нами, разработчиками, и как мы их выполняем.


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

Вторая цель — защитить контент по максимуму. Конечно, мы понимаем, что защитить информацию в интернете сейчас достаточно сложно, если вообще возможно. Но все же мы намерены максимально усложнить, а по возможности — воспрепятствовать не санкционированному доступу к лекциям, размещенным в нашей системе.

Сейчас я опишу технологии, которые мы применили для решения обеих задач.

Какой язык программирования мы выбрали

Ядро системы мы разрабатываем на С++, который, как и любой язык, не лишен недостатков. Главный из них — это длительные сроки разработки. Программы на C++ не пишутся, а проектируются. Сначала разрабатывается архитектура будущего приложения, и только после этого наступает этап разработки. Конечно, такой подход не является обязательным, но он значительно облегчит сопровождение и развитие проекта в будущем.

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

Второй недостаток (он же влияет и на первый) — это недостаток готовых решений, особенно в области web-разработки. Если, например, для PHP их много, то для С++ их практически нет. Многое приходится делать с нуля, и BeSmart.net — на 90% «самописный» продукт.

На работу ушло больше двух лет. В марте 2012 года началась подготовка ТЗ, которая продлилась до мая. Потом началась разработка ядра проекта, которая продлилась до ноября 2012 года. В мае 2013 годамы начали разрабатывать собственный файловый сервер. И только в октябре 2013 года проект вышел на точку коммерческого использования — появилась возможность пользоваться сайтом полноценно.

Что общего между нами и Facebook

Как вы уже поняли, мы осознаем, что писать код на С++ довольно сложно и долго. Но теперь обратимся к достоинствам С++, за которые мы этот язык и выбрали. В первую очередь, это возможность получения готового эффективного компилируемого кода, что невозможно или крайне затруднительно на других платформах. Это очень важно для высоко нагруженных проектов.

Код преобразуется программой-компилятором (мы используем компилятор GCC) в машинный, понятный только компьютеру, после чего компьютер его исполняет. Скорость обработки запросов пользователя будет выше. Когда тысячи или даже миллионы человек одновременно будут использовать сервис, информацию они получат быстро, а физической мощности серверов для этого потребуется меньше, чем могло бы.

Facebook был написан на PHP, но впоследствии Цукербергу потребовалось снизить нагрузку на серверы: когда у тебя миллионы пользователей это даст существенную экономию. Тогда Facebook написал собственный софт — HipHop, который переводит PHP в С++ и сразу компилирует его в машинный код. Однако не все PHP-скрипты можно перевести, и Facebook перешел на С++ лишь частично.

Программисты «Вконтакте», насколько нам известно, до сих пор пишут код на PHP, но делают это сознательно. Сначала новые функции «Вконтакте» быстро пишутся на PHP, потом тестируются, и если они работоспособны — переписываются на компилируемом языке программирования (год назад Павел Дуров анонсировал собственную разработку — KPHP).

У нас все изначально написано на С++, и это показатель серьезного проекта. Когда мы только начали работу надBeSmart.net, мы встречались с «айтишниками» из других проектов, и один из них у меня спросил: «Ну как дела? Чем занимаешься?» Я говорю: «Вот, будем делать приложение на С++». На что мой приятель ответил: «Вы собираетесь миллиард человек обслуживать что ли?» Я сказал: «Да, собираемся обслуживать миллиард».

Где мы храним данные пользователей

Пока миллиарда лекторов и слушателей у нас нет (кстати, вы можете приблизить нашу цель, и загрузить какую-нибудь лекцию на BeSmart.net). Но мы уже готовимся хранить большие объемы мультимедийной информации. Хранение нужно сделать безопасным, и это наша вторая большая цель. Для этого у нас есть и программные, и аппаратные решения.

Мы арендуем серверы в двух дата-центрах: один находится в Москве, второй — в Гонконге. Сейчас мы ведем переговоры об аренде серверов еще и в одной из европейских стран. Информация на серверах дублируется. В зависимости от того, из какого места в мире будет сделан запрос, контент будет отдаваться с ближайшего к пользователю сервера.
Конечно, мы знаем о существовании компаний, которые оказывают услуги CDN, которые делают то же самое, но на аутсорсинге. Но в том-то и дело, что мы не пользуемся услугами других компаний. Мы ведь сами ручаемся за сохранность всех данных на сайте.

Также мы сами написали свой собственный асинхронный файловый сервер (отвечающий за хранение софт) на языке С++. Его особенность в том, что он выдает пользователям контент не с серверов, а из нашей локальной сети.
Здесь нужно пояснить: помимо серверов с программной частью сервиса BeSmart.net, у нас есть отдельные сервера с данными пользователей. Они объединены в локальную сеть, которая непосредственно к интернету не подключена. К этой локальной сети и обращается файловый сервер, когда выдает контент пользователям сайта. По сути, это одна связка серверов внутри другой. Таким образом, данные лучше защищены от взлома.

Так хранятся данные в Besmart.net

image

ДЦ — центр обработки данных;
Cluster Web — кластер веб-серверов для приема и обработки заказов от пользователей;
Cluster FS — кластер серверов доступа к файловым ресурсам проекта (download и upload контента);
GW — шлюз, образующий защищенный канал для объединения внутренних сетей разных дата-центров Besmart.net в единую сеть (используется для создания распределенной сети хранения данных и их репликации).


Как мы защищаем авторский контент

Сайт принимает лекции от пользователей во всех популярных видео форматах. Но хранятся они в формате MP4, и при просмотре пользователи получают их по протоколу HLS (HTTP Live Streaming), разработанному компанией Apple. Потоковое видео отдается не целым файлом, который постепенно проигрывается на компьютере из кэша, а фрагментами по 10 секунд. Некоторые браузеры, отображая видео, сохраняют эти кусочки в кэше, некоторые — не сохраняют, но в любом случае технология усложняет работу пиратам.

Весь контент, который пользователи загружают на сайт, мы помечаем водяным знаком («вотермарком»). Конечно, его использование не спасет от нелегального распространения видео, но обозначить свои права на него, в общем, не такая уж и бессмысленная затея. По крайней мере, убрать наши лекции с площадок, которые находятся в правовом поле, точно будет проще.

Чтобы пираты не могли легко избавиться от «вотермарка», мы сделали его динамическим — логотип BeSmart.net медленно плавает по картинке, меняя траекторию. Во время сохранения роликов на серверах происходит процесс обработки: записи разбираются на аудио и видео дорожки, на них накладывается «вотермарк», после чего дорожки собираются снова. В итоге, траектория движения «вотермарка» в кадре всегда разная. Чтобы разделять аудио и видео дорожки и объединять их обратно, мы написали свой софт. А для покадрового сведения «вотермарка» и видеопотока мы используем FFmpeg.

Напомню, помимо видео и аудиофайлов, на сайт можно загружать PDF. Эти файлы тоже помечаются «вотермарком». При загрузке мы разбиваем эти файлы на отдельные страницы, и специально написанная нами программа наносит «вотермарк» на каждое из них. При этом мы сознательно ухудшаем качество изображений так, чтобы тексты были пригодными для чтения, но не для печати.

Что будет дальше

Каждый день появляются новые задачи, которые не всегда преследуют две наши главные цели, но так или иначе улучшают сервис. Недавно мы сделали так называемый «обмен визитками» для пользователей системы, которые захотят общаться между собой — аналог «дружбы» в социальных сетях. Помимо этого появилась возможность вести блог, оставлять комментарии и оценивать лекции. На это ушло две недели написания кода.

Наш проект молод и по этой причине не лишен изъянов, но мы над этим работаем. Процесс разработки не завершен, мы находимся в начале пути. Ничего невозможного нет — есть только задачи и сроки их выполнения.
Tags:
Hubs:
-29
Comments41

Articles

Information

Website
besmart.net
Registered
Founded
Employees
11–30 employees
Location
Россия