Мобильные мессенджеры — территория высоких нагрузок и огромных требований к надежности и безопасности. Тем интереснее узнать как устроена инфраструктура одного из лидеров этого рынка.

 

Идея Viber и неожиданный успех

Когда вы решили: «мы будем делать Viber », — в каком году это было?

Тогда это, естественно, еще не называлось Viber. Но первые мысли начали оформляться в код где-то весной 2010 года. Первый релиз состоялся в декабре 2010-го.

А когда был первый прототип? Сколько времени ушло на создание рабочей версии?

Что-то было готово уже через месяц. Но это «что-то» было во всех смыслах очень далеко от того, что мы были готовы предоставить пользователям :).

Какова была исходная идея — сделать мессенджер или создать этакого «убийцу Skype»? Или все вместе, чтобы убить сразу и SMS , и Skype, и все остальное?

Первая версия Viber вышла без мессенджинга, хотя, безусловно, мы понимали, что мессенджинг туда придет. Просто сразу на все не хватило ни времени, ни сил.

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

Из-за этой головной боли, связанной с постоянными разъездами и попытками вызвонить людей, мы решили попытаться сделать голосовую связь через интернет нормально, чтобы это просто работало. Потому что на тот момент Skype (и особенно его мобильная версия) работал так, что это нельзя было назвать работой. Нужно было заранее договариваться о звонке (например, по email), чтобы человек вышел в Skype и не тратил батарейку — и только тогда созвониться. Это не тот experience, который нужен пользователю. Пользователь хочет просто нажать на имя контакта — и чтобы звонок состоялся. Skype не дает этого ни сейчас и не давал этого тогда.

Вы были первыми, кто ввел авторизацию контакт-листа по телефонному номеру?

Нет, на тот момент уже вышел WhatsApp.

Каковы были цели Viber, каким требованиям он должен был удовлетворять?

Максимальная простота для пользователя. Максимальное удобство. Максимальное качество в тех сервисах, которые Viber предоставляет. В самом первом релизе это были только звонки, потом добавился мессенджинг.

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

Это сразу выстрелило? Все сразу поняли и приняли этот подход?

Да, это заработало сразу! Мы, конечно, такого не ожидали. То, что произошло, когда мы выпустили приложение… мы никому, кроме узкого круга семьи и друзей, про Viber не рассказывали. Тогда он вышел только в израильском AppStore. И без какого-либо участия с нашей стороны уже через неделю об этом начали говорить по радио и ТВ. Чтобы не упустить возможный PR, который мы хотели получить, сделав международный запуск, нам пришлось очень быстро выпустить Viber и за границей. А через три дня после этого у нас уже был первый миллион зарегистрированных пользователей. И да, этому мы тоже очень удивились.

Где в первую очередь появился Viber ?

Первый релиз состоялся на iOS. Потом iOS продолжала продвигаться вперед по фитчерам, и у нас довольно много времени ушло на то, чтобы догнать ее с Android. Релиз Android произошел где-то через год после iOS. Уже потом стали появляться и остальные платформы: WindowsPhone, BlackBerry, нокиевские платформы S40 и S60, которые сейчас уже… не очень с нами.

Еще очень важной платформой для нас — людей, которые целый день сидят в офисе, перед компьютером, была десктопная версия. Потому что печатать с клавиатуры, конечно, удобнее. Поэтому для нас был важный milestone, чтобы все это работало и на PC, и на Mac, и на Linux. Но это появилось еще позже.

Многие, наверное, назовут такой шаг спорным. Мессенджерам выгодно держать свою аудиторию понятной. Одно дело — сказать: моя аудитория полностью состоит из мобильных пользователей. Но когда есть десктопная версия, так уже не скажешь.

Мы хотели принести на десктоп простоту userexperience, такую же простоту использования, которая есть у нас на мобильных платформах. Надеюсь, что у нас это получилось.

