Memcached缓存大数据时对服务器内存、CPU的影响及其对硬件的配置需求

本文涉及的产品
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
云原生大数据计算服务 MaxCompute,5000CU*H 100GB 3个月
简介:
最近公司在进行缓存框架方面的调研,我主要对Memcached在缓存大数据量情况下对系统硬件的影响和需求做了调研,以下是一些测试数据和调研结果:

 Memcached缓存不同数据量测试情况:    

     
一、测试环境配置信息

   1. 缓存服务器配置信息:一共4台 ,三台是公司服务器,一台是本机
          node1: 单核 1G内存
           node2:  单核 1G内存
          node3:  单核 1G内存
          node4: 4核  8G内存

   2.运行在每台服务器上的Memcached实例配置信息:
         工作线程数量:4个
         设置缓存大小:前三个结点是512MB,最后一个结点是4GB,集群总缓存大小时5632MB
          最大并发连接数:1024
         
二、对内存和CPU的影响测试数据及分析:

数据量 5千 1万 10万 100万 1000万 1亿
内存 1.87MB 3.65MB 36.58MB 366.7MB 3.62GB 受测试环境限制,没有测试
CPU CPU影响较小,对于1000万条数据,单线程向Memcached中写,占用CPU比率为0.0%,尝试分别在测试程序中启动20个线程和100个线程同时向Memcached写数据,这两种情况下每台Memcached缓存服务器的CPU占用率都不超过1%
 

  1. 缓存数据量和占用内存大小成简单线性关系,数据量的增加没有对服务器内存造成特殊影响 
  2. 缓存数据量的大小对CPU没有影响,写缓存的请求数量对CPU有影响且影响较小

三、总结
    1.CPU方面:低并发和大数据量下Memcached对CPU要求很低,高并发情况官方说明是其对CPU要求也很低。
    2.内存方面: 只要内存够用(可横向无限扩展),Memcached缓存大数据量没有问题(1GB可缓存约250万条数据)。
    2.Memcached有两个比较重要的限制,一是最大缓存时间为30天,二是一个缓存项目(key-value)的最大容量为1MB,这两个限制可能会对具体项目造成一定影响,一定要注意。
     
附:一个测试场景的截图    


以下是更具体点的描述:

一、对于CPU的需求

     Memcached对CPU的依赖是轻量级的,因为它的设计目标就是能够快速响应。Memcached是多线程的,默认会有4个工作线程。对于一般情形,Memcached在CPU低配的情形下也会是高效的。

二、对于RAM的需求

     Memcached的设计目标就是能够把分布在多个节点上主机的内存缝合在一起,让我们的应用看到的是一个缝合之后的大块内存,因此,可以这么说:“内存越大越好”,具体大小则根据我们的应用场景来设定即可。
     官方建议我们集群各结点的内存大小是一致的,集群的均衡意味着我们可以很容易的增加或删除结点,而不用考虑它们在集群中的权重大小。
     分配内存时,不应占用全部物理内存,因为过度的分配内存可能会引起内存Swap,导致效率降低。
     对于是否需要高速RAM,官方的回答是:not so much。

三、对带宽的需求

     对带宽的需求主要取决于并发量及缓存Item的大小,因此,不同业务情况对带宽的需求差别是比较大的。

四、Memcached在硬件上的部署

1.使用专用服务器:

     能用专用服务器当然是最好的了,好处不必多说,但也有一点需要注意,横向扩展比纵向扩展有个好处,就是单个结点宕掉对总体的影响会更小,比如一个单机32G 、4台机器机器构成的集群可靠性就比1台机器128G内存的可靠性要高。

2.部署在应用服务器:

     可以部署在应用服务器或其它计算结点上,充分利用它们的空闲内存,比如一个web服务器有4GB的RAM,而运行在上面的App和OS已经占用了2GB,我们可以分配1.5GB给我们的Memcached实例。
     但需要注意的是,这样做会有一些风险,如果内存不足时可能会引起Swap,而一个App的内存泄露也会kill掉Memcached实例。

3.部署在Database服务器:

     不建议部署在数据库服务器上,尽量给数据库分配最大的内存。


     
总结:
  • Memcached对CPU的依赖很低
  • 对内存依赖高,可无限扩展内存,具体占用多大内存可以根据实际需求配置
  • 带宽方面可暂不考虑
  • 建议采用专用服务器或有较多空闲内存的应用服务器作为缓存服务器


     

     
     


王厚达 (18764287653)
相关实践学习
基于MaxCompute的热门话题分析
本实验围绕社交用户发布的文章做了详尽的分析,通过分析能得到用户群体年龄分布,性别分布,地理位置分布,以及热门话题的热度。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps 
目录
相关文章
|
2月前
|
缓存 应用服务中间件 nginx
Web服务器的缓存机制与内容分发网络(CDN)
【8月更文第28天】随着互联网应用的发展,用户对网站响应速度的要求越来越高。为了提升用户体验,Web服务器通常会采用多种技术手段来优化页面加载速度,其中最重要的两种技术就是缓存机制和内容分发网络(CDN)。本文将深入探讨这两种技术的工作原理及其实现方法,并通过具体的代码示例加以说明。
202 1
|
10天前
|
存储 缓存 固态存储
|
16天前
|
存储 缓存 API
LangChain-18 Caching 将回答内容进行缓存 可在内存中或数据库中持久化缓存
LangChain-18 Caching 将回答内容进行缓存 可在内存中或数据库中持久化缓存
33 6
|
14天前
|
缓存 NoSQL Ubuntu
大数据-39 Redis 高并发分布式缓存 Ubuntu源码编译安装 云服务器 启动并测试 redis-server redis-cli
大数据-39 Redis 高并发分布式缓存 Ubuntu源码编译安装 云服务器 启动并测试 redis-server redis-cli
41 3
|
20天前
|
缓存 监控 负载均衡
提高服务器CPU使用率
提高服务器CPU使用率
69 7
|
20天前
|
存储 缓存 监控
如何提高服务器CPU性能?
如何提高服务器CPU性能?
61 3
|
3天前
|
运维 JavaScript Linux
容器内的Nodejs应用如何获取宿主机的基础信息-系统、内存、cpu、启动时间,以及一个df -h的坑
本文介绍了如何在Docker容器内的Node.js应用中获取宿主机的基础信息,包括系统信息、内存使用情况、磁盘空间和启动时间等。核心思路是将宿主机的根目录挂载到容器,但需注意权限和安全问题。文章还提到了使用`df -P`替代`df -h`以获得一致性输出,避免解析错误。
|
29天前
|
存储 关系型数据库 MySQL
查询服务器CPU、内存、磁盘、网络IO、队列、数据库占用空间等等信息
查询服务器CPU、内存、磁盘、网络IO、队列、数据库占用空间等等信息
99 5
|
14天前
|
C# 开发工具 Windows
C# 获取Windows系统信息以及CPU、内存和磁盘使用情况
C# 获取Windows系统信息以及CPU、内存和磁盘使用情况
30 0
|
28天前
|
Prometheus Kubernetes 监控
使用kubectl快速查看各个节点的CPU和内存占用量
在Kubernetes集群中,安装metrics-server,并使用kubectl快速查看集群中各个节点的资源使用情况。
61 0