使用Linux虚拟化的好处

Tags Linux


2015-03-04 10:56:21


AUTH: PHILO VERSION:1(初稿 预计 第三版可以release)

1. Abstract

从刚上大学开始研究Linux,一直以来我都很享受Linux给我的工作带来的便利性。 同时也享受着Linux的多样性,百家齐放的开放性。但是由于各种原因,能支持Linux运行的PC厂商还是不多。 预装Linux的PC更是少之又少。在很久以前甚至爆出了Nvidia不支持笔记本电脑双显卡的驱动问题。 因此在本文中介绍一些如何使用虚拟化技术使得Linux的使用更加人性化,更加适合新手对Linux的了解与 学习,更加适合在pc中配置灵活的生产环境。在这里我们使用虚拟化的手段让Linux更小更轻更灵活。 经过一段时间的总结,我个人认为,在PC机目的为学习于开发更适合使用虚拟化主机。

2. Introduction

截至目前这段时间来看,Cygwin以及Minigw开发平台在windows上的表现在我看来是非常不错的。 如果是想自己开发项目还是非常靠谱的一个平台。但是我尝试过编译各种开源库,几乎没有很顺利通过的时候。 不但浪费大量的时间还影响了心情的舒畅,那酸爽,大家懂得。与此同时通过很多朋友的描述不管是群里的 或者是mailling list里面的表现出来对Linux的热情不乏尝试部署安装Linux到PC的朋友。他们在开始的 时候就要遇到适合windows8或者以上版本的硬件系统,但是这种电脑对于装Linux不是非常友好。 尤其配置一个双系统启动的grub十分麻烦。因此我在这里建议大家灵活使用虚拟化,把问题化繁为简。 至于性能问题,只要没有图形界面性能几乎感觉不到。而且会获得很多好处。比如说安装方便。在虚拟机中的 Linux会分为不同的目的预装不同的软件在里面会让系统更小更轻更快。同时还可以容灾备份。减少重复配置 环境的工作,也利于再次通过虚拟机硬盘打包的方式再次分发你的环境。

3. 目前直接安装部署Linux避免不了的问题。

  1. 双系统的设置,还是比较麻烦的,至少没有自动设置,没事就要进入bios来回尝试。(专业装系统的geek除外)
  2. 缺少必要驱动,比如说很多买来的独立网卡缺少驱动,再比如说笔记本的外置显卡驱动(EXP GDC)。
  3. 缺少游戏,虽然Linux游戏很多,而且自从V社有了Linux版本的steam之后游戏虽然多了起来,但是我们不能没有LOL
  4. 我们不能没有QQ 。(本人比较讨厌Wine版本的qq,CrossOver也是一个味,感觉很臃肿。)

低配置虚拟化满足环境多样性

  1. 配置环境可以打包,分发,备份都可以
  2. Linux配置环境非常小。1gb的大小已经是很大了。
  3. 树形配置环境。增量增加。
  4. 容灾恢复
  5. 系统开销非常小。

4. 实战Linux虚拟机满足日常应用

本章节中给大家带来我日常使用Linux的情景。当然非专业人员可以略过。 从技术角度上来讲,本章节主要介绍低性能情况下处理业务的工具以及注意事项。

