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
- 017 Java中的静态代理、JDK动态代理、cglib动态代理
- 我的学习、归纳方法(以学习 Maven 为例)
- JDBC面试题都在这里
- 018 final 关键字的用途
- 04-01.总结switch,for,while,do。while跳转语句
- JDBC【介绍JDBC、使用JDBC连接数据库、简单的工具类】
- 019 单例模式的5种写法
- 图书管理系统【部署开发环境、解决分类、图书、前台页面模块】
- 图书管理系统【用户、购买、订单模块、添加权限】
- 04-02.总结switch,for,while,do。while跳转语句
- 图书管理系统【总结】
- JDBC【PreparedStatment、批处理、处理二进制、自动主键、调用存储过程、函数】
- JDBC【事务、元数据、改造JDBC工具类】
- JDBC【数据库连接池、DbUtils框架、分页】
- 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 数组属性和方法
- java方法重载
- java中super()和this()浅析
- 常见的 Spring 注解概览
- java中 this和super的区别
- Java常用API(ArrayList类)
- 关于多线程中抛异常的这个面试题我再说最后一次!
- 卧槽!居然有比Flask更好用更简单的框架
- Java8基础学习(一)- Founction接口
- java数组详解
- 初识Java对象
- Java常用API(Scanner类)
- Java中多线程的使用(超级超级详细)线程安全+线程锁原理解析+保证线程安全的三种方式 (同步代码块+同步方法+lock锁) 5
- Java匿名对象介绍
- Java常用API(Random类)
- Java常用API(String类)