我有Cassandra集群有3个节点和4个客户端向集群发送请求。请求是异步发送的。下面是代码片段负责发送请求如何增加cassandra的负载?
import com.datastax.driver.core._
import com.datastax.driver.core.policies.{DCAwareRoundRobinPolicy, TokenAwarePolicy}
import com.datastax.driver.core.querybuilder.Select.Where
import com.datastax.driver.core.querybuilder.{Batch, QueryBuilder}
val query =
QueryBuilder.
insertInto(keyspace, tableName).
values(columnNames, columnValues)
session.executeAsync(query)
def setupSession(config: Config): Session = {
val port: Int = config.getInt(CassandraKeyValueStorage.PortKey)
val addresses: Array[String] = config.getString(CassandraKeyValueStorage.HostsKey).split(",")
addresses.
foldLeft(Cluster.builder)(_ addContactPoints _).
withPort(port).
withPoolingOptions(
new PoolingOptions().
setMaxConnectionsPerHost(HostDistance.REMOTE, 1280).
setMaxRequestsPerConnection(HostDistance.REMOTE, 32000).
setMaxConnectionsPerHost(HostDistance.LOCAL, 1280).
setMaxRequestsPerConnection(HostDistance.LOCAL, 32000)).
withLoadBalancingPolicy(new TokenAwarePolicy(new DCAwareRoundRobinPolicy())).
build.
connect
}
正如已被证明我已经改变了限制,以更高的数字,所以我希望他们不要在客户端减缓。
但是我观察到奇怪的行为。以下是统计数据的请求客户端(time speed1 speed2 speed3 speed4 total_speed
)发送:
09:30 0.774 0.25 0.456 0.774 2.254
10:00 1.082 0.354 0.302 0.744 2.482
10:30 1.04 0.548 0.774 0.266 2.628
11:00 0.962 0.7 0.234 0.558 2.454
11:30 0.69 0.622 0.44 0.806 2.558
12:00 0.34 0.432 0.416 1.056 2.244
12:30 0.346 0.414 0.872 0.768 2.4
13:00 0.458 0.428 0.73 0.98 2.596
13:30 0.222 0.47 0.798 0.652 2.142
14:00 0.59 1.084 0.748 0.172 2.594
14:30 0.328 0.806 1.018 0.458 2.61
15:00 0.436 0.5 1.134 0.722 2.792
15:30 0.52 0.258 0.676 0.928 2.382
16:00 0.406 0.202 0.508 0.798 1.914
从中很明显,总的速度是有界的一些价值,而客户能够发送更多的数据。与此同时,cassandra盒子上的CPU空闲时间大约为20%,所以它的加载并不那么困难。我无法理解阻止客户发送更多数据的原因。我认为网络带宽并不是因为所有事情都发生在谷歌云引擎的一个区域内,电流负载约为30 Mb/s(带宽为1 Gb/s)。
“一切都发生在谷歌云引擎的一个区域内” - 因此,所有3个节点和应用程序服务器都位于谷歌云的同一区域? –
@ChrisGerlt正好。 – sbeliakov