<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-3811043574535683196</id><updated>2011-12-16T15:58:52.019+01:00</updated><category term='broadcast'/><category term='Timing model'/><category term='Crash'/><category term='Failure Detector'/><title type='text'>Ashraf on Distributed Computing</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://distash.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3811043574535683196/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://distash.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>A.K.M. Ashrafuzzaman</name><uri>https://profiles.google.com/104367174527608513550</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-Qz6xmvnmVDc/AAAAAAAAAAI/AAAAAAAAM_M/L833HP2Suxg/s512-c/photo.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>5</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-3811043574535683196.post-6970374582227506193</id><published>2010-03-25T21:31:00.002+01:00</published><updated>2010-03-25T21:35:29.356+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Failure Detector'/><category scheme='http://www.blogger.com/atom/ns#' term='Timing model'/><title type='text'>Failure detector in timing model</title><content type='html'>There are basically 3 timing models.&lt;br&gt;&lt;ol&gt;&lt;li&gt;Synchronous&lt;/li&gt;&lt;li&gt;Asynchronous&lt;/li&gt;&lt;li&gt;Partial Synchronous&lt;/li&gt;&lt;/ol&gt;&lt;br&gt;&lt;h3&gt;Synchronous&lt;/h3&gt;Where we know the upper bound for communication time, computation time and the time difference for the physical clock. Which means we know the upper bound of response for a process.&lt;br&gt;&lt;h3&gt;&lt;font size="3"&gt;Asynchronous&lt;/font&gt;&lt;/h3&gt;Where we do not have any idea of time bound and we can not make any assumption about time.&lt;br&gt;&lt;h3&gt;&lt;font size="3"&gt;Partial Synchronous&lt;/font&gt;&lt;/h3&gt;When we assume that after some finite time the system becomes synchronous.&lt;br&gt;&lt;br&gt;&lt;div&gt;Now let us consider different timing models on the failure detectors. For any failure detector completeness property can be satisfied by any timing model as it is a liveness property and can be satisfied in later execution.&lt;/div&gt;So the property to worry about is the accuracy property. For details see &lt;a href="http://distash.blogspot.com/2010/03/failure-detectors-and-it-properties.html" id="oibz" title="here"&gt;here&lt;/a&gt;.&lt;br&gt;&lt;br&gt;&lt;h3&gt;Strong Accuracy&lt;/h3&gt;&lt;div&gt;Can only be satisfied in synchronous system. Because strong accuracy does not allow to detect a correct node as failed even once. To check if a node is alive we use heartbeat technique. Which introduces a timeout to check the pulse to determine the node failure. In synchronous model we can specify a time out and be happy with it, because we know the time bound of the system. But for asynchronous system we do not have any time bound and can not assume anything about time. So any kind of timeout is meaningless in asynchronous model.&amp;nbsp;&lt;/div&gt;So strong accuracy(&lt;b&gt;Perfect failure detector&lt;/b&gt;) is only achievable by &lt;b&gt;synchronous system&lt;/b&gt;.&lt;br&gt;&lt;br&gt;&lt;h3&gt;&lt;font size="3"&gt;Eventual Strong Accuracy&lt;/font&gt;&lt;/h3&gt;Well it is same as strong accuracy only that it is given a some finite time to get strong accurate. So it is implementable in partial synchronous model. As partial synchronous gets synchronous eventually.&lt;br&gt;&lt;br&gt;&lt;h3&gt;&lt;font size="3"&gt;Weak Accuracy&lt;/font&gt;&lt;/h3&gt;weak accuracy says that at least &lt;b&gt;one correct node&lt;/b&gt; will not be suspected by other correct nodes. That weakens strong accuracy by reducing the number of correct nodes that are not suspected. But never the less we have to ensure accuracy for one node which does not allows us to reduce our timing model to less then synchronous model. At least there should be one node with every one is well connected. And for those links the timing synchrony holds.&lt;br&gt;&lt;br&gt;&lt;h3&gt;&lt;font size="3"&gt;Eventual W&lt;/font&gt;&lt;font size="3"&gt;eak Accuracy&lt;/font&gt;&lt;/h3&gt;Then it turns out that the timing model of Eventual weak Accuracy will be same as Eventual Strong Accuracy.&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3811043574535683196-6970374582227506193?l=distash.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://distash.blogspot.com/feeds/6970374582227506193/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://distash.blogspot.com/2010/03/failure-detector-in-timing-model.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3811043574535683196/posts/default/6970374582227506193'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3811043574535683196/posts/default/6970374582227506193'/><link rel='alternate' type='text/html' href='http://distash.blogspot.com/2010/03/failure-detector-in-timing-model.html' title='Failure detector in timing model'/><author><name>A.K.M. Ashrafuzzaman</name><uri>https://profiles.google.com/104367174527608513550</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-Qz6xmvnmVDc/AAAAAAAAAAI/AAAAAAAAM_M/L833HP2Suxg/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3811043574535683196.post-2386804273186380194</id><published>2010-03-22T01:00:00.002+01:00</published><updated>2010-03-25T20:36:37.642+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Failure Detector'/><category scheme='http://www.blogger.com/atom/ns#' term='Crash'/><title type='text'>Failure Detectors and it's properties</title><content type='html'>Failure detection is essential for many algorithms. And any failure detector is composed of two basic properties.&lt;br&gt;&lt;ol&gt;&lt;li&gt;Completeness&lt;/li&gt;&lt;li&gt;Accuracy&lt;/li&gt;&lt;/ol&gt;There can be 2 types of completeness property&lt;br&gt;&lt;ol&gt;&lt;li&gt;Strong completeness&lt;/li&gt;&lt;li&gt;weak completeness&lt;/li&gt;&lt;/ol&gt;&lt;h3&gt;&lt;font color="#FF0000"&gt;Strong&lt;/font&gt; completeness&lt;/h3&gt;&lt;div&gt;Every crashed node is &lt;b&gt;&lt;font color="#38761D"&gt;eventually&lt;/font&gt;&lt;/b&gt; detected by &lt;font color="#FF0000"&gt;&lt;b&gt;all&lt;/b&gt;&lt;/font&gt; correct nodes.&lt;/div&gt;&lt;h3&gt;&lt;font color="#FF9900"&gt;Weak&lt;/font&gt;&lt;font size="3"&gt;&amp;nbsp;completeness&lt;/font&gt;&lt;/h3&gt;&lt;div&gt;Every crashed node is &lt;b&gt;&lt;font color="#38761D"&gt;eventually&lt;/font&gt;&lt;/b&gt; detected by&amp;nbsp;&lt;font color="#FF9900"&gt;&lt;b&gt;some&lt;/b&gt;&lt;/font&gt;&amp;nbsp;correct nodes.&lt;/div&gt;&lt;br&gt;Actually the weak and the strong completeness is &lt;b&gt;equivalent&lt;/b&gt;. Because given a weak completeness we can achieve strong completeness. As some &lt;b&gt;correct nodes&lt;/b&gt; has the information about all crashed nodes it can disseminate&lt;font color="#CCCCCC"&gt;[using &lt;/font&gt;&lt;font color="#CCCCCC"&gt;BEB&lt;/font&gt;&lt;font color="#CCCCCC"&gt;, and as the some nodes are correct so all the correct nodes will get the information]&lt;/font&gt; the list of crashed nodes and every one will be aware of the crashed nodes.&lt;div&gt;Correctness is a liveness property. It can be proved as if some node do not detect the crashed node yet then there is possibility that it will be detected at some point is the future :)&lt;/div&gt;&lt;br&gt;&lt;div&gt;Now let&amp;#39;s talk about the accuracy property. It can be classified into 4 as,&lt;/div&gt;&lt;ol&gt;&lt;li&gt;Strong accuracy&lt;/li&gt;&lt;li&gt;Eventual Strong accuracy&lt;br&gt;&lt;/li&gt;&lt;li&gt;weak accuracy&lt;/li&gt;&lt;li&gt;Eventual weak accuracy&lt;br&gt;&lt;/li&gt;&lt;/ol&gt;&lt;h3&gt;&lt;font color="#FF0000"&gt;Strong&lt;/font&gt; accuracy&lt;/h3&gt;No correct node is &lt;b&gt;&lt;font color="#FF0000"&gt;ever&lt;/font&gt;&lt;/b&gt; suspected.&lt;br&gt;&lt;br&gt;&lt;div&gt;This is really a strong property and this is &lt;b&gt;safety&lt;/b&gt; property as well. Because if you detect a correct node as failed then the property is violated for any execution after that.&lt;/div&gt;&lt;h3&gt;&lt;font color="#38761D"&gt;Eventual&lt;/font&gt;&amp;nbsp;Strong accuracy&lt;/h3&gt;&lt;b&gt;&lt;font color="#38761D"&gt;Eventually&lt;/font&gt;&lt;/b&gt; no correct node is suspected.&lt;br&gt;&lt;br&gt;So now this property becomes &lt;b&gt;liveness&lt;/b&gt; property because if a correct node is suspected now then there is still a possibility that in future execution no correct node will be detected as failed.&lt;br&gt;&lt;br&gt;&lt;h3&gt;&lt;font color="#FF9900"&gt;Weak&lt;/font&gt; accuracy&lt;/h3&gt;&lt;div&gt;There exists &lt;font color="#FF9900"&gt;a correct node&lt;/font&gt; which is &lt;font color="#FF0000"&gt;never&lt;/font&gt; suspected by any node.&lt;/div&gt;&lt;br&gt;&lt;div&gt;So this is a &lt;b&gt;safety&lt;/b&gt; property because if none of the node is recognized as correct node then the property can not be satisfied in any future execution.&lt;/div&gt;&lt;h3&gt;&lt;font color="#38761D"&gt;Eventual&lt;/font&gt;&lt;font color="#FF9900"&gt;&amp;nbsp;Weak&lt;/font&gt;&lt;font size="3"&gt;&amp;nbsp;accuracy&lt;/font&gt;&lt;/h3&gt;&lt;font color="#38761D"&gt;Eventually&lt;/font&gt; there exists&amp;nbsp;&lt;font color="#FF9900"&gt;a correct node&lt;/font&gt;&amp;nbsp;which is never suspected by any node. And this is a &lt;b&gt;liveness&lt;/b&gt; property.&lt;br&gt;&lt;br&gt;&lt;div&gt;So any failure detector is a combination of completeness property and any of the accuracy properties.&lt;/div&gt;&lt;br&gt;&lt;div&gt;So here are the possible failure detectors(considering that strong and weak completeness is equivalent)&lt;/div&gt;&lt;br&gt;&lt;table border="1" bordercolor="#000000" cellpadding="3" cellspacing="0" id="fs-q" width="100%"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td width="50%"&gt;&lt;b&gt;&lt;font color="#990000"&gt;Accuracy&lt;/font&gt;/&lt;font color="#0B5394"&gt;Completeness&lt;/font&gt;&lt;/b&gt;&lt;/td&gt;&lt;td width="50%"&gt;&lt;b&gt;&lt;font color="#0B5394"&gt;Strong&lt;/font&gt;&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td width="50%"&gt;&lt;b&gt;&lt;font color="#990000"&gt;Strong&lt;/font&gt;&lt;/b&gt;&lt;/td&gt;&lt;td width="50%"&gt;Perfect Failure Detector&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td width="50%"&gt;&lt;b&gt;&lt;font color="#990000"&gt;Eventually Strong&lt;/font&gt;&lt;/b&gt;&lt;/td&gt;&lt;td width="50%"&gt;Eventual Perfect Failure Detector&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td width="50%"&gt;&lt;b&gt;&lt;font color="#990000"&gt;Weak&lt;/font&gt;&lt;/b&gt;&lt;/td&gt;&lt;td width="50%"&gt;Strong Failure Detector&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td width="50%"&gt;&lt;b&gt;&lt;font color="#990000"&gt;Eventually Weak&lt;/font&gt;&lt;/b&gt;&lt;/td&gt;&lt;td width="50%"&gt;Eventual Strong Failure Detector&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br&gt;&lt;div&gt;&lt;font size="2"&gt;&lt;b&gt;References&lt;/b&gt;&lt;/font&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://homepages.di.fc.ul.pt/~ler/irdp/" style="color:#551a8b" title="Introduction to Reliable Distributed Programming&amp;nbsp;by&amp;nbsp;Guerraoui, Rachid, Rodrigues, Lu&amp;iacute;s"&gt;Introduction to Reliable Distributed Programming by Rachid Guerraoui and Lu&amp;iacute;s Rodrigues&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3811043574535683196-2386804273186380194?l=distash.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://distash.blogspot.com/feeds/2386804273186380194/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://distash.blogspot.com/2010/03/failure-detectors-and-it-properties.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3811043574535683196/posts/default/2386804273186380194'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3811043574535683196/posts/default/2386804273186380194'/><link rel='alternate' type='text/html' href='http://distash.blogspot.com/2010/03/failure-detectors-and-it-properties.html' title='Failure Detectors and it&amp;#39;s properties'/><author><name>A.K.M. Ashrafuzzaman</name><uri>https://profiles.google.com/104367174527608513550</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-Qz6xmvnmVDc/AAAAAAAAAAI/AAAAAAAAM_M/L833HP2Suxg/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3811043574535683196.post-2836019564038374524</id><published>2010-02-19T14:27:00.002+01:00</published><updated>2010-03-26T00:46:55.520+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='broadcast'/><title type='text'>Reliable Broadcast</title><content type='html'>Reliable broadcast is a necessary component for many distributed algorithm. For client server architecture we are lucky that there is TCP :) to support reliable message delivery, which handles packet loss, packet retransmission, duplicate messages etc. But unfortunately distributed architecture is much complex then that, where we have multiple recipients and our target is to scale as the recipients grow.&lt;br&gt;&lt;div&gt;There are lots of ways to broadcast messages. Each provides some property and cost so that we can pick according to our need.&lt;/div&gt;&lt;div&gt;We can classify reliable broadcast in many categories(in general),&lt;/div&gt;&lt;ol&gt;&lt;li&gt;Best-effort broadcast&lt;/li&gt;&lt;li&gt;Reliable broadcast&lt;/li&gt;&lt;li&gt;Uniform reliable broadcast&lt;/li&gt;&lt;li&gt;Lazy reliable broadcast&lt;/li&gt;&lt;li&gt;Eager reliable broadcast&lt;/li&gt;&lt;li&gt;Causal reliable broadcast&lt;/li&gt;&lt;/ol&gt;Here are the properties, pros and cons of each type,&lt;br&gt;&lt;h2&gt;Best-effort broadcast (BEB)&lt;/h2&gt;&lt;h4&gt;Properties&lt;/h4&gt;&lt;table border="1" bordercolor="#000000" cellpadding="3" cellspacing="0" height="47" width="647"&gt;&lt;tbody&gt;&lt;tr style="text-align:left"&gt;&lt;td&gt;&lt;font size="3"&gt;&lt;b&gt;&lt;font size="2"&gt;BEB1: Validity&lt;/font&gt;&lt;br&gt;&lt;/b&gt;&lt;/font&gt;&lt;/td&gt;&lt;td&gt;&lt;div&gt;&lt;font size="2"&gt;If a correct process pi broadcasts a message m, then pi&lt;/font&gt;&lt;/div&gt;&lt;div&gt;&lt;font size="2"&gt;eventually delivers m&lt;/font&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="text-align:left"&gt;&lt;td&gt;&lt;font size="3"&gt;&lt;b&gt;&lt;font size="2"&gt;BEB2: No duplication&lt;/font&gt;&lt;br&gt;&lt;/b&gt;&lt;/font&gt;&lt;/td&gt;&lt;td&gt;&lt;div&gt;&lt;font size="2"&gt;No duplicate message is delivered&lt;/font&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="text-align:left"&gt;&lt;td&gt;&lt;b&gt;BEB3: No creation&lt;/b&gt;&lt;br&gt;&lt;/td&gt;&lt;td&gt;No message delivered unless broadcast&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br&gt;&lt;b&gt;Pros&lt;/b&gt;&lt;br&gt;&lt;ol&gt;&lt;li&gt;Simpler implementation&lt;/li&gt;&lt;li&gt;Works if only sender is reliable&lt;/li&gt;&lt;/ol&gt;&lt;h4&gt;Cons&lt;/h4&gt;&lt;ol&gt;&lt;li&gt;Sender centric algorithm, so it is not scalable&lt;/li&gt;&lt;li&gt;Does not work if sender crashes&lt;/li&gt;&lt;/ol&gt;&lt;h4&gt;Implementation&lt;/h4&gt;&lt;div&gt;Send the message to all the nodes using perfect channel. Perfect channel takes care of the Best-effort-Validity.&lt;/div&gt;&lt;h2&gt;Reliable broadcast (RB)&lt;/h2&gt;&lt;h4&gt;Property&lt;/h4&gt;&lt;div&gt;&lt;table border="1" bordercolor="#000000" cellpadding="3" cellspacing="0" height="47" width="647"&gt;&lt;tbody&gt;&lt;tr style="text-align:left"&gt;&lt;td&gt;&lt;b&gt;&lt;font size="3"&gt;&lt;font size="2"&gt;RB1: Validity&lt;/font&gt;&lt;br&gt;&lt;/font&gt;&lt;/b&gt;&lt;/td&gt;&lt;td&gt;&lt;b&gt;&lt;font size="2"&gt;BEB1&lt;/font&gt;&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="text-align:left"&gt;&lt;td&gt;&lt;b&gt;&lt;font size="3"&gt;&lt;font size="2"&gt;RB2: No duplication&lt;/font&gt;&lt;br&gt;&lt;/font&gt;&lt;/b&gt;&lt;/td&gt;&lt;td&gt;&lt;div&gt;&lt;b&gt;&lt;font size="2"&gt;BEB2&lt;/font&gt;&lt;/b&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="text-align:left"&gt;&lt;td&gt;&lt;b&gt;&lt;font size="3"&gt;&lt;font size="2"&gt;RB3: No creation&lt;/font&gt;&lt;br&gt;&lt;/font&gt;&lt;/b&gt;&lt;/td&gt;&lt;td&gt;&lt;b&gt;&lt;font size="3"&gt;&lt;font size="2"&gt;BEB3&lt;/font&gt;&lt;br&gt;&lt;/font&gt;&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="text-align:left"&gt;&lt;td&gt;&lt;font size="2"&gt;&lt;b&gt;RB4: Agreement&lt;/b&gt;&lt;/font&gt;&lt;/td&gt;&lt;td&gt;&lt;font size="2"&gt;&lt;b&gt;If a message m is delivered by some correct process p&lt;sub&gt;i&lt;/sub&gt;,&lt;/b&gt;&lt;/font&gt;&lt;div&gt;&lt;font size="2"&gt;&lt;b&gt;then m is eventually delivered by every correct process p&lt;sub&gt;j&lt;/sub&gt;&lt;/b&gt;&lt;/font&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;font size="2"&gt;&lt;br&gt;&lt;/font&gt;&lt;br&gt;&lt;font size="2"&gt;&lt;b&gt;Pros&lt;/b&gt;&lt;/font&gt;&lt;/div&gt;&lt;ol&gt;&lt;li&gt;Carries all pros from BEB&lt;/li&gt;&lt;li&gt;Provides atomicity(either all or none of the correct node delivers)&lt;/li&gt;&lt;/ol&gt;&lt;h4&gt;&lt;font size="2"&gt;Cons&lt;/font&gt;&lt;/h4&gt;&lt;ol&gt;&lt;li&gt;Carries all pros from BEB&lt;/li&gt;&lt;/ol&gt;&lt;br&gt;&lt;h2&gt;&lt;font size="4"&gt;Uniform Reliable broadcast (URB)&lt;/font&gt;&lt;/h2&gt;&lt;h4&gt;Property&lt;/h4&gt;&lt;table border="1" bordercolor="#000000" cellpadding="3" cellspacing="0" height="47" width="647"&gt;&lt;tbody&gt;&lt;tr style="text-align:left"&gt;&lt;td&gt;&lt;font size="3"&gt;&lt;b&gt;&lt;font size="2"&gt;URB1: Validity&lt;/font&gt;&lt;br&gt;&lt;/b&gt;&lt;/font&gt;&lt;/td&gt;&lt;td&gt;&lt;b&gt;&lt;font size="2"&gt;BEB1&lt;/font&gt;&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="text-align:left"&gt;&lt;td&gt;&lt;font size="3"&gt;&lt;b&gt;&lt;font size="2"&gt;URB2: No duplication&lt;/font&gt;&lt;br&gt;&lt;/b&gt;&lt;/font&gt;&lt;/td&gt;&lt;td&gt;&lt;div&gt;&lt;b&gt;&lt;font size="2"&gt;BEB2&lt;/font&gt;&lt;/b&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="text-align:left"&gt;&lt;td&gt;&lt;font size="3"&gt;&lt;b&gt;&lt;font size="2"&gt;URB3: No creation&lt;/font&gt;&lt;/b&gt;&lt;br&gt;&lt;/font&gt;&lt;/td&gt;&lt;td&gt;&lt;font size="3"&gt;&lt;b&gt;&lt;font size="2"&gt;BEB3&lt;/font&gt;&lt;/b&gt;&lt;br&gt;&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="text-align:left"&gt;&lt;td&gt;&lt;b&gt;&lt;font size="2"&gt;URB4: Agreement&lt;/font&gt;&lt;/b&gt;&lt;/td&gt;&lt;td&gt;&lt;font size="2"&gt;If a message m is delivered by &lt;b&gt;any process&lt;/b&gt; p&lt;/font&gt;&lt;sub&gt;&lt;font size="2"&gt;i&lt;/font&gt;&lt;/sub&gt;&lt;font size="2"&gt;,&lt;/font&gt;&lt;div&gt;&lt;font size="2"&gt;then m is eventually delivered by every correct process p&lt;/font&gt;&lt;sub&gt;&lt;font size="2"&gt;j&lt;/font&gt;&lt;/sub&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br&gt;&lt;h2&gt;Lazy Reliable Broadcast&lt;/h2&gt;&lt;div&gt;&lt;b&gt;Requires:&lt;/b&gt; Perfect failure detector&lt;/div&gt;&lt;h4&gt;Property&lt;/h4&gt;&lt;div&gt;The is a non zero probability if the sender and receiver is correct then eventually the receiver will receive the message.&lt;/div&gt;&lt;h4&gt;Basic idea&lt;/h4&gt;&lt;div&gt;If any node detects that the sender has crashed then RB deliver a copy of the message to all node.&lt;/div&gt;&lt;h2&gt;&lt;font size="4"&gt;Eager Reliable Broadcast&lt;/font&gt;&lt;/h2&gt;&lt;h4&gt;Property&lt;/h4&gt;&lt;p&gt;Same as Lazy Reliable Broadcast. But it does not use any failure detector. It work is fail silent model&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;h4&gt;&lt;font size="2"&gt;Basic idea&lt;/font&gt;&lt;/h4&gt;&lt;div&gt;It does not wait for node to crash and does the RB deliver to all node.&lt;/div&gt;&lt;h2&gt;Causal reliable broadcast&lt;/h2&gt;Till now we did not consider order of the messages. But if the broadcast messages are related and has a order such that m&lt;sub&gt;1&lt;/sub&gt; precedes m&lt;sub&gt;2&lt;/sub&gt; then,&lt;br&gt;&lt;h4&gt;Properties&lt;/h4&gt;&lt;ol&gt;&lt;li&gt;if m1 and m2 is broadcasted from the same process then m1 broadcasted before m2&lt;/li&gt;&lt;li&gt;if m1 is delivered by process p then p broadcasted m2 after delivering m1&lt;/li&gt;&lt;li&gt;the precedence is transitive, so if m1 precedes m&amp;#39; and m&amp;#39; precedes m2 then m1 precedes m2&lt;/li&gt;&lt;/ol&gt;&lt;br&gt;&lt;p&gt;&lt;/p&gt;&lt;h4&gt;&lt;font size="2"&gt;References&lt;/font&gt;&lt;/h4&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://homepages.di.fc.ul.pt/~ler/irdp/" id="kp9n" style="color:#551a8b" title="Introduction to Reliable Distributed Programming&amp;nbsp;by&amp;nbsp;Guerraoui, Rachid, Rodrigues, Lu&amp;iacute;s"&gt;Introduction to Reliable Distributed Programming by Rachid Guerraoui and Lu&amp;iacute;s Rodrigues&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Slides from the lectures of Professor&amp;nbsp;&lt;a href="http://www.sics.se/~seif/" id="gy8y" style="color:#551a8b" title="Seif Haridi"&gt;Seif Haridi&lt;/a&gt;, SCS/ICT/KTH.&lt;/li&gt;&lt;/ul&gt;&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3811043574535683196-2836019564038374524?l=distash.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://distash.blogspot.com/feeds/2836019564038374524/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://distash.blogspot.com/2010/02/reliable-broadcast.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3811043574535683196/posts/default/2836019564038374524'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3811043574535683196/posts/default/2836019564038374524'/><link rel='alternate' type='text/html' href='http://distash.blogspot.com/2010/02/reliable-broadcast.html' title='Reliable Broadcast'/><author><name>A.K.M. Ashrafuzzaman</name><uri>https://profiles.google.com/104367174527608513550</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-Qz6xmvnmVDc/AAAAAAAAAAI/AAAAAAAAM_M/L833HP2Suxg/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3811043574535683196.post-4493254319763506615</id><published>2010-02-12T17:58:00.002+01:00</published><updated>2010-02-14T01:23:41.553+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Crash'/><title type='text'>Node failure</title><content type='html'>&lt;p&gt;
  In a distributed system a node can fail/crash in a lot of way and it is very important that we understand which failure model we are supporting while defining an algorithm. Because execution of an algorithm can change depending on the failure model.
