Найти в Дзене
Шардирование vs репликация: масштабируем БД
Пример Представим себе БД услуг барбершопа в Южном Бутово. Данные лежат в одной табличке в PostgreSQL и используются внутренней системой для составления расписания мастеров, расчета премий и т. д. Бородачей в Бутово оказалось сильно больше, чем предполагалось в изначальном бизнес-плане. Владельцам барбершопа пришлось выкупить соседний спортзал и нанять еще 100 барберов. Бизнес процветает. Роскошные бороды заполонили Бутово. Однако, БД начала подводить: • из-за выхода из строя сервера БД 400...
5703 читали · 6 лет назад
Ищем самые дорогие query в PostgreSQL
PostgreSQL стал тормозить? Давай разбираться! Установка экстеншенов Для получения необходимой инфы, нужно поставить 2 extension: CREATE EXTENSION pg_stat_statements; CREATE EXTENSION pg_stat_kcache; Есть 2 ментальных ловушки Не хочу еще больше грузить бедную БД Оба этих расширения создают несколько системных табличек и вьюшек, в которые скидывается инфа о выполнении запросов. Звучит страшно? На практике при нагрузке 5000 запросов/сек включение этих экстеншенов никак не повлияло ни на CPU, ни на latency...
1680 читали · 6 лет назад
Простой способ анализировать GC в проде
Проблема У тебя есть сервер в продакшене. Он успешно работает какое-то время. Но ты стал замечать, что • раз в минуту он уходит в себя на пару секунд • через неделю работы падает с OutOfMemoryError • любые другие симптомы, которые намекают на проблемы с утилизацией памяти Значит пора уже разобраться со своим garbage collector. Тем более, что это совсем не сложно! План такой 1. Включаем специальные флажки JVM при следующем редеплое, чтобы она писала логи GC 2. Закачиваем логи на специальный бесплатный сайт gceasy...
1301 читали · 6 лет назад
Java GC: Mark-Sweep-Compact и поколения
Коротко о Mark-Sweep Чтобы чистить ненужные объекты GC делает так: 1. Обходит граф всех объектов в хипе (heap) и помечает их 2. Не помеченные объекты никто не использует - их можно удалить. Пример кода Рассмотрим такой код: Так будет выглядеть дерево зависимостей для каждого телефона Nokia. Коротко о поколениях Чтобы каждый раз не обходить полностью весь граф объектов, GC разделяет объекты на поколения: Объекты из Old generation хранятся в Old регионе GC. Объекты из Young generation хранятся в регионах Eden или Survivor...
1209 читали · 6 лет назад
Кэширование in-memory vs redis
Пример задачи: У нас есть сайт по учёту павлинов всего мира. Он неожиданно для всех стал безумно популярным и мы хотим масштабироваться. Мы храним информацию о павлинах в PostgreSQL в таблице peacock: * Новые павлины рождаются примерно 1 раз в секунду. * Различные запросы по этой таблице выполняются около 100 раз в секунду. Наш PostgreSQL спокойно выдерживает такую нагрузку. Но тут мы решили добавить на главную страницу сайта диаграмму распределения павлинов по зонам в стране пользователя в реальном времени...
1055 читали · 6 лет назад
Java web: от сокетов в сервлеты в spring web
Допустим мы хотим написать web-server с rest-like API на java, но пока не знаем никаких фреймворков, стандартов и библиотек. 1. Socket Первое, что мы можем сделать - реализовать полностью сами всю логику с нуля на сокетах. Socket - это такое понятие из TCP протокола. Это некое гнездо, которое может принимать/отправлять пакеты данных по сети на определенном порту. Нам нужно будет сделать примерно следующее: * установка/завершение TCP соединений с клиентами * поддержание пула соединений, чтобы сервер...
1626 читали · 6 лет назад
MapReduce: как и зачем?
Разбираем принципы работы MapReduce и пытаемся понять зачем он нужен на простом жизненном примере
6 лет назад