Обозначить чёткую границу между работой и личной жизнью бывает непросто. Иногда можно не заметить, как мысли о задачках просачиваются в наше свободное время. И если слишком часто погружаться в такие размышления вместо отдыха, то появляется неиллюзорный шанс выгореть.
Подписывайтесь:
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6💯5❤3
Салют! На связи Александр Демиденко, старший разработчик бэкенда в Yandex Cloud. Сегодня я расскажу, как мы научили Go работать с сетью практически напрямую с железом и уже на старте сэкономили сервису более 1000 ядер CPU.
Почему появилась такая задача? Давайте взглянем на Network Load Balancer. Чтобы сервис знал, куда можно направлять трафик, он должен постоянно проверять доступность пользовательских бэкендов через специальный механизм проверок здоровья. Мы развернули для этого целый кластер, который со временем разросся до нескольких сотен хостов.
Чтобы выполнить проверки здоровья, отдельная подсистема балансера формирует короткоживущие сессии до пользовательских сервисов. Но таких сервисов — сотни тысяч. А когда у нас столько же проверок, то это выливается в аналогичное количество TCP-хендшейков и HTTP-запросов. Время выполнения таких проверок начинает занимать сотни и даже тысячи миллисекунд, при этом просто так всё это не закешировать. А если мы тормозим, то клиентский сервис либо простаивает, либо получает трафик на мёртвый инстанс.
socket(). Ядро тратит много времени на выделение структур для нового сокета. При этом Go runtime в ответ плодит тысячи потоков (M), что окончательно добивает планировщик ОС огромными очередями на шедулинг процесса.Мы встали у развилки: заливать проблему железом и страдать дальше или уходить в хард-корный DPDK и прощаться с Go. В итоге выбрали третий путь — eBPF и AF_XDP.
Подписывайтесь:
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥24🙈6
В мире PostgreSQL всё ещё нет готового коробочного решения для горизонтального масштабирования. Когда один кластер перестаёт тянуть нагрузку, начинается самое интересное: чистка или охлаждение данных, распил одного кластера на несколько и, в конце концов, шардирование.
На практике всё упирается не в сами шарды, а в инфраструктуру вокруг них. Стоит ли реализовывать логику на стороне приложения? Как из одного шарда сделать 2, 4, 8, 32 и так далее? И как перенести туда данные и избежать downtime?
Система заточена на OLTP‑нагрузки, где большинство транзакций можно уложить в один шард. Например:
customer_id или product_category author_id или типу контента (при этом комментарии и связанный контент остаются на одном шарде)Подписывайтесь:
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
⚡11🔥8❤2
This media is not supported in your browser
VIEW IN TELEGRAM
Авто.ру — это сервис, который делает покупку и продажу автомобиля удобной, технологичной и безопасной. Он обрабатывает тысячи запросов в секунду, а внутри у него оркестр из бизнес-логики. Раньше сервис работал поверх шардированного MySQL, но масштабироваться на нём было трудно. Поэтому команда решила переехать на Yandex Database.
А как проходил переезд, с чем столкнулись по пути и как в процессе оптимизировали архитектуру всего сервиса, показывает Андрей Борунов, руководитель группы разработки базовых сервисов в Авто.ру.
В докладе Андрей рассказал:
Подписывайтесь:
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥11👍6❤2
Мы хотели ускорить сетевую диагностику в приложении, а для этого уменьшили интервал запросов с 5 минут до 30 секунд. Логично предположить: раз клиенты стали ходить в 10 раз чаще, то и нагрузка вырастет в 10 раз. Мы подготовили инфраструктуру под 50 000 RPS, но после релиза увидели лишь 25 000.
Оказалось, что наша модель была слишком простой. На масштабе миллионов пользователей поведение системы описывается не линейной, а более сложной зависимостью. А чтобы понять её, мы построили вероятностную модель, основанную на времени жизни сессии пользователя.
Подписывайтесь:
Please open Telegram to view this post
VIEW IN TELEGRAM
❤9🔥4🥰1🤯1
Сеть помогает строить агентов, а агенты помогают строить сети!
Подписывайтесь:
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5❤2🥴2👏1