本文从个人角度上分析虚拟化的意义
1. 虚拟化对成本的影响
A. 节约采购成本:
提高 PC 的 CPU ,内存,硬盘和网络使用效率,同时降低了电力消耗
B. 节约了维护的成本:
i. PC 少了,维护工作自然少了
ii. 集中化的管理 , 减轻维护人员工作压力
iii. 可以弹性的资源调配
2. 虚拟化前的资源使用分析
下面场景是最直观的资源闲置
- 为了保证服务的持续性,很多应用要求有主备,所有的备机是闲置的
- 测试服和开发机,只有测试需要或者编译时会使用。
- 很多 IT 公司的服务器都是根据年初预算提前采购,如果项目进展或者用户需求不如预期,将产生很大一批机器资源浪费
- 测试客户机,只有测试的时候才需要
- 测试开发机,只有编译或者调试时使用
- 测试服务器,测试时候才有用
下面场景是利用率不高
- 接入机,网络占用高, CPU, 内存,磁盘低
- 工作 PC ,时高时低,特别是那些需要倒班的企业,换一批人,机器就闲置一批(或者不换,但是共享 PC 容易导致工作场景或文件丢失)
- 缓存服务器, IO 低
- 应用服务器,一般内存和 IO 都比较低
3. 如何部署虚拟化主机
3.1 水平划分
对大公司来说,云太大了,将会导致管理的混乱,所以我们要进行一定的水平划分。
水平划分有很多方法,比如按照业务的敏感度,或者部门,业务的开放性(对内还是对外等),轻重分离。如果划分后还是太大了,可以继续 2 级, 3 级划分。
3.2 资源的最大利用
划分完以后,我们可以部署我们的虚拟集群了。
针对 2 节中的分析, 可以对我们的场景进行分类和部署
| 场景 | CPU | MEN | NET | IO | 业务特点 | 部署 |
A | 主备功能 | M | M | M | M | 要求主备隔离 | 不同应用的主备混搭,可以把 A 进程的主和 B 进程的背搭在同一机器上的不同虚拟机上 |
B | UI 测试和工作 PC | M | M | L | L | 资源要求不高,大部分时间是闲置 | 通过 XEN 底层预销售尽量多的工作单元 |
C | 前端网络接入机 | L | L | H | L | 网络内外网资源占用高,其他低 | 可以跟一些网络要求不高的混搭,比如 D |
D | 应用 1 | L | L | H | H | 存储应用一般只对 IO 和 NET 要求高 | 混搭 |
E | 应用 2 | H | H | L | L | 后台运行应用,比如生成静态化报表等 |
|
F | 应用 3 | H | H | H | L | 如缓存或者主控应用 | 相对独立,可以部署那些不活跃的备份日志混搭 |
G | 应用 4 | L | L | L | H | 备份存储应用 |
|
H | 都高 | H | H | H | H | 如 DB 等, | 不适合虚拟化 |
通过虚拟化的资源池,我们可以对上表的场景 追求资源的最大化利用
下面是使用视图
上图显示,虚拟化起码可以帮我们节省 80% 以上 的 PC 资源,如果预销售越多,或者应用对资源要求越低,我们将会节省更多。
4. 虚拟化主机和多进程的区别
很多时候,做分布式应用时,感觉多虚拟机和多进程部署有一定的雷同
实际上还是差别非常大的:
- 虚拟机的隔离性更好,应用问题引起的拓机或者资源泄露不会影响其它应用
- 虚拟机部署更灵活,用户不需要知道具体哪个物理机,根据 IP 就可以了。而多进程必须指定 IP 和端口号
- 对使用者更灵活,用户可以随意在其计算单元上部署 crontab 等应用而不必怕影响到其它用户