<html><head><style type="text/css"><!-- DIV {margin:0px;} --></style></head><body><div style="font-family:times new roman, new york, times, serif;font-size:12pt"><div style="font-family: times new roman,new york,times,serif; font-size: 12pt;">Thanks Dustin.<br><br>Having walked through the code with a colleague, I think I understand how the failover works and why data replication isn't a concern.&nbsp; Obviously its not critical because the data is always on the database, but my concern was putting this recovery load on it.&nbsp; After thinking it through, that's not a big deal.&nbsp; It only seems like one now since we are overloading our db instances and haven't taken advantage of remote caching.<br><br>My first concern was that if a bucket goes down, then once its removed from rotation your modulus would be affected.&nbsp; It see that its not, and instead a gradual degradation algorithm is used.&nbsp; A key mapping to a failed bucket is re-encoded to point to a live
 bucket.&nbsp; While this would return a cache miss, its trivial for the element to be reloaded on demand to the new bucket.<br><br>The next aspect is in regards to the impact on the database.&nbsp; If you assume no partitioning, then the entire reloading of that data (on-demand) impacts only one database.&nbsp; However, when partitioned, since the remote caching layer is commonly placed outside of them each database would handle only 1/P of the load.&nbsp; As you scale to greater number of partitions and reduce the database load by caching, this the hit is a non-issue.<br><br>Thus, since this is used for read-only data, a replication policy probably doesn't buy you much.<br><br>Let me know if that sounds about right. :-)<br><br>Thanks!<br>Ben<br><br><div style="font-family: times new roman,new york,times,serif; font-size: 12pt;">----- Original Message ----<br>From: Dustin Sallings &lt;dustin@spy.net&gt;<br>To: Ben Manes &lt;ben_manes@yahoo.com&gt;<br>Cc:
 memcached@lists.danga.com<br>Sent: Tuesday, July 3, 2007 9:35:37 PM<br>Subject: Re: Handling failovers (rewrite)<br><br>
<br><div><div>On Jul 3, 2007, at 21:03 , Ben Manes wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite"><span class="Apple-style-span" style="border-collapse: separate; color: rgb(0, 0, 0); font-family: 'times new roman'; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">I'm using the standard Java client which, like most clients, supports auto-failover support.&nbsp; I don't quite understand how this works since my understanding is that the server (bucket) is chosen by hashing the keys and modding by the server list.&nbsp; It also doesn't seem like dynamically updating the server list is supported, which other threads have touched on.&nbsp; Could someone explain the built-in failover support and how robust it is?<br></span></blockquote></div><div><br
 class="webkit-block-placeholder"></div><div><span class="Apple-tab-span" style="white-space: pre;">        </span>There are two commonly employed strategies:<br class="webkit-block-placeholder"></div><div><br class="webkit-block-placeholder"></div><div><span class="Apple-tab-span" style="white-space: pre;">        </span>1) &nbsp;Since the server is chosen by computing a hash of the key modulus the number of servers, you must maintain a consistent ordering of servers on each client's list, so you can just walk the list when a server fails.<br class="webkit-block-placeholder"></div><div><br class="webkit-block-placeholder"></div><div><span class="Apple-tab-span" style="white-space: pre;">        </span>2) &nbsp;Using a yet-to-be-completely-standardized consistent hashing mechanism.<br class="webkit-block-placeholder"></div><div><br></div><div><br class="webkit-block-placeholder"></div><div><span class="Apple-tab-span" style="white-space: pre;">        </span>Either way, it's up to the client, so as
 long as you're not trying to read and write data built using different clients, it really doesn't matter which strategy your client employs as long as you've proven it works for you.</div><div><br class="webkit-block-placeholder"></div><div><span class="Apple-tab-span" style="white-space: pre;">        </span>Consistent hashing is conceptually a little more complicated, but causes less stress on your data source when you're growing or shrinking your clusters.<br class="webkit-block-placeholder"></div><br><div> <span class="Apple-style-span" style="border-collapse: separate; border-spacing: 0px; color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; text-indent: 0px; text-transform: none; orphans: 2; white-space: normal; widows: 2; word-spacing: 0px;"><div>--&nbsp;</div><div>Dustin Sallings</div><br class="Apple-interchange-newline"></span>
 </div><br></div><br></div></div><br>
      <hr size=1>Need a vacation? <a href="http://us.rd.yahoo.com/evt=48256/*http://travel.yahoo.com/;_ylc=X3oDMTFhN2hucjlpBF9TAzk3NDA3NTg5BHBvcwM1BHNlYwNncm91cHMEc2xrA2VtYWlsLW5jbQ--">Get great deals 
to amazing places </a>on Yahoo! Travel. </body></html>