水平缩放的意思
Posted
技术标签:
【中文标题】水平缩放的意思【英文标题】:Scaling horizontally meaning 【发布时间】:2019-01-21 22:05:53 【问题描述】:我正在学习 ElasticSearch,在他们的文档中写到这一行
在分布式系统中执行完整的 SQL 样式连接,例如 Elasticsearch 非常昂贵。相反,Elasticsearch 提供两种形式的连接,旨在水平扩展。
请有人用外行术语解释一下第二句话是什么意思。
【问题讨论】:
【参考方案1】:作为序言,您可能希望通过 SO 上的另一个线程来解释 horizontal vs vertical scaling。
在大多数情况下,ES 集群被设计为水平增长,这意味着每当您的集群开始出现一些弱点(查询速度慢、索引速度慢等)时,您需要做的就是添加一个或多个节点到您的集群,ES 会将负载分散到更多硬件上,从而减轻现有节点的负担。这就是水平扩展的全部意义所在,ES 正是为此而设计的,因为它将索引划分为分片,然后分配给集群中的节点。
如您所知,ES 没有 JOIN 功能,他们出于上述原因故意这样做(即“过于昂贵”)。 ES中有four ways to model relationships:
通过非规范化数据(首选) 通过使用nested
types
通过使用parent/child documents
使用应用程序端连接
The link you referred to,它介绍了nested
、has_parent
和has_child
查询,是关于上面的第二个和第三个要点。嵌套和父/子文档的设计方式是尽可能多地利用 ES 支持的索引/分片分区模型。
当使用nested
字段(1-N 关系)时,nested
数组内的每个元素只是另一个隐藏的文档,并存储在集群中某个位置的分片中。当使用join
字段(1-N 关系)时,父文档和子文档也是存储在您的索引中的文档,该文档位于集群中某处的分片内。当您的索引增长时(即当您有越来越多的父子和/或嵌套数据时),您添加节点,包含您的文档的分片将透明地分布在集群中。这意味着无论您的文档存储在何处,您都可以检索它们以及它们的相关文档,而无需执行昂贵的连接。
【讨论】:
【参考方案2】:所以你会得到更多关于水平缩放的信息here
在 Elasticsearch 术语中,当您在具有相同集群配置的同一网络中的 ES 上启动两个或多个实例时,它们将相互连接并创建一个分布式网络。因此,如果您再添加一台计算机或节点并在那里启动一个 ES 实例并保持集群配置相同,节点将自动连接到前一个集群,数据和请求负载将被共享。当您向 ES 发出任何请求时,可能是它的读取或写入请求,每个请求都可以并行处理,并且您可以根据每个索引的节点数和分片数来获得速度。
获取更多信息here
【讨论】:
以上是关于水平缩放的意思的主要内容,如果未能解决你的问题,请参考以下文章