Пользоваться Skype параллельно, на нескольких девайсах, то есть на компьютере, телефоне (хотя мало кто активно пользуется Skype на телефоне), — это очень интересный опыт. Наверное, всем такое знакомо: когда ты запускаешь Skype на каком-то неосновном PC, а на тебя начинают сыпаться сообщения, которые вызывают ностальгию, — двухмесячной или вообще двухгодичной давности. А мы хотели создать нормальный crossdeviceexperience. Нам было очень важно, чтобы все стопроцентно синхронизировалось между десктопной версией и между мобильной. Нужно сказать, это была очень и очень непростая задача, которая отняла у нас чрезвычайно много времени и сил.

Почему вы не взяли какой-нибудь XMPP и не сделали мессенджинг на нем? Зачем нужен был свой протокол?

В этом смысле мы всегда думали: что выбрать для себя? На этих весах всегда два полюса. Один полюс — интероперабельность. Второй полюс — инновации. Скажем, если взять стандарты, которые суперинтероперабельны, например SMS. Они не менялись с восьмидесятых годов. И что там где? Соответственно, идя по такому пути, ты очень ограничен в том, что можешь делать.

Когда же мы выбираем для себя инновацию, мы можем делать со своим закрытым протоколом все, что угодно.

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

IMG_7147

 

До Viber

Как я понимаю, у компании Viber было несколько основателей? Непосредственно вы и… кто еще, кем были другие сооснователи?

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

Основная команда Viber — это Тальмон Марко, наш CEO, я, и еще один человек, который отвечал за бэкенды и всю серверную инфраструктуру. Остальные все с технологическим бекграундом. Но у нас был многолетний опыт совместной работы.

Вашим первым проектом была P2P-сеть iMesh?

Да, первый проект — iMesh. Но это было очень давно: проект мы начали в 1999 году, когда P2P-сервисы только начались. Работу над iMesh мы начали, когда еще не было даже легендарного Napster. Но Napster вышли раньше нас и смогли собрать огромную пользовательскую базу — и они же умудрились первыми получить повестку в суд от Ассоциации звукозаписывающих компаний Америки.

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

А BitTorrent и eDonkey уже были?

BitTorrent не было, eDonkey еще даже не зарождался — все это уже появилось после нас.

В наше время единственным серьезным продуктом такого рода был Napster.

Протокол у вас был свой, вы его с нуля писали?

Да, протокол был закрытым. Он, в общем, так и умер проприетарным.

Дело в том, что с тех пор произошло очень много различных изменений, iMesh сейчас — это совершенно иной продукт, и компания тоже совсем другая. А протокол так и остался проприетарным, как и протокол Viber, кстати.

 

Инфраструктура и стек

Наверное, вся инфраструктура очень сильно поменялась с весны 2010 года? Какая инфраструктура использовалась тогда, в начале, и какая сейчас?

Все поменялось уже несколько раз. В смысле архитектуры клиентов коренным образом ничего не поменялось. Но менялась серверная часть.

Архитектура клиентов у нас использует кросс-платформенную библиотеку, которая бежит практически без изменений на всех используемых нами платформах. Начиная от WindowsPhone 8 и заканчивая iOS. Над этой библиотекой строится UI на том языке, которым пользуется эта платформа. Если это WindowsPhone — это CSharp, если iOS — Objective-C, если Android — это Java. Мы хотим, чтобы аппликация была максимально приближена к нативному перформансу, поэтому не пользуемся никакими кросс-платформенными инструментами вроде PhoneGap. Все native, все разработано нативными средствами той или иной платформы (кроме общей библиотеки).

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

Наверняка использовались какие-то БД или все тоже было свое?

У нас, конечно, были какие-то вспомогательные веб-системы. В качестве веб-стека мы до сих пор используем PHPMySQL, а баз данных никаких не было. Все хранилось в самописных C++ серверах, заточенные на максимальную производительность.

То есть все изначально писали так, чтобы часто используемые оперативные данные хранились в памяти? Все было заточено на горизонтальное масштабирование?

Да, именно. Если вспоминать — казалось бы, 2010 год был не так давно. Но популярные сегодня слова, например NoSQL, тогда были менее модными. Все это находилось в зародыше, хороших продуктов было достаточно мало. Так что пользоваться собственной архитектурой (тем более что многие наработки у нас уже были) на тот момент было, наверное, правильным решением.

