Один из разработчиков рассказал о том, откуда взялся стартап Hola, и прежде всего — о технических аспектах работы компании.
Предпосылки возникновения Hola
Предположим, в среднестатистическом уездном городе N мирно уживаются два провайдера, причем один из них (П1) предлагает своим клиентам за подключение приз: бочку варенья, да пачку печенья. Следовательно, клиентов у него больше, чем у второго провайдера (П2). Но весь бюджет П1 ушел на сладости, да и канал у него не особо широкий и постоянно загружен. А канал П2 широкий, но чаще всего простаивает. П1, ясное дело, не спешит делиться своим каналом с клиентами П2. В итоге имеем большую часть населения с диабетом неэффективное использование канала, вызванное здоровой рыночной конкуренцией.
Другая ситуация. В одном из районов уездного городка N все жители поголовно любят котиков. И регулярно смотрят сами и делятся друг с другом ссылками на смешные видео на Youtube. Получается, что одновременно не только гражданин Васисуалий тащит к себе из заморского хранилища немаленьких размеров видео, но и все остальные жители микрорайона делают то же самое. В итоге: Youtube вынужден тратить деньги на кеширующие сервера поближе к городку N, а провайдеры – на дорогостоящий трафик через океаны. Но ведь гораздо проще и дешевле было бы заполучить видео непосредственно от Васисуалия!
Возможно, именно приведенные выше мысли побудили двух стартаперов, недавно за сотню лимонов долларов продавших предыдущее свое детище — Jango, и клятвенно пообещавших себе не работать больше не дня в своей жизни, торжественно это обещание нарушить. И они создали Hola.
Истоки
В основе Хола лежит протокол, основанный на HTTP, используя который, пиры, играющие разные роли, общаются между собой. Трафик шифруется, а затем архивируется при помощи zlib, с одной (не очень документированной) особенностью которого связан забавный случай. На протяжении довольно долгого времени с завидной периодичностью то там, то сям клиент вдруг разрывал все соединения, делал морду кирпичом, и вообще вел себя асоциально. Случалось это редко, и все старательно делали вид, что так и надо. Пока после одного из обновлений это явление не стало массовым.
Когда чаша терпения переполнилась, на баг была объявлена облава, в результате которой выяснилось следующее: в версии zlib за номером 1.2.5 при очень определенном содержании входного стрима, в его конец добавлялся пустой блок. Модификация библиотеки от этого теряла веру в человечество и впадала в депрессию, из-за чего весь протокол рушился. А обновление клиентского кода привело к тому, что злополучная последовательность стала появляться гораздо чаще. Авральными темпами были прикручены костыли к серверу и широкими стяжками наложена заплатка на клиентов. Ну и заодно было решено обновить zlib до версии 1.2.8, в которой данная фича была признана багом и пофикшена.
Немного об иерархии
Обработку любого запроса от браузера Хола начинает с обращения к старшему брату — серверу. С точки зрения клиента такой сервер один отвечает за все на свете. Но на самом деле он только переправляет запросы по нужному адресу. Например, на сервер, ответственный за авторизацию, или на сайт знакомств сервер, помогающий двум клиентам соединиться друг с другом, учитывая все их особенности. Так, например, если один клиент захочет присоединиться к другому, у которого не будет открытого порта, но такой порт будет у первого, сервер пошлет второму команду присоединиться к первому. В данный момент разрабатываются методы соединения, когда открытого порта нет ни у одной стороны.
Также, помимо клиентов есть еще и много (реально много) серверов, разбросанных по всему миру, играющих роль клиентов и имеющих порты, открытые для соединения. В зависимости от потребностей клиента, они могут или просто переправить трафик через себя, или выступить посредником в соединении с другим клиентом. Такое может понадобиться, когда определенный сервисы активно банят прокси серверы на основании большого количества подключений с одного адреса (этим грешат в том числе и Netflix с Hulu). А когда запросы приходят более или менее равномерно от всех миллионов клиентов, тут уже особо не побанишь.
И, наконец — самое интересное и неожиданное
Дело в том, что Hola обладает обширнейшими возможностями для диагностики различных проблем, что называется, в полевых условиях (люди, в той или иной степени страдающие наслаждающиеся паранойей и раньше знали, что Хола — просто вирус). Одна из них позволяет строго задавать группу пиров, через которых гоняется трафик от клиента разработчика для того, чтобы конкретные проблемы были легко воспроизводимы.
Однажды один из разработчиков Hola заметил, что его коллега слушает музыку с известного музыкального сервиса Pandora (который заблокирован во всем мире за пределами США). Оказалось, что если взять группу пиров, пребывающую в США, то и трафик будет, соответственно, гоняться через них. И блокировать его на основании пятой графы невозможно. Сейчас спрос на «побочный эффект» даже превышает потребность в ускорителе интернета. Гигабитные каналы и так у каждой собаки, а вот смотреть нетфликсы из уругваев и сидеть в фейсбуках из иранов и прочих китаев — дайте две, и сразу.
Разработчики Hola
Даже если запрос не должен обходить никакие региональные ограничения, в задачу сервера входит принятие решения, к какому именно клиенту его отправить, основываясь на взаимном расположении двух клиентов, наличия или отсутствия нужного контента в кеше, загруженности пиров и еще множестве факторов.
Однажды относительно свежий разработчик своим коммитом испортил систему распределения нагрузки между узлами сети, в результате чего вся сеть на несколько часов прилегла отдохнуть.
Именно возможность поломать все одним неверным чихом заставляет держать немалый штат людей, которые постоянно: днем, ночью, в праздники и выходные (и даже в понедельник!) мониторят происходящее, и при малейших признаках беды бьют ответственных по голове тревогу.
Конечно, с такой невероятной ответственностью справляются только самые выносливые. Как и с написанием программ – только самые лучшие. Их-то мы и ищем днем – с огнем, ночью – без огня. И поскольку верим только коду, то на резюме и прочие достижения даже не смотрим.
Есть достойные работы – присылайте, станете высокооплачиваемым сотрудником Hola. Если, конечно, пройдете собеседование с безумным начальником программистов, помешанным на качестве кода.
Автор: DimAss74