- PVSM.RU - https://www.pvsm.ru -
Цикл статей о крупных и успешных пользователях Kubernetes продолжается рассказом про популярный онлайн-сервис для распространения аудиоконтента — SoundCloud. В прошлом году эту компанию собиралась купить Spotify AB (имеет шведские корни, как и SoundCloud), а совсем недавно — китайский интернет-гигант Tencent. Даже обслуживая ~175 миллионов пользователей в месяц, SoundCloud в последнее время испытывает финансовые проблемы, о чём стало известно благодаря крупному сокращению (173 сотрудников) минувшим летом, однако, если верить последним данным, ситуация наладилась [1]. Так или иначе, куда больше нас интересует технологическая сторона вопроса, а точнее — применение Kubernetes, и вот что известно о SoundCloud из публичных источников…
Ещё на первой ежегодной конференции Kubernetes — KubeCon 2015, проходившей в ноябре 2015 года в Сан-Франциско, — выступил [2] Tobias Schmidt, инженер SoundCloud, который рассказал про путь компании к микросервисной архитектуре (это произошло к 2014 году), а впоследствии — к Kubernetes:
В SoundCloud начинали с монолитного приложения («4-5 лет назад») на Ruby on Rails (+ MySQL, + RabbitMQ), для выкатывания которого использовался Capistrano, а для описания инфраструктуры — Chef. Среди основных проблем того времени были: медленное масштабирование, болезненность и нестабильность схемы деплоя, трудоёмкое развёртывание новых приложений. По этим причинам в компании пришли к созданию своей системы — Bazooka, которую окрестили как «PaaS в стиле Heroku». Управляя контейнерами (на базе LXC), она предоставляла разработчикам простые команды для деплоя приложений и их масштабирования. На тот момент у компании было 400-500 сервисов (не все из них находились в production), и с Bazooka удалось решить проблемы быстрого выката и отката релизов приложений, их масштабирования, а также независимости команд (разработчикам больше не нужно было обращаться к специалистам эксплуатации для получения новых ресурсов).
За время этих экспериментов специалисты SoundCloud однозначно полюбили контейнеры и язык Go. В то же время созданная внутри Bazooka перестала подходить для работы со значительно разросшимися микросервисами, которые превратились из простых обработчиков HTTP-запросов в сложные и требовательные к ресурсам приложения (они уже были написаны [3] на Scala, Clojure, JRuby). Вдобавок, поддерживать и развивать Bazooka дальше становилось всё более затруднительно при имеющихся ресурсах компании, а в мире контейнеров заметную популярность снискал Docker (и разработчики SoundCloud уже полюбили его, начав использовать в CI/CD). Всё это побудило инженеров к решению перейти на какую-то стороннюю систему для оркестровки.
В SoundCloud сравнили Kubernetes с «родной» Bazooka и другими доступными в мире DevOps продуктами вроде Mesos, а также сопоставили возможности этой системы со своими актуальными требованиями. Выбору в пользу Kubernetes объясняется в докладе следующими причинами:
Итог: по состоянию на конец 2015 года в SoundCloud активно экспериментировали с Kubernetes в рамках Google Cloud Platform и своего кластера на bare metal в дата-центре. В ближайших планах на то время значились: завершение выстраивания CI pipeline (пока он был «в основном настроен»), полная интеграция с Prometheus для мониторинга, решение проблем с журналированием. История с Prometheus, упомянутого в этих планах, заслуживает отдельного внимания…
Вряд ли кто-то из инженеров, работающих сегодня с Kubernetes, не слышал про Prometheus [5] — ведь это один из первых проектов [6] организации CNCF (Clound Native Computing Foundation), формально стоящей и за самим K8s. На сегодняшний день этот Open Source-проект позиционируется как «система мониторинга для систем и сервисов», собирающая метрики из заданных устройств по заданным интервалам времени, применяющая к ним правила, демонстрирующая полученные результаты и вызывающая триггеры, если выполнились определённые условия для указанных значений. Основные компоненты Prometheus написаны на языке Go, а актуальная общая архитектура выглядит так (схема взята из документации [7]):
Почему же этому проекту CNCF уделяется особое внимание в статье про SoundCloud и Kubernetes? Дело в том, что его изначальной разработкой занималась именно эта компания, и происходило это ещё в 2012 году — задолго до того, как инженеры SoundCloud могли даже теоретически подумать о переходе на Kubernetes (его тогда просто не было). Со временем популярность применения Prometheus привела его в превращение в независимый проект, поддерживаемый широким сообществом, а в 2016 году он пополнил ряды CNCF, став вторым (после Kubernetes) проектом организации.
Что ещё интереснее, за Prometheus в SoundCloud стоит [8] бывший сотрудник Google — Matt Proud. К 2012 году в SoundCloud оказались недовольны утилитами, используемыми для статистики и мониторинга (StatsD и Graphite), и начали поиски альтернативы. Присоединившийся в тот момент к компании инженер из Google не нашёл подходящих Open Source-продуктов, позволяющих хранить данные типа временных рядов (time series) в многомерном формате и использовать для выборки из них простой язык запросов. Так и начался проект Prometheus, создаваемый «под вдохновением о том, что он [Matt Proud] знал о Borgmon — спутнике менеджера кластеров и планировщика задач Google Borg [который, как все знают, стал прародителем Kubernetes]».
В итоге, Matt Proud, придя в SoundCloud всего на 2 года (покинул компанию в конце 2013 года, а в 2014 вернулся в Google), инициировал создание Prometheus, к которому присоединились и другие инженеры SoundCloud, продолжившие его развитие после ухода своего идеолога. Уже в 2012 году проект был опубликован на GitHub [9], а годом позже начал применяться в production у самой SoundCloud.
«Prometheus — прекрасный пример того, что было написано ещё до существования Kubernetes и что было написано для мира, в котором необходимо мониторить множество приложений различных типов. Prometheus — это не просто мониторинг для приложений в Kubernetes, он и для Mesos, Docker, OpenStack, других платформ. Многое ещё только будет появляться, и лично я убеждён, что основных платформ будет больше. Так что это действительно повсеместный и мощный инструмент. Мы стараемся выбирать хорошие инструменты, которые подойдут под различные случаи использования, а не единственный кейс. Необязательно это будут контейнеры — могут быть и виртуальные машины».
— Alexis Richardson, глава технического комитета CNCF и руководитель компании Weaveworks, в 2016 году, когда Prometheus получил [10] официальный статус incubated project в CNCF.
Согласно интервью [11], данное в апреле 2016 года лидера команды Production Engineering в SoundCloud — Björn Rabenstein — в компании к тому времени уже применяли Prometheus и Kubernetes в production, называя эти продукты прекрасной комбинацией для решения инфраструктурных потребностей.
Как уточняется в этом интервью, при выборе замены для Bazooka победа Kubernetes случилась «с небольшим опережением» других решений, причиной чему была относительная молодость проекта, которому ещё только предстояло получить/развить многие из своих возможностей.
На европейских DevOps-мероприятиях 2016 года (JAX DevOps в Лондоне [12], CoreOS Fest в Берлине [13], DevOpsCon 2015 в Берлине [14]) Björn выступал вместе с Fabian Reinartz, одним из основных разработчиков Prometheus и инженером из CoreOS, ранее работавшим в SoundCloud, рассказывая о том, как мониторить Kubernetes с помощью Prometheus:
Описанный в этом докладе опыт уже опирался на production-окружение в SoundCloud, а вскоре был дополнен выступлением [15] всё тем же инженером компании Tobias Schmidt — на ContainerDays NYC 2016 в ноябре 2016 года. (Те, кого заинтересует пример описанной в докладе конфигурации Prometheus для Kubernetes, могут найти его в специальном репозитории [16] на GitHub.)
К сожалению, подробностей о самой инфраструктуре SoundCloud снова практически нет. Однако есть скриншот, который, по словам автора, взят из реальной инфраструктуры. В частности, на нём можно увидеть показатель в 19 тысяч для RPS от входящих запросов (HTTP + Thrift):
Из вакансии [17] SoundCloud на позицию Production Engineer известно, что в инфраструктуре задействованы «такие технологии, как Kubernetes, Kafka, Distributed Storage и Prometheus», а из позиции Backend Engineer [18] — что в компании по-прежнему используются языки Scala, Java и Go для бэкенда, а также технологии Spark и Hadoop. (К слову, об использовании Go в production-инфраструктуре SoundCloud есть отдельная статья [19], но скорее всего уже частично устаревшая.)
Наконец, известно, что в production-инфраструктуре SoundCloud:
Пусть особенности эксплуатации Kubernetes и конкретные цифры по production-окружению SoundCloud публично не афишируются (возможно, связано с тем, что инженеры компании больше заняты популяризацией выращенного у себя средства мониторинга Prometheus), факты его применения не только налицо, но и делают из этого онлайн-сервиса одного из ранних пользователей Kubernetes в по-настоящему масштабном production.
Автор: Дмитрий Шурупов
Источник [28]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/sistemnoe-administrirovanie/265392
Ссылки в тексте:
[1] наладилась: https://techcrunch.com/2017/08/11/soundcloud-saved/
[2] выступил: https://www.youtube.com/watch?v=5378N5iLb2Q
[3] были написаны: https://developers.soundcloud.com/blog/building-products-at-soundcloud-part-1-dealing-with-the-monolith
[4] Replication Controller: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller/
[5] Prometheus: https://prometheus.io/
[6] проектов: https://www.cncf.io/projects/
[7] взята из документации: https://prometheus.io/docs/introduction/overview/
[8] стоит: https://www.nextplatform.com/2016/05/09/google-friends-add-prometheus-kubernetes-platform/
[9] GitHub: https://github.com/prometheus/prometheus
[10] получил: https://www.cncf.io/announcement/2016/05/09/cloud-native-computing-foundation-accepts-prometheus-as-second-hosted-project/
[11] интервью: http://knowledgeofficer.com/knowledge/41-transition-to-microservices-while-running-under-full-steam-is-not-easy
[12] JAX DevOps в Лондоне: https://docs.google.com/presentation/d/12kdCqW0w1uNE81BXV79LTlWyBhuCzbi9yHr1zS8RUi4/edit?usp=sharing
[13] CoreOS Fest в Берлине: https://www.youtube.com/watch?v=8bIxBtJQBzQ
[14] DevOpsCon 2015 в Берлине: https://www.youtube.com/watch?v=HnN_HEwo3VY
[15] выступлением: https://www.youtube.com/watch?v=XvE-tC36BCI
[16] специальном репозитории: https://github.com/grobie/prometheus-on-kubernetes
[17] вакансии: https://betalist.com/jobs/62130-production-engineer-at-soundcloud
[18] Backend Engineer: https://betalist.com/jobs/32772-backend-engineer-infrastructure-core-at-soundcloud
[19] отдельная статья: https://peter.bourgon.org/go-in-production/
[20] используют: https://www.slideshare.net/pcalcado/finaglebased-microservices-at-soundcloud
[21] Finagle: https://github.com/twitter/finagle
[22] хранится: https://developers.soundcloud.com/blog/building-products-at-soundcloud-part-3-microservices-in-scala-and-finagle
[23] применяются: https://aws.amazon.com/ru/solutions/case-studies/soundcloud/
[24] обслуживает: https://www.elastic.co/use-cases/soundcloud
[25] Истории успеха Kubernetes в production. Часть 1: 4200 подов и TessMaster у eBay: https://habrahabr.ru/company/flant/blog/334140/
[26] Истории успеха Kubernetes в production. Часть 2: Concur и SAP: https://habrahabr.ru/company/flant/blog/334770/
[27] Истории успеха Kubernetes в production. Часть 3: GitHub: https://habrahabr.ru/company/flant/blog/335814/
[28] Источник: https://habrahabr.ru/post/339724/?utm_source=habrahabr&utm_medium=rss&utm_campaign=best
Нажмите здесь для печати.