1 ES分布式机制的透明隐藏特性
ES本身就是一个分布式系统,就是为了处理海量数据的应用。ES隐藏了复杂的分布式机制,简化了配置和操作的复杂度。ES在现在的互联网环境中,盛行的原因,主要的核心就是分布式的简化。
ES隐藏的内容:分片机制、集群发现机制(cluster discovery)、shard负载均衡、shard副本、请求路由、集群扩容、shard重分配等。
如:分片机制-shard, 主分片 primary shard。不管多少个节点,也不管index创建的时候,分多少个primary shard,是否需要管理哪一个节点管理哪些shard?
如:shard负载均衡,在读写操作的时候,是否考虑过,本次操作在哪一个shard上执行?

2 ES的扩容
什么水平扩容?什么是垂直扩容?
水平扩容:就是如果资源不足的时候,添加新的资源。如:服务器能力不足,买新服务器,存储不足,买新的服务器。
垂直扩容:如果资源不足的时候,优化资源。如:服务器能力不足,替换新的更强的服务器。

2.1 水平扩容
增加新的集群节点,实现扩容。水平扩容方案使用的频率更高。

2.2 垂直扩容
替换集群节点硬件配置。在节点数量不变的情况下,实现扩容逻辑。垂直扩容有硬件瓶颈,且成本过高,相对使用的更少。

3 节点变化时的数据rebalance
在节点发生变化时,ES的cluster会自动调整每个节点中的数据,也就是shard的重新分配。这个过程就是rebalance。ES做rebalance,目的是为了提高性能。理论上,当数据量达到一定级别的时候,每个shard分片上的数据量是均等的。那么每个节点管理的shard数量是均等的情况,ES集群才能提供最好的服务性能。

4 master节点作用
现在不是讲如何配置master,是讲解master的功能。讲解master概念。
维护集群元数据的节点。如:索引的变更(创建和删除),对应的元数据保存在master节点中。
集群在默认配置中,会自动的选举出master节点。
master不是请求的唯一接收节点。只是维护元数据的特殊节点。不会导致单点瓶颈。
元数据是一个收集管理的过程。不是一个必要的不可替代的数据。Master如果宕机,集群会选举出新的master,新的master会在集群的所有节点中重新收集集群元数据并管理。

5 节点平等的分布式架构
节点平等 - 每个节点都能接收客户端请求。不会造成单点压力
自动请求路由 - 节点在接收到客户端请求时,会自动的识别应该由哪个节点处理本次请求,并实现请求的转发。
响应收集 - 在自动请求路由后,接收客户端请求的节点会自动的收集其他节点的处理结果,并统一响应给客户端。

6 并发冲突
ES是一个分布式的集群应用,是处理高并发环境的应用。有高并发,就可能有并发冲突问题。
如电商系统中的商品库存更新问题。

6.1 悲观锁
一般是关系型数据库中使用。控制并发执行数量。让每个单位时间中,只有一个线程控制一条数据。如:表级锁,行级锁,读锁,写锁等。

6.2 乐观锁
基于版本(时间戳)实现的数据控制方式。也就是在对数据实现写操作时,必须保证被修改数据的版本(时间戳)与读取时的版本(时间戳)完全一致。常使用于关系型数据库、分布式数据存储应用、数据缓存服务器等。在ES中通常使用乐观锁机制控制并发访问冲突问题。
select xxx from table where xxxxxxx
update table set xxx=new_value, version = new_version where id=? and version=上一次查询到的数据

6.2.1 测试内置_version
案例数据:

GET products_index/phone_type/1

{
"_index": "products_index",
"_type": "phone_type",
"_id": "1",
"_version": 1, # 元数据 version。 版本信息。 默认是ES控制。每次写操作,版本自增1。删除也是写操作。
"found": true,
"_source": {
"name": "IPHONE 8",
"remark": "64G",
"price": 548800,
"producer": "APPLE",
"tags": [
"64G",
"red color",
"Nano SIM"
]
}
}

  

