SnowFlock 快速克隆 Xen VM

这个周末看了一篇关于快速克隆 Virtual Machine(VM)的文章,SnowFlock: Rapid Virtual Machine Cloning for Cloud ComputingSnowFlock 是 University of Toronto 的一个项目,核心想法是把 Unix 操作系统中 fork 的概念引入到云计算,不过不是用来 fork 进程,是 fork 虚拟机,这个 fork 与原始的 Unix fork 有几点不同:

1、VM fork 可以 fork 到其他物理机器上,Unix fork 只能在本机操作系统内 fork;
2、parallel fork,一次 fork 调用可以创建多个 child VMs;
3、VM fork 从 parent VM 那里复制所有的进程和线程。

SnowFlock 从不同的物理机器上 fork 出相同的 VM,这些 VMs 连在一起构建一个私有 cluster,拥有自己的虚拟网络。SnowFlock 根据计算的需要分配计算资源,从众多的物理机器中创建一个合理大小的 Xen VM Cluster,由这个 cluster 来完成目标计算,完成计算后,这个 cluster 就自动消失了。

snowflock

把 Unix 中的 fork 概念用到云计算 VM 克隆中是个很有意思的想法,SnowFlock 如何做到快速克隆呢?做到 fork 并不难,最土的想法就是 fork 时利用虚拟机的 suspend/resume 功能,把 VM suspend 后将整个 VM 文件拷贝到别的机器上然后 resume 运行。但是这个过程太慢,在 VPSee 的 Mac 上 suspend 一个 vmware 虚拟机大概需要 30秒,又需要另外 30秒 resume。SnowFlock 克隆 VM 只需要不到1妙,它是如何做到这点的?

1、VM 文件里包含 memory image,disk image,各种状态、配置信息等,SnowFlock 只复制必要的状态信息(VM descriptor),这样就不必复制包含整个操作系统在内的 VM 文件,如果 disk image 设的是 10GB,那就不必复制 +10GB。Memory-On-Demand 允许 child VM 只在需要某个 memory 页面的时候才去 parent VM 那里克隆,可以在 fork 后进行,减少了初始克隆 VM 的体积;
2、VM 克隆的时候不必克隆所有的 memory image,只需要原始 image 中一小部分信息(Memory State),这又减少了需要克隆的体积;
3、child VM 可以在 fork 到其他机器上后再分配内存。如果先分配内存会造成 memory image 过大,影响克隆速度。如果 parent VM 分配了页面,比如 malloc,但是还没有用到这些页面、没有数据的话这些页面也用不必克隆到 child VM。还有一些可以循环使用的 kernel buffer 也不必克隆,,进一步减少克隆体积;
4、child VM 通常执行类似的代码和数据结构,如果 fork 多个 VMs 的话有助于 multicast;
5、把数据 multicast 给多个 VMs,只要有1个 VM 请求页面,这个页面也会被 multicast 给其他 VMs。一次操作就把数据分发给所有 VMs 还可以减少网络负载。

简单的说就是,尽可能减少 VM 携带的信息量来达到快速克隆的目的,这篇论文指出只需要克隆原 VM 0.1% 的信息就足够运行一个 child VM 了。SnowFlock 在 Xen 3 上实现了上述快速克隆的概念,具体实现过程很复杂,如有兴趣可参考论文和代码。SnowFlock 实现的简单图示:

snowflock

(图片来自 SnowFlock 官方网站和资料。)

用 Cacti 监视 Linux 服务器

给每年的 hacker 大会提供网络支持是件很有挑战的事情,弄不好就会有 hacker 当场黑掉网络这种尴尬事情出现。看看刚刚过去的 Defcon 大会技术人员是怎么架设网络的,使用了哪些有趣的硬件和软件,这里有 图片报道:2009 Defcon 的网络图片报道:2008年 Defcon 的网络。Defcon 技术人员用 OpenBSD 做 Firewall 跑在 Xeon 服务器上,用 Cacti 监测流量。VPSee 一直都用 Nagios 来监测自己的多台服务器,对 Cacti 很好奇,今天刚好有时间安装试试看。

安装 Cacti

安装必要的软件包:

# yum install net-snmp-utils php-snmp net-snmp-libs
# yum install perl-rrdtool rrdtool

Cacti 官方网站下载 cacti-0.8.7e.tar.gz:

# tar zxvf cacti-0.8.7e.tar.gz
# mv cacti-0.8.7e /var/www/cacti

给 cacti 打补丁:

