elasticsearch客户端连接选择
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客户端连接选择的更多相关文章
- Java操作ElasticSearch之创建客户端连接
Java操作ElasticSearch之创建客户端连接 3 发布时间:『 2017-09-11 17:02』 博客类别:elasticsearch 阅读(3157) Java操作ElasticSe ...
- Elasticsearch - java客户端连接
写在前面的话:读书破万卷,编码如有神-------------------------------------------------------------------- 最简单的在java客户端连 ...
- 【RabbitMQ】CentOS安装RabbitMQ,及简单的Java客户端连接
在CentOS安装 因Rabbit MQ使用Erlang,所以需要先安装Erlang,安装过程中可能会遇到种种问题,可参考CentOS 6.5安装Erlang/OTP 17.0.然后就可以安装MQ了. ...
- 配置ORACLE 客户端连接到数据库
--================================= -- 配置ORACLE 客户端连接到数据库 --================================= Oracle ...
- Oracle RAC 客户端连接负载均衡(Load Balance)
实现负载均衡(Load Balance)是Oracle RAC最重要的特性之一,主要是把负载平均分配到集群中的各个节点,以提高系统的整体吞吐能力.通常情况下有两种方式来实现负载均衡,一个是基于客户端连 ...
- redis基础操作~~数据备份与恢复、数据安全、性能测试、客户端连接、分区
数据备份与恢复 数据备份redis save 命令用于创建当前数据库的备份. redis 127.0.0.1:6379> SAVE OK 该命令将在 redis 安装目录中创建dump.rdb文 ...
- 干货 | SSMS客户端连接京东云RDS SQL Server配置方法
干货 | SSMS客户端连接京东云RDS SQL Server配置方法 原创: 于振江 京东云开发者社区 微软SQL Server, Oracle数据库以及MySQL系列占据了关系型数据库市场的绝对 ...
- [20171106]配置客户端连接注意.txt
[20171106]配置客户端连接注意.txt --//在配置客户端连接时一般建议使用Net Manager工具,windows下调用执行Net Manager.--//linux下执行 netmgr ...
- 使用 WebSocket 客户端连接 MQTT 服务器
简介 近年来随着 Web 前端的快速发展,浏览器新特性层出不穷,越来越多的应用可以在浏览器端或通过浏览器渲染引擎实现,Web 应用的即时通信方式 WebSocket 得到了广泛的应用. WebSock ...
随机推荐
- Linux_查看linux并发连接数
1.查看Web服务器(Nginx Apache)的并发请求数及其TCP连接状态:netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a ...
- golang gc 问题(转的)
在实际使用go语言的过程中,碰到了一些看似奇怪的内存占用现象,于是决定对go语言的垃圾回收模型进行一些研究.本文对研究的结果进行一下总结. 什么是垃圾回收? 曾几何时,内存管理是程序员开发应用的一大难 ...
- GX转账站点无法访问的问题
1.先检查200路由器上的端口<8099,8098> 没有则加上 2.检查站点是否能在200服务器上打开 不能打开,重启站点
- osg学习示例之遇到问题四骨骼动画编译osgCal
osg学习示例之遇到问题四骨骼动画编译osgCal 转自:http://blog.csdn.net/wuwangrun/article/details/8239451 今天学到书<OpenSce ...
- X-UA-Compatible/IE=EmulateIE7/IE=7
1.<meta http-equiv="X-UA-Compatible" content="IE=5" /> 像是使用了 Windows Inter ...
- javascrit2.0完全参考手册(第二版) 第1章第1节 在XHTML文档中增加javascript
通常,向文档中增加script脚本使用<script>元素,在HTML中增加脚本的方式有4中: (1)放到<script></script>块中: (2)<s ...
- 分模块创建maven项目(一)
maven是一个项目构建和管理的工具. 我们可以通过maven仓库可以实现管理构建(主要是JAR还包括:WAR,ZIP,POM等等). 我们可以通过maven插件可以实现编译源代.产生Javadoc文 ...
- Bone Collector(01背包)
题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=87125#problem/N 题目: Description Many year ...
- sql 将字符串转换为表
我们常常碰到需要将用户输入之字符串依特定的分隔符转换为表的一个栏位,下面是我写的一个sql函数.如能灵活运用则用途广泛. -- ==================================== ...
- 怎么在Centos7下添加win8.1的启动项
首先找到启动文件. 在/boot/grub2目录下, 找到grub.cfg文件. 然后, sudo修改, 用gedit工具方便. 怎么修改? 打开文件, 找到有两个menuentry开头的部分, 然 ...