&lt;/p&gt;
&lt;h3&gt;
  Failure model
&lt;/h3&gt;
&lt;div&gt;
  A node can fail in four way.
&lt;/div&gt;
&lt;div&gt;
  &lt;ol&gt;
    &lt;li&gt;
      Crash Stop
    &lt;/li&gt;
    &lt;li&gt;
      Omissions
    &lt;/li&gt;
    &lt;li&gt;
      Crash Recovery
    &lt;/li&gt;
    &lt;li&gt;
      Byzantine / Arbitrary
    &lt;/li&gt;
  &lt;/ol&gt;
&lt;/div&gt;
&lt;div&gt;
  The properties of each failure model is following,&lt;/div&gt;
&lt;h3&gt;
  Crash Stop
&lt;/h3&gt;
&lt;div&gt;
  &lt;ul&gt;
    &lt;li&gt;
      Node stop doing anything(sending/receiving/processing)
    &lt;/li&gt;
    &lt;li&gt;
      Once fail never recover
    &lt;/li&gt;
  &lt;/ul&gt;
&lt;/div&gt;
&lt;h3&gt;
  Omissions
&lt;/h3&gt;
&lt;div&gt;
  It can be of 2 type as,
&lt;/div&gt;
&lt;div&gt;
  &lt;ol&gt;
    &lt;li&gt;
      Sending omission - not sending data where node is suppose to send according to algorithm
    &lt;/li&gt;
    &lt;li&gt;
      Receiving omission - not receiving data when other node has sent message
    &lt;/li&gt;
  &lt;/ol&gt;
  &lt;div&gt;
    Omission is actually a temporary state which eventually turns to a crash or a crash recovery state. Because it may recover from that state which will make it crash recovery and if it do not recovers then it becomes a crash stop.
  &lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;
  Crash Recovery
