Сетевые технологии Damai две или три вещи

Эксплуатация и техническое обслуживание анализ данных

В проекте Ханчжоу Джей Чоу 2017 года система захвата билетов Damai.com была парализована.Ходят слухи, что внутренняя сковорода Alibaba, Damai, напрямую вышла на первое место в презираемой цепочке в последовательности Али, а также печально известна на реках и озера. Как старый друг Damai (бывший технический директор Damai.com и ядро ​​стартап-команды), я неоднократно слышал такие высказывания, как «Технический уровень Damai.com слишком плох», «Ячмень в основном никакого технического содержания», «Технология Дамаи слишком плоха». Еще в эпоху палеолита» и т. д. Что касается плохих отзывов, то перед нами простои системы, и спорить действительно не о чем, но как член стартап-команды Damai.com и один из наиболее квалифицированных участников, говорящих о технологии Damai, после Снова и снова колеблясь, я решил рассказать о техническом прошлом Damai.com, просто на память.

Я присоединился к Damai в апреле 2008 года, и это моя первая работа (если не считать подработок в колледже, я начал играть в Q-BASIC в младших классах средней школы, два года работал неполный рабочий день в колледже четыре года и написал от 300 000 до 400 000 строк рабочего кода, победители Кубка вызова).

В то время не было Damai.com, только China Ticketing Online. Солнечным утром выходного дня я зашла на собеседование в апартаменты 821 Yuanjia International рядом со зданием 32 по улице Дунчжун. Прежде чем войти в дверь, я однажды задумался, не попал ли я в пирамиду, торгующую притоном, и это не было похоже на обычную компанию. У меня был очень спекулятивный разговор с моим интервьюером и моим будущим хорошим приятелем Ван Вэем. Мы оба любим технологии и принадлежим к тому типу людей, которые считают технологии своей жизнью. Красота отдачи денег (сегментация китайских слов, поисковые системы , метапоиск...), когда я выходил, я уже решил прийти в эту компанию.

В начале 2009 года, после того как мы быстро разработали ряд продуктов, таких как путешествия, авиабилеты, социальные сети, отели, гостиницы, фильмы и т. д., мы, наконец, решили углубить покупку билетов на выступления и создать модель продажи билетов через электронную торговлю. Веб-сайт. Это также немного забавно решиться на это.После того, как я и Ван Вэй умерли от вышеупомянутой серии продуктов, я был очень подавлен и полон разочарования.Не говорить, курить, смотреть, как люди приходят и уходят, ковырять ногами (не меня). Я не помню, с чего началась эта тема. Короче говоря, я выбросил сигарету и решил сделать сайт электронной коммерции для билетов на шоу. Затем я начал его развивать на следующий день после того, как вышел на работу. Следующие пять лет были полны сверхурочной работы.Средняя ежедневная работа превышала более 12 часов, почти без выходных и праздников, каждый день, чтобы увидеть улицы Пекина в четыре часа утра. Палатка со спальным мешком Low of the Shenma взорвалась Мы спали на стуле, на столе для переговоров, под бильярдным столом, на земле в углу офиса... повсюду.

Я построил всю техническую систему сайта Damai (до реконструкции Damai в 2015 г.) При этом я также являюсь пользователем №2 в пользовательской библиотеке Damai (хахаха).В 2010 г. я был назначен техническим директором до декабря 2013 года. До своего ухода я руководил подготовкой и координацией работы Damai.com по сбору билетов на протяжении многих лет. Причина, по которой я ушел в 2013 году, заключалась в том, что большие данные только зарождались. Я надеялся, что смогу начать что-то, связанное с большими данными, в Damai, но в то время никто не мог этого понять, поэтому я так и не получил поддержки, поэтому я сдался. вариант Damai, ушел и стал техническим партнером компании, занимавшейся бизнесом, связанным с данными (таким образом, он стал единственным членом стартовой команды Damai без дохода от опционов).

元嘉国际公寓821,大麦网的起点
Yuanjia International Apartment 821, отправная точка Damai.com