# wget http://www.cacti.net/downloads/patches/0.8.7e/cli_add_graph.patch
# wget http://www.cacti.net/downloads/patches/0.8.7e/snmp_invalid_response.patch
# wget http://www.cacti.net/downloads/patches/0.8.7e/template_duplication.patch
# wget http://www.cacti.net/downloads/patches/0.8.7e/fix_icmp_on_windows_iis_servers.patch
# wget http://www.cacti.net/downloads/patches/0.8.7e/cross_site_fix.patch
# patch -p1 -N < cli_add_graph.patch
# patch -p1 -N < cross_site_fix.patch
# patch -p1 -N < fix_icmp_on_windows_iis_servers.patch
# patch -p1 -N < snmp_invalid_response.patch
# patch -p1 -N < template_duplication.patch

配置 Cacti

创建 Cacti 需要的数据库:

# mysql -u root -p
mysql> CREATE DATABASE cacti;
mysql> GRANT ALL ON cacti.* TO vpsee@localhost IDENTIFIED BY 'password';
mysql> FLUSH privileges;

初始化 Cacti 数据库表:

# mysql -u vpsee -p cacti < /var/www/cacti/cacti.sql

修改 Cacti 配置文件以连接到上面的数据库:

继续阅读 »

Turbovps:$5.99 128MB OpenVZ VPS

turbovps

Turbovps 2001年开始做 hosting,2006年分出来专门做 VPS。奇怪的是用 whois 查询域名,下面几个网站都和 Turbovps 有关联,其实就是一家公司,不同的网站而已。
managedwindowsvps.net
cheapmanagedwindowsvps.com
cheapmanagedlinuxvps.com
cheaplinuxvps.com
看样子 Turbovps 耍了点小聪明,是公司的市场策略呢?还是一个域名做臭了换一个?这年头做老实人怎么就这么难。VPS 配置如下:

服务器在 Texas, Indiana, California and Europe
Lxadmin 控制面板
OpenVZ
10GB 硬盘
128MB Guaranteed RAM,256MB Burst Memory
150GB 带宽
5.99 美元

官方网站上只给出25%的优惠,在 WHT 上可以找到优惠码最高优惠40%,原价9.99,现在只要5.99。服务器硬件和网络信息:

Dual Xeon/Quad Core CPU’s 3.0ghz / atleast 8Gigs RAM / RAID protection, Our Network.

分享一个记笔记的好工具:Evernote

平时都用 Mac 自带的 Stickies 记些小便条很方便,不过有时候要记录有丰富内容的文档就不行了,比如带字体、格式的笔记。而且有时候用 Mac 记的东西很想能自动同步到 iPhone 上,不需要 USB 连线什么的。后来用 Google Docs 记东西,每次都要登录而且不能自动同步,所以决定找个能自动保持同步的记笔记的工具。Evernote 可能是类似工具中最好的了,免费、支持 Mac/iPhone/Windows,操作方便,同步速度快,而且支持音频、视频记录,说几句话录下来省得打字。刚开始不会觉得 Evernot 很方便,当便条积累多了以后,就能体现出来自动同步的好处了。使用 Evernote 需要注册,拥有一个帐户以后就可以同步了,每个月可以免费使用40MB,用来写 notes 足够了。

evernote

Servebyte:$5.99 128MB OpenVZ VPS

servebyte

Servebyte Hosting 是一家创立于2005年的家族公司,强调绿色节能,这里列出了9台服务器的状态。VPS 即时激活,不用等待,可以用控制面板自己重装系统,有包括 Gentoo/Slackware/Arch Linux 等多种 Linux 版本选择。网站上有个 speedtest.net 提供的测试网速的 flash 很有意思,可以测出上传和下载的速度。不过奇怪的是在网页上没有 Burst Memory 一栏,不知道 128MB Memory 包不包含 Burst。VPS 配置如下:

服务器在 Chicago, Illinois
自制控制面板
15GB 硬盘
128MB Memory
120GB 带宽
5.99 美元

数据中心信息:

Our dedicated servers are centrally located in our N+1 Chicago data center space. The facility is designed to reduce power and energy cost.

用 Nokia 手机连接 Asterisk 打 SIP 电话

这是一篇很老的笔记了,好像是06年的,今天有时间整理出来。当时正在做一个 VoIP 项目,开发一个支持视频、语音的 SIP softphone,并且还要支持文字聊天、presence 等功能。开发完后测了几个其他的 SIP phone,语音都没有问题。那时候手机 WiFi 很火,VPSee 很想看看自己的 SIP phone 能不能连得上手机。

