Performance matters!
1.19K subscribers
11 photos
2 files
63 links
Канал про SRE, Linux и производительность от Александра Лебедева (@alebsys).

Разбираю сбои, ускоряю системы, делюсь опытом.

🔹 Обо мне: alebedev.tech/about
🧑‍💻 Менторинг: alebedev.tech/mentoring
Download Telegram
Сложные системы тяготеют к отказам.

Отказы такое же свойство систем, как надёжность, наблюдаемость, масштабируемость и т. д.

Работа Richard I. Cook How Complex Systems Fail освещает:

- природу отказов;
- двойственную роль оператора системы - как защитник от хаоса, так и непосредственно причина его появления;
- заблуждения пост-анализа инцидентов - всегда есть совокупность причин, пост-знание всегда предвзято;
- отказы как следствие возрастания сложности систем.


Полезное чтение для построения причинно-следственных связей.

tags: #reliability #sre_theory
👍3
About Pool Sizing

Заметка из wiki HikariCP про установку "правильного" размера пула коннектов к базам данных.

Основные мысли

1. Последовательное исполнение на одном CPU двух тредов всегда быстрее "параллельного" (потери на context-swithing и cache miss).

2. БОльшее кол-во тредов нежели доступных CPU ведет к замедлению системы (при идеальной CPU-bound модели использования);

3. Как только в уравнение добавляются IO-операции (диск, сеть, memory), правило меняется - чем дольше треды способны находиться в заблокированном состоянии (IO-wait), тем бОльший пул коннектов следует выставлять;

Сообщество PostgreSQL ввело в оборот формулу:
connections = ((core_count * 2) + effective_spindle_count)


* core_count должен учитывать только физически ядра (никакого вам HT);
* effective_spindle_count равен 0 если вся БД способна поместиться в кеш и приближается к фактическому кол-ву дисков по мере снижения cache hit rate.

Axiom: You want a small pool, saturated with threads waiting for connections.

P.S. думаю, что подход выше будет справедлив для всех типов коммунальных ресурсов.

tags: #performance #reliability
👍4