32位 or 64位:Apache CloudStack系统VM架构选择
最近我和一些朋友讨论了一个关于CloudStack的问题:为什么现在CloudStack 4.3同时提供32位或64位系统虚拟机的选项。我提出了一个观点,并将其加入邮件列表的讨论中。我想很多人可能都会对此兴趣,所以把我的想法发表在这篇博文里。
对于后台来说,系统虚拟机提供的服务,如处理快照和图像模板,提供网络服务诸如负载平衡,通过代理控制台访问虚拟机等。这些服务向来都是由32位的软件提供的。这是因为32位的内存使用效率非常高,而且由于这些内存是可以横向扩展的,所以很容易实现系统的内存扩展。
但你只能选择一种 - 32位 or 64位 ?
我认为这取决于系统负载,(当然)你可能有不同的答案。某些虚拟机管理程序能在某种架构上更好地工作,某种特定的虚拟机管理程序可能会是一个因素;但忽略特定的虚拟机管理程序,让我们来检视一下你想要使用32位或者64位系统的原因。
32位:与64位相比,32位操作系统的内存使用效率非常高。 (例如,相同的信息通常在存储器中占用较少的空间)。但是32位系统存在最大内存限制。(我们知道32位系统最大寻址空间只有4GB) (是的,你可以使用32位内核的PAE来获得更多的可寻址内存,但是这样做会产生不少CPU开销 -——这会使得系统工作效率低下,因为这些内存都是虚拟化的)32位系统还会限制内核的最大可用内存。这实际上就是使用64位系统的动机——提升内核可用内存。由于虚拟机的功能之一是提供负载平衡,但为了给内核留下了宝贵的空间来做其他事情,conntrack内核模块具有连接的实际上限——大约250万个 。 CloudStack将HAProxy作为默认的虚拟机负载均衡软件,因此会使用到conntrack模块。当使用CloudStack的32位虚拟机实现负载平衡时,如果遇到很大网络数据流量,那么就会遇到内核内存上限的困扰。
64位:内存使用效率没有32位系统高,但是它支持配备更多的内存。实际上,在64位系统上,需要更多的内存来实现在32位系统上同样的功能。但是如果你的功能需要超过32位机器所能支持的功能上限,那么至少在64位系统上,你有条件可以选择这样做。
简而言之,如果你认为你可能需要利用到64位虚拟机提供的优势,即更大的内存,那你应该选择64位架构,但如果不需要那就应该默认使用32位系统虚拟机。
如果你想从dev@cloudstack.apache.org邮件列表中查看围绕此主题的原始讨论,请看这里:
http://markmail.org/message/i5kolazi5so52eon
- 用openssl库RSA加密解密
- Kobject浅析
- ASP.NET Core应用的错误处理[2]:DeveloperExceptionPageMiddleware中间件如何呈现“开发者异常页面”
- RSA简介(二)——模幂算法
- 为虚拟机vCPU绑定物理CPU
- RSA简介(三)——寻找质数
- RSA简介(四)——求逆算法
- 平方根的C语言实现(三) ——最终程序实现
- ASP.NET Core应用的错误处理[3]:ExceptionHandlerMiddleware中间件如何呈现“定制化错误页面”
- 【视频】Es6新特性-Symbol
- shell编程/字库裁剪(3)——验证
- 特征选择(Feature Selection)引言
- shell编程/字库裁剪(2)——编程过程
- 使用mock来编译和管理RPM软件包
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 快速搭建简易、高效、多线程http服务器
- Linux解压文件到指定目录的方法
- Linux系统中CPU占用率较高问题排查思路与解决方法
- linux中ftp服务搭建需要注意的地方
- CentOS下使用LibreOffice实现文档格式的转换方式
- 详解在Linux中怎么使用cron计划任务
- Linux系统删除文件夹和文件的命令
- 详解Linux防火墙iptables禁IP与解封IP常用命令
- 在Ubuntu 16.04 Server上安装Zabbix的方法
- Centos7.3安装部署最新版Zabbix3.4的方法(图文)
- Linux系统下移植busybox中mkfs.vfat命令
- Linux服务器配置ip白名单防止远程登录以及端口暴露的问题
- Ubuntu上释放空间的5种简单方法
- Linux下Redis允许远程连接的实现方法
- Linux Socket 编程简介和实现