还在用Redis,是时候考虑下Ignite了

最近在一个新的项目技术选型的时候看到了Ignite。Ignite作为一个高性能,分布式内存计算和事务平台,解决了大规模,大数据量,高并发的企业级应用的痛点,是一个非常有潜力的技术。

Ignite的特点

多级存储

Ignite对多级存储的支持主要有三种模式:内存,内存+数据库,内存+原生持久化。

内存:仅使用内存存储数据,为了保证数据不丢失,应该保证数据至少有一份备份。

内存+数据库:在数据库上层用Ignite作为缓存,这里的数据库可以是传统的数据库,例如Mysql,Oracle等。在这里Ignite的作用类似于我们常用的ehcache,guava cache等,但是Ignite是分布式的且更加强大。

内存+原生持久化:Ignite本身支持持久化,可以将数据全部持久化到磁盘,同时将全部或者部分热点数据加载到内存中。

持久化

Ignite本身的持久化支持分布式,事务和SQL语句,具体持久化过程如下图所示:

持久化

持久化的核心在于write-ahead log (WAL),其目的在尽快将数据更新到磁盘,并且保证在整个集群出现问题时能够恢复数据。

分布式SQL

Ignite支持关系型数据库中的SELECT, UPDATE, INSERT, DELETE操作,甚至还支持JOIN操作。上面我们说到Ignite有三种不同模式,每种模式对SQL的支持不一样。

分布式SQL

内存模式:在这种模式下支持上述的各种SQL操作,且性能非常好。

内存+原生持久化模式:这种模式下支持上述的各种SQL操作,且并不需要把全部数据加载到内存中,Ignite的SQL引擎支持内存和硬盘的联合查询。

内存+数据库模式:这种模式不支持Ignite和数据库的联合查询,也就是说,对于一条语句查询或者更新,Ignite的SQL引擎不会分别从Ignite内存和数据库中取出满足条件的数据并且聚合后返回,这是目前做不到的。除非将外部数据库的数据全部加载到Ignite中。

分布式Key-Value

Ignite可以作为一个传统的K-V存储使用,类似于我们之前常用的Redis,这里就不再赘述。

Key-Value存储

分布式事务

Ignite˙支持分布式事务,无论是做缓存还是数据持久化到硬盘都可以保证数据的一致性。

分布式事务

Ignite支持多种分布式事务方式,主要有两段式提交和三段式提交以及Ignite本身的WAL。两段式和三段式时分布式事务常用的两种方式,不再赘述,这里简单说下Ignite本身的WAL方式,WAL是write-ahead log的简称,数据在持久化到磁盘的时候会先写到日志文件里面,然后再更新到磁盘。这种方式只支持Ignite原生的持久化方式,如果是内存+外部数据库的方式,只能选择两段式或者三段式事务。

集中处理

在传统的关系型数据库或者非关系中数据库中,我们通常将数据从数据库取到客户端应用进行处理,而Ignite采用了一种不同的方式,将复杂的计算或者是SQL直接放在Ignite集群的节点上处理,将执行的结果返回给客户端应用。这样就避免了大量的数据在网络上传输。

Ignite集中处理

机器学习

Ignite为构建机器学习模型提供了一套简单,弹性和有效的工具集,且不需要做数据转换。机器学习不熟悉,这里就不班门弄斧了。

Ignite支持机器学习

Ignite使用场景

根据上面Ignite的特点,Ignite适合的使用场景主要有几种:

作为缓存或者数据库使用

Ignite可以作为应用的缓存层甚至是直接作为数据库使用,因为Ignite不仅支持数据的内存存储,还支持持久化和事务,甚至支持SQL查询。如下图所示架构:

Ignite作为缓存

应用或者是服务先将数据存储到Ignite集群中,然后在根据需要持久化到磁盘,写到其他数据库,甚至是抽取到大数据平台,在这个架构中Ignite对上可以满足应用和服务的高速访问,对下可以支持多种数据持久化存储的需要。

数据和计算中心

Ignite可以作为一个高性能的数据计算中心,支持复杂的计算和分析,同时也可以作为一个数据集成总线,聚合不同来源的数据,然后做分析处理。因为Ignite是基于内存处理的,所以处理速度会很快,

总结

简单总结一下,Ignite以内存为中心的架构设计在性能方面有很强的表现,可以作为缓存为应用和服务加速,同时支持原生持久化的分布式内存数据库、事务和Key-Value存储、分布式计算框架、易于与各种技术集成、支持机器学习等,还提供了完整的多语言API支持。Ignite融合了分布式,关系型数据库,高速缓存的特点,对于目前的高并发,大数据量的互联网级应用提供了强有力的支撑,在技术选型时可以综合考虑,采用Ignite集群来提升系统性能。

举报
评论 0