И как это менялось со временем?

В основном менялись те части архитектуры, которые работают с данными, — переключались на более стандартные продукты. От каких-то своих способов мы стали переходить если не к традиционным релятивным БД, то к более NoSQL продуктам. К примеру, в основе предыдущего поколения наших бэкендов лежали MongoDB и Redis. Но мы достаточно быстро поняли, что MongoDB не дает нам нужного результата во всем, что касается производительности. Поэтому сверх этого пришлось самим, достаточно сложными способами, прикручивать Redis, писать для него свой собственный шардинг. Могу сказать, что багов в MongoDB и Redis мы открыли очень немало. Наверное, в какое-то время мы даже были чемпионами по поиску багов. Сейчас мы переходим на следующую нашу архитектуру. Мы заменяем и MongoDB, и Redis на Couchbase.

Почему вы выбрали именно Couchbase ?

Мы анализировали все остальные продукты на рынке. Анализировали как их архитектуру, так и перформанс. Просто гоняли. Несколько месяцев занимались перформанс-тестами всех NoSQL-проектов, пока не пришли к выводу, что по сочетанию возможностей и производительности Couchbase для нас более подходящий продукт. В числе пользователей Couchbase и без того числятся Cisco, AOL, eBay и так далее. Это достаточно серьезный продукт.

Как выглядит архитектура Viber сейчас? Если представить ее общими мазками.

Все довольно сложно. Это несколько кластеров NoSQL баз данных. Это сервисы, позволяющие нам продолжать работать, даже если какие-то кластеры падают. Это фронтенд-серверы, которые все еще написаны нами на C++ и максимально оптимизированы под перформанс. Это слой доступа к данным, который сейчас написан на Python, но скоро мы мигрируем его на Java. Это также компоненты, которые отвечают за messagerouting. И много, очень много инфраструктурных вещей.

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

В первом релизе ViberSMS посылались благодаря тому, что веб-скрипт, написанный на PHP, дергал HTTP-интерфейс какого-то SMS-провайдера, чтобы тот послал сообщение. Сейчас все это разрослось в мощную SMS-систему, со своими правилами роутинга, с выбором лучшего провайдера, исходя из соотношения цена/activation_rate и так далее. Каждая такая мелочь исходной системы со временем развилась в отдельную сложную составляющую.

С таким количеством пользователей это неудивительно :).

Да, здесь ничего не поделаешь. Грубо говоря: выпустив Viber во всем мире, через неделю мы поняли, что наш SMS-провайдер прекрасно умеет доставлять сообщения в Америку, но не умеет в другие страны. Пришлось сидеть и в Excel высчитывать данные по тому, какие провайдеры и куда умеют доставлять сообщения. Потом руками прописывали в PHP-файле, к какому провайдеру из каждой страны обращаться. Постепенно все это вылилось в красивую систему, которая автоматически занимается подобной активацией.

На чем написана

Из технологий… C++ всегда остается основным для performance-вещей. На C++ написаны все фронтенд-серверы, все, что связано с routing и информацией между серверами. Пока мы не смотрим на какие-то более модные технологии вроде Erlang, просто потому, что у нас собралась большая команда, которая хорошо умеет писать на C++.

Сейчас «заходит» Java. Есть Python. Еще Shell script, естественно. Во всяких вебовских вещах мы пользуемся PHP. Иногда те же вебовские вещи всплывают в аппликации. Пользуемся MySQL. Это все основные технологии.

Одна из технологических частей Viber — это непосредственно движки, вернее протоколы, которые используются для обмена голосом. Видеозвонки тоже. Вы разрабатывали их in house или это сторонние разработки?

Здесь тоже произошла довольно большая эволюция. Мы пользовались определенными thirdparty движками. Но, как легко можно узнать в интернете, в первом релизе мы пользовались движком московской компании Spirit. Через год мы с ними расстались. С тех пор прошли еще один продукт. В последние два с половиной года используем модифицированную нашими руками версию WebRTC. То есть в основе Viber лежит WebRTC, который мы оптимизируем, дополняем. Основные проблемы — оптимизация работы на мобильных девайсах (ARM, снятие и воспроизведение звука и картинки на iOS и Android) и оптимизация для сетей 3G, которые очень отличаются своим поведением от обычного домашнего подключения.

