Практика Golang в системе планирования Alibaba Sigma

Go Алибаба

об авторе

Ли Юцянь 

Название цветка Орел.

Система планирования Отдела системного программного обеспечения.

Ключевые слова

  1. Golang

  2. система планирования

  3. Sigma, собственный контент Alibaba

  4. практика обмена

  5. проект

     

    1. Возьмите материал

    Sigma в области планирования ресурсов

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

    2. Технические вопросы

    У всех инженерных проблем, освещающих историю, есть несколько подсказок, первая подсказка связана с масштабом. Кроме того, есть еще большая часть облака Alibaba, в том числе Double Eleven, многие вещи связаны с облаком.

    Кроме того, мы наступили на ямы, и с вами поделимся решениями для этих ям.

    Наконец, в Голанге есть баги, которые больше всего боятся низкоуровневых ошибок.

    Быть

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

    Этот бизнес разделен на несколько уровней.Бизнес верхнего уровня сосредоточен на эксплуатации и обслуживании, а бизнес нижнего уровня сосредоточен на системе.От ​​уровня доступа, к центральному мастеру, к ведомому, будет Мешочек в конце.

    Это архитектура сигмы

    Видно, что есть три цвета, один-Сигма, один-уровень 0, а другой-о Fuxi.Распространенное понимание состоит в том, что трубка Sigma находится в сети, затем трубка Fuxi отключена, и есть координационный слой. посередине, ближе к Месосу. Такая архитектура конечно не оптимальна, но она существует по объективным причинам.

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

    Дело 1

    Первый взгляд на APIServer

    Быть

    Когда мы пишем код, мы часто сталкиваемся с этими вещами, которые немного отличаются в области бизнеса и планирования.За кулисами мы должны выпускать, расширять, уничтожать, запускать и останавливать, обновлять и облачать, особенно когда мы идем в Alibaba Cloud, чтобы купить серверы на Double Eleven, поэтому возникнет потребность в гибридном облаке. Мы очень большие, и мы будем спрашивать все простые вещи, как заставить это работать в крупномасштабном сценарии. Наша система планирования связана с эксплуатацией и техническим обслуживанием, а ее основное содержание заключается в том, как быть дружественным к эксплуатации и техническому обслуживанию. Кроме того, когда мы предоставляем контейнерные онлайн-сервисы, мы должны добиваться высокой доступности и согласованности.

    Решения

    1. Согласованность данных

    Согласованность данных Выше мы использовали etcd/redis, мы будем использовать метод реального времени + полный метод для достижения согласованности данных.

    2. Непротиворечивость состояния

    Трудно сделать это хорошо, но если мы превратим непротиворечивость состояния в непротиворечивость хранилища, это уменьшит сложность решения проблемы.

    3. Простой

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

    4. Высокая доступность — без сохранения состояния

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

    5. Предотвращение перехода на более раннюю версию

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

    6. Внутренняя и внешняя совместимость: два бренда для одной команды

    Чтобы достичь облака, все мысли должны учитывать, что есть команда людей как внутри, так и снаружи, и команда будет иметь два бренда, Это наша отправная точка мышления.

    После идеи мы решили поставить предыдущий выпуск, расширение и т. д. в задачу APIServer и бросить его в Redis.Базовый рабочий потребляет некоторые задачи для достижения безгражданства.Вывод таков, что общий дизайн архитектуры больше чем выбор языка.

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

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

    Почему это достаточно просто?Там будут данные для всех, чтобы увидеть позже.Сумма, которую нужно провести, очень большая, и нет возможности выйти в интернет после более чем 95%.Всем не терпится, может быть, 85% будет запущен.

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

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

    Архитектура конструкции обсуждалась ранее, а описанный далее случай — это реальная сцена. Быть

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

    Это происходит как внутри компании, так и в облаке Alibaba.Что особенного в облаке Alibaba? Прежде чем мы выполним некоторую обработку. Наша базовая архитектура очень фиксирована. Основным языком в Alibaba является JAVA. Когда мы обсуждаем архитектуру, мы не ограничиваемся использованием JAVA, Golang или других вещей. Мы четко думаем об архитектуре. Затем выбрать, какой язык разработки использовать.

    Это наше представление данных

    Эта производительность - количество задач, а число скрыто.Это наверное во время Double Eleven, когда количество выпущенных очень большое, а обычное количество относительно небольшое.Видно, что у него есть периодические правила, потому что объем Али имеет окно выпуска. Период, весь объем выпуска в этот день будет большим, и будет глобальный контроль.

    Случай 2

    Быть

    Одним из основных модулей в планировании является планировщик.Выберите лучшую физическую машину среди множества физических машин и поместите на нее контейнер.Обычный способ - иметь цепочку фильтров.После фильтрации будет взвешенная цепочка и, наконец, получите Создайте контейнер на нужной машине. Из-за большого масштаба запрос должен сканироваться в одной компьютерной комнате, и эта одна компьютерная комната может быть узлом уровня 10 000. Необходимо учитывать оптимизацию производительности, поэтому масштаб проверки относительно велик. Это цепочка. Прежде всего, нам нужно выбрать, какие серверы являются точками. В этой части наша идея заключается в параллелизме, как сделать практику из проекта. Зеленые прямоугольники — это последовательные процессы, красные — параллельные. этап или процесс блокировки критических ресурсов. Каждая гранулярность параллелизма рассматривается как физическая машина, которая эквивалентна каждой физической машине для фильтрации, требуется ли это.Это режим.

    Еще один режим это добавление глока в верхний слой всей машины.Неважно последовательный он или параллельный.Этот замок добавляется сверху,а предыдущий замок добавляется снизу.Вроде тут не так много Разница между ними. Проверьте. Производительность отличается. Есть несколько факторов.Один из них сделать следующую цепочку фильтров или вес, в зависимости от стоимости, и масштаб каждой проверки, например, 100 000 запросов в день, и является ли фоновая физическая машина каждого запроса десятками тысяч или несколько.Сотни масштаба, и, наконец, общие требования к производительности не то же самое.

    Быть

    Быть

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

    Случай 3

    Быть

    Golang был очень популярен в последние годы, но в атмосфере Alibaba больше акцентируется язык JAVA.Мы не можем внедрить Golang в больших масштабах.Нужен успешный кейс или процесс небольшой практики. В этой среде мы хотим, чтобы у Golang было место, и предпочтительным способом является его быстрая полировка.Когда он работает очень медленно, система языковой архитектуры может быть устранена. Это наша последняя версия.Звеньев около пяти и полка.Каждое звено дорабатывается шаг за шагом в процессе работы. Сегодня мы переносим ссылку на k8s При сравнении многие места совпадают, но есть большие различия в практике кодирования конкретных фреймворков. Эти вещи, которые мы исследовали ранее, могут быть обусловлены бизнесом или концепцией, но на самом деле не обусловлены разработкой или отдачей сообществу. В будущем мы изменим подход, возможно, нами будет управлять инженерия, которая должна отдавать должное сообществу.

    Случай 4

    Быть

    Позвольте мне рассказать вам, как интерпретировать эту картину. Он разделен на несколько слоев. Верхний уровень подчеркивает, как упорядочивать задачи. Средний уровень касается всего контейнера, есть три части по вертикали, крайний левый — о том, как планировать, средний — контейнерный движок, и задняя часть — это время выполнения контейнера.

    Быть

    Быть

    В PouchContainer официалы написали много фич, эти фичи выведены из реальной практики Али. Почему его называют богатым контейнером?Классический представитель контейнеров может подумать о Docker. А что было до Docker? Например, виртуальная машина Alibaba относительно популярна, и переход от виртуальной машины к контейнеру, такой крупный, должен адаптироваться к привычке эксплуатации и обслуживания, чтобы иметь такое восприятие и концепцию, в настоящее время технология емкость должна быть очень толстой. Потом устроим.Теперь мы знаем про k8s.Все считают его идеальным,а что было до k8s?

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

    А зачем вводится P2 P? Самый ранний P2P был в потоковом медиа.Почему он ассоциируется с контейнерами?Это потому что в интернете есть сильное мышление.Если ты медленный,другие будут невыносимы. Меньшие количества быстрее, чем работа. Однако, когда масштаб большой, нет возможности идти быстрее.То же самое для ссылки, в том числе промышленности.Узкое место связи уже тянет зеркала.Поэтому Alibaba, естественно, способствует ускорению P2P.

    Есть еще совместимость ядра.Есть во внешнем мире поговорка - технический директор сказал,что успехи Али в бизнесе скрыли успехи Али технические.Это утверждение действительно разумно. Для некоторых бизнесов мы получили версию 2.6 в 2011. Сейчас последний бизнес 4.10.Те старые бизнесы обслуживают небольшое количество людей каждый день.Нельзя сказать, что этот бизнес не прибыльный или бесперспективный. Это не работает, даже если вы его сбросите, вы должны дать ему буферный период, пришло время обновиться, это невозможно сделать за один шаг. В настоящее время, если требуется крупномасштабное обновление или замена технологии, ядро ​​должно быть совместимо.

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

    код 1

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

    Быть

    Быть

    В начале Golang, когда многие люди использовали циклы карт, они неправильно использовались переменными-указателями.Типичная производительность заключается в том, что после зацикливания объекта они обнаружат, что все значения в середине точно такие же.Первая вещь все думают о том, неверна ли бизнес-логика Мне никогда не приходило в голову, что что-то не так с циклом for. Позже мы обнаружили, что наше понимание самого языка было не совсем на месте, и мы допустили ошибки низкого уровня.Подробные примеры кода ниже этой PPT.

    код 2

    Быть

    Быть

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

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

    код 3

    Быть

    Быть

    В процессе нашей работы мы обнаружили, что есть проблема с утечкой ресурсов, которая была вызвана сценой, мы запускали много горутов, и у нас была основная задача. Купил сервер у Alibaba Cloud.Alibaba Cloud это асинхронный интерфейс.Сейчас запускаю много задач на покупку сервера.После покупки отправляю запрос.Он возвращает мне асинхронный ID,а я потом запрашиваю статус результата выполнения. Например, я сначала запрашиваю, а потом он выделяет мне какие-то ресурсы и запускает эти ресурсы. Например, инициировать приложение, затем запустить и посмотреть, завершен ли запуск.Также есть процесс для запуска. Например, Али строит Taobao за 90 минут, чтобы получить ресурсы, нужно очень быстро.

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

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

    Если вы лучше разбираетесь в коде в k8s и структуре задач на время, у вас будет более сильный опыт. В то время, если бы мы увидели это, мы бы научились у него и не стали бы делать собственные колеса. Самое главное в этом случае — обратить внимание на то, не будет ли утечки при написании Goroute в будущем.

    код 4

    Быть

    Быть

    Зачем нам нужно разбивать стручки? Концепция Pod в Alibaba имеет несколько уровней: первый уровень — это физический уровень, второй уровень — это разбивка шасси, а основной коммутатор разбивается. Например, у меня есть два сервера, после того, как один из серверов выйдет из строя, доступность резко падает до 50%, что в принципе приемлемо для стартапов. Но на Али, если сегодня остановится 1% трафика, будет много жалоб, поэтому требования очень высокие, так что даже если 1% трафика будет потерян, объем обслуживания клиентов резко возрастет в разы. Аппаратные и программные сбои естественны, что делать, если мы не можем их избежать? Все сервисы не должны быть объединены в кластер, а также физические машины или основные коммутаторы не должны быть объединены в кластер. , это распад стручка.

    За разбиением pod'а стоит еще один слой мышления. Например, на этой машине уже есть такой же Pod, и в нем нельзя разворачивать другой Pod. Существует сильная изоляция, либо 0, либо 1. Это разбиение является обязательным. Но упомянутый здесь распад стручка не является обязательным, это доставка с максимальным усилием. По умолчанию разойтись как можно больше.Если нельзя расстаться, то можно только вместе, но раз есть шанс разойтись, то мы разобьем его за вас. Наш расставание делается после подсчета очков, который отличается от k8s.Точно так же k8s жесткий.Если вы хотите разбить его, вы должны разбить его, иначе доставка не будет успешной.

    Объем услуг Али очень большой, а сервер доступен везде, на самом деле может иметь определенный допуск. Предполагая, что существует 10 000 экземпляров, 1% экземпляров может иметь флуктуационное отклонение, и Pod может удовлетворить его в это время. Причина, по которой это приемлемо, заключается в том, что он слишком велик и способен выдерживать колебания.Это полностью отличается от k8, с которыми мы столкнулись.Это то, что мы видим в крупномасштабной перспективе.

    3. Резюме

    • Уровень дизайна: выбор приоритетного языка на уровне общей архитектуры

    • Уровень производительности: задачи детализация выберите

    • Управляемый данными: переход согласованности состояния к согласованности хранилища

    • Понимание языка: асинхронная сериализация карты, круговой указатель карты

    • Несколько уровней параллелизма: контролируемые тайм-ауты

    • Алгоритм планирования: рассредоточение пакетов в масштабе

    • Мешочек Контейнер: примите открытый исходный код и вернитесь к сообществу

    【Вопросы и ответы】

    Спрашивающий 1

          Просить:Я хотел бы спросить, вы используете Redis для достижения согласованности данных, согласованность данных заменяет миграцию состояния, что это значит?

       Ли Юцянь:Например в к8с это доставка ориентированная на результат.Хочу три экземпляра.Могу изменить количество а можно расширить.Однако до выхода к8с на Али уже были эти требования.На тот момент процесс- ориентированный. Что вы имеете в виду? Шерстяная ткань? Я хочу получить изображение и отключить сигнал тревоги.С точки зрения цикла доставки контейнера, эта серия действий является частью транзакции, которая в настоящее время находится в состоянии. Например, вам нужен способ иметь идентификатор для каждого состояния, а последовательность строк не может быть параллельной. Каждое состояние выполняется одновременно, и когда достигается один этап, одновременно выполняется другой этап. Мы понимаем это как состояние. Когда мы делаем эти состояния, мы не можем этого делать. Очень хороший эффект.

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

       Вопрос:Становится ли это асинхронной задачей, и каждый раз, когда задача завершается, она сохраняется?

        Ли Юцянь:Это можно понять так.

       

    Спрашивающий 2

         Просить:На самом деле идея Сигмы кажется чем-то похожей на k8s.Не знаю, есть ли у Сигмы такой пакет как у k8s? Как выставляется услуга?

       Ли Юцянь:Чувствуешь себя вдвоем, значит хорошо разбираешься в k8s или Sigma. На самом деле, включая Сигму, включая мезо, включая Омегу, включая пряжу, когда вы сравниваете эти вещи, во многих местах есть сходство, чтобы понять всю архитектуру, они действительно похожи, но я упомянул, что Сигма определенно до K8s вне в то время были свои собственные эволюционирующие идеи и методы решения проблемы же. Второй вопрос: у нас есть способы и средства, которые мы можем видеть внутри сообщества, например, выступать перед первый пакет стандартизирован, совместим. Наконец, это было отражением того, что наше сообщество должно начать с некоторых хороших вещей, которые нужно усвоить, чтобы сообщество получило хорошее представление о сцене. Практика Али, хорошая практика, чтобы вернуть ее сообществу, от сообщества, у которого есть чему поучиться, мы также пытаемся сделать обратную связь с сообществом.

       

    Спрашивающий 3

         Просить:Можно ли использовать подсумок или докер на дне Sigma?

         Ли Юцянь:Да я уже говорил, что есть CRI, который уже совместим и реализует протокол CRI.Это же вам использовать.Если вы используете Pouch, вы можете использовать Remoteruntime для его соответствия.Рекомендую посмотреть его .Посмотрите официальную документацию pouch, в ней есть несколько кейсов.

     


    Gopher Meetup 2018 начнет первую остановку в Шэньчжэне.На этот раз многие новые лекторы приглашены поделиться опытом использования Go со всеми~

    нажмитечитать оригиналзарегистрироваться