Цього тижня буду багато писати про розподілені системи та підходи, які часто в них використовуються. Почну з одного з найважливіших понять у мікросервісах - ідемпотентності. Це властивість операції, за якої її повторне виконання має такий самий кінцевий результат, як і одноразове виконання.
Найпростіший шлях - розібрати цю концепцію на прикладі
REST API, оскільки семантика HTTP чітко описує методи відносно ідемпотентності.При багаторазовому виклику методів
GET, PUT, DELETE стан системи буде таким самим, як і при одноразовому виклику. Тоді як метод POST змінює стан системи, створюючи нову сутність при кожному виклику.В розподілених системах ми маємо опрацьовувати різні сценарії, де ідемпотентність відіграє ключову роль:
-
Timeouts можуть провокувати повторні запити;- Брокери повідомлень з
at least once гарантією доставки можуть дублювати повідомлення;- Операції можуть виконуватися повторно через
retry-механізми;- Нестабільність системи може запускати повторне опрацювання розподілених транзакцій;
Це лише декілька прикладів ситуацій, у яких нам потрібно забезпечувати ідемпотентність в мікросервісній архітектурі.