elasticsearch支持两种协议:

http协议。

Native Elasticsearch binary protocol(本地elasticsearch二进制协议):elasticsearch自主研发的节点间通信的协议。

还可以通过使用插件来扩展支持的协议。有一些官方的插件。

java之外的语言不推荐使用第二种方式,因为第二种方式需要很多自定义序列化。

支持的客户端

Transport

Transport是连接到Elasticsearch的本地方法之一。它是官方Elasticsearch分发的一部分,因此需要客户端用Java编写(或至少在JVM上运行)。 它非常快,在JVM上本机运行。序列化是有效的,发送到/从Elasticsearch实例的消息和操作中几乎没有开销。它需要保持Elasticsearch服务器和客户端版本有些同步。在Elasticsearch 1.0之前,将需要完全相同的版本,但较新的版本(1.0和更高版本)支持版本之间的交互。由于异常序列化和更新之间的其他潜在细微差异,在客户端和服务器上运行相同的JVM更新版本也是有益的。 目前不支持加密或身份验证,但是宣布不久会满足这些需求。要在Found.no托管集群上使用传输客户端,可以使用elasticsearch自定义传输模块,该模块负责加密,身份验证和保持活动。

Node Client

Node客户端与transport client非常相似:它是官方Elasticsearch发行版的一部分,需要客户端运行Java等,但也有一些显着的差异。 如果群集对传输客户端是否已连接到群集中的某个节点非常不感兴趣,那么节点客户端将被视为群集的一部分。这意味着节点客户端的存在被存储在群集状态,并且群集中的所有其他节点将尝试建立到客户端的几个tcp连接。如果群集很大或使用多个客户端,这可能是一个显着的缺点。 这可能看起来有点荒谬,但是目前需要它,以便使服务器节点能够将对集群状态的更改传播到客户端。其最终结果是,节点客户端始终具有最新的集群状态和与Elasticsearch集群中每个其他节点的连接,这使得它能够在本地执行操作路由,是其自身请求的协调器等等。这会为每个请求跳过网络跳转,并导致集群中其余节点的工作量减少。

HTTP客户端

HTTP在大多数编程语言中得到很好的支持,这是连接到Elasticsearch的最常见的方法。如果要使用HTTP,还有一个重要的选择:使用一个现有的Elasticsearch基于HTTP的库,或者只是创建一个小的包装器,需要使用HTTP客户端的操作。 由于HTTP是一个通用协议,并支持各种各样的用例,一些重要的事情需要由客户端实现:连接池和保持活动。需要连接池以避免必须支付每个请求的TCP连接建立成本。更重要的,如果它使用HTTPS,这带来额外的加密握手成本。连接池经常需要保持活动支持,因为我们希望避免连接由于空闲而中断。 虽然最初显而易见的是,连接建立实际上是重要的,但是考虑建立TCP连接需要三次握手。简单地说,使用50毫秒的ping时间,除了获取和释放本地资源(处理客户端端口,连接管理等)所花费的时间之外,建立连接需要大约75毫秒 - 这个没有考虑在两端处理请求/响应(例如,串行化)所花费的时间。没有连接池,这个时间被添加在每个请求的顶部。对于我们建议用于安全和隐私的HTTPS,连接建立开销有时可以以秒为单位测量,这甚至更显着。考虑到最终用户的响应时间必须在100毫秒以下才能被观察为“即时”的基本建议,即使非加密的开销也使得这种限制几乎不可能保持在内。 由Elasticsearch编写和支持的官方(非Java)客户端都使用HTTP底层与Elasticsearch进行通信。一般建议是使用封装HTTP API的正式客户端,因为他们负责处理所有这些细节。 HTTP客户端实现可能相当快,其中一些甚至与本机协议的速度竞争。 Elasticsearch的HTTP API被广泛使用,并且具有相当多的社区支持。然而,性能取决于客户端库,并且通常需要进行配置或调整才能最大化。

结论

使用一个高性能的HTTP客户端,很容易和官方语言绑定。

使用Java,一般通过transport优于node,除非使用节点客户端的性能增益足够大,以保证额外的网络复杂性。使用基准来验证性能提升。

当使用其他非基于Java JVM的语言(例如Scala,Clojure,Groovy,JRuby等)时,需要衡量能用在node和transport两种客户端的native语言。

