Topik temu duga representatif

Bagaimanakah anda mereka bentuk Saga untuk pemenuhan pesanan pelbagai perkhidmatan?

Reka bentuk sistemSukar
Pasukan Editorial Offer.ccDiterbitkan Dikemas kini

Soalan

Satu pesanan mesti menempah inventori, membenarkan pembayaran, membuat penghantaran, dan menggunakan kupon merentasi perkhidmatan dengan pangkalan data bebas tanpa komit dua fasa (two-phase commit). Reka bentuk Saga dan terangkan orkestrasi, percubaan semula, pampasan, tamat masa, campur tangan manusia, dan pertanyaan status.

1. Soalan

Selepas pengguna menghantar pesanan, perkhidmatan inventori, pembayaran, penghantaran, dan kupon mesti menyelesaikan pemenuhan pesanan. Mana-mana langkah boleh gagal disebabkan oleh peraturan perniagaan atau kerosakan rangkaian, dan transaksi jauh yang telah dikomit tidak boleh diundur balik (rolled back). Reka bentuk Saga yang berakhir dengan CONFIRMED atau CANCELLED, sambil menerangkan setiap transaksi tempatan dan pampasan.

2. Kekangan dan penjelasan

  • Setiap perkhidmatan hanya menjalankan transaksi ACID tempatan terhadap pangkalan datanya sendiri.
  • Ketekalan akhirnya (eventual consistency) boleh diterima, tetapi pegangan inventori dan pembayaran tidak boleh kekal selama-lamanya.
  • Percubaan semula boleh melaksanakan sesuatu langkah lebih daripada sekali; perkhidmatan mesti melindungi keadaan dengan kunci keidempotenan (idempotency keys).
  • Bezakan kegagalan teknikal yang boleh dicuba semula, penolakan perniagaan yang tidak boleh dicuba semula, dan kegagalan pampasan yang memerlukan campur tangan manusia.

3. Pendekatan teras

Saga menghuraikan transaksi yang panjang kepada transaksi tempatan yang tersusun T1 ... Tn. Setiap langkah yang berjaya merekodkan kemajuan dan mencetuskan langkah seterusnya; jika langkah terkemudian gagal, langkah yang telah selesai akan menjalankan pampasan Ck ... C1 dalam susunan terbalik. Pampasan ialah operasi perniagaan baharu, seperti melepaskan inventori, membatalkan kebenaran pembayaran, membatalkan penghantaran, atau mengembalikan kupon, dan bukannya pengunduran balik (rollback) pangkalan data.

Saga yang diorkestrasikan mempunyai penyelaras tahan lasak (durable coordinator) yang menyimpan keadaan dan tindakan seterusnya, yang sesuai untuk keperluan aliran kerja eksplisit, tamat masa, dan campur tangan manusia. Koreografi berasaskan peristiwa menghapuskan penyelaras pusat tetapi menjadikan keterlihatan dan kawalan kitaran lebih sukar. Dalam mana-mana gaya, bawa saga_id, step_id, versi, dan kunci keidempotenan pada setiap arahan dan peristiwa.

4. Pelaksanaan rujukan

text
start(order):
  saga = create_saga(order.id, state="RESERVE_STOCK")
  dispatch(saga, "ReserveStock")

on_step_result(saga_id, step_id, result):
  saga = load_and_lock(saga_id)
  require result.version == saga.version + 1
  if result.success:
    saga.completed_steps.append(step_id)
    saga.version += 1
    next = next_step(saga)
    persist(saga)
    dispatch(next) if next else finish_confirmed(saga)
  else if result.business_rejection:
    saga.state = "COMPENSATING"
    persist(saga)
    dispatch(compensation_for_last_completed(saga))
  else:
    schedule_retry_or_timeout(saga, step_id)

on_compensation_result(saga_id, step_id, result):
  record_attempt(saga_id, step_id, result)
  if result.success:
    dispatch(previous_compensation(saga))
  else:
    mark_manual_intervention(saga, reason=result.error)