&lt;/h3&gt;
&lt;div&gt;
  &lt;ul&gt;
    &lt;li&gt;
      A node might crash
    &lt;/li&gt;
    &lt;li&gt;
      It recovers after crashing and initiates a recovery process
    &lt;/li&gt;
  &lt;/ul&gt;
  &lt;div&gt;
    Some crash recovery model also has stable storage. Nodes store state information in the stable storage and it can retrieves necessary information while it is in recovery state.
  &lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;
  Byzantine / Arbitrary
&lt;/h3&gt;
A node may behave arbitrary (sending/receiving messages that are not specified by algorithm). This can be a malicious attack to the system.
&lt;div&gt;
  &lt;h3&gt;
    Fault tolerance hierarchy
  &lt;/h3&gt;
  &lt;div&gt;
    There is a hierarchy in the crash models. Like crash is a special type of omission, where the process never recovers. Omission is an intermediate state for crash recovery, where process runs it's recovery procedure and eventually recovers from the omission state.
  &lt;/div&gt;
  &lt;div&gt;
    And crash recovery can be a special case of byzantine failure since it allows any kind of deviation from the regular algorithm. So any kind of crash can be a special case of byzantine failure.&lt;br&gt;
    &lt;div&gt;
      &lt;br&gt;
    &lt;/div&gt;
    &lt;div&gt;
      &lt;div id="zap1" style="TEXT-ALIGN:center"&gt;
        &lt;img src="http://docs.google.com/File?id=ddvsrdwp_105pnb225c4_b" style="WIDTH:400px; HEIGHT:121.711569px"&gt;
      &lt;/div&gt;
      &lt;br&gt;
    &lt;/div&gt;
    &lt;div&gt;
      &lt;h5&gt;
        Figure: Fault tolerance hierarchy
      &lt;/h5&gt;
    &lt;/div&gt;
    &lt;h4&gt;
      References
    &lt;/h4&gt;
    &lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://homepages.di.fc.ul.pt/~ler/irdp/" id="kp9n" title="Introduction to Reliable Distributed Programming&amp;nbsp;by&amp;nbsp;Guerraoui, Rachid, Rodrigues, Luís"&gt;Introduction to Reliable Distributed Programming by Rachid Guerraoui and Luís Rodrigues&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Slides from the lectures of Professor &lt;a href="http://www.sics.se/~seif/" id="gy8y" title="Seif Haridi"&gt;Seif Haridi&lt;/a&gt;, SCS/ICT/KTH.&lt;/li&gt;&lt;/ul&gt;
      &lt;/div&gt;&lt;/div&gt;
  &lt;br&gt;
