Size: a a a

Чат конференции HighLoad++

2019 November 10

Y

Yuran in Чат конференции HighLoad++
Phil Delgyado
А зачем открывать сотни коррекций в секунду? Это просто неправильный метод работы с любой базой.
Ну если речь про PHP, то тут всего 2 опции — либо держать постоянные соединения из каждого воркера (даже на одной машине воркеров может быть несколько сотен, а машин зачастую тоже сотни или тысячи), что быстро приводит к очень большому количеству соединений (сотни тысяч), либо постоянно открывать/закрывать соединения. Второй способ вполне нормально работает с MySQL, например, хотя и тоже не лишен недостатков.
источник

KD

Kirill D in Чат конференции HighLoad++
Phil Kulin
обратное я могу сделать на ходу. radix да, но писать сам не буду
Ты не понял мысль. Radix по reversed строке

*.google.com

m -> o -> c -> . -> e - > l - > g -> o -> o -> g -> . -> *

Много готовых реализаций будут минимизировать количество нод, пример выше просто для наглядности
источник

PD

Phil Delgyado in Чат конференции HighLoad++
Yuran
Ну если речь про PHP, то тут всего 2 опции — либо держать постоянные соединения из каждого воркера (даже на одной машине воркеров может быть несколько сотен, а машин зачастую тоже сотни или тысячи), что быстро приводит к очень большому количеству соединений (сотни тысяч), либо постоянно открывать/закрывать соединения. Второй способ вполне нормально работает с MySQL, например, хотя и тоже не лишен недостатков.
Да просто TLS открывать столько раз - уже плохо. И тогда локальный pgbouncer как раз оптимальное решение. Ну или выкинуть php
источник

p

pragus in Чат конференции HighLoad++
Phil Delgyado
Да просто TLS открывать столько раз - уже плохо. И тогда локальный pgbouncer как раз оптимальное решение. Ну или выкинуть php
А если у нас просто много клиентов к бд?
источник

PD

Phil Delgyado in Чат конференции HighLoad++
pragus
А если у нас просто много клиентов к бд?
Так зачем каждый раз соединение устанавливать, это дорого.
источник

p

pragus in Чат конференции HighLoad++
Phil Delgyado
Так зачем каждый раз соединение устанавливать, это дорого.
Не каждый раз. Но даже с пулингом на клиенте запросто может быть сотня соединений с хоста, а хостов может быть много.
источник

PD

Phil Delgyado in Чат конференции HighLoad++
Yuran
Возможно, конечно, в PostgreSQL этот запрос не будет пытаться залочить одни и те же строки, а будет как-то более грамотно (как?) сериализовать доступ к таблице, но тогда мне об этом интересно было бы послушать, т.к. очередями на базах данных я занимался довольно много в своей жизни :).
Там, конечно, ставится блокировка. Но при skip locked сериализации не происходит, берется следующая свободная.
У меня на дешевом железе получалось до 2000 TPS по 10ms.
Количество коннекций важно и если обработка события долгая и в транзакции (а ради транзакции это и имеет смысл городить), то постгрессу плохо. Но заметим, что даже 100 процессов по 10ms - это 10K tps
источник

p

pragus in Чат конференции HighLoad++
источник

PD

Phil Delgyado in Чат конференции HighLoad++
pragus
Не каждый раз. Но даже с пулингом на клиенте запросто может быть сотня соединений с хоста, а хостов может быть много.
А зачем 100 соединений с хоста? Длинные транзакции?
Существенно число одновременных операций, а оно всяко будет меньше.
источник

p

pragus in Чат конференции HighLoad++
Phil Delgyado
Там, конечно, ставится блокировка. Но при skip locked сериализации не происходит, берется следующая свободная.
У меня на дешевом железе получалось до 2000 TPS по 10ms.
Количество коннекций важно и если обработка события долгая и в транзакции (а ради транзакции это и имеет смысл городить), то постгрессу плохо. Но заметим, что даже 100 процессов по 10ms - это 10K tps
10ms - это server time или же учитывает roundtrip до клиента?
источник

PD

Phil Delgyado in Чат конференции HighLoad++
Это чистая задержка на клиенте от взятия задачи внутри транзакции до коммита. т.е. чистое время полезной работы на клиенте. Для внутреннего http call и простой логики более чем.
источник

PD

Phil Delgyado in Чат конференции HighLoad++
Мне хватало 1000 в пике по ТЗ, так что двукратный запас был норм. Можно уменьшать время операций за счёт увеличения числа событий. Тогда будет 5000, но по 4ms...
источник

PD

Phil Delgyado in Чат конференции HighLoad++
Если событий нужно больше, то лучше думать о других сценариях, конечно. Со своими tradeoff
источник

EK

Eldar Karazhas in Чат конференции HighLoad++
Коллеги, а предложения о работе тут можно делать? Очень нужен грамотный девопс в офис в Мск с хорошим знанием кубера. Денюх даем по рынку.
источник

PD

Phil Delgyado in Чат конференции HighLoad++
Так это тоже специальный плагин для тредпула. Pgbouncer просто гибче (можно ставить независимо и даже бывают сценарии, когда это имеет смысл. Я видел доклады с цепочкой из pgbouncer.... Обычно, конечно,  ставят прямо на машину с pg).
источник

p

pragus in Чат конференции HighLoad++
Phil Delgyado
Так это тоже специальный плагин для тредпула. Pgbouncer просто гибче (можно ставить независимо и даже бывают сценарии, когда это имеет смысл. Я видел доклады с цепочкой из pgbouncer.... Обычно, конечно,  ставят прямо на машину с pg).
Оно из коробки
источник

p

pragus in Чат конференции HighLoad++
Phil Delgyado
Там, конечно, ставится блокировка. Но при skip locked сериализации не происходит, берется следующая свободная.
У меня на дешевом железе получалось до 2000 TPS по 10ms.
Количество коннекций важно и если обработка события долгая и в транзакции (а ради транзакции это и имеет смысл городить), то постгрессу плохо. Но заметим, что даже 100 процессов по 10ms - это 10K tps
Интереснее кейсы вроде 1-2m tps, потому что современное железо вполне позволяет по iops
источник

PD

Phil Delgyado in Чат конференции HighLoad++
pragus
Оно из коробки
Так pgbouncer тоже из коробки )
источник

PD

Phil Delgyado in Чат конференции HighLoad++
pragus
Интереснее кейсы вроде 1-2m tps, потому что современное железо вполне позволяет по iops
А тут я даже не знаю, кто такое с поддержкой трнзакций может. Подозреваю, что никто.
источник

PD

Phil Delgyado in Чат конференции HighLoad++
Мне интересны сценарии, когда взять событие, изменить данные, отправить события и закончить обработку - в одной транзакции. И тут я не знаю решений, где и 100k TPS можно, вне зависимости от железа.
источник