Home » Запуск Digg v4: оптимизм, рожденный необходимостью.

Запуск Digg v4: оптимизм, рожденный необходимостью.

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

Но сегодня не об этом. Сегодняшний день был зарезервирован для решения самой большой проблемы, преследовавшей Digg за последние два года. Мы запускали полную переработку Digg. Мы были настроены на запуск сегодня. Мы договорились против дальнейшей отсрочки запуска. Мы были почти уверены, что новая версия, четвертая, еще не готова.

День начался. Мы были наивны. Наше образование ждало нас.

Если бы вам посчастливилось быть приглашенным в наш огромный, переделанный склад в офисе, и вы бы почувствовали кайф, вы, вероятно, догадались бы, что праздник идет полным ходом. Переработка Digg v3.5 в Digg v4 бессистемно продвигалась вперед почти два года и обещала превратить нас из монолитного агрегатора новостей, управляемого сообществом, в бесконечно персонализированный агрегатор, управляемый смешением вашего социального графа, ведущих влиятельных лиц и глобального сообщества. дух времени новостей.

Если наши требования к продукту продолжали меняться в течение предыдущей недели, путь к Digg v4 был четко проложен несколькими годами ранее, когда Digg был опустошен Обновление алгоритма Google Panda. Поскольку этому обновлению поиска потребовался неторопливый месяц, чтобы впитаться в силу, наша судьба изменилась, как мы плюнули на богов: мы упали с нашего первого и единственного прибыльного месяца и продолжали падать, пока наш месячный трафик не сократился вдвое. Один месяц — компания, достигшая кульминации пятилетнего пути к прибыльности, следующий — компания в свободном падении и собирается собрать средства с позиции слабости.

Запуск версии 4 был нашим шансом вернуться на свое законное место среди интернет-гигантов, а огромный офис, известный сотрудникам как «Церковь убийств», был с любовью переставлен за день. Посреди комнаты стоял огромный деревянный стол, который служил «военной комнатой». Он был обрамлен кольцом кушеток, где другие должны были стоять, чтобы помочь. Официанты в черных галстуках ходили по залу с подносами с суши, изысканными небольшими закусками и охлажденным шампанским. Был построен бар, где подают напитки всех форм. Люди проскальзывали наверх, чтобы поиграть в пинг-понг.

Проблемы начались потихоньку.

В какой-то момент энергичный инженер заявил, что вся переписанная версия может работать на двух серверах, и, поскольку наша минималистская среда контроля качества была намного больше, чем наоборот, мы были очень близки к запуску с двумя серверами, что является нашей наиболее точной оценкой. За неделю до запуска проект планирования емкости был передан Ричу и мне. Мы устроили смелый фарс, установив JMeter и сгенерировав как можно больше данных о производительности в сложных, плотных и быстро меняющихся песках, которые включали в себя переписывание. Я никогда не был так уверен в своей работе, я помню, как писал отчет о книге в автобусе в школу о книге, которую я никогда не читал в четвертом классе, но, возможно, мы начинали, не особо осознавая, что это собирался работать.

Read more:  Дебютный запуск распечатанной на 3D-принтере ракеты был прерван в последнюю минуту

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

Около 10:00 кто-то спросил, когда мы собираемся начать переход, и Майк услужливо вмешался: «Мы уже начали повторно выделять серверы v3». У нас было так мало мощностей, что мы решили пересоздать образы всех наших существующих серверов, а затем повторно выделить их в новом программном стеке. Это было разумно с точки зрения сокращения наших затрат, но сопровождаемый этим оптимизм был окрашен безумием.

Когда пламя возрождения поглотило предыдущую инфраструктуру, произошло нечто любопытное, а возможно, и не произошло. Новый сайт так и не появился. Оперативная группа бросилась на страницу технического обслуживания, и мы собрались вокруг нашего красивого деревянного стола, дорогих стульев и гложущего чувство страха. Это было нет идет хорошо. У нас не было плана отката. Случайный самостоятельный выбор инженеров за столом решил, что наш единственный возможный вариант — продолжать двигаться вперед, что мы и сделали. Через час старая инфраструктура полностью исчезла, ее заменила четвертая версия Digg.

Перенастройка серверов, обслуживание страницы, уговаривание посетителей, офис приобрел атмосферу «последних дней Рима». Шампанское и открытый бар лились рекой, стол для пинг-понга был полностью занят, а остальная часть компании смотрела на него, не зная, как помочь, и приходя к соглашению, что последняя победа Дигга не удалась. Подставленная обложка Forbes в вестибюле – твердое наследие, а уж точно не предвестник.

День тянулся, и люди начали расходиться, но инженерам, толпящимся за центральным столом, оставалось еще много работы. Мы успешно подготовили новый сайт, но он все еще шатался под нагрузкой, и большинство страниц не загружалось. Основным узким местом был наш кластер Cassandra. Рич и я прервались в конференц-зале и расширили использование memcache в качестве кэша для сквозной записи, защищающего Cassandra; через несколько часов большая часть сайта начала загружаться для вышедших из системы пользователей.

Однако зарегистрированные пользователи по-прежнему видели страницы с ошибками, когда заходили на сайт. Виной всему была жемчужина переписывания под названием MyNews, которая обеспечивала социальный контекст того, кто из ваших друзей взаимодействовал с каждой статьей, и объединяла всю эту активность в персонализированную новостную ленту. Во всяком случае, это то, что должно было произойти, в этот момент он на самом деле выдавал изящные «синие при запуске» страницы ошибок.

Read more:  Поддержка Байдена молодыми избирателями висит на волоске, поскольку в кампусах бушуют протесты

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

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

И снова мы с Ричем уединились в конференц-зале, на этот раз с целью переписать нашу реализацию MyNews с нуля. Текущая версия записывалась в Cassandra, и ее нагрузка разрушала кластеры, нарушала социальную функциональность и ухудшала все остальные функции вокруг нее. Мы решили переписать для хранения данных в Redis, но на любом сервере было слишком много данных, поэтому нам нужно было развернуть новую реализацию, новую стратегию сегментирования и инструменты для управления этими инструментами.

И мы сделали!

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

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

И мы сделали!

Нашим сервером API был сервис Python Tornado, который выполнял вызовы API на наш внутренний уровень Python, известный как Bobtail (внешний интерфейс был Bobcat), и одна из наиболее часто используемых конечных точек использовалась для получения пользователя по его имени или идентификатору. Поскольку он поддерживает поиск по имени или идентификатору, он устанавливает значения по умолчанию для обоих параметров в виде пустых списков. Это супер разумный поступок! Однако Python инициализирует параметры по умолчанию только при первом вычислении функции, что означает, что один и тот же список используется для каждого вызова функции. В результате, если вы измените эти значения, изменения будут распространяться на вызовы.

Read more:  Запуск серии Huawei NOVA 12 в Китае сегодня, 26 декабря: характеристики и цена - The Quint

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

Мы выпустили это последнее критическое исправление, и Digg V4 был полностью запущен. Через неделю к нам присоединится наш последний генеральный директор. Через месяц у нас будет третий раунд увольнений. Через год мы продали компанию. Но на тот момент мы выиграли.

Я был на пороге своего шестимесячного юбилея.


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

Я рад, что мы сделали последний рывок; гордимся тем, что пережили тяжелый запуск.

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

2023-06-06 10:13:47


1686049084
#Запуск #Digg #оптимизм #рожденный #необходимостью

Leave a Comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.