5. Ketekalan dan ketepatan

Keadaan penyelaras mestilah tahan lasak atau sebarang kegagalan sistem boleh menghilangkan tindakan seterusnya. Setiap arahan dan peristiwa menggunakan kunci keidempotenan; pengguna (consumer) merekodkan step_id yang telah diproses sebelum mengkomit perubahan perniagaannya, menghalang percubaan semula daripada menempah inventori sebanyak dua kali. Terdapat juga jurang penghantaran antara menyelesaikan sesuatu langkah dan menerbitkan arahan seterusnya, jadi outbox, barisan gilir yang boleh dipercayai, atau CDC diperlukan untuk keterlihatan akhirnya.

Pampasan biasanya berjalan dalam susunan kejayaan yang terbalik, tetapi tidak setiap tindakan mempunyai songsangan yang tepat. Sesetengah kesan memerlukan pelarasan perniagaan, seperti bayaran balik dan bukannya menarik balik pemberitahuan yang telah dihantar. Pertanyaan status harus mendedahkan langkah semasa, langkah yang telah selesai, bilangan percubaan semula, dan sebab campur tangan manusia daripada melaporkan "sedang diproses" sebagai kejayaan.

6. Tindakan susulan dan perangkap

  • Jangan huraikan Saga sebagai pengunduran balik atomik merentasi pangkalan data; ia menyediakan ketekalan akhirnya yang boleh dipulihkan.
  • Pampasan juga boleh gagal, jadi tambahkan percubaan semula, dead letters, amaran, dan pengambilalihan manusia dan bukannya gelung automatik tanpa henti.
  • Kunci teragih global meluaskan domain kegagalan dan tidak boleh membatalkan komit perniagaan jauh.
  • Tentukan TTL untuk pegangan inventori dan pembayaran; lepaskannya dengan pemasa atau peristiwa apabila Saga tamat tempoh.

7. Bacaan lanjut

Bandingkan orkestrasi dengan koreografi: orkestrasi memusatkan keadaan, susunan, dan tamat masa, manakala koreografi menyahgandingkan perkhidmatan melalui peristiwa tetapi menjadikan penjejakan hujung ke hujung lebih sukar. Bincangkan kesan sampingan yang tidak boleh dipampas, kunci semantik, konflik versi, log audit, dan keadaan apabila transaksi pangkalan data tunggal adalah lebih mudah.

8. Mata pemarkahan temu duga

Boleh menghuraikan transaksi tempatan

Calon harus menyenaraikan langkah inventori, pembayaran, penghantaran, dan kupon serta menyatakan bahawa setiap perkhidmatan hanya mengkomit transaksi tempatannya sendiri.

Boleh mereka bentuk mesin keadaan pampasan

Mereka harus menunjukkan laluan kejayaan, kegagalan, dan pampasan terbalik, membezakan penolakan perniagaan, percubaan semula teknikal, dan pengambilalihan manusia.

Boleh mengendalikan keidempotenan dan pemesejan yang boleh dipercayai

Mereka harus menggunakan saga_id, step_id, kunci keidempotenan, dan outbox atau barisan gilir yang boleh dipercayai untuk menangani kegagalan penyelaras dan jurang penghantaran arahan.

Boleh menyatakan sempadan perniagaan

Mereka harus mengakui bahawa pampasan bukanlah pengunduran balik (rollback) dan membincangkan TTL, kesan sampingan yang tidak boleh dipampas, pertanyaan status, dan pengalaman pengguna terhadap ketekalan akhirnya.

Sumber awam

Soalan berkaitan

Alat temu duga berkaitan

Gunakan Jawab untuk jawapan reka bentuk sistem

Jelaskan keperluan terlebih dahulu, kemudian teruskan dengan skala, seni bina, pilihan komponen dan pertukaran (trade-off).

Lihat alat