全量替换(乐观锁):乐观锁的使用,就是通过参数version。ES会检查请求中的version和存储中的version是否相等。如果不相等报错,如果相等,修改。

PUT /products_index/phone_type/1?version=2
{
"name" : "iphone x",
"remark" : "256G",
"price" : 899900,
"producer" : "apple",
"tags" : [ "256G" ]
}

  

6.2.2 测试external version
ES提供了一个feature,就是可以自定义version实现ES内置的_version元数据版本管理功能。与元数据_version的区别是:元数据比对必须完全一致;而external version必须比元数据_version数据大。
external version版本控制特点:要求提供的version数据必须比元数据_version大。在更新成功后,ES中记录的元数据_version修改为提供的external version数据值。
案例数据:

GET products_index/phone_type/1

{
"_index": "products_index",
"_type": "phone_type",
"_id": "1",
"_version": 3,
"found": true,
"_source": {
"name": "iphone x",
"remark": "256G",
"price": 899900,
"producer": "apple",
"tags": [
"256G"
]
}
}

  

元数据_version修改:

PUT /products_index/phone_type/1?version=3
{
"name" : "iphone x",
"remark" : "256G",
"price" : 899900,
"producer" : "apple",
"tags" : [ "256G" ]
}

  

external version修改:

PUT /products_index/phone_type/1?version=5&version_type=external
{
"name" : "iphone x",
"remark" : "256G",
"price" : 899900,
"producer" : "apple",
"tags" : [ "256G" ]
}

  

6.2.3 测试partial update乐观锁
在ES中,使用partial update更新数据时,ES内部自动使用乐观锁控制数据的并发安全。如果出现数据冲突(版本不一致)的时候,ES会提示更新失败。可以通过命令中的参数实现手工管理乐观锁。在ES中,retry_on_conflict和version参数不能同时使用。因为ES中的partial update本身自带乐观锁控制。所以,如果再传递一个version参数,是有底层控制冲突的。
使用参数retry_on_conflict,自动重试多次,实现乐观锁控制。

POST /products_index/phone_type/1/_update?retry_on_conflict=3
{
"doc": {
"price" : 2999900
}
}

  

使用参数version,指定版本的乐观锁控制

POST /products_index/phone_type/1/_update?version=5
{
"doc": {
"price" : 999900
}
}

  

Elastic Search 分布式架构分析的更多相关文章

  1. 分布式MySQL数据库TDSQL架构分析

    摘要:腾讯计费平台部为了解决基于内存的NoSQL解决方式HOLD平台在应对多种业务接入时的不足.结合团队在MySQL领域多年应用和优化经验,终于在MySQL存储引擎基础上,打造一套分布式SQL系统TD ...

  2. 分布式搜索引擎Elasticsearch的架构分析

    一.写在前面 ES(Elasticsearch下文统一称为ES)越来越多的企业在业务场景是使用ES存储自己的非结构化数据,例如电商业务实现商品站内搜索,数据指标分析,日志分析等,ES作为传统关系型数据 ...

  3. Elastic Search 上市了,市值翻倍,这群人财务自由了!

    国庆长假,大部分人还深浸在风花雪月之中,而就在昨天(美国时间10月5号),我们 Java 程序员所熟知的大名鼎鼎的 Elastic Search 居然在美国纽约证券交易所上市了! 当说到搜索时,大部分 ...

  4. Flickr 网站架构分析

    Flickr 网站架构分析 Flickr.com 是网上最受欢迎的照片共享网站之一,还记得那位给Windows Vista拍摄壁纸的Hamad Darwish吗?他就是将照片上传到Flickr,后而被 ...

  5. 分库分表后跨分片查询与Elastic Search

    携程酒店订单Elastic Search实战:http://www.lvesu.com/blog/main/cms-610.html 为什么分库分表后不建议跨分片查询:https://www.jian ...

  6. 万字长文:ELK(V7)部署与架构分析

    ELK(7版本)部署与架构分析 1.ELK的背景介绍与应用场景 在项目应用运行的过程中,往往会产生大量的日志,我们往往需要根据日志来定位分析我们的服务器项目运行情况与BUG产生位置.一般情况下直接在日 ...

  7. 深入分析Elastic Search的写入过程

    摘要 之前写过一篇ElasticSearch初识之吐槽,不知觉竟然过去了两年了.哎,时光催人老啊.最近又用到了ES,想找找过去的总结文档,居然只有一篇,搞了半年的ES,遇到那么多的问题,产出只有这么点 ...

  8. Elastic Search快速上手(1):简介及安装配置

    前言 最近开始尝试学习Elastic Search,因此决定做一些简单的整理,以供后续参考,快速上手使用ES. 简介 ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分布式多 ...

  9. elastic search&logstash&kibana 学习历程(一)es基础环境的搭建

    elastic search 6.1.x 常用框架: 1.Lucene Apache下面的一个开源项目,高性能的.可扩展的工具库,提供搜索的基本架构: 如果开发人员需用使用的话,需用自己进行开发,成本 ...

