6. ES的分布式原理
【ElasticSearch系列连载】6. ES的分布式原理简介对于没有实际使用、调试、开发过分布式系统的人来说,横向扩展、数据分区、副本/数据分片、容错容灾, 一致性 等和分布式相关的概念、词汇可能会感觉遥远与深奥。
但是大道至简,殊途同归,相对与不断升级迭代的前端技术升级,目前市面上绝大部分的分布式系统的底层设计思想和理念在近十几年来并没有大的变化,如果我们只关注概念本身,而不是晦涩的技术细节(不同分布式系统的通信协议,实现方案,选举策略,一致性算法,数据分布策略等等),你会发现分布式其实是一个很简单,也很优雅、巧妙的设计理念,是任何技术研发都可以也都应该理解的一个技术概念。
文本结合具体案例尝试进行一个通俗易懂的分布式案例解析。
关于系统的可扩展性当系统的计算资源或者存储资源不足的时候,就需要对系统进行优化或者升级,此时系统的可扩展性(scalability)就显得十分重要了。
虽然你可以通过购买更强大的服务器,来提升你的系统能力,但是这个会受限于单服务器的硬件能力。所以真正的横向扩展需要能够通过添加更多的节点/服务器来提升整个系统的能力:通过添加更多的节点 ...
聊一聊前端程序员的现状与挑战
聊一聊前端程序员的现状与挑战前端这一块,得益于日益更新的前端框架降低了入门门槛,得益于目前全自动、半自动化的开发、测试、上线流程,也得益于目前越来越标准的产品设计流程和规范,等等这些都会让你的开发效率和工作量评估更加透明化。
可能让某些类别的前端工作逐步从一个脑力工作者变为劳动密集型的体力工作者。
前端是一个很广很大的领域,有一定的广度和深度;但是不可否认,也许80%的工作都是简单与单调的,随着技术的升级、技术门槛的降低,经过一些简单快速的培训,越来越多的人可以从事这80%的工作 => 整体看,前端的从业人员越来越多,好像越来越卷了。
但是剩余20%的具有一定复杂性、创造性、创新性、架构设计性、挑战性的工作,却不会受到太多影响,大部分情况,也正是这大约20%的工作,决定了一个产品、一个公司、一个团队的关键部分,所以如何具有足够的能力、经验和理论来承担、组织更具有价值和挑战性的这20%的工作,伴随解决挑战性问题的实战积累更多的经验和解决问题的能力,进入一个正向循环是在开发过程中不断成长和晋升的关键。
所以,前端的入门门槛低了,原本对你来说已经掌握技术的和不容易实现的内容, ...
5. ES入门基础与常见操作
【ElasticSearch系列连载】5. ES入门基础与常见操作1 ES 数据格式-JSON我们要存储的对象通常不是简单的键值对就能表示的,更多的情况是需要存储更加复杂的数据结构,比如数组、地址、嵌套结构等等。
如果我们使用传统的关系型数据库进行常见的行列存储的话,很多情况我们都需要将一些复杂的数据结构拍平,通过构造一个宽表来存储你的数据,或者需要将你的数据通过逗号分隔等形式拥挤的存储在一个字段中,每次从数据库写入和读取数据都需要进行序列化和反序列化的操作。
Elasticsearch是面向文档的,能够直接将复杂的对象进行存储,同时还能对复杂数据结构中的各个字段建立索引来让它能够被高效的检索到。在使用Elasticsearch的过程中,你建立索引的对象、搜索的对象、排序的对象以及筛选的对象都是文档,而不是行列格式的关系型数据,这是ES和其他关系型数据库最大的不同之一,以及为什么ES能够提供复杂的全文搜索。
ElasticSearch使用JSON (JavaScript Object Notation) 作为文档的存储结构。目前绝大多数语言都能友好地支持JSON格式数据的转化与传输 ...
3. 如何安装符合生产环境要求的ES集群
【ElasticSearch系列连载】3. 如何安装符合生产环境要求的ES集群通过本文,将会循序渐进地了解到ES的若干部署方案,以及相关的基础操作与配置。
上一节介绍的一键安装方式,可以快速启动一个ES环境用于学习,调试和测试,但是还不足以作为生产环境,比如:
不支持集群模式
无法轻易对配置文件进行调整与维护
后续写入的搜索数据会随着容器删除而删除,没有在本地进行持久化存储
9200端口暴露,不需要认证即可访问存在安全隐患
没有可视化管理界面(kibana)
本文将会依次解决持久化存储(包括数据文件与配置文件)、可视化管理(kibana)和加密(ES+Kibana)的问题,各个章节解决的问题如下:
章节
单节点
集群
数据持久化
kibana
加密
3.1
✅
3.2
✅
✅
3.3
✅
✅
✅
3.4
✅
✅
✅
✅
4.1
✅
✅
4.2
✅
✅
✅
4.3
✅
✅
✅
✅
1 版本与环境选型1.1 ES版本选择考量本系列使用ES 7.10版本作为部署选型
截止到目前撰稿日期,已经推出了ES 8.0版本, ...
4. 与ES通信的两种方式
【ElasticSearch系列连载】4. 与ES通信的两种方式1 使用客户端以java为例,ElasticSearch提供了两种client使用模式。
1.1 节点客户端-Node Client使用这种模式的话,你的程序会作为一个不存储数据的节点加入ES集群,换句话说,虽然它不会持有任何的数据,但是它作为集群的节点就可以时刻知道不同的数据此时此刻存储在哪个节点上,进而可以直接与存储目标数据的节点进行通信。
1.2 传输客户端-Transport Client是一种更加轻量的通信方式,使用这种模式你的程序不会加入集群,只是简单的与集群中的代表节点进行通信。
这两种通信方式使用的都是9300端口,使用ES原生的传输协议。如前面的文章所述,9300也是集群中各个节点之间的通信端口,如果这个端口没有对你的程序打开的话你将无法建立ES集群。同时,你的客户端版本也需要与ES的版本相匹配。
1.3 如何选型你可能想知道何时使用传输客户端(注:Transport Client,下同)与节点客户端(注:Node Client,下同)。
传输客户端作为一个集群和应用程序之间的通信层。它知道 API ...
了解Unix的历史与现状
了解Unix的历史与现状
1 操作系统的分类目前市面上大部分的操作系统都可以分为两类:一类是基于微软Windows NT内核的操作系统,而剩余其他几乎所有的操作系统的祖先都是Unix。
比如Linux,Ubuntu,Mac OS X,安卓Andoird,iOS,Chrome OS以及PS4上面的Orbis OS,这些跑在各种各样硬件上面的操作系统,它们的祖先都是Unix操作系统,所以通常也被叫做“类Unix”操作系统。
2 Unix的设计无处不在Unix于上个世纪60年代(1960s)在传奇的AT&T的贝尔实验室研制,其中一些非常重要的设计理念仍然在流传至今。
秉承着Unix哲学中的“做一件事并且把它做好”,Unix设计并实现了一系列独立、小巧、模块化的优秀实用工具,比如管道,输出重定向,后台执行等等,你可以通过将这些工具进行不同方式的组合来完成更加复杂的任务。这也极大降低了shell脚本的编写难度,也让shell脚本能够完成更加复杂的任务。
”在Unix里一切都是文件“也同样是Unix的经典设计之一。硬件设备,目录,特殊文件,普通的数据文件,所有的内容在Unix看来都是文 ...
2. 如何本地安装与调试ES
理解ES最简单的方式就是实际上手使用一把,所以这一节主要介绍如何在本地搭建一套可以随心所欲操作、使用的ES环境。
1 安装选型说明1.1 ES版本选择考量本系列使用ES 7.10版本作为讲解样例
截止到目前撰稿日期,已经推出了ES 8.0版本,有众多的改动和新特性,考虑到:
目前ES 7.11 之后开源协议进行了变更,不再适合企业大规模商用
在未来一段时间,市面上目前6.x 和 7.x 仍然是主流
所以本系列使用ES 7.10的版本作为讲解样例,一方面是:
7.x是先进且主流的版本,具有所需要的绝大部分的功能特性
另一方面7.10是Apache 2.0开源协议授权的最新也是最后一个ES版本了,我们可以基于这个版本进行更自由的二次开发、改造与发布
1.2 安装方式选型本系列使用Docker进行ES学习环境的搭建
如果是大规模的搭建部署,企业内通常有专职的团队或者成员来负责,如果是出于学习目的,笔者希望使用尽可能简单,干净,通用的方式来进行ES环境的搭建与安装 => Docker安装。
Docker可以安装在任何的平台(x86,ARM,Windows,Linux, ...
谈谈数据的增量更新
谈谈数据的增量更新在数据同步的过程中,必然会遇到数据增量更新的需求。但如果没有一个有效的数据增量更新的设计与机制,可能每次上游数据更新时,你都需要将全量的数据同步一遍,即使只有1%的数据发生了更新。
全量数据同步在数据首次同步的时候是需要的,而且定期的全量同步也能够修复一些偶发的数据不完整的问题。
但是全量同步作为定期的增量数据更新方式并不是十分合适的,因为:
耗时长:对于具有一定规模的数据量,全量同步通常需要较长的时间,比如几个小时,几天甚至几周,所以全量同步经常无法提供实时或者准实时的数据更新服务;
占用资源:全量同步会对数据源和全量同步目标同时产生较高的计算压力,可能会影响平台其他的计算、分析服务;
带宽占用:全量同步会占用较大的网络带宽,可能会导致网络产生抖动。
随着数据量的增长,上面几个问题的影响也会变得越来越明显。
如果要做数据的增量更新,你必须在数据源上能找到定位数据更新/变化的方式,这个概念叫做CDC-Change Data Capture-数据变化捕捉。
在实现过程中,有若干种常见数据变化捕捉方式,但以下两种比较常见。
1 基于每一行的更新时间戳来做增 ...
我们为什么需要幂等
我们为什么需要幂等幂等(Idempotence)指的是如果我们反复执行一个方法,如果方法的输入不变,那么第一次执行的结果和第n次执行的结果应该是一样的。
在数据处理和计算过程中这是一个非常重要的概念,是确保整个数据处理流程健壮性的关键要素之一,也是保证整个过程可重现可追溯的重要特性。
在现实生活中,也有很多符合幂等特性的例子与场景,比如电梯的楼层按钮,比如路口的行人过街按钮都是幂等的:不论重复执行(按下/点亮)多少次,结果都是固定且稳定的。
1 幂等在数据一致性上的重要性1.1 数据写入比如我们在数据库具有如下的数据:
id
name
score
1
张三
95
2
李四
97
现在需要从数据源同步过来新的数据:
id
name
score
3
王五
99
我们期望的结果是:
id
name
score
1
张三
95
2
李四
97
3
王五
99
在实际的数据同步过程中,我们通常会需要进行增量同步:
找到上一次同步的标记位,比如id=2
基于找到的标记位,写入后续的数据,即id > 2的数据
...
1. ES版本与开源简介
诞生背景现有的技术在数据的结构化和存储方面已经做的很好了,但是在硬盘上的原始数据并不能充分发挥数据的价值,尤其是当你需要基于这些数据做一些实时的决策时,就更容易出现使用上的困难。
ES是一个 分布式,可扩展,实时 的搜索与数据分析引擎,能够有效解决在全文搜索 或者 结构化数据的实时分析问题。
不只是大型企业,如Wikipedia,Guardian,Stack Overflow,GitHub在使用。它也可以在你的笔记本上运行,或者扩展到几百台服务器,服务数PB的数据。
ES带来了革命,但是ES并没有使用或者创造革命性的技术:全文搜索,数据分析和分布式数据存储都是已经有的技术概念。ES是通过将这三个独立的部分进行了巧妙地融合成了一个独立的、实时的应用程序,这才是ES带来的革命。
目前,大多数数据库在从数据中提取可操作的知识方面都出奇地无能。虽然他们可以通过时间戳进行筛选或者提取特定的字段,但是它们不能轻松的进行全文搜索,进行同义词搜索以及对数据进行相关性排序。
更重要的是,面对具有一定规模的数据,如果不对数据做大量的离线预处理、批处理,大多数数据库是无法提供实时服务的。
ES简介ES是在 ...