Когда дело доходит до Damai, Damai — сдержанная компания, и техническая команда Damai также очень сдержанна. За 6 лет работы в Barley мы ни разу не говорили публично. Фактически, на ранней стадии Damai.com из-за небольших инвестиций в оборудование технические требования были почти жесткими. Перед тем, как я ушел в 2013 году, жестким требованием для команды было то, что серверу страниц требовалось 100 миллисекунд, чтобы запустить сервер страниц для прохождения линии сетки (включая выбор места и размещение заказа).Перед запуском каждой страницы выполнялся стресс-тест, чтобы увидеть соответствует ли он стандарту или нет.оптимизация. Наша оптимизация кода заключается в том, чтобы сначала аннотировать код на пустой странице, а затем добавлять код построчно, чтобы увидеть, насколько увеличивается время выполнения для оптимизации. Однажды я заставил одноклассника работать сверхурочно три ночи подряд, оптимизируя бизнес-страницу с более чем 1 секунды до 300 миллисекунд и продолжая оптимизировать ее до 100 миллисекунд, 60 миллисекунд... (К счастью, я не ненавижу себя~ ). Мы использовали 4 сервера, чтобы выдержать десятки тысяч сумасшедших билетов (концерт Ли Юйчуня, 2009 г.), хотя реакция системы немного медленная, и это слезы ... Одна из причин медлительности - качество хрустальных головок. куплено слишком дорого Плохо, хрустальная головка внутреннего сетевого кабеля одного из серверов отсоединена, и весь трафик ушел во внешнюю сеть... (Хотя мы бедны~ но в то время у нас не хватает амбиции, пытаясь использовать три или пять серверов, чтобы начать изменение десятков миллионов Вещи, которые люди испытывают при покупке билетов)

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

01 Основная технология онлайн-выбора мест

Онлайн-выбор мест в настоящее время очень распространен, от спектаклей до фильмов и авиабилетов, он применяется очень хорошо. Если я правильно помню, Damai должна быть первой компанией в Китае, предоставляющей онлайн-выбор места для пользователей C. Для первой версии мы использовали TicketMaster, который официально использовал Ли Ючунь в 2009 году. На тот момент она намного опережала аналогичную продукцию любой отечественной фирмы, да и последующие конкуренты тоже выпускали серию подобных продуктов, да еще и вкладывали больше сервисного оборудования, чем Damai, но все без исключения не выдерживали высокого параллелизма билетов захват. Причина в том, что онлайн-выбор места Damai очень хорошо обрабатывается в некоторых технических деталях, и даже существующая техническая команда Damai не знает, как это делает собственная система.На самом деле, техническое решение Damai не реализовано до предела. улучшение. После того, как я уехал, я думал о следующих вариантах:

1. Протокол передачи данных сиденья на основе битового дизайна

Обратите внимание, что это бит, а не байт, не JSON, не XML. На сегодняшний день я видел много онлайн-продуктов для выбора места, в том числе так называемые компании уровня бога в отрасли, все из которых используют JSON и самое большее сжатие GZIP. Конечно, понятно, что богатые и могущественные могут использовать для этого сервер и пропускную способность сети. Алгоритм сжатия — это общий алгоритм, потребляющий вычислительные ресурсы сервера, я запрещаю его использовать, если сам протокол передачи данных не оптимизирован до предела. Первая версия онлайн-выбора мест Damai использует данные JSON для передачи данных карты мест.Объем данных мест за одну сессию составляет почти 1 МБ.При открытии выбора мест вы можете увидеть явные следы загрузки индикатора выполнения.Позднее новая был реализован протокол передачи данных.После завершения вы не можете видеть загрузку индикатора выполнения вообще, потому что объем передачи данных для той же информации был уменьшен примерно до 1 КБ. Дело не только в том, что объем данных уменьшился в 1000 раз, студенты с хорошими базовыми знаниями должны быть в состоянии понять, что это значит, производительность и надежность пакета 1 КБ при передаче фрагментации IP-данных намного выше, чем у пакета 1 МБ. пакет. .

Будет много базовых знаний о битовых операциях и типах данных, поэтому, если вы не понимаете, что означают длинные 64-битные данные по сравнению с 32-битными целочисленными данными, пожалуйста, обходите.

1) Заменить текстовый протокол нетекстовым протоколом