elasticsearch客户端连接选择的更多相关文章

  1. Java操作ElasticSearch之创建客户端连接

    Java操作ElasticSearch之创建客户端连接 3 发布时间:『 2017-09-11 17:02』  博客类别:elasticsearch  阅读(3157) Java操作ElasticSe ...

  2. Elasticsearch - java客户端连接

    写在前面的话:读书破万卷,编码如有神-------------------------------------------------------------------- 最简单的在java客户端连 ...

  3. 【RabbitMQ】CentOS安装RabbitMQ,及简单的Java客户端连接

    在CentOS安装 因Rabbit MQ使用Erlang,所以需要先安装Erlang,安装过程中可能会遇到种种问题,可参考CentOS 6.5安装Erlang/OTP 17.0.然后就可以安装MQ了. ...

  4. 配置ORACLE 客户端连接到数据库

    --================================= -- 配置ORACLE 客户端连接到数据库 --================================= Oracle ...

  5. Oracle RAC 客户端连接负载均衡(Load Balance)

    实现负载均衡(Load Balance)是Oracle RAC最重要的特性之一,主要是把负载平均分配到集群中的各个节点,以提高系统的整体吞吐能力.通常情况下有两种方式来实现负载均衡,一个是基于客户端连 ...

  6. redis基础操作~~数据备份与恢复、数据安全、性能测试、客户端连接、分区

    数据备份与恢复 数据备份redis save 命令用于创建当前数据库的备份. redis 127.0.0.1:6379> SAVE OK 该命令将在 redis 安装目录中创建dump.rdb文 ...

  7. 干货 | SSMS客户端连接京东云RDS SQL Server配置方法

    干货 | SSMS客户端连接京东云RDS SQL Server配置方法 原创: 于振江 京东云开发者社区  微软SQL Server, Oracle数据库以及MySQL系列占据了关系型数据库市场的绝对 ...

  8. [20171106]配置客户端连接注意.txt

    [20171106]配置客户端连接注意.txt --//在配置客户端连接时一般建议使用Net Manager工具,windows下调用执行Net Manager.--//linux下执行 netmgr ...

  9. 使用 WebSocket 客户端连接 MQTT 服务器

    简介 近年来随着 Web 前端的快速发展,浏览器新特性层出不穷,越来越多的应用可以在浏览器端或通过浏览器渲染引擎实现,Web 应用的即时通信方式 WebSocket 得到了广泛的应用. WebSock ...

随机推荐

  1. PHP.ini文件读取不到

    Configuration File (php.ini) Path /usr/local/php/lib Loaded Configuration File (none) Linux 把 dtruss ...

  2. selenium grid中的多个线程同步执行

    需求:有一个工作流,每一步审批都需要多个领导参与,才能推流程到下一步去 代码思考:多个领导在自己的线程中运行,速度有的快有的慢,如何保证下一步的领导审批时,这个步骤已经激活 如下是代码:思路为:如果这 ...

  3. jquery控制文字内容溢出用点点点(…)省略号表示

    jQuery限制字符字数的方法 $(function(){ //限制字符个数 $(“.text”).each(function(){ var maxwidth=23; if($(this).text( ...

  4. linux文件描述符数量的坑

    ulimit -n  查看 单进程或线程,可打开的最大文件描述符数 通过ulimit -n 10240 设置文件描述符数: (当前shell生效,这真是个坑啊) 永久生效:(需要重启系统,也是个坑,好 ...

  5. JSOUP选择器语法说明

    jsoup 是一款基于Java 的HTML解析器,可直接解析某个URL地址或HTML文本内容.它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据.jso ...

  6. javascript 变量,作用域,内存管理小结

    js的变量保存两种类型的数据——基本数据类型与引用类型.具有以下几点特征:   变量: 1)基本类型值在内存中占固定大小的空间,因此被保存在栈内存中; 2) 把保存基本类型值得变量赋给另一个变量,会创 ...

  7. for memory long term update

    xargs是一条Unix和类Unix操作系统的常用命令.它的作用是将参数列表转换成小块分段传递给其他命令,以避免参数列表过长的问题. #例如,下面的命令: rm `find /path -type f ...

  8. IP地址的分类与寻址

    IP地址:有一种标识符,被TCP/IP协议簇的IP层用来标识 连接到因特网的设备.IP协议的第4版IPv4地址是32位地址,是连接地址,定义了每一个连接到因特网上的设备(可以认为是主机的别名),而不是 ...

  9. Java FTPClient实现文件上传下载

    在JAVA程序中,经常需要和FTP打交道,比如向FTP服务器上传文件.下载文件,本文简单介绍如何利用jakarta commons中的FTPClient(在commons-net包中)实现上传下载文件 ...

  10. Python开发问题和解决方案汇集

    1.Sublime Text中用Tab批量替换空格Whitespace缩进:Ctrl+A全选代码,Ctrl+Shift+P打开下拉框,输入indent,找到Convert indentation to ...