每个 SIP 厂商对 SIP 标准的支持都不一样,大部分时候任意两个 SIP 电话都可以通话,但有时候某个 SIP phone 因为 SIP 兼容性问题不能连到另一个 SIP phone,或者有时候信号很差。Microsoft 的 MSN 其实是基于 SIP 协议的,不过 Microsoft 在 SIP 上加了很多自己的东西,改进过多又封闭代码,导致 MSN 基本和 SIP 没有什么关系了。Nokia 手机上的内置 SIP 看上去很简单,只提供最基本的功能使用,而且是系统一部分,封闭。Symbian 的 SDK 不包括 SIP/RTP 库,如果要在 Symbian 上开发自己的 SIP 电话的话还需要开发自己的 SIP/RTP 库,很麻烦,目前有个叫 pjsip 的 open source SIP 库已经被移植到了 Symbian 上。

Nokia 手机没有网络插口,不能用网线上网,只能通过 WiFi 连网。打造一个测试环境需要几个部件:同时支持 WiFi 和 SIP 的手机、WiFi 网络和 VoIP 服务器。支持 WiFi 和 SIP 的 Nokia 手机主要型号集中在 E 系列和 N 系列,VPSee 用 Nokia E70、E61、N66、E71 测试过都没有问题。首先用手机登录 WiFi,设置 SIP 配置文件(服务器地址、用户名、密码)后注册到局域网的一台 Asterisk VoIP 服务器上。然后用我们开发的 SIP softphone 或者注册到 VoIP 服务器后拨号给手机。连接如下:
手机 —- WiFi —- VoIP 服务器 —- SIP softphone

安装 Asterisk

wget --passive-ftp ftp.digium.com/pub/asterisk/asterisk-1.4.4.tar.gz

tar zxvf asterisk-1.4.4.tar.gz
mv asterisk-1.4.4 /usr/src

cd /usr/src/asterisk-1.4.4
make clean
./configure
make
make install
make samples


继续阅读 »

在 Python 中使用 difflib 比较字符串

用 Shell 写程序还是不方便,今天用 Python 把昨天写的 Bash 脚本重写了,遇到两个关于字符串的个小问题:

1、做个类似 diff 工具的效果,大致指出两个字符串的不同之处,这个可以用 difflib 模块解决。

!/usr/bin/python
import difflib

text1 = """http://www.vpsee.com is a website which is dedicated for 
building scalable websites on cloud platforms. The keywords are: Linux, Mac,
Cloud Computing, C, Python, MySQL, Nginx, VPS, Performance, Scalability,
Architecture, ..., etc. Have fun!"""
text1_lines = text1.splitlines()

text2 = """http://VPSee.com is a website which is dedicated for 
building scalable websites on cloud platforms. The keywords are: Linux, Mac,
Cloud Computing, C, Python, MySQL, Nginx, VPS, Performance, Scalability,
Programming, Optimisation, Architecture, ... , etc. Have fun !"""
text2_lines = text2.splitlines()

d = difflib.Differ()
diff = d.compare(text1_lines, text2_lines)
print '\n'.join(list(diff))

程序运行结果如下:

- http://www.vpsee.com is a website which is dedicated for 
?        ^^^^^^^

+ http://VPSee.com is a website which is dedicated for 
?        ^^^

  building scalable websites on cloud platforms. The keywords are: Linux, Mac,
  Cloud Computing, C, Python, MySQL, Nginx, VPS, Performance, Scalability,
- Architecture, ..., etc. Have fun!
+ Programming, Optimisation, Architecture, ... , etc. Have fun !

2、如何比较两个字符串,并且忽略大小写、空白字符、TAB 制表符、换行等。这个很容易解决,把字符串转换成小写后 split,然后以空格为分隔符 join 在一起。

继续阅读 »

用 Shell 脚本访问 MySQL 数据库

下午写了一个简单的 bash 脚本,用来测试程序,输入一个测试用例文件,输出没有通过测试的用例和结果,然后把结果保存到数据库里。如何在 bash 脚本里直接访问数据库呢?既然在 shell 里可以直接用 mysql 命令操作数据库,那么在 shell script 里也应该可以通过调用 mysql 来操作数据库。比如用下面的 bash shell 脚本查询数据库:

Bash

#!/bin/bash

mysql -uvpsee -ppassword test << EOFMYSQL
select * from test_mark;
EOFMYSQL

如果需要复杂的数据库操作的话不建议用 shell 脚本,用 Perl/Python/PHP 操作数据库很方便,分别通过 Perl DBI/Python MySQLdb/PHP MySQL Module 接口来操作数据库。这里再给出这三种不同语言连接、查询数据库的简单例子(为了简单和减少篇幅删除一些不必要的代码):

