by mheydt
17.
November 2009 01:12
>
- All requests go through the load balancer
- Idempotency provided through compensating messages to other queues to provide for replay
- Generally try to build for idempotency
- CRUD is generally not idempotenty, but using integrity keys can be
- issue is with data changing underneath
- Azure queues do not participate in DTS
- Poison Message Handling / Zombie Messages - write message id's to persistent store
- Make sure poison test is at the top of your processing, but should be handled prior to any other code
- Therefore, another worker role that does this before passing messages to other roles, or
- in a base class or your worker role
- dynamic work type in message to route to specific workers
- Key points for dynamic workers
- smart polling model (each poll costs $$)
- use app domains to separate loaded types
- MapReduce pattern
- reduce large problem to small pieces, process, aggregate results
- very parallelizable
- map -> group -> reduce
- Generally processor intensive / ram light
- Summary
- Use async
- Use queues, but make sure for idempotency and compensation
- watch for poison messages
- Dynamic worker provide scalability
f61e2b0d-7f34-4e01-a906-9c80403f440d|0|.0
Tags:
Azure