Size: a a a

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

2020 September 03

S

Sergei in Чат конференции HighLoad++
Alexey Er
Http между сервисами используется вовсю. Помимо всяких самодельных JSONRPC/SOAP/GraphQL он применяется и для работы с "общеупотребительными" движками: RabbitMQ, Clickhouse и т.п. Про Кафку не помню, но не исключено, что и там.

Другое дело, что это часто HTTP/2 или 3, уже допиленные для быстрой многопоточной работы.
Спасибо, подскажите, если есть возможность например напрямую обращаться к апи хранилища, стоит это использовать, вместо вызова апи сервера-посредника? Или это некритично?
источник

AE

Alexey Er in Чат конференции HighLoad++
Sergei
Спасибо, что проявили интерес. Задача такая. В микросервисной архитектуре происходят пользовательские события, н-р логин, регистрация, изменение данных. Эти события нужно доставлять в систему аналитики. Микросервисы ничего не знают про эту систему, они отправляют данные о событиях в кафку. Соответственно события независимые, т.е. понятно, что обычно происходит регистрация, а уже потом изменение данных н-р, но сейчас последовательность не важна. Чтобы система аналитики могла работать с эвентом, его нужно обогатить пользовательской информацией, которую достают через http API-call.
Текущая реализация такая что, есть один большой сервис, который:
- забирает событие из кафки [Обработка других событий блокируется, т.к. нужно в кафку закоммитить что эвент прочитан, это происходит только когда успешно завершится его обработка]
- лезет в redis-кэш за пользовательскими данными [Если данных не хватает, делается API-call, и результат складывается в redis. Вопрос устаревания кэша решается тем, что если пользовательские данные изменились, должен быть обработан кафка-эвент, откуда берутся новые значения и обновляется кэш. Если API-call падает, то происходит его перезапуск. Пока неясно, сколько раз автор планирует его перезапускать. Но в качестве примера подобного успешного решения он приводит другой свой проект с функцией retryForever, где delay между ретраями начинается с 15 сек и в максимуме достигает 2 мин]
- насыщает событие,
- отправляет в аналитику.
Как я понял, последовательность обработки вам не важна, так что можно было бы всё асинхронно делать. Но и в таком виде можно использовать партиции Кафки, повесив на каждую свой процесс с синхронным обработчиком.
источник

AE

Alexey Er in Чат конференции HighLoad++
Sergei
Спасибо, подскажите, если есть возможность например напрямую обращаться к апи хранилища, стоит это использовать, вместо вызова апи сервера-посредника? Или это некритично?
Суть вопроса непонятна.
Если по буквам смотреть - ну, как удобно, так и обращайтесь. Апи-сервис, наверно, отличается от нативного - вот сравните эти различия, что лучше подходит. И в Апи может быть доп. функционал (авторизация, защита, "обогащение" и т.п.), без которого работать вообще нельзя.
источник

S

Sergei in Чат конференции HighLoad++
ок, спасибо
источник

S

Sergei in Чат конференции HighLoad++
Подскажите плиз еще такой вопрос, бывают ли случаи что в высоконагруженных системах, простои более 5 минут и ретраи с 2 мин слипом считается ожидаемым, или такие системы уже не относят к высоконагруженным?
источник

EK

Eugene Kuzovlev in Чат конференции HighLoad++
Зависит от бизнес кейсов эксплуатации. Например, фондовая биржа. Высоконагруженная? да, однозначно. нужно ли 24/7? нет.

Или в обратную сторону. Какая-нибудь МПС типа Визы. Высоконагруженная? более чем. Нужно ли 24/7? обязательно.
источник

PD

Phil Delgyado in Чат конференции HighLoad++
Sergei
Спасибо, что проявили интерес. Задача такая. В микросервисной архитектуре происходят пользовательские события, н-р логин, регистрация, изменение данных. Эти события нужно доставлять в систему аналитики. Микросервисы ничего не знают про эту систему, они отправляют данные о событиях в кафку. Соответственно события независимые, т.е. понятно, что обычно происходит регистрация, а уже потом изменение данных н-р, но сейчас последовательность не важна. Чтобы система аналитики могла работать с эвентом, его нужно обогатить пользовательской информацией, которую достают через http API-call.
Текущая реализация такая что, есть один большой сервис, который:
- забирает событие из кафки [Обработка других событий блокируется, т.к. нужно в кафку закоммитить что эвент прочитан, это происходит только когда успешно завершится его обработка]
- лезет в redis-кэш за пользовательскими данными [Если данных не хватает, делается API-call, и результат складывается в redis. Вопрос устаревания кэша решается тем, что если пользовательские данные изменились, должен быть обработан кафка-эвент, откуда берутся новые значения и обновляется кэш. Если API-call падает, то происходит его перезапуск. Пока неясно, сколько раз автор планирует его перезапускать. Но в качестве примера подобного успешного решения он приводит другой свой проект с функцией retryForever, где delay между ретраями начинается с 15 сек и в максимуме достигает 2 мин]
- насыщает событие,
- отправляет в аналитику.
А. Так надо сделать много (пару тысяч) партиций на топике с входящими сообщениями и завести столько же консьюмеров. Каждый будет работать в режиме 'по одному', в сумме - параллельно. Тогда даже при обработке в секунду на запрос получите 2krps.
Хотя я бы обрабатывал пачками и делал бы кластеризацию по userID и кэширование.
источник

Y