4.1 数据处理

  1. 系统日志处理 文本类型的日志处理,在Linux上有很多工具,非常舒服,至少不用编辑器。 并且一个正常的日志还是会非常长的这时候我们可以使用awk来完成我们的需求会非常方便。
  2. 表单处理(网站) 写网站还得是在Linux上写,虽然好处体现的不是那么明显。至少我在做PHP开发的时候写CExtension 比在windows上方便多了。越接近部署环境的开发越省劲儿。除非写习惯了。而且业务非常固定。
  3. 数据可视化 数据可视化是一门复杂使用的学问,如果只是少量数据不会有很大的感觉,如果一次处理10GB+的数据 只出一个图,首先要抽取数据,按比例减少数据量,每几个点做平均或者加权平均,根据业务不同来做。 当然可能笔者的应用数据量比一般应用大一些,因此我们在做数据可视化的时候使用C++来做。数据处理 最后调用ROOT(Cern root 欧洲核子中心研发的专门给高能物理应用开发的数据可视化库)来输出图表。
  4. 需要调用SYS的情况 调用sys泛指调度系统资源的情况。比如说,文件处理。 一般情况下由于windows 于Linux路径斜杠是相反的,再加上windows路径长度有所限制。 并且很多系统功能的目录比如说/tmp 于windows的位置是不一样的。 因此在此处的程序开发是大有不同的。

数据的处理方面的优势主要是windows与Linux对比的优势。接下来讲一下虚拟机的优势。

4.2 服务搭建

4.2.1 运行测试

在搭建应用服务的时候并没有什么不同,只是无法满足配置的多样性。 举一个灵活应用的例子,一个具体的web项目拿来之后要选择那种httpserver在同样的配置下支持并发更高一些。 首先找到一个封闭的隔离的环境就比较困难了,平时几乎没有那么多空闲的服务器来做测试。 其次,先配置一个基础的环境,之后在配置差异化的环境会节省很多时间。

4.2.2 测试容灾

在极端环境下的测试,一旦把环境弄坏可以迅速的恢复环境的正常情况。 比如说在一个计算项目中尝试修改各种各样的Linux底层库,一旦make install之后很难卸载干净。 如果直接恢复可能会造成测试接货不准确。

4.2.3快速环境搭建与分发

举一个真实的例子,平时我就有准备虚拟化的开发环境。 我有一个image 内容包含ubuntu Server下Mysql + Mongo 已经更新到最新版本。 同事A找我快速配置一个go PPROF 性能测试图表输出的环境(需要配置Graphviz 输出svg 来做性能分析) 同事B找我快速配置一个NGINX多网站绑定域名的反向代理服务器。 做完之后很快就可以在服务器上部署了。有点像docker 镜像可以继承。 但是与docker不同的是,可以运行多个进程,还有文件系统上的不同。

4.3 集群服务测试

很多应用一上来是不太可能直接就用正在生产的集群服务器做测试的。 想测试分布式或者并行计算的程序性能,bug只能在虚拟机上进行。 这个没得选。

4.5 配置推荐

Linux推荐的配置:变数。根据业务的不同随时调整配置。做到不浪费,按需配置的好习惯。 但是对我来说适应情况最好的是: 1核心 256-512MB内存 不带图形界面 这种配置,一般的PC都可以开4个左右的虚拟机。

5. 交互问题

宿主机于虚拟机交互问题 三个服务: SSH SAMBA NFS 基本上就够了。

6. 性能问题

使用虚拟机给人的第一个感觉会是性能比较差。同事数据吞吐量比较小。 要想解决这个问题其实非常简单。 1. PC机上的虚拟机一般情况下不会是生产环境。 2. 需要给解决的问题做的更加抽象一点,或者计算Load做的小一点。 3. 一般情况下问题抽象化是最好的解决问题的方法。

7. 结论

经过很长一段时间的实战发现。虚拟机下的Linux还是有很多优势的。 至少很多软件不用自己来回百度去找去下载。(apt,yum 等工具实现的) 很多好用的工具都是免费的,从找到安装只需要一个命令。 因此最高性价比的开发工具选择Linux虚拟机是最高的。 但是也有很多问题无法解决,比如说PC机上是无法做intel 安腾 系列CPU程序的调优因为需要使用ICC/ICPC编译器。 做业务的SIMD处理粒度选择。 最后希望大家早点下班。


本人博客文章采用CC Attribution-NonCommercial协议: CC Attribution-NonCommercial 必须保留原作者署名,并且不允许用于商业用途,其他行为都是允许的。