Путешествие платформы данных (2 части серии)
Вы когда-нибудь пытались построить платформу данных с нуля? Вы знаете, с чего начать, что искать? И самое главное: что не делать? Страх больше нет! Узнайте, как построить идеальную платформу данных с этими сериями статей:) Эта статья будет первой частью серии, которая даст вам внутри в моем путешествии в направлении построения платформы данных с нуля. Разделяя моим опытом, уроки, извлеченные при его развитии, преимуществами и недостатками определенного выбора дизайна, и мои цели, я надеюсь сделать ваше путешествие менее неровным.
Независимо от того, задавайте ли вам задача, чтобы построить платформу данных, или вы решите сделать это в свое время: вы нацелены на высокие амбиции — или, по крайней мере, это то, что я делаю. Имея амбиции отлично, и это необходимо, чтобы подтолкнуть себя немного дальше. Вот почему, когда вы начинаете проектировать что-то, важно, чтобы вы выглядели дальше, чем первоначальный требования .
Без дальнейшего ADO, давайте начнем это путешествие, обсудив мотивации, которые я имел за созданием платформы данных для моей текущей работы.
Мотивации (ака требования)
Я работаю в медиаиндустрии, а компания, у которой работаю, нет, не имеет технологий, как Netflix, GitHub или Twitter. Мы могли бы не рассматриваться как «Tech Company», у нас есть команда великих инженеров, которые так же мотивированы, как мне создать что-то хорошее.
Однажды наш менеджер вошел и сказал, что наша компания решила построить платформу данных с нуля. Требования, которые мы получили, были следующие:
- Это должно быть масштабируемым
- Он должен глотать много данных
- Это должно быть в состоянии получить очень быстро
Это все»!
Инженерная команда имела обсуждение того, какой тип технологий мы хотели использовать, а как должна выглядеть архитектура. Мы решили много сосредоточиться на Кубернаны Отказ Но выбор не был простым. Большая часть команды никогда не работала с Кубератусами, у них больше знаний о воротах AWS Lambda и API. Хотя ко мне Кубернаны было естественным выбором, для других людей было немного страшно.
В конце концов мы обычно договорились, что он будет служить нашим потребностям лучше использовать Kubernetes, особенно с точки зрения масштабируемости и развертывания нашего приложения на нашу приложение. Используя это означало, что нам пришлось мигрировать тонны услуг из ECS и других экземпляров EC2, к Куберату.
Первоначальная архитектура
После выбора для Kubernetes мы создали кучу файлов Bash и Террафом Сценарии для начала. В рамках инженерной команды было обсуждение того, как решать автоматику, и мы решили построить систему «1-клики развертывания».
Этот «1-клик-развертывание», состоящей из образа докера, который содержал все пакеты, которые нам необходимы для создания всей инфраструктуры платформы данных. После этого мы создали начальный скелет на основе этого удивительного Статья Евгений Брикмана из грузки. Наш результат выглядел похожим на это Репозиторий Отказ
Кончик: Когда в вашей инфраструктуре много «движущихся» запчастей. На рисунке ниже показано, как выглядела начальная архитектура
Это было довольно просто для нас; Нам нужно было Создайте кластер Kubernetes Добавьте Балансировщик нагрузки через Nginx . Мы были готовы перейти на следующий шаг.
Драма собиралась прийти
Мы использовали только один кластер, и мы немедленно пришлось начать думать о том, как мы собирались развернуть приложения. Затем появились другие вопросы; Как мы создаем Постановка окружающая среда или Тестирование среда? Начальный выбор состоял в том, чтобы масштабировать кластер еще несколькими машинами и использовать Пространства имен Kubernetes Отказ
Преимущество использования пространств имен, состоит в том, что вы можете «Изолировать»
Ваши приложения в своем роде коробка
Отказ Изоляция — это то, что мы пытались достичь, чтобы мы могли отличить среды
Отказ Делать это, создал проблему с именами и с тем, как мы собирались развернуть приложения. Например, давайте предположим следующее: у нас есть два API и один WebApp. Все три надо иметь тестирование и промежуточную среду, так что разработчики могут безопасно развернуть свой код перед выходом на производство. Поскольку мы решили использовать пространства имен, мы пытались сначала создать три пространства имен: производство, постановку, тестирование. Есть некоторые недостатки в помещении всего приложения в том же пространстве имен. Первый вопрос состоит в том, что было бы намного легче удалить все. Например, CLI Kubernetes ( Kubectl
) способен удалять пространства имен. Если разработчик будет выпустить команду follwing Kubectl Удалить NS
Все приложения под этим пространством имен исчезнут. Вторая проблема в Изоляция
Отказ На самом деле, причина, по которой название имена было создано в первую очередь, было разделить кластер в меньший виртуальный кластер
Отказ
Мы пробовали еще один подход: создаем пространство имен на приложение на окружающую среду. Например, мы бы следующие:
- Production_api1.
- stage_api1.
- testing_api1.
- Production_webapp.
- stage_webapp.
- testing_webapp.
- и так далее…
Вы можете ясно видеть, что это загрязняет кластер Kubernetes с тоннами пространств имен. Следующее Статья Дал нам много представлений о том, как использовать пространство имен лучше. Несмотря на статью утверждают, что вы можете использовать оба подхода, которые я описал выше, он также подчеркивает антиблокировки при использовании таких подходов. Для нас эти решения не работали хорошо.
Что мы сделали? Решение было простым: несколько кластеров Kubernetes.
Несколько кластеров
Как упомянуто выше, мы изначально решили принять стратегию «1-клик развертывания»: что означает, что наша кодовая база была готова к развертыванию, так как мы хотели, чтобы мы хотели. И поэтому мы сделали. Вторая архитектура, которую мы вытащили, выглядит как картина ниже
Как вы можете увидеть с картинки, у нас есть три кластера. Таким образом, мы могли бы развернуть приложения в зависимости от окружающей среды, которую мы хотели поставить.
Вся команда была очень раскручена, и мы думали, что мы прибили его. Но с большими силами приходят большие обязанности. Обязанности здесь означает Регистрация а также Мониторинг Отказ С трех кластеров, понимая, что он происходит, довольно сложно. Мы еще раз имели проблему, которую нам нужно было решить.
В распределенной среде с несколькими приложениями, понимая, что происходит имеет решающее значение. На самом деле, имея возможность быстро отладки приложения в разработке или понять, что вызвало возможную ошибку в производстве, является фундаментальным шагом для контроля над вашими системами.
Но регистрация недостаточно. Сами машины в целом не пишут журналы, раскрывает метрики их оборудования. Таким образом, собирая такую информацию и визуализировать их, это позволит вам и вашей команде настроить тревоги основываясь на определенных правилах. Правило может быть «если среднее использование процессора выше 80% вызывает тревогу». Сама тревоги может быть электронным письмом или слабым сообщением вашей команде. Аварийные сигналы предотвратит, чтобы ваши машины достигли нежелательных государств.
Контроль плана в спасении
Когда у вас есть много приложений, различных сред, и команда инженеров и ученых данных, которые стремятся создавать, тестировать и ставить приложения или модели в производстве, вам необходимо иметь твердое мониторинг и систему ведения журнала. Но как мы это делаем? Еще раз ответ был простым: еще один кластер Куберов:)
Контроль управляют было необычным названием, которое мы взяли из другой команды внутри компании. Единственная цель этого кластера состоит в том, чтобы собрать метрики и журналы других кластеров и централизовать визуализацию такой информации. На этом этапе архитектура выглядит как следующее
На каждом кластере мы настроили Prometheus , Узел-экспортер , Kube-State-Metrics Для разоблачения всех метрик кластера. Чтобы собрать информацию и отправить их кластер, мы использовали Беглый . Все метрики и бревна были перенаправлены в сторону Кафка тема Отказ Таким образом, мы смогли извлечь их от контрольного плана.
В контрольной плане мы установили Логисташка и подключил его к Кафка тема упоминается выше, чтобы он мог начать получать журналы. Logstash — это с открытым исходным кодом, конвейером обработки данных серверов, которые одновременно принимают данные из множества источников, преобразуют его, а затем отправляет его на выход.
Теперь, когда Logstash имеет доступ к журналам, нам просто нужно перенаправить их к Elasticsearch Сервис и визуализировать их с Кибана Отказ Для метрик мы ставим на место Графана и создал кучу панели мозолей для визуализации состояния каждой системы.
С помощью контрольной планировки на месте у нас была полная визуализация и контроль каждого единственного аспекта каждого отдельного кластера. Контрольный план был беспроигрышным решением.
Заключение
В этой первой части я объяснил, как мы начали разработать платформу данных. Эта статья сосредоточена в основном на основе базовой инфраструктуры и проблем, которые мы должны были преодолеть.
Урок, который я узнал во время этой части развития: состоит в том, чтобы думать намного больше, чем когда я проектирую программное обеспечение. Программное обеспечение может быть изменено быстрее, чем инфраструктура. При разработке инфраструктуры есть дополнительные переменные, которые необходимо учитывать, а выбор, который вы делаете, может оказать большое влияние на конечный результат. Долгая история короткая: сначала подумайте и возьми свое время. Разум, чтобы получить все быстро, не всегда поможет вам.
В следующей статье я собираюсь поговорить о том, как приложения развернуты и как команда взаимодействует с этой архитектурой.
Путешествие платформы данных (2 части серии)
Оригинал: «https://dev.to/spaghettifunk/part-1-where-it-all-begins-1d72»