Yuran in Чат конференции HighLoad++
Sergei
Подскажите плиз еще такой вопрос, бывают ли случаи что в высоконагруженных системах, простои более 5 минут и ретраи с 2 мин слипом считается ожидаемым, или такие системы уже не относят к высоконагруженным?
Мне кажется, хайлоад все понимают по-своему. Определение, которое я использую, такое: если пользовательскую нагрузку не получается обработать на одном сервере даже на самом мощном доступном железе, и приходится использовать шардинг в базе данных или в сервисах, то здесь начинается хайлоад. Время простоев и ретраи к этому имеют мало отношения.
источник

PD

Phil Delgyado in Чат конференции HighLoad++
Sergei
Подскажите плиз еще такой вопрос, бывают ли случаи что в высоконагруженных системах, простои более 5 минут и ретраи с 2 мин слипом считается ожидаемым, или такие системы уже не относят к высоконагруженным?
Ну, я обычно ставлю небольшой timeout на запросы (меньше секунды). Большие ожидания говорят о недоступности сервиса, а значит при проектировании появилась spof, что обычно нехорошо.
источник

Y

Yuran in Чат конференции HighLoad++
(но в высоконагруженных системах время простоя зачастую обходится весьма недешево для бизнеса, поэтому часто (но не всегда!) считается, что высоконагруженные системы должны работать 24/7 с минимальными простоями. Однако эти требования не являются технически обоснованными, обычно это требования бизнеса)
источник

DM

Dmitry MiksIr in Чат конференции HighLoad++
Sergei
Спасибо, что проявили интерес. Задача такая. В микросервисной архитектуре происходят пользовательские события, н-р логин, регистрация, изменение данных. Эти события нужно доставлять в систему аналитики. Микросервисы ничего не знают про эту систему, они отправляют данные о событиях в кафку. Соответственно события независимые, т.е. понятно, что обычно происходит регистрация, а уже потом изменение данных н-р, но сейчас последовательность не важна. Чтобы система аналитики могла работать с эвентом, его нужно обогатить пользовательской информацией, которую достают через http API-call.
Текущая реализация такая что, есть один большой сервис, который:
- забирает событие из кафки [Обработка других событий блокируется, т.к. нужно в кафку закоммитить что эвент прочитан, это происходит только когда успешно завершится его обработка]
- лезет в redis-кэш за пользовательскими данными [Если данных не хватает, делается API-call, и результат складывается в redis. Вопрос устаревания кэша решается тем, что если пользовательские данные изменились, должен быть обработан кафка-эвент, откуда берутся новые значения и обновляется кэш. Если API-call падает, то происходит его перезапуск. Пока неясно, сколько раз автор планирует его перезапускать. Но в качестве примера подобного успешного решения он приводит другой свой проект с функцией retryForever, где delay между ретраями начинается с 15 сек и в максимуме достигает 2 мин]
- насыщает событие,
- отправляет в аналитику.
Так а в чем вопрос то? Что этот remote api упадет? Ну все падает в этой жизни, в вашем случае даже не столь важно, что упало, сколь важно - как быстро поднятно. Мониторинги, дежурная смена и тп.
Вообще все начинается с бизнес требований. Как быстро данные должны дойти до аналитики в нормальном режиме. Какой аптайм всего этого требуется. Есть ли  понятия устаревания событий, когда они уже не нужны в аналитике. Что важнее - доставить данные не обогащенные, но быстрее, или можно задержать данные, но без обогащения они не нужны.
источник

Y

Yuran in Чат конференции HighLoad++
Всё упирается в стоимость простоя и потери данных против стоимости разработки системы, которая будет максимально доступна и максимально не будет терять данные. Этот трейдофф тоже не технический: насколько для бизнеса критична высокая доступность и сохранность данных, настолько и нужно в это вкладываться. Например, при отправке электронной почты ретраи раз в несколько минут — это в целом норм. При этом писем через эту систему может проходить столько, что на одном сервере это невозможно обработать, и тогда это будет хайлоад, но с ретраями в несколько минут.
источник

S

Sergei in Чат конференции HighLoad++
> Так а в чем вопрос то?

Вопрос скорее в том, как сделать правильнее, не имея опыта в этом :) Поэтому было интересно услышать про опыт людей
источник
2020 September 05

N

Nikolay in Чат конференции HighLoad++
Кто знает как делают ленту новостей в таких системах , как vk, facebook и т.д
источник

Y

Yuran in Чат конференции HighLoad++
Nikolay
Кто знает как делают ленту новостей в таких системах , как vk, facebook и т.д
Что конкретно интересует :)?
источник

N

Nikolay in Чат конференции HighLoad++
Yuran
Что конкретно интересует :)?
она же не налетку генериться? вот так понимаю, что у пользователя есть его друзья. Друзья что-то публикуют. Наверное этим публикациям проставляют рейтинг?  как часто рейтинг поста меняется?
источник

SR

SDKiller Ru in Чат конференции HighLoad++
кто в последний раз в ленте видел посты своих друзей?
источник

SR

SDKiller Ru in Чат конференции HighLoad++
один "рекомендованный контент"
источник

ДУ

Денис Устинов... in Чат конференции HighLoad++
SDKiller Ru
кто в последний раз в ленте видел посты своих друзей?
Так там две ленты
источник

ДУ

Денис Устинов... in Чат конференции HighLoad++
Одна для рекомендаций, другая для друзей и подписок
источник