Apache Ignite 2.5版本-以内存为中心的分布式数据库和缓存平台

5月,发布了新版本的Apache Ignite -2.5。 已对其进行了许多更改,可以在发行说明中找到其完整列表。 在本文中,我们将考虑值得关注的关键创新。

Apache Ignite是一种水平可伸缩的平台,用于以近实时模式进行数据的事务性存储以及基于此数据的分布式计算。

当需要水平可伸缩性和非常高的数据处理速度时,可使用Ignite。 后者还可以通过优化平台来实现,该平台可以将数据直接存储在RAM中而不是缓存(内存中计算)中作为主要存储。 该产品的显着特征是功能齐全的查询引擎ANSI SQL 1999,磁盘存储,扩展的RAM,大量内置的集成工具和Zero-ETL机器学习。

其中使用的Apache的Ignite公司,如公司VEON /直线的储蓄银行,华为,巴克莱银行,花旗集团,微软,和其他许多人

新的拓扑选项:ZooKeeper周围的星星


2.5版的主要更改之一是拓扑的新版本。 以前,Ignite仅具有“环形”拓扑,该拓扑用于交换群集中的事件并提供有效和快速的可伸缩性,最多可扩展至300个节点。

新的拓扑设计用于成千上万个节点的安装。

现在,您可以选择:使用旧的拓扑结构,其中Ignite足以满足您的需要,或者-对于大型群集- 用小的ZooKeeper补充大型Ignite,通过它进行事件交换。

为什么会这样?有什么帮助?

大的“环”有一个缺点:考虑到网络交换和处理,有关新事件的所有节点的通知可能长达几秒钟。 这本身是不好的,并且如果考虑到由于临时网络故障,设备或其他问题导致的节点故障的可能性随群集大小的增加而增加,那么拓扑重构就变成了一项很普通的任务,尤其是在基于廉价(商品)硬件构建的群集上。 在大的“环”中,这会引入其他混乱,中断事件流的处理,并迫使其重新开始,同时传输有关新拓扑的信息。

ZooKeeper群集位于中心的新“星号”不仅可以保持可扩展性(ZooKeeper还可水平增长),甚至可以显着提高其可扩展性-大容量效率。 毕竟,分担了处理事件和处理数据的责任,我们可以为事件处理分配一个更紧凑的ZooKeeper集群,从而减少事件对集群大小的依赖。

例如,这不会影响Ignite节点之间的数据交换,也不会影响数据的存储或检索,因为所有这些操作都是通过群集节点之间的直接连接进行并遍历事件拓扑的。

此外,添加新拓扑不会以任何方式影响旧拓扑-仍建议使用,因为它易于维护和减轻重量,不需要其他元素。

但是,如果您已经达到了扩展Ignite“环”的极限,则您将无法进行微优化和黑客攻击,不要应用特定的知识和“拐杖”。 在这种情况下,您将拥有一个正式可用且受支持的解决方案,它将大大促进此类大型集群的实施和支持。

有关新拓扑的详细信息,请参见文档

瘦客户端:瘦Java客户端,瘦客户端身份验证


在版本2.4中,为JDBC / ODBC之外的瘦客户机提供了支持,它们不是拓扑的正式参与者,对资源的需求要少得多,但同时提供的功能有所减少。 第一个瘦客户端是.NET的客户端。

从2.5版开始,还提供Java瘦客户端。

这使得Ignite可以嵌入到对资源敏感的应用程序中,例如,在终端设备上的应用程序中,而无需任何额外的层。 以前,此任务需要一个中间层,该中间层例如通过REST接收请求,然后使用内部“厚”客户端与Ignite群集交换数据。

瘦客户端可以通过连接标准的“零依赖”点燃核心JAR文件来使用,例如,来自maven存储库。

使用瘦客户端的示例:

