超越Redis?Ignite是后生可畏还是班门弄斧?

攻城狮Bilbo 2020-06-10 09:52:42

 

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

 

一、Ignite的特点

 

1、多级存储
 

 

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

 

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

 

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

 

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

 

2、持久化
 

 

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

 

持久化

 

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

 

3、分布式SQL
 

 

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

 

分布式SQL

 

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

 

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

 

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

 

4、分布式Key-Value
 

 

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

 

 

Key-Value存储

 

5、分布式事务
 

 

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

 

分布式事务

 

Ignite支持多种分布式事务方式,主要有两段式提交和三段式提交以及Ignite本身的WAL。两段式和三段式是分布式事务常用的两种方式,不再赘述。

 

这里简单说下Ignite本身的WAL方式,WAL是Write-Ahead Log的简称,数据在持久化到磁盘的时候会先写到日志文件里面,然后再更新到磁盘。这种方式只支持Ignite原生的持久化方式,如果是内存+外部数据库的方式,只能选择两段式或者三段式事务。

 

6、集中处理
 

 

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

 

Ignite集中处理

 

7、机器学习
 

 

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

 

Ignite支持机器学习

 

二、Ignite使用场景

 

 

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

 

1、作为缓存或者数据库使用
 

 

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

 

Ignite作为缓存

 

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

 

2、数据和计算中心
 

 

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

 

三、总结

 

简单总结一下,Ignite以内存为中心的架构设计在性能方面有很强的表现,可以作为缓存为应用和服务加速,同时支持原生持久化的分布式内存数据库、事务和Key-Value存储、分布式计算框架、易于与各种技术集成、支持机器学习等,还提供了完整的多语言API支持。

 

Ignite融合了分布式、关系型数据库、高速缓存的特点,对于目前的高并发、大数据量的互联网级应用提供了强有力的支撑,在技术选型时可以综合考虑,采用Ignite集群来提升系统性能。

 

作者丨攻城狮Bilbo
来源丨https://www.toutiao.com/i6813016271303475723
dbaplus社群欢迎广大技术人员投稿,投稿邮箱:editor@dbaplus.cn
 

 
从过去40年至今,数据库的形态基本经历了传统商业数据库、开源数据库到云原生数据库的演进过程。云时代下数据库将如何革新与创变?企业核心数据库迁移与建设如何安全平稳展开?来Gdevops全球敏捷运维峰会北京站寻找答案:
 
  • 《All in Cloud 时代,下一代云原生数据库技术与趋势》阿里巴巴集团副总裁/达摩院首席数据库科学家 李飞飞(飞刀)

  • 《AI和云原生时代的数据库进化之路》腾讯数据库产品中心总经理 林晓斌(丁奇)

  • 《ICBC的MySQL探索之路》工商银行软件开发中心 魏亚东

  • 《民生银行在SQL审核方面的探索和实践》民生银行资深数据库专家 李宁宁

  • 《OceanBase分布式数据库在西安银行的落地和实践》蚂蚁金服P9资深专家/OceanBase核心负责人 蒋志勇

  • 《金融行业MySQL高可用实践》爱可生技术总监 明溪源

     

让我们9月11日在北京共同眺望数据库发展变革更长远的未来!

 

最新评论
访客 2020年06月30日

多于多表关联,表又非常大适用吗?

访客 2020年06月27日

写的不错, 学到了。

访客 2020年06月17日

写的真好

访客 2020年06月11日

赞~

访客 2020年06月04日

请问如何支持prometheus ${modulus}动态?

活动预告