连接到Riak集群的最佳实践

时间:2015-04-28 13:54:51

标签: java riak

我正在将我的应用程序从Riak 1.4迁移到Riak 2.

过去,我一直在Riak集群的每个节点上放置我的应用程序。它仅连接到本地Riak节点(<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" > <suite name="methodsuite"> <test name="test1" preserve-order="true"> <method-selectors> <method-selector> <selector-class name="com.MethodSelector2" priority="-1"/> </method-selector> </method-selectors> <packages> <package name=".*"></package> </packages> </test> </suite> ),监视Riak的可用性并基于此公布其自身的可用性。 远程Haproxies监控这些应用程序中的多个,并将最终用户流量引导到任何可用的应用程序实例:

enduser --network - &gt; Haproxy - 网络 - &gt;游泳池[application-&gt; riak]

我对这种架构的理由是

  • 应用程序与Riak之间可能的最短延迟
  • 应用程序的零容易,它总是希望Riak在localhost
  • 良好控制HAProxy中的流量分配(仅限于那里)
  • 安全性很好:protobuf只暴露给localhost

java-client documentation现在建议,在连接时,Riak客户端应用程序应该知道Riak集群的所有节点。鉴于此,我的方法仍然可以接受吗?或者我应该切换到应用程序的每个实例都知道并连接到每个Riak节点的场景?

1 个答案:

答案 0 :(得分:1)

我认为客户有几个目的是了解每个节点

    当单个Riak节点关闭时,
  • 应用程序节点仍然可用
  • 单个重载的应用程序节点不会将其所有负载转移到单个Riak节点
  • 有一个性能提升(在Dynamo白皮书中注明)直接向主节点提交写入而不是提交到必须转发请求的随机节点

看起来,在您的情况下,您已经有haproxy处理单个应用程序节点可用性和负载平衡,并且您已经没有利用性能差异。

在客户端维护一个连接池并不新鲜,我相信它已经在1.4客户端中可用了。如果您之前不需要它,如果您还计划进行其他可以利用连接池优势的更改,那么现在添加它将是有意义的。