Messages may be retried. Idempotence means that's OK.
The following letter was published in the Letters to the Editor of the December 2013 CACM (http://cacm.acm.org/magazines/2013/12/169937).
Pat Helland's article "Idempotence Is Not a Medical Condition" (May 2012) addressed a serious reliability topic messaging in a service-oriented world but in an irreverent way. His axioms (such as "Every application is allowed to get bored and abandon its participation in the work.") are generally obvious when being read but often ignored by software developers in the real-world press of development.
Along with the proliferation of tools supporting distributed Web apps, it is easier than ever for software developers to (mostly) ignore the pitfalls of underlying distributed messaging, at least until the software is stressed in a production environment. Helland pointed us toward the dragons lurking in our assumptions concerning the robustness of messaging in a networked environment, concluding with "basic principles" cast as "four insidious illuminations":
+Because retries happen, all messages must be indempotent;
+Messages can be reordered;
+Hidden effects can cause one's dialogue partner to miss part(s) of a conversation; and
+Guaranteed delivery of the last message is impossible.
. . . ignorance of which can result in latent problems to surface only when repair is most costly.
Kudos to Helland for illuminating a significant source of bugs, amusing us in the process.
Displaying 1 comment