Преимущества текстовых протоколов, таких как JSON, заключаются в том, что они просты и интуитивно понятны, видны невооруженным глазом и просты в разработке и обслуживании. Тем не менее, в некоторых ключевых случаях все же необходимо стремиться к совершенству. Возьмем в качестве примера число «1234567890», количество байтов, которое оно должно занимать в протоколе JSON, составляет: 10 байт = 80 бит, в то время как тип int имеет только 4 байта = 32 бит. Для системы с идентификатором места более 10 цифр. , оптическая передача равна 1000. Разница в эффективном объеме данных идентификатора места составляет: (80-32)*1000=48000бит=6000байт, что примерно равно 6КБ, плюс "{", "}", " =", """ в формате JSON, через каждые пять-шесть Название атрибута "seatid" из английских символов... можно представить, сколько еще данных.

2) Абсолютные значения заменены относительными значениями

Прежде чем говорить об этом, давайте посмотрим небольшой фантастический рассказ, который меня вдохновил:

«Инопланетянин прибыл на Землю случайно и подумал, что Земля очень интересна, и хотел вернуть информацию. Но, поскольку это произошло случайно, его космический корабль был недостаточно большим, чтобы разместить много образцов. Инопланетянин нашел набор Энциклопедия Британника. , Я подумал, что это очень хорошо, и я собирался забрать его обратно. Но я обнаружил, что этого недостаточно, потому что набор был слишком большим, и он был еще слишком тяжелым. Пришельцы заменили все буквы цифрами , так что инопланетяне получили длинную цепочку чисел, которые прошли через космический корабль, были все расположены в порядке энциклопедии и готовы к тому, чтобы их увезли, но инопланетяне обнаружили, что компьютер на космическом корабле также хранит множество фотографий и видео .Номер Encyclopedia Britannica был слишком длинным и занимал много места на жестком диске - мы предполагаем, что инопланетным технологиям тоже нужны жесткие диски.Так что же нам делать?После того, как инопланетяне измерили точную длину своего космического корабля, они предположили, что космический корабль чтобы быть 1. Затем длинная строка «чисел Британика» была рассчитана в соответствии с режимом после запятой, относящейся к длине космического корабля, выгравированной очень маленькой точкой где-то на внешней оболочке космического корабля. назад, он выгравировал только точку, но взял с собой Британскую энциклопедию. Вернитесь и просто измерьте длину космического корабля, а затем найдите положение этой точки на корабле..."

Идентификаторы мест одинаковой производительности, как правило, имеют одинаковый порядок величины. Например, идентификатор первого места — «2010092012», а идентификатор последнего места, скорее всего, будет «2010093012». Я чувствую себя глупо. Тогда почему бы не записать идентификатор начального места и записать только значение отклонения от него для всех последующих идентификаторов мест? Таким образом, это становится формой «2010092012, 1, 2, 3...1000», разве даже текстовая форма не выглядит аккуратно уменьшенной? Не останавливайтесь на достигнутом, читайте дальше.

3) Не учитывать установленный тип значения, согласовывать по мере необходимости

Пришло время использовать побитовые операции. О типе long и типе int мы говорили выше, значение типа long 64bit поддерживает числа в диапазоне от -9223372036854775808 до 9223372036854775807, а значение типа int 32bit поддерживает значения в диапазоне от -2147483648 до 2147483647, не говоря уже об относительных числах значения упомянутый в пункте 2) выше.Теперь, даже если вы продаете билеты с абсолютными числами, ваш номер места в следующей жизни не будет превышать этот диапазон, не говоря уже об отрицательном числе T_T. Когда в области загружено 1000 мест, максимальное значение отклонения не может превышать 1024. Для хранения одного идентификатора места требуется всего 10 бит пространства.Существующий тип данных ubyte занимает 8 бит, и максимальное значение 255 недостаточно, и ushort занимает 16 бит. Максимальное значение 65535 слишком расточительно. Нам нужно значение, которое занимает всего 10 бит... Хорошо, давайте сотрём из памяти все int, long, byte и байты, есть строка " 0101010101..." в бесконечный поток данных, честный и практичный"> >", "

4) Статус места 2 бита

Существуют различные статусы мест, такие как «доступно», «продано», «заблокировано» и т. д. Просто следуйте идентификатору места и введите 2bit, чтобы получить его. . . 00, 01, 10, 11 и еще одно состояние могут поддерживаться~

5) 4 значения координат сиденья уменьшены до 1

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

2. Места, которые можно продать, нельзя продавать, а места, которые нельзя продать, нельзя продавать.

Билеты на популярные спектакли часто разбираются в кровь, а 10 000 билетов часто раскупаются за 30 секунд до того, как их украдут, а фанаты, которые их не урвали, ругаются в сети. Однако система написана мной, и я столько лет не мог успешно выхватить билет [cry]. Трафик в 120 раз выше, чем обычно, не говоря уже о плане подтаблицы и подбиблиотеки, чтобы получить вершину кластера базы данных, в клубе Damai нет Али-папы, и нет обращения с тратой сотен миллионов долларов на каждом шагу. Однажды я согласовывал 7 серверов и согласование было в синяках, а на одном из них все же развернули сломанную машину, на которой был развёрнут почтовый сервер. Что мне делать, я не могу просто сказать, что не могу понять. . . Бедная семья бедна, продолжайте думать об этом.

Данные о месте будут высокоточными данными в потоке билетов. Не ожидайте, что вся работа будет завершена в кеше. Если у вас тяжелый билет, вы будете плакать. Подумав над этим, я придумал решение: Синхронизировать все статусы мест с redis заранее (помните, одно место имеет один пит), а затем получить доступ к кешу для запроса на блокировку сиденья в первую очередь.Кэш говорит, что это может быть продано. Извините, я не могу в это поверить. Вы проникните в базу данных, чтобы узнать о состоянии замка; если кэш говорит, что его нельзя продать, его определенно нельзя продать. Извините, вы можете занять другое место. . .

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

Давайте сначала поговорим о технологии выбора места, а остальные части не сложны, и вы можете составить собственное мнение.
Четвертая часть этой статьи прилагается к анализу параллельных данных, который я сделал.Заинтересованные студенты могут посчитать, какая пропускная способность, сколько серверов и насколько параллелизм поддерживается.

02 Техническая подготовка к розыгрышу билетов на популярные проекты

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

1. Контрольный список действий по захвату билетов

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

За каждым пунктом в контрольном списке стоит кровавый урок. Вот несколько каштанов:

1) Лицо, отвечающее за основную систему, оснащено сетевой картой 3G: во время мероприятия по захвату билетов офисный широкополосный доступ зависает, и Damai.com напрямую выходит из-под контроля... С тех пор главный системный человек в плата оснащена сетевой картой 3G до захвата билета;
2) Система обслуживания клиентов CRM имеет ограничения на операции с большими запросами: во время захвата билетов менеджер отдела обслуживания клиентов филиала пожал ему руку, щелкнул сводку заказа, и база данных была прямо отключена ... С этого момента, сервисная служба должна быть проверена перед запуском захвата, все операции, связанные с большими запросами в системе, закрыты;
3) Подтверждение баланса СМС-канала: Во время акции по захвату билетов пользователь не получил текстовое сообщение, потому что на СМС-канале закончились деньги...
4) Удаление сторонних иконок и JS на Damai online: В определенном граве тикетов не могла полностью загрузиться страница биллинга, а JS авторитетной организации, висевшей в конце страницы, напрямую убивался, а ресурсы ждали тайм-аута, в результате чего Damai Страница не может быть загружена (голая лежит на пистолете, Нима плачет)
5) Осмотр оборудования в компьютерном зале перед грабежом билетов: Во время кражи билетов у какого-то сервера оторвалась кристаллическая головка, и весь трафик данных уходил во внешнюю сеть, система работала очень медленно...
6) Комната дежурит при краже билета: В какой-то ажиотаж с билетами компьютерная комната внезапно потеряла связь, и сервер ниоткуда не мог подключиться, и Damai.com вышел из-под контроля напрямую...

полны слез...

2. Таблица оценки расхода и нагрузки системы

Мы подробно разберем системный процесс, спрогнозируем нагрузку, которую должен достичь каждый аспект системы, и повторим оптимизацию и стресс-тестирование:

3. Обязанности и разделение труда ясны при работе с проектами.

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

4. Подведение итогов и анализ после завершения проекта

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

03 Имейте определенную цель и найдите недостатки

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

Из-за ограниченного места, я пока поделюсь здесь.