随机推荐

  1. [bat]只更新svn部分文件夹

    游戏工程里的sdk文件夹,经常被svn认定为有毒文件. 后来关了权限之后,已拉取过的sdk文件夹还是会拉下来. 网上找了个方法,bat文件只更新部分文件. TortoiseProc /command: ...

  2. Codeforces 1009 E. Intercity Travelling(计数)

    1009 E. Intercity Travelling 题意:一段路n个点,走i千米有对应的a[i]疲劳值.但是可以选择在除终点外的其余n-1个点休息,则下一个点开始,疲劳值从a[1]开始累加.休息 ...

  3. 利用ceph-deploy部署ceph存储集群

    一.环境准备 创建两台主机,ip地址和主机名如下 192.168.2.100,主机名ceph-1 192.168.2.101,主机名ceph-2 每个主机 新增加一块数据盘,分区根据自己需要分区即可, ...

  4. IO之复制文件的四种方式

    1. 使用FileStreams复制 这是最经典的方式将一个文件的内容复制到另一个文件中. 使用FileInputStream读取文件A的字节,使用FileOutputStream写入到文件B. 这是 ...

  5. ARP输入 之 arp_process

    概述 arp_process为ARP输入包的核心处理流程: 若输入为ARP请求且查路由成功,则进行如下判断:输入到本地,则进行应答:否则,允许转发,则转发,本文代码不包含转发流程: 若输入为ARP应答 ...

  6. 20182303 2019-2020-1 《数据结构与面向对象程序设计》第2&3周学习总结

    目录 教材学习内容总结 教材学习中的问题和解决过程 代码调试中的问题和解决过程 代码托管 上周考试错题总结 结对及互评 点评 学习进度条 教材学习内容总结 教材第二章内容 学习Java基本数据类型以及 ...

  7. CDN之简介

    1. 什么是 CDN? 来自 <什么是 CDN?> CDN(内容交付网络)是一种高度分布式服务器平台,为交付 Web 应用程序.流媒体等内容专门优化.服务器网络分布于众多物理和网络位置,对 ...

  8. vs2017+opencv配置参考链接

    本人通过以下几篇博客完成vs2017+opencv3.4.1的配置: OpenCV 3.4.1 + VS2017 开发环境搭建 - 简书 WIN10下 VS2017+OpenCv 3.4.1 配置 - ...

  9. Android-Glide使用

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/Li_Qing_Xue/article/details/78919499 图片加载很是重要,我也对比过 ...

  10. 省份-城市-区域三级联动【struts2 + ajax +非数据库版】

    package loaderman; /** * 实体,封装省份和城市 */ public class Bean { private String province;//省份 private Stri ...