如何基于阿里云持久内存实例搭建高性价比Redis应用?

简介: 本文将通过分享基于阿里云持久内存实例产品上部署 Redis 的负载实践案例,降低自建 Redis 应用的成本,帮助用户更好地降本增效。

作者:阿里云弹性计算产品专家踏波

本文将通过分享基于阿里云持久内存实例产品上部署 Redis 的负载实践案例,降低自建 Redis 应用的成本,帮助用户更好地降本增效。

什么是 Redis

Redis 是由意大利人 Antirez 开发的键值对(key-value) 数据库。Redis 是“Remote Dictionary Service” 的首字母缩写,它是一个基于内存的,可选持久化的键值对存储系统。

Redis 作为一个高性能、低延时的缓存数据库风靡全球,1ms 的响应延时在数据库圈内一骑绝尘,其根本原因是 Redis 将所有的数据都存放于内存,而内存拥有着磁盘难以比拟的带宽和延时。Redis 被广泛应用在游戏、视频、新闻、导航、金融等各个领域。

Redis 数据库主要有以下几个特点:

  • 内存型数据库
  • 工作模式为单线程
  • 支持多种复杂数据类型
  • 支持数据持久化
  • 支持主从结构

随着互联网及云端数据爆炸式的增加,传统基于 DRAM (普通易失性内存)的部署方式,高昂的成本以及受限的容量逐渐成为 Redis 应用的瓶颈。容量更大,价格更低的新型内存(持久内存介质)逐步走上数据中心领域应用的舞台。

搭建 Redis 对于云服务器的要求

Redis 数据库对内存容量的要求比较高,数据库的瓶颈往往出现在内存容量上,即内存耗光了,而 CPU 的利用率只有 10-20% 不到。所以,搭建 Redis 对于云服务器的内存要求较高,充足的内存容量可以有效地降本增效。

阿里云新推出的持久内存实例产品 Re6p,采用 Intel ®傲腾 TM 持久内存,提供了高达 1:20 的 CPU 内存容量配比(即 8 核新配备了 160G 内存),为 Redis 应用提供专用实例规格 ecs.re6p-redis.large,部署方便简单。

基于 Re6p 五分钟搭建 Redis 应用

image.png

阿里云持久内存型实例 Redis 应用解决方案解构图

Redis 应用直接部署在 Re6p-redis 系列实例上,无需对持久内存进行其他任何初始化操作“开机即用”。

基于开源 Redis 版本部署,注入了冷热数据分层机制(通过专用 patch 包实现—memKeyDB),patch 包完全开源,由 Intel 团队维护。

参考源码:
https://github.com/memKeyDB/memKeyDB

下面将分享某互联网客户基于 Re6p-redis 系列实例的实战经验,如何基于 open source Redis 4.0.14 及对应的 patch,五分钟搭建出基于持久内存的超高性价比 Redis 应用集群。

第一步

启动阿里云 ECS,购买 ecs.re6p-redis.2xlarge 实例规格,选择 ALi Linux2 操作系统,云盘选择 500G PL1 ESSD,并指定系统盘默认为 40GB。

第二步:准备编译环境

设置环境变量:

export MEMKIND_DAX_KMEM_NODES=1

准备编译环境:

yum -y groupinstall 'Development Tools';yum -y install numactl-devel.x86_64

第三步:安装Redis4.0.14

下载 Redis 安装包:

wget https://github.com/redis-io/redis/archive/4.0.14.tar.gz;tar xzvf 4.0.14.tar.gz

安装 patch 包:

wget https://github.com/redis/redis/compare/4.0.14...memKeyDB:4.0.14-devel.diff -O redis_4.0.14_eca56e845aa19d2e79e7c70207e860f8385541f9.patch;cd redis-4.0.14;git apply --ignore-whitespace ../redis_4.0.14_eca56e845aa19d2e79e7c70207e860f8385541f9.patch

安装 memkind 持久内存管理工具:

wget https://github.com/memkind/memkind/archive/v1.10.1-rc2.tar.gz;tar xzvf v1.10.1-rc2.tar.gz;mv memkind-1.10.1-rc2/* ./deps/memkind/;cd ./deps/memkind/;wget https://github.com/memKeyDB/memKeyDB/wiki/files/0001-Use-secure_getenv-when-possible.patch;git apply --ignore-whitespace 0001-Use-secure_getenv-when-possible.patch

开始编译安装 Redis4.0.14:

cd /root/redis-4.0.14;make clean;make distclean;make MALLOC=memkind -j 4;make install

第四步:配置网卡多队列(可以发挥出 Redis 的最大性能)

准备脚本:
wget https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/ecs_mq/ecs_mq_latest.tgz;tar -xzf ecs_mq_latest.tgz;cd ecs_mq/

运行脚本:

bash install.sh <系统名称> <系统主版本号>. (如:bash install.sh centos 7)