Если говорить о мониторинге, у вас наверняка выделено много людей для поддержания работоспособности и мониторинга всего и вся?

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

Для мониторинга мы используем очень-очень много всего. Изначально наш основной мониторинговый продукт на системном уровне был Zabbix. У нас очень много своих инструментов для мониторинга, которые позволяют аппликативно смотреть, что происходит с нашими серверами (какие мессаджи туда приходят, что там происходит), рисуют красивые графики и так далее. В том числе мы пользуем Stackdriver из последних и модных вещей.

С точки зрением методологии используете какие-либо модные подходы, вроде Agile?

Да, используем и все время меняем их, стараемся адаптировать под себя. Большая часть компании работает с Agile: в основном это Scrum, иногда в некоторых командах Kanban. Но большая часть команд, особенно команды клиентские, работают по Scrum.

Для взаимодействия между командами что используется? Какие инструменты — внутренние наработки или что-то вроде Redmine, Trac?

Мы используем продукцию замечательной компании Atlassian — JIRA и еще Confluence обязательно. Все, что связано с документацией и коллаборацией, у нас в EnterpriseWiki, то есть в Confluence. Все, что связано с трекингом, — Jira. Все хостим у себя.

Более 400миллионов пользователей
 

Безопасность

Когда вы выпустили приложение для Android , наверняка много умельцев хотели его декомпилировать, отреверсить, посмотреть. Как вы подходите к защите приложений, которые уходят в Google Play ?

Подходим, конечно, очень серьезно. В чем-то помогает ядро на C++, декомпилировать его все-таки сложнее, чем Java. Вообще мы очень серьезно относимся к безопасности пользователей, в том числе поэтому мы все время проводим externalblackhat проверки. То есть выбираем внешнюю компанию, предоставляющую такие услуги, даем им поломать Viber и смотрим, что из этого выйдет. Если они что-то находят, сразу же чиним. У нас нет официальной BugBounty программы, но, если кто-то пишет нам о какой-то проблеме или уязвимости, мы стараемся или вознаградить его, или как-то наладить постоянное сотрудничество. Мы очень ценим это, для нас это важно.

Протокол Viber наверняка уже пытались реверсить, наверняка кто-то пробовал выкладывать отреверсенные описания его работы?

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

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

Были, конечно, они появляются. Но данные пользователя для нас — самое главное. Пользователи нам доверяют, и мы хотим, чтобы так и оставалось. Поэтому данные мы очень и очень серьезно храним. Можно судить даже по одному случаю: когда Саудовская Аравия заявила, что закроет мессенджеры, которые не соглашаются передавать им пользовательские данные. Закончилась эта история тем, что нас там заблокировали. WhatsApp — нет. Это факты. Не буду спекулировать на тему, почему так случилось.

Вы не предоставляете доступ к пользовательским данным вообще никому?

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

Вы используете P2P-шифрование, то есть через вас все сообщения и голосовая связь проходят в зашифрованном виде?

Я не буду комментировать, какие конкретно способы шифрования мы используем, чтобы не облегчать никому задачу :). Но мы их меняем, постепенно и все время. Делаем все сложнее, потому что ситуация в мире становится все тяжелее в последние годы. Все мы видим, что происходит. Все эти громкие дела, все, что было со странами и правительствами, которые пытаются подслушивать пользователей. Наша позиция в данном случае проста: наша единственная забота — сохранить privacy наших пользователей.

 

1 комментарий

  1. червяк130

    15.12.2015 at 17:50

    Спасибо. Отличное интервью.

Оставить мнение

Check Also

Windows 10 против шифровальщиков. Как устроена защита в обновленной Windows 10

Этой осенью Windows 10 обновилась до версии 1709 с кодовым названием Fall Creators Update …