﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-Rising Sun -随笔分类-其它</title><link>http://www.blogjava.net/brock/category/42179.html</link><description /><language>zh-cn</language><lastBuildDate>Mon, 07 Jan 2013 22:00:30 GMT</lastBuildDate><pubDate>Mon, 07 Jan 2013 22:00:30 GMT</pubDate><ttl>60</ttl><item><title>插值算法</title><link>http://www.blogjava.net/brock/archive/2013/01/07/393910.html</link><dc:creator>brock</dc:creator><author>brock</author><pubDate>Mon, 07 Jan 2013 07:13:00 GMT</pubDate><guid>http://www.blogjava.net/brock/archive/2013/01/07/393910.html</guid><wfw:comment>http://www.blogjava.net/brock/comments/393910.html</wfw:comment><comments>http://www.blogjava.net/brock/archive/2013/01/07/393910.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/brock/comments/commentRss/393910.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/brock/services/trackbacks/393910.html</trackback:ping><description><![CDATA[<div>public static void main(String[] args) {</div><div><span style="white-space:pre">		</span>List&lt;Integer&gt; a = new ArrayList&lt;Integer&gt;();</div><div><span style="white-space:pre">		</span>a.add(1);</div><div><span style="white-space:pre">		</span>a.add(5);</div><div><span style="white-space:pre">		</span>a.add(7);</div><div><span style="white-space:pre">		</span>a.add(9);</div><div></div><div><span style="white-space:pre">		</span>List&lt;Integer&gt; b = new ArrayList&lt;Integer&gt;();</div><div><span style="white-space:pre">		</span>b.add(2);</div><div><span style="white-space:pre">		</span>b.add(4);</div><div><span style="white-space:pre">		</span>b.add(8);</div><div></div><div><span style="white-space:pre">		</span>List&lt;Integer&gt; c = new ArrayList&lt;Integer&gt;();</div><div></div><div><span style="white-space:pre">		</span>c.addAll(a);</div><div><span style="white-space:pre">		</span>c.addAll(b);</div><div></div><div><span style="white-space:pre">		</span>List&lt;Integer&gt; d = new ArrayList&lt;Integer&gt;();</div><div></div><div><span style="white-space:pre">		</span>for (Integer dd : b) {</div><div><span style="white-space:pre">			</span>d.add(dd);</div><div><span style="white-space:pre">		</span>}</div><div></div><div><span style="white-space:pre">		</span>// Integer</div><div></div><div><span style="white-space:pre">		</span>Collections.sort(c, new Comparator&lt;Integer&gt;() {</div><div><span style="white-space:pre">			</span>@Override</div><div><span style="white-space:pre">			</span>public int compare(Integer source, Integer desc) {</div><div><span style="white-space:pre">				</span>if (source.compareTo(desc) &gt; 0) {</div><div><span style="white-space:pre">					</span>return 1;</div><div><span style="white-space:pre">				</span>}</div><div><span style="white-space:pre">				</span>return -1;</div><div><span style="white-space:pre">			</span>}</div><div><span style="white-space:pre">		</span>});</div><div></div><div><span style="white-space:pre">		</span>for (int j = 0; j &lt; a.size(); j++) {</div><div></div><div><span style="white-space:pre">			</span>for (int k = 0; k &lt; b.size(); k++) {</div><div></div><div><span style="white-space:pre">				</span>if (a.get(j) &gt; b.get(k)) {</div><div><span style="white-space:pre">					</span>if (k == b.size() - 1) {</div><div><span style="white-space:pre">						</span>b.add(b.get(b.size() - 1));</div><div><span style="white-space:pre">						</span>break;</div><div><span style="white-space:pre">					</span>}</div><div><span style="white-space:pre">					</span>continue;</div><div><span style="white-space:pre">				</span>}</div><div><span style="white-space:pre">				</span>//</div><div><span style="white-space:pre">				</span>if (a.get(j) &lt; b.get(k)) {</div><div><span style="white-space:pre">					</span>if (k == 0) {</div><div><span style="white-space:pre">						</span>b.add(k, 0);</div><div><span style="white-space:pre">					</span>} else {</div><div><span style="white-space:pre">						</span>b.add(k, b.get(k - 1));</div><div><span style="white-space:pre">					</span>}</div><div><span style="white-space:pre">					</span>break;</div><div><span style="white-space:pre">				</span>}</div><div></div><div><span style="white-space:pre">			</span>}</div><div></div><div><span style="white-space:pre">		</span>}</div><div></div><div><span style="white-space:pre">		</span>for (int j = 0; j &lt; d.size(); j++) {</div><div></div><div><span style="white-space:pre">			</span>for (int k = 0; k &lt; a.size(); k++) {</div><div></div><div><span style="white-space:pre">				</span>if (d.get(j) &gt; a.get(k)) {</div><div><span style="white-space:pre">					</span>if (k == a.size() - 1) {</div><div><span style="white-space:pre">						</span>a.add(a.get(a.size() - 1));</div><div><span style="white-space:pre">						</span>break;</div><div><span style="white-space:pre">					</span>}</div><div><span style="white-space:pre">					</span>continue;</div><div><span style="white-space:pre">				</span>}</div><div><span style="white-space:pre">				</span>//</div><div><span style="white-space:pre">				</span>if (d.get(j) &lt; a.get(k)) {</div><div><span style="white-space:pre">					</span>if (k == 0) {</div><div><span style="white-space:pre">						</span>a.add(k, 0);</div><div><span style="white-space:pre">					</span>} else {</div><div><span style="white-space:pre">						</span>a.add(k, a.get(k - 1));</div><div><span style="white-space:pre">					</span>}</div><div><span style="white-space:pre">					</span>break;</div><div><span style="white-space:pre">				</span>}</div><div></div><div><span style="white-space:pre">			</span>}</div><div></div><div><span style="white-space:pre">		</span>}</div><div><span style="white-space:pre">		</span>System.out.println(c);</div><div><span style="white-space:pre">		</span>System.out.println(a);</div><div><span style="white-space:pre">		</span>System.out.println(b);</div><div><span style="white-space:pre">	</span>}</div><img src ="http://www.blogjava.net/brock/aggbug/393910.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/brock/" target="_blank">brock</a> 2013-01-07 15:13 <a href="http://www.blogjava.net/brock/archive/2013/01/07/393910.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Memcached集群/分布式的单点故障</title><link>http://www.blogjava.net/brock/archive/2012/05/07/377542.html</link><dc:creator>brock</dc:creator><author>brock</author><pubDate>Mon, 07 May 2012 09:07:00 GMT</pubDate><guid>http://www.blogjava.net/brock/archive/2012/05/07/377542.html</guid><wfw:comment>http://www.blogjava.net/brock/comments/377542.html</wfw:comment><comments>http://www.blogjava.net/brock/archive/2012/05/07/377542.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/brock/comments/commentRss/377542.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/brock/services/trackbacks/377542.html</trackback:ping><description><![CDATA[<div><h2><div><span style="background-color:#d3d3d3">memcached如何处理容错的？<br /> 不处理！:) 在memcached节点失效的情况下，集群没有必要做任何容错处理。如果发生了节点失效，应对的措施完全取决于用户。节点失效时，下面列出几种方案供您选择：<br /> * 忽略它！ 在失效节点被恢复或替换之前，还有很多其他节点可以应对节点失效带来的影响。<br /> * 把失效的节点从节点列表中移除。做这个操作千万要小心！在默认情况下（余数式哈希算法），客户端添加或移除节点，会导致所有的缓存数据不可用！因为哈希参照的节点列表变化了，大部分key会因为哈希值的改变而被映射到（与原来）不同的节点上。<br /> * 启动热备节点，接管失效节点所占用的IP。这样可以防止哈希紊乱（hashing chaos）。</span><br /> &#8221;<br /> <span style="background-color:#ffa500">同学们，根据上面的说法，memcached其中一个节点失效以后，memcached本身是没有任何策略维持失效转发的，这对于大型系统是一个无法接受的事实。</span> <p>Memcached分布式每个服务器端本身没有相互相连的关系，数据分布是由客户端来维持的，也可以说Memcached还没有为集群提供真的高可用方案，因为从集群的定义上来说需要满足：1.压力分载 2.失效转发。</p> <p>在项目组中lianjie.you同学问我如果在分布式中的其中一台Memcached节点down掉了，应该如何解决？我当时愣住了，一时之间还不能给出任何完整的答案。</p> <p>今早在座公车来上班的路上用手机上网Google了一下，发现原来在网上有很多人与我们有相同的问题，我Google的关键字是 &#8220;Memcached 单点&#8221; 、&#8220;Memcached  单点故障&#8221;。给出的搜索结果都不算让人满意，我才打算写一篇关于解决集群中Memcached单点故障的文章。Javabloger只向大家提供2种解决 思路，暂时不提供具体代码。</p> <p><strong>现象描述：</strong><br /> 在客户端连接的部分写入多个服务器端的ip地址，客户端将会自动的把缓存数据分布的放在每个不同的机器上，如图所示：</p> <p><a href="http://www.javabloger.com/images/article_pic/memcached/masd-1.png" target="_blank"><img alt="http://files.note.sdo.com/2011/04/25/5592/4134/1c75/P15SC~jrjKHFnM01o00E0-/17afb85b-7816-4ed7-be59-6cb81f8e7436.png" src="http://files.note.sdo.com/2011/04/25/5592/4134/1c75/P15SC%7EjrjKHFnM01o00E0-/17afb85b-7816-4ed7-be59-6cb81f8e7436.png" /><br /> </a><a href="http://www.javabloger.com/images/article_pic/memcached/masd-1.png" target="_blank">查看大图请点击这里</a></p> <p><strong>现象后果：</strong><br /> 如果其中一个缓存节点的机器down机，那么客户端存入的缓存数据将会丢失一部分，就是图中红色字体描述的&#8220;Losed 33% Cache Data&#8221;，也就是说那部分数据彻底没有了！如果是用户的关键性信息那么就玩大了，如图所示：<a href="http://www.javabloger.com/images/article_pic/memcached/masd-2.png" target="_blank"><img alt="http://files.note.sdo.com/2011/04/25/5592/4134/1c75/P15SC~jrjKHFnM01o00E0-/3d9a8f33-0715-4522-a4af-4daa2644995d.png" src="http://files.note.sdo.com/2011/04/25/5592/4134/1c75/P15SC%7EjrjKHFnM01o00E0-/3d9a8f33-0715-4522-a4af-4daa2644995d.png" /></a><br /> <a href="http://www.javabloger.com/images/article_pic/memcached/masd-2.png" target="_blank">查看大图请点击这里</a></p> <p><span style="color:#daa520"><span style="background-color:#000000"><strong>解决方案1：本地备份缓存</strong></span></span><br /> 在本地放一份缓存，同时也在分布式Memcached上放一份缓存，如果当其中一台节点当机了，客户端程序直接读取本地的缓存，本地客户端维护一个HashMap即可，这样的方案虽然很简陋，但是可以满足一部分场景的需要，当你很急需的时候可以作为临时方案暂时替代一下。</p> <p><strong><span style="color:#daa520"><span style="background-color:#000000">解决方案2：采用缓存代理服务器</span></span></strong><br /> 采用 <a href="http://code.google.com/p/memagent/wiki/HowMagentWorks" target="_blank"> Magent </a>缓存代理，防止单点现象，缓存代理也可以做备份，通过客户端连接到缓存代理服务器，缓存代理服务器连接缓存服务器，缓存代理服务器可以连接多台Memcached机器可以将每台Memcached机器进行数据同步。这样的架构比较完善了，<u>如果其中一台缓存代理服务器down机，系统依然可以继续工作，如果其中一台Memcached机器down掉</u>，数据不会丢失并且可以保证数据的完整性，以上描述的系统架构如图所示：<br /> <a href="http://www.javabloger.com/images/article_pic/memcached/masd-4.png" target="_blank"><img alt="http://files.note.sdo.com/2011/04/25/5592/4134/1c75/P15SC~jrjKHFnM01o00E0-/b009274d-77b3-49bb-a921-9953c378965c.png" src="http://files.note.sdo.com/2011/04/25/5592/4134/1c75/P15SC%7EjrjKHFnM01o00E0-/b009274d-77b3-49bb-a921-9953c378965c.png" /></a><br /> <a href="http://www.javabloger.com/images/article_pic/memcached/masd-4.png" target="_blank">查看大图请点击这里</a></p> <p>还是那句话：没有任何架构是最完美的，只是最合适的，任何架构都不可能一步到位，都是经过一步一步演变过来的。</p></div></h2></div><img src ="http://www.blogjava.net/brock/aggbug/377542.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/brock/" target="_blank">brock</a> 2012-05-07 17:07 <a href="http://www.blogjava.net/brock/archive/2012/05/07/377542.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>接口编程</title><link>http://www.blogjava.net/brock/archive/2009/08/26/292631.html</link><dc:creator>brock</dc:creator><author>brock</author><pubDate>Wed, 26 Aug 2009 04:22:00 GMT</pubDate><guid>http://www.blogjava.net/brock/archive/2009/08/26/292631.html</guid><wfw:comment>http://www.blogjava.net/brock/comments/292631.html</wfw:comment><comments>http://www.blogjava.net/brock/archive/2009/08/26/292631.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/brock/comments/commentRss/292631.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/brock/services/trackbacks/292631.html</trackback:ping><description><![CDATA[<p>接口编程</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">&nbsp;classpath&nbsp;:实现&nbsp;ModuleInterface&nbsp;接口的实现类&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;获得对象的所有属性&nbsp;&nbsp;&nbsp;</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">Class&nbsp;cl&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;Class.forName(classpath)&nbsp;;<br />
<img id="Codehighlighter1_146_147_Open_Image" onclick="this.style.display='none'; Codehighlighter1_146_147_Open_Text.style.display='none'; Codehighlighter1_146_147_Closed_Image.style.display='inline'; Codehighlighter1_146_147_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_146_147_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_146_147_Closed_Text.style.display='none'; Codehighlighter1_146_147_Open_Image.style.display='inline'; Codehighlighter1_146_147_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Object&nbsp;object</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;cl.getConstructor(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Class[]&nbsp;</span><span id="Codehighlighter1_146_147_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_146_147_Open_Text"><span style="color: #000000">{}</span></span><span style="color: #000000">)&nbsp;&nbsp;&nbsp;<br />
<img id="Codehighlighter1_187_188_Open_Image" onclick="this.style.display='none'; Codehighlighter1_187_188_Open_Text.style.display='none'; Codehighlighter1_187_188_Closed_Image.style.display='inline'; Codehighlighter1_187_188_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_187_188_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_187_188_Closed_Text.style.display='none'; Codehighlighter1_187_188_Open_Image.style.display='inline'; Codehighlighter1_187_188_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.newInstance(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Object[]&nbsp;</span><span id="Codehighlighter1_187_188_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_187_188_Open_Text"><span style="color: #000000">{}</span></span><span style="color: #000000">);&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #008000">//</span><span style="color: #008000">转型成接口</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ModuleInterface&nbsp;&nbsp;utilConfig</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;(ModuleInterface&nbsp;)object;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<p><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
 <img src ="http://www.blogjava.net/brock/aggbug/292631.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/brock/" target="_blank">brock</a> 2009-08-26 12:22 <a href="http://www.blogjava.net/brock/archive/2009/08/26/292631.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>