启动服务:systemctl start ecs_mq

安装完成,启动 Redis 服务:

启动:

cd /root/redis-4.0.14;redis-server redis.conf --port 6379 --memory-alloc-policy ratio --dram-pmem-ratio 1 8 --maxmemory 36G --hashtable-on-dram yes --daemonize yes --protected-mode no --bind 0.0.0.0

全部完成,运行测试程序测试性能情况:

server 端启动 Redis 服务:

redis-server /root/redis-4.0.14/redis.conf --port 6379 --memory-alloc-policy ratio --dram-pmem-ratio 1 8 --hashtable-on-dram yes --daemonize yes --logfile /tmp/redis_6379.log --protected-mode no --bind 0.0.0.0 --save

client 端运行 Redis-benchmark:

/root/redis-4.0.14/src/redis-benchmark -h server_ip -p 6379 -t get -r 100000000 -n 120000000 -c 64 -d 64 >> ./get_6379.redis

查看测试结果,如下展示了与普通内存型实例的对比测试结果(并行运行了 8 个 thread),可以看到基于持久内存构建的 Redis 应用,性价比有了极大的提升。

image.png

更多 Redis 版本支持请参考官网文档帮助链接:

https://help.aliyun.com/document_detail/188250.html?spm=5176.10695662.1996646101.searchclickresult.183472f1avSvqZ

总结

本文对 Redis 做了简单的介绍,并分享了如何基于 Re6p 搭建高性价比的 Redis 负载运行环境,希望对大家有所帮助。

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
22天前
|
存储 安全 数据库
阿里云服务器计算型、通用型、内存型主要实例规格性能特点和适用场景汇总
阿里云服务器ECS计算型、通用型、内存型规格族属于独享型云服务器,在高负载不会出现计算资源争夺现象,因为每一个vCPU都对应一个Intel ® Xeon ®处理器核心的超线程,具有性能稳定且资源独享的特点。本文为大家整理汇总了阿里云服务器ECS计算型、通用型、内存型主要实例规格族具体实例规格有哪些,各个实例规格的性能特点和主要适用场景。
阿里云服务器计算型、通用型、内存型主要实例规格性能特点和适用场景汇总
|
23天前
|
存储 弹性计算 固态存储
阿里云服务器CPU内存配置怎么选?ECS实例规格有啥区别?
阿里云服务器配置选择需考虑ECS实例规格、CPU内存、公网带宽与系统盘。个人开发者或中小企业推荐轻量应用服务器或ECS经济型e实例(2核2G3M带宽,99元/年),适合搭建低流量网站。企业用户应选择企业级独享型如通用算力型u1、计算型c7或通用型g7实例,至少2核4G内存起,推荐5M公网带宽以平衡成本与性能。系统盘推荐ESSD云盘以获得更好的性能。更多详情及链接参见原文。
40 3
|
21天前
|
运维 NoSQL Serverless
Serverless 应用引擎使用问题之首次启动无法获取redis连接,重启实例后可以获取,是什么原因
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
Serverless 应用引擎使用问题之首次启动无法获取redis连接,重启实例后可以获取,是什么原因
|
26天前
|
NoSQL Redis 开发工具
Redis性能优化问题之检查 Redis 实例是否启用了透明大页机制,如何解决
Redis性能优化问题之检查 Redis 实例是否启用了透明大页机制,如何解决
|
26天前
|
NoSQL Redis
Redis性能优化问题之禁用内存大页,如何解决
Redis性能优化问题之禁用内存大页,如何解决
|
26天前
|
NoSQL Redis
Redis性能优化问题之查看 Redis 进程是否发生内存 swap,如何解决
Redis性能优化问题之查看 Redis 进程是否发生内存 swap,如何解决
|
8天前
|
NoSQL Redis
Redis——设置最大内存 | key淘汰机制
Redis——设置最大内存 | key淘汰机制
19 0
|
26天前
|
Java Perl
JVM内存问题之如何统计在JVM的类加载中,每一个类的实例数量,并按照数量降序排列
JVM内存问题之如何统计在JVM的类加载中,每一个类的实例数量,并按照数量降序排列
|
26天前
|
存储 NoSQL Redis
Redis性能优化问题之Redis 4.0 以下版本如何解决内存碎片问题,4.0 版本提供了什么功能来解决内存碎片问题
Redis性能优化问题之Redis 4.0 以下版本如何解决内存碎片问题,4.0 版本提供了什么功能来解决内存碎片问题
|
缓存 NoSQL Java
Redis笔记1-redis的搭建和使用
1.   Redis的安装   1.1. Redis的安装 Redis是c语言开发的。 安装redis需要c语言的编译环境。如果没有gcc需要在线安装。yum install gcc-c++   安装步骤: 第一步:redis的源码包上传到linux系统。
1999 0