网络对Ignite集群性能的负面影响
内存访问比磁盘I/O快得多,以至于许多人希望仅通过从部署的分布式内存集群中读取数据就可以获得惊人的性能提升。但是不要忽略应用是通过网络与集群节点互联的事实,并且如果大量数据通过网络连续传输,会迅速抵消内存访问性能高的优势。
换句话说,使用Ignite提供的合适数据访问模式,可以消除网络延迟的影响。本文中将通过Ignite的API,查看减轻网络的压力后应用性能的变化趋势。最终目标是能够部署可水平扩展的Ignite集群,其可以充分利用分布在所有主机上的RAM和CPU资源,并且尽可能小地受到网络的影响。
做一个简单的测试
为了简单起见,假设Ignite集群中存储了大量的记录,而应用需要计算整个数据集的最高温度和最长距离。下面将比较3个API,以显示最大限度地降低了网络利用率后的性能变化趋势,包括单独的键-值操作、批量键-值读取和并置计算。
这个测试笔记本电脑就可以做。因此下面的测试环境为2.7GHz的双核Intel Core i5 CPU和8GB 1867MHz的DDR3内存,该主机上部署了2个节点的Ignite集群,内存中数据量为20万条。这两个节点和应用之间通过本地网络端口进行通信,并争夺RAM和CPU资源。如果在真正的分布式环境中运行相同的测试,则比较的API之间的差异将更加值得注意。
通过大量的键-值调用来消耗网络资源
第一个测试从键-值API调用开始,它会从2个节点一个个地拉取所有的记录,这可以通过Ignite的标准APIcache.get(key)
实现:
for (int i = 0; i < RECORDS_CNT; i++) { SampleRecord record = recordsCache.get(i); if (record.getDistance() > longestDistance) longestDistance = record.getDistance(); if (record.getTemperature() > highestTemp) highestTemp = record.getTemperature(); }
应用读取了所有的20万条记录并进行了相同或更多的网络往返,可以看到应用花费了大约35秒来完成计算。如果为类似的计算选择了这种数据访问方法,则由于大量的网络往返,其实将数据保存在内存中,和保存在磁盘相比并没有太大的区别。
通过减少网络往返次数来加快速度
本次测试的第一个明显的优化是减少两个Ignite服务端节点与应用之间的网络往返次数。Ignite有批量查询数据的键-值APIcache.getAll(keys)
,以下代码段显示了如何通过该API完成测试:
Collection<SampleRecord> records = recordsCache.getAll(keys).values(); Iterator<SampleRecord> recordsIterator = records.iterator(); while (recordsIterator.hasNext()) { }
使用这种方法,测试在约5秒内完成,与之前使用的单个键-值调用相比,速度快了7倍。该应用仍然从服务端节点读取所有20万条记录,但是它是在几次网络往返中完成的。Ignite的cache.getAll(keys)
操作实现了该优化,即在传递主键时,Ignite首先将键映射到存储该数据的服务端节点,然后接入该节点批量读取数据。
通过并置计算消除网络影响
最后看看如果不再从服务端节点向应用中拉取20万条数据会发生什么。使用Ignite的计算API,可以将计算包装到Ignite的计算任务中,该任务将在服务端节点的本地数据集上执行,应用仅从服务端接收结果,而不再提取实际数据,因此几乎没有网络开销:
Collection<Object[]> resultsFromServers = compute.broadcast(new IgniteCallable<Object[]>() { @Override public Object[] call() throws Exception { } }
这种基于并置计算的方法在大约1秒钟内完成,这比前述基于cache.getAll(keys)
的解决方案快5倍,比执行单个键-值调用的性能高35倍。另外如果将更多的数据加载到集群中,则基于计算的方法将保持线性扩展,而基于cache.getAll(keys)
的方法速度将减慢。
是不是一定要使用并置计算?
该测试的目的是表明,对于Ignite,由于应用和集群是通过网络连接在一起的,因此应用的性能可能会因访问分布式数据集的方式不同而有很大差异,并不是说不要使用键-值API而仅使用并置计算。如果应用的需求是读取单个记录并将其返回给最终用户或关联两个数据集,则还是要使用键-值调用API或SQL查询。如果逻辑更加复杂或数据密集,则建议使用计算API来消除或减少网络流量。总之,请了解Ignite提供的API,并选择在特定场景中性能最高的操作方式。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
mysql索引总结
上文 中我们主要介绍了sql语句在server层的执行过程 我们再来分析一下具体的语句在引擎层的执行步骤,CRUD的操作都跟索引相关,我们先了解一下索引 索引 索引的出现其实就是为了提高数据查询的效率,就像书的目录 数据结构 常见的数据结构有 哈希表、有序数组和搜索树 哈希表是一种以键 - 值(key-value)存储数据的结构,我们只要输入待查找的值即 key, 就可以找到其对应的值即 Value。哈希的思路很简单,把值放在数组里,用一个哈希函数 把 key 换算成一个位置,然后把 value 放在数组的对应位置 不可避免地,多个 key 值经过哈希函数的换算,会出现同一个值的情况。处理这种情况的 一种方法是,拉出一个链表 哈希表这种结构适用于只有等值查询的场景 有序数组在等值查询和范围查询场景中的性能就都非常优秀 如果仅仅看查询效率,有序数组就很好。但是,在需要更新数据的时候就 麻烦了,你往中间插入一个记录就必须得挪动后面所有的记录,成本太高 有序数组索引只适用于静态存储引擎 二叉搜索树的特点是:每个节点的左儿子小于父节点,父节点又小于右儿子 当然为了维持 O(log(N)) 的查...
- 下一篇
欧洲百家公司联手 欲挑战科技巨头云计算领域主导地位
1月29日消息,据外媒报道,到目前为止,大多数人可能已经接受了这样的事实,即逃离杰夫·贝索斯(Jeff Bezos)的影响似乎是不可能的。你可能不再使用次日达送货服务,并从当地精品店购买所有的世俗需求,但如果你依然在网上冒险,贝索斯的阴影似乎就无处不在。若切断亚马逊的云计算服务,将导致互联网实际上变得无法使用。 这个基础设施即服务(IaaS)市场价值428亿美元,亚马逊的占有率达到48%。除了亚马逊,还有五家公司主导这个领域,包括IBM、微软、谷歌、亚马逊以及阿里巴巴。他们的数据中心提供互联网所需的庞大引擎网络,并托管着从小型初创公司到Netflix、Spotify和Airbnb等热门科技公司的一切。 不过现在,欧洲正在制定自己的计划,来挑战美国和中国在云计算领域的主导地位。德国联邦经济事务和能源部发言人证实,这个计划被称为GAIA-X,是欧盟委员会、德国、法国以及大约100家欧洲公司联手推出的合作项目。已经确认参与的公司包括SAP SE、Deutsche Telekom AG、Deutsche Bank AG、Siemens以及Bosch。“欧洲云”的首批概念验证将于今年年底准备就绪...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- CentOS7设置SWAP分区,小内存服务器的救世主
- CentOS8编译安装MySQL8.0.19
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- Docker安装Oracle12C,快速搭建Oracle学习环境
- Linux系统CentOS6、CentOS7手动修改IP地址
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- Hadoop3单机部署,实现最简伪集群