Perl

#!/usr/bin/perl
use DBI;

$db = DBI->connect('dbi:mysql:test', 'vpsee', 'password');
$query = "select * from test_mark";
$cursor = $db->prepare($query);
$cursor->execute;
while (@row = $cursor->fetchrow_array) {
        print "@row\n";
}

Python


继续阅读 »

EmpireHosting:$7.99 128MB Xen VPS

empirehosting

Empire Hosting 好像和 Lowest Host Internet Services 是一家公司,两家公司网站一模一样,除了名字不同以外。VPSee 一般都离这种耍小聪明的公司远远的,VPS hosting 公司这么多,入门门槛又低,如果不老老实实做很容易就被淘汰掉。VPS 配置如下:

服务器在 US
HyperVM 控制面板
5GB 硬盘
128MB Ram,256MB Swap
100GB 带宽
7.99 美元

服务器硬件信息:

ALL VPS Servers are Dual Xeon Or Dual Core Xeon Intel processors configured with state of the art 3 Ware Raid 10 Technology. Three Tier 1 providers, with an emphasis on international peering. InterNAP-provided bandwidth (linking the datacenter to the Internet via UUNET, ATT, Sprint, Verio, PsiNET, GTE/BBN, Qwest, Intermedia, and Level 3).

云计算可以用来替代高性能计算吗?

周末看了两篇有趣的论文,关于云计算的,云计算被称为 “scale by credit card” 的技术,看看 credit card 足够多的话能不能用来替代高性能计算(HPC),能不能替代那些超级计算机和集群:)。一篇是:Benchmarking Amazon EC2 for high-performance scientific computing;另一篇是:Can Cloud Computing Reach The TOP500?

云计算大致可以分为以下三种,目前关于云计算做 HPC 的探讨主要集中在 IaaS,Amazon EC2/S3 是 IaaS 的典型代表,也是目前最好的 IaaS 服务商:

1、Infrastructure-as-a-Service(IaaS)
2、Platform-as-a-Service(PaaS)
3、Software-as-a-Service(SaaS)

第一篇文章作者使用 NAS Parallel Benchmarks 比较了云计算的 Amazon EC2 Cluster 和传统 HPC 的 NCSA Cluster,为了测试两者硬件配置基本相同:

Amazon EC2 Cluster NCSA Cluster
7 GB memory, 4 CPU cores per processor (2.33-GHz Xeon), 8 CPU per node, 64 bits, 1690 GB storage 8 GB memory, 4 CPU cores per processor (2.33-GHz Xeon), 8 CPU per node, 64 bits, 73 GB storage
High I/O performance (specific
interconnect technology unknown)
Infiniband switch

测试结果一点也不惊讶,显然专门的 HPC 集群要快一些。在计算方面,即使在单个 node 上,EC2 也要慢7-21%,如果在 32 CPUs 上则要慢40-1000%,而且 node 之间还没有通信,算上通信会慢更多;在网络性能和延迟方面,EC2 没办法和专门为 HPC 打造的 Infinband switch 比。

第二篇文章得到类似的结果并且认为,如果云计算厂商有意进入 HPC 市场的话,并且能在内存、网络延迟、价格方面有所改进的话,对于 HPC 来说云计算还是很有吸引力的。两篇文章都得出类似的结论,虽然云计算在 web services 领域如火如荼,但是在 HPC 领域还没有准备好。用 Cloud Computing 进行计算的花费随着计算复杂度的增加而指数增加,这一点和 HPC 是一样的,并不能带来特别的好处。

Amazon EC2 远远没有达到 HPC 的性能,目前替代 HPC 还太早。我们知道一台超级计算机的价格太高,而且资源稀缺,不是买一个放在那里就完了,电源、机房、设备、人力导致总体成本更高。一般高校、研究机构都养不起超级计算机。个人认为云计算在 HPC 领域还是可以有所作为的,对与要求不高的 HPC 云计算可以按需付费使用,不必自己养一台庞然大物,养超级计算机每年的电费可能都超过了付给云计算的服务费。虽然目前云计算对于商业 HPC 的应用还不成熟,但足够用来运行一个小计算机集群,供小规模的 HPC 应用。或者云计算可以作为已有的超级计算机集群的扩展,某个高峰时期现有集群不够用时临时扩展到云计算应急一下。云计算还有一个显而易见的好处就是马上就可以获得,付费马上就可以使用,不必等待超级计算机预算、决策、购买、安装、调试漫长的等待过程,如果对于性能不是很在意,不关心计算速度有多快,云计算是个不错的替代选择。