Všechny projekty

Profesní projekt

Logistics Order Service

Přehled

High-throughput služba pro zpracování logistických objednávek navržená pro spolehlivé změny dat a resilient event-driven workflow. Kombinuje Dapper-based data access, messaging přes Azure Service Bus a Kafka, durable background tasks a New Relic observability.

Moje role

  • Vyvíjel jsem spolehlivý messaging a background processing pro .NET logistickou službu.
  • Vybudoval jsem znovupoužitelnou infrastrukturu pro Azure Service Bus publishing a consumers založenou na CloudEvents.
  • Implementoval jsem SQL-backed persistent-task framework s durable state, retries a recovery.
  • Migroval jsem tým z vlastní Kafka integrace na company-standard messaging library a pomohl stabilizovat její počáteční rollout.
  • V reliability-critical data-access paths jsem používal Dapper s explicitní správou transakcí.

Architektura a technologie

  • .NET služba pro zpracování logistických objednávek
  • Dapper-based data access s explicitními transaction boundaries
  • Azure Service Bus publishers a consumers využívající CloudEvents
  • Dynamické CloudEvent type resolution a dispatch do typed handlers
  • Kafka integrace přes company-standard Notino.Messaging library
  • SQL-backed persistent tasks s atomic batch claiming, retries a zombie recovery
  • Hangfire background processing
  • Structured logs, metrics a production observability přes New Relic

Technické výzvy

  • Zpracovávat vysoké objemy logistických objednávek a zároveň zachovat konzistenci mezi změnami dat a asynchronní prací.
  • Bezpečně zvládat transient messaging failures bez vytváření duplicate side effects.
  • Zabránit pomalým nebo chybujícím downstream consumers v blokování zpracování message topicu.
  • Adoptovat novou Kafka library a zároveň řešit počáteční performance a memory issues.

Rozhodnutí a kompromisy

  • Použil jsem explicitní event-type registry a typed handlers pro předvídatelné a bezpečné zpracování zpráv, kde přidání nového event type vyžaduje vědomou změnu kódu.
  • Použil jsem durable tasks k oddělení message acknowledgement od pomalejšího downstream processingu, takže neúspěšnou práci lze retryovat bez blokování message consumption. Tasks a související změny databáze se ukládaly ve stejné transakci, aby se neztratila navazující práce.
  • Použil jsem atomic batch claiming pro persistent tasks, aby concurrent high-throughput workers mohli pracovat bez ztráty durable task state.

Výsledky a přínos

  • Spolehlivý Azure Service Bus event delivery a processing s typed CloudEvent handlers, retries, loggingem a metrics.
  • Durable background-task execution s retries a recovery z opuštěných nebo zombie tasks.
  • Lepší correctness díky atomic task-and-data persistence a zároveň resilientnějšímu downstream processingu.
  • První týmové nasazení company-standard Kafka library, včetně příspěvků ke zlepšení performance a memory během rolloutu.
  • Reliability-focused a observable služba pro zpracování logistických objednávek.