14-scale is not infinite(扩展不是无限的)
虽然这这整个章节都在说scale的方法,但多数的scale问题都可以通过加入多个node解决,但是有个资源是非常有限的,必须慎重考虑:the cluster state
the cluster state 是一个数据结构,保存了如下信息:
集群的设置信息
每个node的信息
indices,mappings analyzer warmers aliases
集群与每个node 联系的信息等
你可以通过语句获取信息
GET /_cluster/state
cluster state存在在每个node中,这就是为啥每个node都可以接收数据请求而且明白所有node信息的原因。
但仅仅master能更新cluster state,每个节点上的cluster state都存在在这个节点的内存中,当更新的时候必须同步到所有node中,这个过程可是非常大的。
有的case中field是动态添加非常多的,例如下面这种情况
POST /counters/pageview/home_page/_update
{
"script": "ctx._source[referer]++",
"params": {
"referer": "http://www.foo.com/links?bar=baz"
}
}
这是非常糟糕的,建议改为下面这种
"counters": [
{ "referer": "http://www.foo.com/links?bar=baz", "count": 2 },
{ "referer": "http://www.linkbait.com/article_3", "count": 10 },
...
]
一个shard不能太大,如果过大就需要考虑重新设计了,考虑采用 tribe nodes,可以通过多个cluster进行搜索
https://www.elastic.co/guide/en/elasticsearch/guide/current/finite-scale.html