# HighLoad Siberia++ 2019 ## Доклады на которых я был ### Автоматизация управления Clickhouse-кластерами в Kubernetes #### Конспект Рассказ о собственной разработке ClickHouse оператор, для управления Clickhouse-кластерами в Kubernetes. Altinity ClickHouse operator for Kubernetes. ClickHouse - столбцовая СУБД для OLAP. #### Понравилось #### Не понравилось Похоже на рекламу собственного решения. #### А еще Поскольку я не знаком с Kubernetes, то сложно оценить полезность предложенного ClickHouse оператор. ### Как создать высоконагруженную систему отправки уведомлений по событиям #### Конспект Apache Kafka. #### Понравилось #### Не понравилось #### А еще ### Реализация геораспределенной персистентной очереди сообщений на примере Yandex Message Queue #### Конспект Для чего нужно: * доставка логов до хранилища; * массово считать; * обработка событий; * обмен между микросервисами. Комбинация гарантий(AAE): 1. at-most-once - максимум 1 раз, например физическая почта, доставка; 1. at-least-once - минимум 1 раз, используется повсеместно; 1. exactly-once - ровно 1 раз, важно для финансов, требует затрат не только в реализации очереди, но и в consumer, producer. #### RabbitMQ & Apache Kafka Apache Kafka: producer1 -> message queue1 -> consumer1 ... producerN -> message queueN -> consumerN RabbitMQ: producer -> message queue -> consumer1 ... -> consumerN ##### fsync AK - fsync по таймеру. RMQ - "честный" fsync. #### Yandex Message Queue Тезисы: * consumer -> pull * persistent * at-least-once * standard & FIFO Message can be: * visible; * hidden; * deleted. API: * CreateQueue * SendMessage * ReceiveMessage * DeleteMessage Работает на Yandex Database. #### Понравилось #### Не понравилось #### А еще ### Устойчивость GraphQL к нагрузке по сравнению с REST #### Конспект #### Понравилось #### Не понравилось #### А еще ### Как мы разбили клиент miro.com на ленивые модули, чтобы ускорить его загрузку и масштабировать разработку #### Конспект SPA: Dashboard + board => Complex UI. Проблемы: * низкая скорость * высокая связанность (неочевидно как правки в одном модуле могут повлиять на систему в целом) Как измеряли: * Google Chrome Coverage * speedtracker.org Основные технологии: * AngularJs * Typescript * Webpack Направления решения проблем: * портянка -> components; * lazy loading modules. Итого: * проверка импортов из других модулей; * проверки размеров модуля; * шардинг между вкладками; * асинхронное взаимодействие между модулями; * загрузка минимального количества данных с сервера первично; * в ядро кладется не всё, только то, что используется ВСЕМИ модулями. Потребовалось 2ч * 4 мес. #### Понравилось #### Не понравилось #### А еще ### Shardman - постгрес для кластеров. Что есть сейчас, что будет завтра #### Конспект Сравнительный обзор имеющихся решений. Как работает Shardman. Что уже есть (SELECT, JOIN), что будет. #### Понравилось #### Не понравилось #### А еще ### Почему мы быстро считаем в банке #### Конспект Нет. #### Понравилось #### Не понравилось Быстро считаем, потому что - финансы => надо быстро считать! НИкакой конкретики. #### А еще ### Не очень большие данные #### Конспект Сравнение секционирования между версиями <10, 10, 11, 12, известных методик и проблем. * INSERT -> RETURNING NULL * INSERT ON CONFLICT * TRIGGER for INSERT * TRIGGER for UPDATE * postgres_fdw (foreign data wrapper - например любая другая таблица) #### Понравилось Я знаю PostgreSQL лучше, чем остальные технологии, о которых шла речь, поэтому мне понятно. Проблемы секционирования в версиях до 10 - мне знакомы. #### Не понравилось #### А еще ### Time series данные в реляционной СУБД. Расширения TimescaleDB и PipelineDB для PostgreSQL #### Конспект Time series - собранный в разные моменты времени статистический материал о значении каких-либо параметров (в простейшем случае одного) исследуемого процесса. Каждая единица статистического материала называется измерением или отсчётом, также допустимо называть его уровнем на указанный с ним момент времени. Где это нужно: * мониторинг автотрафика; * мониторинг инфрастуктуры; * мониторинг фронтенда; * мониторинг оборудования. В общем - разного рода телеметрия. Что чаще всего используется: * InfluxDB; * Prometheus. Что использует компания-докладчик: PostgreSQL+PostGIS+TimescaleDB |Параметр| TimescaleDB | PipelineDB | |------| -------- | -------- | |Появилась| 2015 | 2013 | |Релиз|2018|2018| |Основной тезис|Хранит данные|Хранит результаты вычислений (потоковая обработка)| |Расширение для Postgres|Да|Да| |Сущность|Hypertables, секционирование|CONTINIOUS VIEW, STREAM, потоковая обработка, real-time| |Интеграция в планировщик|Да|Да| |SQL|JOIN, aggregate, CTE, etc|JOIN, aggregate, CTE, etc| |Экосистема|HA, replication backup/restore|HA, replication backup/restore| |Особенности|Time bucketing, histograms, gap filling|поддержка вероятностных структур данных и алгоритмов| |Интегрируется|Zabbix, Prometheus, Grafana|Apache Kafka| #### Понравилось Я знаю PostgreSQL лучше, чем остальные технологии, о которых шла речь, поэтому мне понятно. #### Не понравилось #### А еще ### Самый лучший GEODIST() к западу от Рио-Гранде #### Конспект 1. Использовать упрощение формул. 1. Использовать Lookup Table. 1. Использовать Linear Interpolation. 1. Использовать Ряд Тейлора. #### Понравилось 1. Понятно, наглядно 1. Измеримые метрики 1. Сравнение подходов в цифрах #### Не понравилось Нет. #### А еще ### Применение микросервисов в высоконагруженном билинге #### Конспект #### Понравилось #### Не понравилось #### А еще ### В единстве сила: как мы пишем тесты всей командой #### Конспект #### Понравилось #### Не понравилось #### А еще ### Инфрастуктура поиска в Яндекс.Маркете #### Конспект #### Понравилось #### Не понравилось #### А еще ### Бэкенд на NodeJS. Опыт Bolt #### Конспект Базовые технологии: * AWS: EC2, Redshift * NodeJS, PHP, Nginx, MySQL Используется Typescript, потому что типизация. Используются async/await вместо callback. NodeJS - оптимален для I/O. Микросервисы. ~200. Микросервисы обмениваются данными через * API; * Очередь. Разработка: * Git; * Docker; * Jenkins. Тестирование: * Компонентные тесты; * Системные тесты; * Юнит-тесты. Тесты пишут программисты. Приоритетные тесты - компонентные. Мониторинг: 1. Доступность логов (nginx/NodeJS) * Elasticsearch + Kibana 2. Доступность метрик * Prometheus + Grafana 3. Активный мониторинг * Kibalert * Grafana alerts #### Понравилось Используются знакомые технологии. #### Не понравилось Где часть про HighLoad? В чем он состоит? #### А еще ### Зеркалирование трафика в Рекламной Платформе #### Конспект Передкомандой тестировщиков стояла задача: зеркалировать входящий трафик для целей тестирования. Ограничения: решение должно быть пригодным к использованию тестировщиками на продакшене с минимальными затратами со стороны DevOps Было испробовано 8 решений - от них отказались по причене того, что решения не проходят через ограничения. В итоге: * выбрали ScaPy, * дописали Traffic Reply. #### Понравилось Объяснение проблематики, есть критерии сравнения решений. #### Не понравилось Почему этим занимаются тестировщики, почему нельзя привлечь DevOps, если в итоге к ним и обратились. #### А еще ## Вывод 1. Нужны метрики. 1. Нужны системы для получения метрик. 1. Нужно делать Proof of concept. 1. Построение презентации: начальные показатели -> меры -> результат в цифрах. 1. Использование очередей Apache Kafka, RabbitMQ, Redis, YMQ. 2. Нужны логи. ## Про что можно почитать, посмотреть * OLAP, OLTP, шардинг, кластеризация мониторинг систем * Prometheus * Grafana * Elasticsearch * Kibana * ClickHouse * ApacheKafka * RabbitMQ