&lt;/div&gt;
&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3811043574535683196-4493254319763506615?l=distash.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://distash.blogspot.com/feeds/4493254319763506615/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://distash.blogspot.com/2010/02/node-failure.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3811043574535683196/posts/default/4493254319763506615'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3811043574535683196/posts/default/4493254319763506615'/><link rel='alternate' type='text/html' href='http://distash.blogspot.com/2010/02/node-failure.html' title='Node failure'/><author><name>A.K.M. Ashrafuzzaman</name><uri>https://profiles.google.com/104367174527608513550</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-Qz6xmvnmVDc/AAAAAAAAAAI/AAAAAAAAM_M/L833HP2Suxg/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3811043574535683196.post-5313101567168205237</id><published>2010-02-05T02:37:00.001+01:00</published><updated>2010-02-12T18:11:46.900+01:00</updated><title type='text'>Distributed solution why and where</title><content type='html'>&lt;h2&gt;&lt;span style="font-weight: normal"&gt;&lt;font size="2"&gt;Distributed approach for solving problem is an emerging and hot topic now a days. It is really a powerful solution. But we should all know first what is the strength and weakness of this approach before we consider of choosing this.&lt;/font&gt;&lt;/span&gt;&lt;/h2&gt;&lt;h3&gt;Disadvantage&lt;/h3&gt;&lt;div&gt;Well in short the disadvantage of this approach is that it is fairly complex and thus costly for development and maintenance. Skilled people are needed for this kind of solution development.&lt;/div&gt;&lt;h3&gt;Then where should we use it&lt;/h3&gt;&lt;div&gt;In general there are 2 kind of situation where distributed approach is proffered.&lt;/div&gt;&lt;div&gt;&lt;ol&gt;&lt;li&gt;Some solutions are only possible by using distributed solution&lt;/li&gt;&lt;li&gt;Some solutions are inherently has characteristic of distributed solution&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;If you want to provide system which survives hardware failure, you need to provide replica which is only possible via distributed solution by having more than one node to support hardware failure. Now if resources are distributed then you have no option but to use distributed solution. Another reason to use distributed approach is to improve performance(by distributing independent tasks to more than one nodes).&lt;br&gt;&lt;br&gt;&lt;div&gt;Let us think about skype. Skype does not use traditional client server model rather it uses peer to peer model. This is why it can provide scalability without using costly centralized client server structure.&lt;/div&gt;&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3811043574535683196-5313101567168205237?l=distash.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://distash.blogspot.com/feeds/5313101567168205237/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://distash.blogspot.com/2010/02/distributed-solution-why-and-where.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3811043574535683196/posts/default/5313101567168205237'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3811043574535683196/posts/default/5313101567168205237'/><link rel='alternate' type='text/html' href='http://distash.blogspot.com/2010/02/distributed-solution-why-and-where.html' title='Distributed solution why and where'/><author><name>A.K.M. Ashrafuzzaman</name><uri>https://profiles.google.com/104367174527608513550</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-Qz6xmvnmVDc/AAAAAAAAAAI/AAAAAAAAM_M/L833HP2Suxg/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry></feed>
