﻿<?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-Knight of the round table-文章分类-GridGain</title><link>http://www.blogjava.net/wansong/category/49309.html</link><description>wansong</description><language>zh-cn</language><lastBuildDate>Tue, 30 Aug 2011 19:21:28 GMT</lastBuildDate><pubDate>Tue, 30 Aug 2011 19:21:28 GMT</pubDate><ttl>60</ttl><item><title>JGroup UDP和TCP两种方式</title><link>http://www.blogjava.net/wansong/articles/357232.html</link><dc:creator>w@ns0ng</dc:creator><author>w@ns0ng</author><pubDate>Thu, 25 Aug 2011 00:18:00 GMT</pubDate><guid>http://www.blogjava.net/wansong/articles/357232.html</guid><wfw:comment>http://www.blogjava.net/wansong/comments/357232.html</wfw:comment><comments>http://www.blogjava.net/wansong/articles/357232.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wansong/comments/commentRss/357232.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wansong/services/trackbacks/357232.html</trackback:ping><description><![CDATA[<div>JGroup可以基于TCP协议来实现消息广播，也可以通过UDP方式来广播消息，利弊不言而喻，TCP可靠，但是代价大，性能没有UDP来的   好，UDP速度快，代价小，但是消息的丢失率以及无序性有着很大的限制。但是JGroup在UDP方式的基础上，增加了协议栈的配置，通过配置上层的协   议，可以保证消息的重发，大包体的分解（同时保证消息包体顺序），组内机器的状态检测等功能。<br /><br /><div>http://www.javachen.com/2011/06/jgroups-introduction-and-configruation/<br /><br /><div>http://blog.csdn.net/lnfszl/article/details/5747427<br /><br /><div>http://docs.jboss.org/jbossas/jboss4guide/r4/html/jbosscache.chapt.html</div></div></div></div><img src ="http://www.blogjava.net/wansong/aggbug/357232.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wansong/" target="_blank">w@ns0ng</a> 2011-08-25 08:18 <a href="http://www.blogjava.net/wansong/articles/357232.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JGroups 简介、适用场合、配置、程序例子Demo等完全使用指南</title><link>http://www.blogjava.net/wansong/articles/355922.html</link><dc:creator>w@ns0ng</dc:creator><author>w@ns0ng</author><pubDate>Sat, 06 Aug 2011 12:19:00 GMT</pubDate><guid>http://www.blogjava.net/wansong/articles/355922.html</guid><wfw:comment>http://www.blogjava.net/wansong/comments/355922.html</wfw:comment><comments>http://www.blogjava.net/wansong/articles/355922.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wansong/comments/commentRss/355922.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wansong/services/trackbacks/355922.html</trackback:ping><description><![CDATA[目前项目中在克服JGroups初期使用的困难之后，已经使用比较稳定了。感觉比较烦琐和容易出错的还是JGroups配置。感觉中文的资源较少，现将自己总结的经验总结如下<br />Tim <a href="http://hi.baidu.com/jabber/blog/item/7e879852a23efd0f0cf3e3ea.html" target="_blank">http://hi.baidu.com/jabber/blog/item/7e879852a23efd0f0cf3e3ea.html</a><br /><br /><a href="http://puras.iteye.com/blog/81783">http://puras.iteye.com/blog/81783</a><br /><br /><strong>JGroups 适合使用场合</strong><br />服务器集群cluster、多服务器通讯、服务器replication(复制)等，分布式cache缓存<br /><br /><strong>JGroups 简介</strong><br />JGroups是一个基于Java语言的提供可靠多播(组播)的开发工具包。在IP Multicast基础上提供可靠服务，也可以构建在TCP或者WAN上。主要是由Bela Ban开发，属于JBoss.org，在JBoss的网站也有一些相关文档。目前在 SourceForge上还是比较活跃，经常保持更新。<br /><br /><strong>JGroups 配置</strong><br /><br />PING: 发现初始成员<br />MERGE2: 将网络层切分的包重新合并。<br />FD_SOCK: Failure Dectection 错误检测，基于TCP<br />FD：Failure Dectection 错误检测，基于心跳<br />VERIFY_SUSPECT: 检查貌似失败的节点<br />pbcast.NAKACK: 应答，提供可靠传输<br />UNICAST: 可靠的UNICAST<br />pbcast.STABLE: 计算广播信息是否稳定<br />VIEW_SYNC: 定期广播view(成员名单)<br />pbcast.GMS: Group membership, 处理joins/leaves/crashes等<br />FC: 流量控制<br />FRAG2:Fragmentation layer，分包，将大的数据包分拆成适合网络层传输<br /><br />以上一些是比较重要的配置，基本上不能少。如果要深入研究可以在　org.jgroups.protocols　里面查看源代码<br /><br /><strong>JGroups使用例子, JGroups demo, Tim的hello world例子</strong><br />Timreceiver.java<br /><pre><br />import org.jgroups.tests.perf.Receiver;<br />import org.jgroups.tests.perf.Transport;<br />import org.jgroups.util.Util;<br /><br />public class TimReceiver implements Receiver {<br />      private Transport transport = null;<br />      <br />      public static void main(String[] args) {<br />            TimReceiver t = new TimReceiver();<br />            try {<br />                  int sendMsgCount = 5000;<br />                  int msgSize = 1000;<br />                  t.start();<br /><br />                  t.sendMessages(sendMsgCount, msgSize);<br />                  System.out.println("########## Begin to recv...");<br />                  Thread.currentThread().join();<br />            } catch (Exception e) {<br />                  e.printStackTrace();<br />            } finally {<br />                  if (t != null) {<br />                        t.stop();<br />                  }<br />            }<br />      }<br />      <br />      public void start()<br />                  throws Exception {<br />            transport = (Transport) new TimTransport();<br />            transport.create(null);<br />            transport.setReceiver(this);<br />            transport.start();<br />      }<br /><br />      public void stop() {<br />            if (transport != null) {<br />                  transport.stop();<br />                  transport.destroy();<br />            }<br />      }<br /><br />      private int count = 0;<br />      public void receive(Object sender, byte[] data) {<br />            System.out.print(".");<br />            if (++count == 5000) {<br />                  System.out.println("\r\nRECV DONE.");<br />                  System.exit(0);<br />            }<br />            <br />      }<br /><br />      private void sendMessages(int count, int msgSize)<br />                  throws Exception {<br />            byte[] buf = new byte[msgSize];<br />            for (int k = 0; k &lt; msgSize; k++)<br />                  buf[k] = 'T';<br /><br />            System.out.println("-- sending " + count + " " + Util.printBytes(msgSize) + " messages");<br /><br />            for (int i = 0; i &lt; count; i++) {<br />                  transport.send(null, buf);<br />            }<br />            <br />            System.out.println("######### send complete");<br />      }<br />}</pre><br />TimTransport.java<br /><pre><br /><br />import java.util.Map;<br />import java.util.Properties;<br /><br />import org.jgroups.Address;<br />import org.jgroups.JChannel;<br />import org.jgroups.Message;<br />import org.jgroups.ReceiverAdapter;<br />import org.jgroups.tests.perf.Receiver;<br />import org.jgroups.tests.perf.Transport;<br /><br />public class TimTransport extends ReceiverAdapter implements Transport{<br />      private JChannel channel = null;<br />      private String groupName = "TimDemo";<br />      private Receiver receiver = null;<br />      <br />      String PROTOCOL_STACK_UDP1 = "UDP(bind_addr=192.168.100.59";  <br />      String PROTOCOL_STACK_UDP2 = ";mcast_port=8888";<br />      String PROTOCOL_STACK_UDP3 = ";mcast_addr=225.1.1.1";<br />      String PROTOCOL_STACK_UDP4 = ";tos=8;loopback=false;max_bundle_size=64000;" +<br />                  "use_incoming_packet_handler=true;use_outgoing_packet_handler=false;ip_ttl=2;enable_bundling=true):"<br />           + "PING:MERGE2:FD_SOCK:FD:VERIFY_SUSPECT:"<br />             +"pbcast.NAKACK(gc_lag=50;max_xmit_size=50000;use_mcast_xmit=false;" +<br />                         "retransmit_timeout=300,600,1200,2400,4800;discard_delivered_msgs=true):"<br />             +"UNICAST:pbcast.STABLE:VIEW_SYNC:"<br />             +"pbcast.GMS(print_local_addr=false;join_timeout=3000;" +<br />                         "join_retry_timeout=2000;" +<br />                         "shun=true;view_bundling=true):"<br />             +"FC(max_credits=2000000;min_threshold=0.10):FRAG2(frag_size=50000)";<br /><br />            <br />      public Object getLocalAddress() {<br />            return channel != null ? channel.getLocalAddress() : null;<br />      }<br /><br />      public void start() throws Exception {<br />            channel.connect(groupName);            <br />      }<br /><br />      public void stop() {<br />            if (channel != null) {<br />                  channel.shutdown();<br />            }<br />      }<br /><br />      public void destroy() {<br />            if (channel != null) {<br />                  channel.close();<br />                  channel = null;<br />            }<br />      }<br /><br />      public void setReceiver(Receiver r) {<br />            this.receiver = r;<br />      }<br /><br />      public Map dumpStats() {<br />            return channel != null ? channel.dumpStats() : null;<br />      }<br /><br />      public void send(Object destination, byte[] payload) throws Exception {<br />            byte[] tmp = new byte[payload.length];<br />            System.arraycopy(payload, 0, tmp, 0, payload.length);<br />            Message msg = null;<br />            msg = new Message((Address) destination, null, tmp);<br />            if (channel != null) {<br />                  channel.send(msg);<br />            }<br />      }<br /><br />      public void receive(Message msg) {<br />            Address sender = msg.getSrc();<br />            byte[] payload = msg.getBuffer();<br />            if (receiver != null) {<br />                  try {<br />                        receiver.receive(sender, payload);<br />                  } catch (Throwable tt) {<br />                        tt.printStackTrace();<br />                  }<br />            }<br />      }<br /><br />      public void create(Properties config) throws Exception {<br />            String PROTOCOL_STACK = PROTOCOL_STACK_UDP1 + PROTOCOL_STACK_UDP2 + PROTOCOL_STACK_UDP3 + PROTOCOL_STACK_UDP4;<br />            channel = new JChannel(PROTOCOL_STACK);<br />            channel.setReceiver(this);            <br />      }<br /><br />      public void send(Object destination, byte[] payload, boolean oob) throws Exception {<br />            send(destination, payload);<br />      }<br />}</pre><img src ="http://www.blogjava.net/wansong/aggbug/355922.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wansong/" target="_blank">w@ns0ng</a> 2011-08-06 20:19 <a href="http://www.blogjava.net/wansong/articles/355922.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>利用JGroups同步两台server之间的cache。</title><link>http://www.blogjava.net/wansong/articles/355921.html</link><dc:creator>w@ns0ng</dc:creator><author>w@ns0ng</author><pubDate>Sat, 06 Aug 2011 12:00:00 GMT</pubDate><guid>http://www.blogjava.net/wansong/articles/355921.html</guid><wfw:comment>http://www.blogjava.net/wansong/comments/355921.html</wfw:comment><comments>http://www.blogjava.net/wansong/articles/355921.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wansong/comments/commentRss/355921.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wansong/services/trackbacks/355921.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 一、需求前段时间做了一个项目，在后台有很多的数据都放入到了cache中了，而且还会对cache中的数据进行更新。如果只有一台server没有任何问题，但是如果考虑到集群负载平衡，连接多个server的时候，就有问题出现了，怎么样才能保证多个server之间cache的同步呢？请看下面的部署图。二、引入JGroupsJGroups是一个可靠的组间通讯工具，进程可以加入一个通讯组，给组内所有的成员...&nbsp;&nbsp;<a href='http://www.blogjava.net/wansong/articles/355921.html'>阅读全文</a><img src ="http://www.blogjava.net/wansong/aggbug/355921.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wansong/" target="_blank">w@ns0ng</a> 2011-08-06 20:00 <a href="http://www.blogjava.net/wansong/articles/355921.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用开源Grid平台－GridGain实现网格计算 </title><link>http://www.blogjava.net/wansong/articles/355913.html</link><dc:creator>w@ns0ng</dc:creator><author>w@ns0ng</author><pubDate>Sat, 06 Aug 2011 06:59:00 GMT</pubDate><guid>http://www.blogjava.net/wansong/articles/355913.html</guid><wfw:comment>http://www.blogjava.net/wansong/comments/355913.html</wfw:comment><comments>http://www.blogjava.net/wansong/articles/355913.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wansong/comments/commentRss/355913.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wansong/services/trackbacks/355913.html</trackback:ping><description><![CDATA[<p>网格计算一般分为两种：数据网格和计算网格，简单的说数据网格就是把数据分布式存储，计算网格就是将任务分解为子认为并行计算。</p>
<p>一个计算网格平台的作用就是将任务分解开来，交给不同的结点机器运行，然后把运行结果汇聚起来。这就是Split and Aggregate。如下图所示，一个job请求分解为三个sub-job，分别被不同的机器执行，然后把结果汇聚，返回给调用的客户。</p>
<p><img alt="" src="http://www.gridgain.com/images/compute_grids.png" />&nbsp;</p>
<p>GridGain是一个开源的java网格平台。它集成了很多现成的框架，例如</p>
<p>JBoss <br />Spring <br />Spring AOP <br />JBoss AOP <br />AspectJ <br />JGroups </p>
<p>GridGain有两个方法将应用程序grid化：</p>
<p>第一种是使用AOP</p>
<p>假设有一个应用</p>
<blockquote class="code"><font color="#808080">01</font>&nbsp;<font color="#7f0055"><strong>class&nbsp;</strong></font><font color="#000000">BizLogic&nbsp;</font><font color="#000000">{</font><br /><font color="#808080">02</font>&nbsp;<font color="#ffffff">&nbsp;&nbsp;</font><font color="#7f0055"><strong>public&nbsp;static&nbsp;</strong></font><font color="#000000">Result&nbsp;process</font><font color="#000000">(</font><font color="#000000">String&nbsp;param</font><font color="#000000">)&nbsp;{</font><br /><font color="#808080">03</font>&nbsp;<font color="#ffffff">&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#000000">&#8230;</font><br /><font color="#808080">04</font>&nbsp;<font color="#ffffff">&nbsp;&nbsp;</font><font color="#000000">}</font><br /><font color="#808080">05</font>&nbsp;<font color="#000000">}</font><br /><font color="#808080">06</font>&nbsp;<font color="#ffffff"><br /><font color="#808080">07</font>&nbsp;<font color="#7f0055"><strong>class&nbsp;</strong></font><font color="#000000">Caller&nbsp;</font><font color="#000000">{</font><br /><font color="#808080">08</font>&nbsp;<font color="#ffffff">&nbsp;&nbsp;</font><font color="#7f0055"><strong>public&nbsp;static&nbsp;</strong></font><font color="#7f0055"><strong>void&nbsp;</strong></font><font color="#000000">Main</font><font color="#000000">(</font><font color="#000000">String</font><font color="#000000">[]&nbsp;</font><font color="#000000">args</font><font color="#000000">)&nbsp;{</font><br /><font color="#808080">09</font>&nbsp;<font color="#ffffff">&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#000000">BizLogic.process</font><font color="#000000">(</font><font color="#000000">args</font><font color="#000000">[</font><font color="#990000">0</font><font color="#000000">])</font><font color="#000000">;</font><br /><font color="#808080">10</font>&nbsp;<font color="#ffffff">&nbsp;&nbsp;</font><font color="#000000">}</font><br /><font color="#808080">11</font>&nbsp;<font color="#000000">}</font> </blockquote>
<p>如果要把process grid化，只要简单的使用一个@Gridify的annotation即可，在Caller客户端要启动GridFactory</p>
<blockquote class="code">
<p><font color="#808080">01</font>&nbsp;<font color="#7f0055"><strong>class&nbsp;</strong></font><font color="#000000">BizLogic&nbsp;</font><font color="#000000">{</font><br /><font color="#808080">02</font>&nbsp;<font color="#ffffff">&nbsp;&nbsp;</font><font color="#646464"><strong>@Gridify</strong></font><font color="#000000"><strong>(</strong></font><font color="#000000"><strong>&#8230;</strong></font><font color="#000000"><strong>)</strong></font><img class="callout_img" alt="" src="http://www.gridgain.com/images/callout_yellow.gif" /><span class="callout_yellow">Here</span><br /><font color="#808080">03</font>&nbsp;<font color="#ffffff">&nbsp;&nbsp;</font><font color="#7f0055"><strong>public&nbsp;static&nbsp;</strong></font><font color="#000000">Result&nbsp;process</font><font color="#000000">(</font><font color="#000000">String&nbsp;param</font><font color="#000000">)&nbsp;{</font><br /><font color="#808080">04</font>&nbsp;<font color="#ffffff">&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#000000">&#8230;</font><br /><font color="#808080">05</font>&nbsp;<font color="#ffffff">&nbsp;&nbsp;</font><font color="#000000">}</font><br /><font color="#808080">06</font>&nbsp;<font color="#000000">}</font><br /><font color="#808080">07</font>&nbsp;<font color="#ffffff"><br /><font color="#808080">08</font>&nbsp;<font color="#7f0055"><strong>class&nbsp;</strong></font><font color="#000000">Caller&nbsp;</font><font color="#000000">{</font><br /><font color="#808080">09</font>&nbsp;<font color="#ffffff">&nbsp;&nbsp;</font><font color="#7f0055"><strong>public&nbsp;static&nbsp;</strong></font><font color="#7f0055"><strong>void&nbsp;</strong></font><font color="#000000">Main</font><font color="#000000">(</font><font color="#000000">String</font><font color="#000000">[]&nbsp;</font><font color="#000000">args</font><font color="#000000">)&nbsp;{</font><br /><font color="#808080">10</font>&nbsp;<font color="#ffffff">&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#000000">GridFactory.start</font><font color="#000000">()</font><font color="#000000">;</font><img class="callout_img" alt="" src="http://www.gridgain.com/images/callout_yellow.gif" /><span class="callout_yellow">Here</span><br /><font color="#808080">11</font>&nbsp;<font color="#ffffff"><br /><font color="#808080">12</font>&nbsp;<font color="#ffffff">&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#7f0055"><strong>try&nbsp;</strong></font><font color="#000000">{</font><br /><font color="#808080">13</font>&nbsp;<font color="#ffffff">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#000000">BizLogic.process</font><font color="#000000">(</font><font color="#000000">args</font><font color="#000000">[</font><font color="#990000">0</font><font color="#000000">])</font><font color="#000000">;</font><br /><font color="#808080">14</font>&nbsp;<font color="#ffffff">&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#000000">}</font><br /><font color="#808080">15</font>&nbsp;<font color="#ffffff">&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#7f0055"><strong>finally&nbsp;</strong></font><font color="#000000">{</font><br /><font color="#808080">16</font>&nbsp;<font color="#ffffff">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#000000">GridFactory.stop</font><font color="#000000">()</font><font color="#000000">;</font><img class="callout_img" alt="" src="http://www.gridgain.com/images/callout_yellow.gif" /><span class="callout_yellow">Here</span><br /><font color="#808080">17</font>&nbsp;<font color="#ffffff">&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#000000">}</font><br /><font color="#808080">18</font>&nbsp;<font color="#ffffff">&nbsp;&nbsp;</font><font color="#000000">}</font><br /><font color="#808080">19</font>&nbsp;<font color="#000000">}</font> </font></font></p></blockquote></font><img src ="http://www.blogjava.net/wansong/aggbug/355913.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wansong/" target="_blank">w@ns0ng</a> 2011-08-06 14:59 <a href="http://www.blogjava.net/wansong/articles/355913.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>GridAffinityLoadBalancingSpi 数据分区技术和数据网格的集成</title><link>http://www.blogjava.net/wansong/articles/355912.html</link><dc:creator>w@ns0ng</dc:creator><author>w@ns0ng</author><pubDate>Sat, 06 Aug 2011 06:11:00 GMT</pubDate><guid>http://www.blogjava.net/wansong/articles/355912.html</guid><wfw:comment>http://www.blogjava.net/wansong/comments/355912.html</wfw:comment><comments>http://www.blogjava.net/wansong/articles/355912.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wansong/comments/commentRss/355912.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wansong/services/trackbacks/355912.html</trackback:ping><description><![CDATA[<p><span style="font-family: 宋体">转载 <a href="http://www.iteye.com/topic/475010">http://www.iteye.com/topic/475010</a>&nbsp; <br /><br />网格技术分为两种一种为网格计算一种为网格数据，gridgain是网格计算，可以根据规则分节点技术，提高计算速度，比如用于规则引擎，技术引擎等，银行结算，保险考核结算等。但是如果在计算中数据时分布式或者是延时加载时，此时数据获取不到，这个时候就需要用到网格数据，在网格中计算，在网格中获取数据，这个时候<strong>Infinispan</strong>就是一个不错的选择！<br /><br /><br />数据分区技术和数据网格的集成</span></p>
<p><span style="font-family: 宋体">概述：</span></p>
<p><span style="font-family: 宋体">当处理大量数据的时候，常常值得推荐的是跨节点把数据分隔开处理。基本上，每个点负责处理数据的一部分。这种方法基本上允许从数据库数据中加载大量的数据到缓存，然后配置你的电脑区执行这些数据。为什么？为了避免数据在各节点的重复缓冲，这样往往可以提升性能，防止服务器瘫痪。</span></p>
<p>&nbsp;</p>
<p><span style="font-family: 宋体">使用</span>gridgain<span style="font-family: 宋体">，使用</span>Affinity Load Balancing<span style="font-family: 宋体">这样的设计非常完美的解决了这个问题，而且可以和分布式缓存集成，解决数据网格。</span></p>
<p>&nbsp;<img border="0" alt="" src="http://www.blogjava.net/images/blogjava_net/wansong/GridAffinityLoadBalancingSpi.jpg" /></p>
<p><span style="font-family: Verdana; color: black">Affinity Load Balancing</span></p>
<p>&nbsp;</p>
<p><span style="font-family: 宋体; color: black">在</span><span style="font-family: Verdana; color: black">GridGain</span><span style="font-family: 宋体; color: black">中</span><span style="font-family: Verdana; color: black">Affinity Load Balancing</span><span style="font-family: 宋体; color: black">是通过</span><span style="font-family: Verdana; color: black; font-size: 9pt"><a title="GridAffinityLoadBalancingSpi" href="http://www.gridgainsystems.com/wiki/display/GG15UG/GridAffinityLoadBalancingSpi">GridAffinityLoadBalancingSpi</a>.</span><span style="font-family: 宋体; color: black; font-size: 9pt">提供。</span></p>
<p><span style="font-family: 宋体; color: black; font-size: 9pt">下图说明是使用数据网格和不适用数据网格的差别。左面的图表示没使用</span><span style="font-family: Verdana; color: black; font-size: 9pt">GridGain</span><span style="font-family: 宋体; color: black; font-size: 9pt">的执行流程，其中远程数据库服务器负责查询数据，然后传递到主调用服务器。这种比数据库访问要快，但是结果计算使使用很多不必要的流量。</span></p>
<p>&nbsp;</p>
<p><span style="font-family: 宋体; color: black; font-size: 9pt">右图，</span><span style="font-family: 宋体; color: black">使用了</span><span style="font-family: Verdana; color: black">Gridgain</span><span style="font-family: 宋体; color: black">。整个逻辑计算与数据访问整合到本地节点。假设大量逻辑计算比数据序列到数据库要轻巧（即大量计算），那么网络流量将是最小的。此外，您的计算都可以访问节点</span><span style="font-family: Verdana; color: black">2</span><span style="font-family: 宋体; color: black">和节点</span><span style="font-family: Verdana; color: black">3</span><span style="font-family: 宋体; color: black">的数据。在这种情况下，</span><span style="font-family: Verdana; color: black">GridGain</span><span style="font-family: 宋体; color: black">将分为逻辑计算</span><span style="font-family: Verdana; color: black">jobs</span><span style="font-family: 宋体; color: black">和合适的逻辑计算路由到相应的数据服务中进行计算。以确保所有计算都在本地节点中计算。现在，如果数据服务节点崩溃时，您的失败</span><span style="font-family: Verdana; color: black">jobs</span><span style="font-family: 宋体; color: black">会自动转移到其他节点，这种是允许失败的（数据网格和分布式缓存提供这种方式）。</span></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><span style="font-family: 宋体; color: black">数据网格集成</span></p>
<p><span style="font-family: Verdana; color: black">GridGain</span><span style="font-family: 宋体; color: black">没有实现数据高速缓存，但是与现有的数</span><span style="font-family: Verdana; color: black"> </span><span style="font-family: 宋体; color: black">据高速缓存或数据网格解决方案进行了集成。这使用户可以使用几乎任何的分布式缓存来实现自己喜欢的方案。</span></p>
<p><span style="font-family: 宋体; color: black">比如：</span><span style="font-family: Verdana; color: black">GridGain</span><span style="font-family: 宋体; color: black">提供了一个</span><span style="font-family: Verdana; color: black">JBoss Cache Data Partitioning Example </span><span style="font-family: 宋体; color: black">告诉用户如何来使用</span><span style="font-family: Verdana; color: black">Attinty Load Balancing</span><span style="font-family: 宋体; color: black">。事实上，</span><span style="font-family: Verdana; color: black">JBOSSCache</span><span style="font-family: 宋体; color: black">没有提供数据分区的功能。由于使用了</span><span style="font-family: Verdana; color: black">GridGain</span><span style="font-family: 宋体; color: black">的</span><span style="font-family: Verdana; color: black; font-size: 9pt"><a title="GridAffinityLoadBalancingSpi" href="http://www.gridgainsystems.com/wiki/display/GG15UG/GridAffinityLoadBalancingSpi">GridAffinityLoadBalancingSpi</a></span><span style="font-family: 宋体; color: black; font-size: 9pt">提供的</span><span style="font-family: Verdana; color: black; font-size: 9pt">Attinity Load Balancing</span><span style="font-family: 宋体; color: black; font-size: 9pt">让</span><span style="font-family: Verdana; color: black; font-size: 9pt">JBoss</span><span style="font-family: Verdana; color: black; font-size: 9pt">&nbsp;Cache </span><span style="font-family: 宋体; color: black; font-size: 9pt">数据分区成为了可能。<br /><br /><font color="#2b2b2b">本文包含附件：admin@pjprimer.com 索取<br />==========English==========<br />Overview: When processing mass data, what often be worth to recommend is to cross node to open data space processing. Basically, every order the one share of responsible processing data. This kind of method basically allows to arrive from the data with the much to load in database data cache, the computer division that deploys you next carries out these data. Why? To avoid the data repetition in each node amortize, often can promote property so, prevent a server to break down. Use Gridgain, the settlement with such very ideal design of use Affinity Load Balancing this problem, and can mix distributed cache is compositive, solve data reseau. Affinity Load Balancing is in GridGain Affinity Load Balancing is to pass GridAffinityLoadBalancingSpi. Offer. Specification laying a plan is the difference of service data reseau and reseau of not applicable data. The graph of left expresses to did not use the executive technological process of GridGain, among them long-range database server is in charge of inquiring data, deliver next advocate call a server. Than the database the visit wants this kind fast, but as a result computation makes use a lot of needless flow. Right graph, used Gridgain. Whole and logistic computation and data visit conformity arrive this locality node. Assume a large number of logistic computation compare data alignment to want to the database deft (calculate in great quantities namely) , so network discharge will be the smallest. In addition, your computation can visit node 2 with node the data of 3. Below this kind of circumstance, gridGain calculates component for logic Jobs and right logistic computation way by have consideration in corresponding data service. In order to ensure all computation are calculated in this locality node. Now, when if data serves node,breaking down, your unsuccessful Jobs can transfer other node automatically, this kind is allow failure (data reseau and distributed cache offer this kind of way) . [Compositive GridGain did not realize Img][/img] data reseau cache of data high speed, but undertook with cache of existing data high speed or data reseau solution compositive. This makes the user can be used almost any distributed cache will implement the plan that he likes. For instance: GridGain offerred a JBoss Cache Data Partitioning Example to tell an user how to use Attinty Load Balancing. In fact, JBOSSCache did not provide the function of data partition. Because used the Attinity Load Balancing that the GridAffinityLoadBalancingSpi of GridGain offers to let JBoss Eamil ask for: Admin@pjprimer.com</font><br /></span></p><img src ="http://www.blogjava.net/wansong/aggbug/355912.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wansong/" target="_blank">w@ns0ng</a> 2011-08-06 14:11 <a href="http://www.blogjava.net/wansong/articles/355912.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>