CXX95 Telegram 36
#madskillz и #video

Успех применения идиомы Read-Copy-Update в C++

В видео За полгода - C++ Погода разработчик Яндекс.Погоды Дмитрий Старков рассказывает о переезде погодных микросервисов на C++ 🌤

До переезда Погода разрабатывалась на Node.JS + Memcached и отвечала за 300мс в 99 перцентиле. Это было медленно даже с кэшем, а после улучшения погодных предсказаний кэш стал сильно разъезжаться с реальными данными 👎🏻

Чтобы ускориться и улучшить утилизацию CPU, решили переписать на C++.
Для быстроты данные держатся in-memory, не в СУБД.

В памяти программа держит погодное состояние, которое регулярно читается (по GET-запросам от пользователей) и обновляется (по POST-запросам от поставщиков данных).

Обычный подход - shared_ptr:
std::shared_ptr<State> state;

И использование std::mutex с std::lock_guard для безопасного чтения/записи.

Более быстрый подход - использование std::shared_mutex и std::shared_lock (для читателей) и std::unique_lock (для писателей)

Однако такой подход все равно был недостаточно быстрым (в видео есть графики со "спайками"). Поэтому применили lock-free идиому Read-Copy-Update. Состояние живет тут:
std::atomic<std::shared_ptr<State>> state;
И читатель атомарно копирует объект, лежащий внутри std::atomic, прежде чем как-то с ним работать. Писатель также атомарно изменяет объект.

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

Переписывание обернулось успехом - при возросшем (за время переписывания) в 1.5 раза RPS Погода отказалась от рассинхронизирующих кэшей и стала отвечать за 30мс на 99 перцентиле!



tgoop.com/cxx95/36
Create:
Last Update:

#madskillz и #video

Успех применения идиомы Read-Copy-Update в C++

В видео За полгода - C++ Погода разработчик Яндекс.Погоды Дмитрий Старков рассказывает о переезде погодных микросервисов на C++ 🌤

До переезда Погода разрабатывалась на Node.JS + Memcached и отвечала за 300мс в 99 перцентиле. Это было медленно даже с кэшем, а после улучшения погодных предсказаний кэш стал сильно разъезжаться с реальными данными 👎🏻

Чтобы ускориться и улучшить утилизацию CPU, решили переписать на C++.
Для быстроты данные держатся in-memory, не в СУБД.

В памяти программа держит погодное состояние, которое регулярно читается (по GET-запросам от пользователей) и обновляется (по POST-запросам от поставщиков данных).

Обычный подход - shared_ptr:

std::shared_ptr<State> state;

И использование std::mutex с std::lock_guard для безопасного чтения/записи.

Более быстрый подход - использование std::shared_mutex и std::shared_lock (для читателей) и std::unique_lock (для писателей)

Однако такой подход все равно был недостаточно быстрым (в видео есть графики со "спайками"). Поэтому применили lock-free идиому Read-Copy-Update. Состояние живет тут:
std::atomic<std::shared_ptr<State>> state;
И читатель атомарно копирует объект, лежащий внутри std::atomic, прежде чем как-то с ним работать. Писатель также атомарно изменяет объект.

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

Переписывание обернулось успехом - при возросшем (за время переписывания) в 1.5 раза RPS Погода отказалась от рассинхронизирующих кэшей и стала отвечать за 30мс на 99 перцентиле!

BY C++95




Share with your friend now:
tgoop.com/cxx95/36

View MORE
Open in Telegram


Telegram News

Date: |

Activate up to 20 bots Hashtags are a fast way to find the correct information on social media. To put your content out there, be sure to add hashtags to each post. We have two intelligent tips to give you: But a Telegram statement also said: "Any requests related to political censorship or limiting human rights such as the rights to free speech or assembly are not and will not be considered." Judge Hui described Ng as inciting others to “commit a massacre” with three posts teaching people to make “toxic chlorine gas bombs,” target police stations, police quarters and the city’s metro stations. This offence was “rather serious,” the court said. Telegram channels enable users to broadcast messages to multiple users simultaneously. Like on social media, users need to subscribe to your channel to get access to your content published by one or more administrators.
from us


Telegram C++95
FROM American