一、需求与场景
业务需要从数据库中获取产品的相关信息,搜索池为三张表总共670万行记录,所占空间为1.5g,键值集容量从200到2500之间分布,命中率为25%到80%,由于业务原因无法减少键值集,而公司内部规划没有采用分布式数据库架构。为减少搜索相关信息阶段的时间,需要将从MySQL等关系型数据库中的搜索压力转换到内存数据库。
我们的业务场景需要NoSQL数据库在每个业务步骤进行上下文相关内容存取,数据量较大,不强调一致性,可以容忍数据丢失或出现脏数据,每次搜索键值集较大,需要有批量读的功能,以及稳定的搜索时间范围(除网络延迟之外),同时,需要控制成本。
二、Aerospike的特性
Aerospike的官方定义:Next Generation, NoSQL Data Platform。(下一代NoSQL数据平台)
Aerospike的官方描述:Powering real-time, extreme scale data solutions that require five-9’s+ uptime, predictable performance and operational simplicity。(某些数据解决方案需要5个9的正常运行时间、可预测的性能以及操作的简单性,而Aerospike恰恰支持这样实时的、极端规模的数据解决方案。)
因为当前有很多性能不错的NoSQL数据库可供选择,那么我为什么要选择Aerospike呢?在看到官方简介之前,我是无从下手的。不过,有了这么高大上的定义,我瞬间有了方向。既然Aerospike 说自己是下一代NoSQL数据平台,那么我有个疑问,那下一代数据库的定义是什么样的呢 ?有什么特点吗?从它对自己性能的自信,我很好奇它采用了什么样的架构什么样的机制做到这样的性能呢?会不会存在打脸的情况呢?
为了防止自己对Aerospike发表先入为主的意见,那么我就先从它的官方文档开始,看看它自己是怎么解释自己的特点以及它对自己定义的由来。同时为了自己的书写体验(避免它有王婆卖瓜的倾向可能会误导我的情况),我就将它描述中所有的形容词去掉,只看事实。
1.稳定性及可靠性。通过三个方面来达到这个目的,第一,5个九的运行时间;第二,动态的集群管理机制;第三,强一致性。
2.可预测性能。通过三个方面来达到这个目的,第一,获得专利的闪存优化存储层;第二,通过基于ML的实时决策支持高数据摄取率;第三,拓展到十亿兆字节规模。
3.减少复杂性及总拥有成本。通过三个方面来达到这个目的,第一,解决服务器拓展问题;第二,使用低成本的Flash和PMEM来取代DRAM;第三,能在任何复杂的生产环境部署。
假设,Aerospike官方的声明具有比较高的可信度,那么,在看到使用Aerospike可以减少复杂性以及总拥有成本的特点时,我们便有了决定(因为穷,只能节衣缩食),毕竟使用SSD+Memmory的方式比单纯使用Memmory要划算得多。同时,官方也提供了Aerosipke的监控工具,便于我们运维。剩余的信息官方说明已经很详细了,要用中文再写一遍的话,就有点反复造轮子的意思。上面三点已经绑定链接,可以直接跳转到相关的官方页面。
补充一下,在官方对可预测性能的说明中,有与Cassandra、Redis、DynamoDB、Couchbase的基准测试,以及提供了一些选择的建议。如果你有在Aerospike与Redis中有做考虑的话,可以看看Aerospike官方给的参考项。强调一点,很多功能只有企业版才能使用,当然是需要商业许可的。
那么,按照我的需求,到现在就已经可以安装使用Aerospike了。Aerospike数据库的限制列表。
三、安装
由于企业版本需要与销售顾问联系之后,才能拿到feturekeys.conf。就不做企业版的演示了。下面选择社区版的压缩包以及Docker安装方式进行简单说明。
1.社区版压缩包安装
1.1 环境
Centos7 虚拟机, Xshell远程连接工具。
1.2 下载:
方式一:在浏览器下载,再通过Xshell将压缩包上传到虚拟机中。
社区版本下载地址:aerospike-community-edition。(随便填写一些信息后,即可下载)
使用Xshell连接虚拟机,切换到你决定放压缩包的位置,执行rz命令,在弹出框中选择压缩包后点击ok即可(若有打开screen模式,在下载过程中会有问题,可以先退出screen模式,若并未在screen模式中,可忽略该提示)。若无rz命令,可通过下面命令进行安装
yum install lrzsz
方式二:通过在虚拟机中使用wget下载压缩包。
使用Xshell连接虚拟机,切换到你决定放压缩包的位置,执行下面命令
wget -O aerospike.tgz 'https://www.aerospike.com/download/server/latest/artifact/el7'
若是没有wget方法,可以通过下面命令安装
yum install wget
1.3 解压安装
解压
tar -xvf aerospike.tgz
安装(在Centos6和8中,需要安装一些额外依赖)
cd aerospike-server-community-{latest-version}-el7/
sudo ./asinstall
1.4 启动、测试
启动
systemctl start aerospike
测试
[root@192 ~]# aql
Seed: 127.0.0.1User: NoneConfig File: /etc/aerospike/astools.conf /root/.aerospike/astools.conf
Aerospike Query Client
Version 3.23.0C Client Version 4.6.9Copyright 2012-2019 Aerospike. All rights reserved.
aql> show sets
[127.0.0.1:3000] 0 rows in set (0.001 secs)
OK
aql>
到此,最基本的压缩包安装已经完成。
2. Docker安装
执行下面命令
docker run -tid \
-v /opt/aerospike/data:/opt/aerospike/data \
-v /opt/aerospike/usr/lua:/opt/aerospike/usr/udf/lua \
-v /opt/aerospike/config:/opt/aerospike/etc \
--name aerospike1 \
-p 3000:3000 \
-p 3001:3001 \
-p 3002:3002 \
aerospike/aerospike-server /usr/bin/asd --foreground \
--config-file /opt/aerospike/etc/aerospike.conf
-v {local-path}:{container-path} : 将本地文件挂载到容器中,是容器内文件于本地可见且可修改,这里挂载的目的主要为了,第一,定制化配置;第二,将容器内数据备份到本地;第三,为了持久化 lua cache;
-p {local-port}:{container-port}: 绑定本地端口与容器端口看;
--config-file {container-file}:使容器内的指定文件作为容器的配置文件,即使我们挂载的配置文件生效的方式之一