ClientConfiguration cfg = new ClientConfiguration().setAddresses("127.0.0.1:10800"); try (IgniteClient igniteClient = Ignition.startClient(cfg)) { System.out.println(">>>    ."); final String CACHE_NAME = "put-get-example"; ClientCache<Integer, Address> cache = igniteClient.getOrCreateCache(CACHE_NAME); System.out.format(">>>   [%s].\n", CACHE_NAME); Integer key = 1; Address val = new Address(", 20", 101000); cache.put(key, val); System.out.format(">>>  [%s]   .\n", val); Address cachedVal = cache.get(key); System.out.format(">>>  [%s]   .\n", cachedVal); } catch (...) { ... } 

同样在版本2.4中,没有针对瘦客户端的身份验证。 从2.5版开始,它将与访问瘦客户端时的加密支持一起在Ignite中首次亮相。

 ClientConfiguration clientCfg = new ClientConfiguration() .setAddresses("127.0.0.1:10800"); //   clientCfg .setSslMode(SslMode.REQUIRED) .setSslClientCertificateKeyStorePath("client.jks") .setSslClientCertificateKeyStoreType("JKS") .setSslClientCertificateKeyStorePassword("123456") .setSslTrustCertificateKeyStorePath("trust.jks") .setSslTrustCertificateKeyStoreType("JKS") .setSslTrustCertificateKeyStorePassword("123456") .setSslKeyAlgorithm("SunX509") .setSslTrustAll(false) .setSslProtocol(SslProtocol.TLS); //   clientCfg .setUserName("joe") .setUserPassword("passw0rd!"); try (IgniteClient client = Ignition.startClient(clientCfg)) { ... } catch (ClientAuthenticationException e) { // Handle authentication failure } 

详细信息可以在文档中找到

SQL:身份验证和用户管理,快速批量加载


分布式ANSI99 SQL引擎历史上一直是Apache Ignite的优势和重要区别功能之一。 它允许通过Java / .NET / C ++客户端或JDBC / ODBC驱动程序的“单个窗口”在RAM和Ignite Native Persistence中的整个群集顶部执行SQL查询。

在2.0-2.4版中,开发人员除了提高生产力(这是远远不够的)外,还专注于加速主数据和批量数据加载以及对DDL的更完整支持,如CREATE TABLE,ALTER TABLE,CREATE INDEX等操作,也可以通过“单个窗口”在群集上一致地执行该操作。

在版本2.5中,朝着DDL的进一步发展迈出了一步:对SQL的身份验证和相应的命令CREATE USERALTER USERDROP USER被添加。

如果您以前计划将Ignite SQL托管在具有覆盖服务级别的访问控制的无菌DMZ中,那么现在可以通过SQL管理的身份验证来提高安全性。

在海量数据的下载速度方面,2.5中出现了2项创新。

第一个是JDBC中新的COPY SQL命令 ,它允许您以批量模式快速将CSV文件的内容传输到表中。

 COPY FROM "/path/to/local/file.csv" INTO city ( ID, Name, CountryCode, District, Population) FORMAT CSV 

第二种是JDBC的流模式,通过新的SET命令启用。 它允许通过标准INSERT操作加载数据,以透明地对新记录进行分组并将其最佳地加载到Ignite群集中。 填充批处理或关闭JDBC连接时,会将累积的操作转移到集群。

 SET STREAMING ON 


机器学习:遗传算法,分区


机器学习是Ignite的战略发展领域之一。 ML实现了Zero-ETL范例,该范例允许直接对位于Ignite事务存储中的数据进行训练。 因此,在数据转换和网络传输到培训系统上时,可节省大量时间和资源。

在版本2.5中,将遗传算法添加到了可访问的工具集中。

另外,为了优化学习过程并最大程度地减少网络交换,已经出现了对ML计算的支持,它具有有关在其上执行分区的信息,并且能够将其他信息绑定到这些分区。 鉴于分区是原子分布的,并且无法在多个节点之间切割一个分区,因此可以优化学习过程,从而为算法提供更多保证。

详细信息可以在文档中找到

还有更多


同样在版本2.5中实现:

Source: https://habr.com/ru/post/zh-CN416281/


All Articles