Ishga tayyor · Transaction va idempotency

Daraja: Ilg'or

Pul, buyurtma va retry oqimlarida dubl yozuv hamda yarim holatni oldini olish.

Tushuntirish

## Ishdagi vazifa Bir use-case ichidagi bog‘liq DB o‘zgarishlari birga commit yoki rollback bo‘lishi kerak. Transaction odatda service chegarasida turadi. Tashqi HTTP chaqiruvini uzoq DB transaction ichida ushlab turish lock va timeout xavfini oshiradi.

## Idempotency Tarmoq uzilganda client bir xil POSTni qayta yuborishi mumkin. Idempotency key user/operation doirasida unique saqlanadi; bir xil key va payload oldingi natijani qaytaradi, boshqa payload conflict beradi. Unique constraint poygani DB darajasida to‘xtatadi. Optimistic locking bir-birining o‘zgarishini jim bosib ketmaslikka yordam beradi.

## Ishga tayyor mezon Nomzod concurrent ikki request va crash nuqtalarini test qiladi.

Kod misoli

@Transactional
public Receipt pay(long orderId, String key) {
  return attempts.find(key).map(Attempt::receipt)
      .orElseGet(() -> executeOnce(orderId, key));
}
// DB: UNIQUE(user_id, idempotency_key)

Keng tarqalgan xatolar

Mashqlar

Teglar: career-02, transaction, reliability, ishga-tayyor

Interaktiv ko'rinish (viktorina, izohlar, tarix)