Writing Reliable, Transacted Applications with Windows

Download Report

Transcript Writing Reliable, Transacted Applications with Windows

Windows Communication Foundation (“Indigo”):
Writing Reliable and Transacted Distributed Applications
Shy “BAD-P” Cohen
COM307
Program Manager
Connected Systems Division
Microsoft Corporation
Moving To Service Orientation
Threads versus Messages
BAD P! BAD, BAD P!
Why don’t you come back? Please hurry… ♫
Keeping it Consistent
All together now!
2
Challenges Of Implementing
Reliable Distributed Systems
Communication Issues
Network unavailable
Connection drops
Network loses
messages
Messages may arrive
out of order
Messages may take
different paths
Retried messages may
arrive after the ones that
followed them
Processing Issues
Messages lost when
processing fails
Interrelated Messages
processed individually
Failure may leave the
distributed system in an
inconsistent state
Messages can’t be
retried without side
effects
Retried messages arriving
twice, reordering, etc.
3
Making It Reliable
Reliable
Sessions
Transactions
Queues
4
Sessions
Service Instance
Channel
Proxy
Session
Channel
5
Session State And Lifetime
8
Reliable Sessions
Assurances
Messages are delivered exactly once, in the
same order as they were sent
Alternatively, you can choose to have them delivered in
order in which they were received
Resilient to
Transport disconnections
SOAP or transport intermediary failures
Features
Connection verification and maintenance
Congestion and flow control
9
Reliable Sessions
Enabling
Provided on Standard Bindings
netTcpBinding
(off by default)
wsHttpBinding
(off by default)
wsDualHttpBinding (always on)
Can be added to any custom binding
<bindings>
<customBinding>
<binding configurationName=”ReliabilityHTTP”>
<reliableSession/>
<httpTransport/>
</binding>
</customBinding>
</bindings>
10
Ordered And Unordered
Reliable Sessions
11
Keeping It Consistent
Atomic Transactions versus Compensation
Trading off coupling and complexity
Atomic Transactions: simpler, tighter coupling
Compensation: more complex, looser coupling
Both have their place
Choose the right model for the situation
13
Transacted Operations
18
Transactions
Summary
Service Developer (Code)
Declares willingness to participate in an incoming (client
initiated) transaction on contract operations
No transaction sharing on one-way operations! *
Specified implementation behavioral aspects at the
service and method level
Client Developer (Code)
Creates transactions
Includes services & local TX-ed resources in their scope
Service Administrator (Config)
On/Off switch controls TX flow support for an endpoint
It’s about Trust
19
Queues
Increase availability
Mask network or service unavailability
Support scale out
Multiple readers from a single queue
Provide load leveling
Handle average, not peak load
Are a building block for compensating business
transactions
Reliable, durable messaging to capture distributed
state changes
Need to compensate for errors
20
Queues
Make one-way operations possible even when the
service isn’t available
Supported via MSMQ
Programmer uses regular WCF channels
IT Pro manages the familiar MSMQ service
Service
Client
MSMQ
MSMQ
21
Basic Queued Messaging
24
Queues
Composing with TXs
Operation requires 2 transactions
TX between client and queue to send
Another TX between service and queue
to receive
If a transaction aborts
Message sent under the TX are discarded
Messages received under the TX are retried
25
Queues
MEPs
Datagrams
Standalone messages
Can be sent and received with or without
using a transaction
“Exactly Once” or “Best Effort” delivery
“Sessiongram”
A grouping of related messages
Always processed together under a single TX
“Exactly Once, In Order” delivery
26
Queues, Transactions,
And Sessions
29
Queues
The dead letter queue
Stores messages that could not be delivered
Can be processed like any other queue
New in Windows Vista: User specified DLQ
If not specified, the default is the system-wide DLQ
With a shared DLQ, processing service needs to
implement all the contracts for all the messages
going into it
Alternatively, use System.Messaging to process
messages from the Dead Letter Queue
30
Queues
Poison messages
Messages for whom processing fails,
repeatedly, are considered “poison”
Failure = the processing transaction aborted
Message properties indicate how many
times a message was delivered
MsmqMessageProperty msmqMessageProperty;
msmqMessageProperty = OperationContext.Current
.IncomingMessageProperties[MsmqMessageProperty.Name]
as MsmqMessageProperty;
if (prop.TotalAbortCount > myRetryThreshold) { /* Do something */ }
31
Queues
Poison messages
New in Windows Vista: Automatic
protection against repeated failures
By limiting NUMBER
of retries
By controlling HOW
retries are done
3 retry cycles
1st attempt
2 retries
<netProfileMsmqBinding>
<binding configurationName=“QB"
maxImmediateRetries="2"
retryCycleDelay="0:0:10"
maxRetryCycles="3"
rejectAfterLastRetry="false" />
</netProfileMsmqBinding>
10 seconds
between attempts
To Poison
Message Queue
32
Q’s
Failure compensation
Set up compensation services on the
sending and receiving sides
<binding configurationName="MyQueueBinding“
...
timeToLive="0:2:0"
deadLetterQueue= "net.msmq://MyClient/private/myCustomDLQ"
/>
<endpoint
address ="net.msmq://MyServer/private/MyQueue;poison/”
bindingSectionName="netProfileMsmqBinding"
bindingConfiguration ="MyQueueBinding"
contractType="Queue.IPurchaseOrder, Queues" />
33
When Faced With Challenges
WCF provides sophisticated session mgmt
Session lifetime and associated state
WCF assures
… that messages arrive exactly once
… in the order in which they were sent
WCF provides transacted state management
Computation and communication
WCF provides high availability
Durability, atomicity, and error handling
34
Community Resources
At the PDC
More on Windows Communication Foundation
Attend the other WCF presentations
Talk to me and the other WCF folks at the Lounge, Ask The Experts,
or at any other time
More on System.Transactions
Go talk to Max (COM lounge) or Jim (FUN lounge)
Attend FUN320 tomorrow
Do the HOLs: WCF HOLs, FUN HOL13 (TXF & TXR)
After the PDC
MSDN dev center: http://msdn.microsoft.com/webservices/
MSDN Forums
Channel 9 tag: http://channel9.msdn.com/tags/Indigo
Contact me: [email protected]
35
© 2005 Microsoft Corporation. All rights reserved.
This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.