VPS虚拟化技术技术介绍
实现一台虚拟服务器(VPS)的主流的虚拟化技术分为3种:
1、全虚拟化:如vmware
2、半虚拟化:如xen
3、操作系统虚拟化:如Virtuozzo、OpenVZ,OpenVZ是开源的,而Virtuozzo是它的商业版。
其中1和2都是虚拟硬件模式,是真正意义上的虚拟化技术,通过虚拟一套完整的硬件,这一套完整的硬件具有超强的兼容能力,在这个虚拟层上可以运行各种不同的操作系统平台。半虚拟化需要修改宿主操作系统的内核,因此比全虚拟化有更好的性能。现在的趋势是vmware在发展半虚拟化的技术,而xen也在发展全虚拟化的技术。而操作系统虚拟化事实上不是真正意义上的虚拟化技术,但由于能够达到类似的功能,也把它归为其中。操作系统虚拟化技术要求虚拟机和宿主服务器上使用同一个操作系统,通过拦截虚拟机的操作来实现隔离,也就是说在windows下只能再虚拟windows,linux下只能再虚拟linux,虚拟安装一个的操作系统仅仅占用200M的空间,其他文件都是使用宿主机上的文件。
一般我们把1和2的虚拟化服务器称为vm,把3称为vz。
既然vm和vz都能达到我们的目的,那这两者技术上有什么区别呢?
vm:占用系统资源多,因此成本高,虚拟的操作系统不受主机操作系统的限制,稳定性、安全性高。
vz:占用系统资源少(你想想一个服务器上就算有100个vps也只有一套操作系统,一台服务器上的所有VPS都共享部分操作系统资源),成本低,只可以虚拟和主机的操作系统一样的操作系统,性能好。
一般相同配置的服务器上能能够建立30-40个vps那么只能建立10-20个vm,这也就是相同配置vm往往比vps价格贵一倍的原因。
对vps性能、稳定性影响最大的是内存,下面看看在内存方面两者的区别:
vm:支持虚拟内存(交换分区)
vz:不支持虚拟内存(交换分区),只要一超过就容易死机之类的。
所有的OpenVZ的VPS都不支持虚拟机自己定义虚拟内存,而基于Xen技术的主机可以。OpenVZ系统里面所有的虚拟机共享一个内核,而虚拟内存是需要内核支持的,所以OpenVZ里面的虚拟机都不能再定义虚拟机级别的虚拟内存。OpenVZ可以在母机操作系统里设置的虚拟内存,但在虚拟机看来就是真的内存,加上虚拟机共享资源可以动态调配,所以OpenVZ主机可以超卖。
有种说法:运行同样的程序,如长时间运行sql server,vm需要512M就能稳定了,而vz最少需要1024M才会稳定。为了弥补虚拟内存上的缺陷,vz引入了一个爆炸内存(Burst RAM)的概念,允许短时间内占用超出分配大小的内存。那么这些内存是哪里来的?显然是占用了同一台服务器上其他用户的空闲内存。并不是说vm在内存方面就一定比vz好,vm的虚拟内存理论上可以设的很大(局限于硬盘容量),但会增加对IO的读写,而vps毕竟不是独立的服务器,在这方面有所限制,因此也不宜设得过大。而且虚拟内存毕竟比不上Burst RAM那样真正的内存的速度。
再从商业运营的角度看看两者的区别:
vm:vm的解决方案使得每个vps独立性很好,分配了多少资源就是多少资源,不存在超卖现象。
vz:从前面的Burst RAM就可以看出vz的隔离性并不好,你可以占用同一台机器上其他vps的资源,这也就给服务商浑水摸鱼的机会,往往存在超卖现象,一台服务器本该40个vps,卖到了60、70个,性能(本该是vz的优点)、稳定性都很难保证。另外,安全性上也存在风险。
因此外在因素一样的情况下(配置,价格等),vm的肯定比vz的好。但一般vm要贵些。服务器以稳定性为主,所以大多数客户会用vm的vps,国外的一些数据中心也同样是这个技术,国内一般是vz!
VM主机和Vz的vps的对比总结
网络安全:
如果同台服务器的1台Vz被攻击,将直接影响其他的所有VPS无法运行。同等情况下只影响被攻击VM主机,其他同服务器的VM主机不受影响。
技术:
Vz是基于软件层的虚拟化技术,具体来说就是操作系统的虚拟化,VM是基于硬件层的虚拟化技术,VM主机使用vmware server搭建,是vmware workstation的服务器版,非常成熟,1998年VM服务器系列开始商用,被广泛应用于银行、航空领域。是非常稳定及性能卓越的虚拟服务器产品,Vz是2006年才进入市场的一个产品。
数量:
Vz可以在1台服务器上将一个操作系统虚拟上百个独立操作系统,VM只能虚拟大概3到4个独立操作系统
资源:
VM运行前会预先将硬件内存分配好,如果服务器上有4G内存绝不能分配出5G的内存出来,而VPS服务器自生拥有4G内存可以虚拟100G的内存,并分配给100个独立操作系统。
本质:
VM运行和真正的一台物理服务器是无区别的,因为获得了独立资源,Vz相当于一个人的几个面,是不独立的,从操作系统占用空间可以看出来,VM安装操作系统所需要的空间和在独立服务器上安装所需的体积相同,而Vz安装操作系统只要100来M,因此购买VM主机需要更大的容量。为此同网在标准容量基础上特别赠送5G磁盘空间。
性能差别:
如1台独立服务器只开3到4个vps主机和VM主机运行速度上差别不大。
成本差别:
Vz对运营商来说成本很低,因为1台服务器可以虚拟上百个VPS主机,VM对运营商来说相当于独立服务器出租。成本略低于独立服务器出租,需要有相当实力的运营商才能提供。
总结:选择vps的时候强烈建议购买vmware的虚拟化技术(硬件虚拟化技术),不要选择操作系统虚拟化技术的vps(这种技术属于共享同样的硬件资源,这些只是你的突发可达的理论峰值而已,还有进程数量的限制)
如何为被动模式 FTP 服务器配置 Windows 防火墙
由于 FTP 工作方式所致,在防火墙后的服务器上使用文件传输协议 (FTP) 服务会产生一系列的挑战。通过打开到 TCP 端口号 21 的“命令通道”连接,标准模式 FTP 客户端会启动到服务器的会话。客户端通过将 PORT 命令发送到服务器请求文件传输。然后,服务器会尝试启动返回到 TCP 端口号 20 上客户端的“数据通道”连接。客户端上运行的典型防火墙将来自服务器的此数据通道连接请求视为未经请求,并会丢弃数据包,从而导致文件传输失败。Windows Vista 和 Windows Server 2008 中的 高级安全 Windows 防火墙 支持有状态 FTP,该 FTP 允许将端口 20 上的入站连接请求与来自客户端的先前出站 PORT 命令相匹配。但是,如果您通过 SSL 使用 FTP 来加密和保护 FTP 通信,则防火墙不再能够检查来自服务器的入站连接请求,并且这些请求会被阻止。
为了避免此问题,FTP 还支持“被动”操作模式,客户端在该模式下启动数据通道连接。客户端未使用 PORT 命令,而是在命令通道上发送 PASV 命令。服务器使用 TCP 端口号进行响应,客户端应连接到该端口号来建立数据通道。默认情况下,服务器使用极短范围(1025 到 5000)内的可用端口。为了更好保护服务器的安全,您可以限制 FTP 服务使用的端口范围,然后创建一个防火墙规则:仅在那些允许的端口号上进行 FTP 通信。
PASV方式设置:
所有FTP服务器软件都支持PORT方式。大部分FTP服务器软件PORT方式和PASV方式都支持。Serv-U默认配置下两种方式都支持。如果要关闭PASV方式,请打开Serv-U,进入 Domains -> user.dns0755.net -> Settings -> Advanced -> 把“Allow passive mode data transfers”前面的钩去掉。
PASV方式与防火墙的问题:
如果安装了防火墙,需要在防火墙上打开一些端口给FTP的PASV模式使用,否则使用PASV模式无法登录。在 Serv-U的Local Server -> Settings -> Advanced -> PASV port range里,填入给PASV模式使用的本地端口范围,如60000-60020。如果使用Win 9x/Me,请把端口范围限制在5个以内,如果使用Win NT/2000/XP/2003,请把端口范围限制在20个以内。之后,再在防火墙里打开这个范围的端口就可以了。
Maven2的常用的运行命令
Maven2的运行命令是mvn,使用mvn -h可以获得相关的帮助信息。常用情形:
忽略单元测试:mvn package -Dmaven.test.skip=true
创建Maven项目:mvn archetype:create
编译源代码:mvn compile
编译测试代码:mvn test-compile
运行测试:mvn test
产生site:mvn site
打包:mvn package
在本地Repository中安装jar:mvn install
清除产生的项目:mvn clean
创建Eclipse项目:mvn eclipse:eclipse
导入Eclipse项目,新建Eclipse变量:
即可生成eclipse工程,然后再把工程导入到eclipse中,步骤如下:eclipse->import->General:Existing Projects into Workspace->包含该工程的目录,eclipse会自动搜寻到刚刚创建的eclipse工程。
导入工程后会发现eclipse报"找不到M2_REPO"的错误,其实这是个环境变量,就是指向你的本地库。在linux和windows下默认的都是在$HOME/.m2/repository。
把该变量加入eclipse,方法为:
Window -> Preferences -> Java -> Build Path -> Classpath Variables -> New,Name输入M2_REPO,Path输入/home/名用户/.m2/repository
生成项目:
建一个 JAVA 项目 : mvn archetype:create -DgroupId=com.demo -DartifactId=App
建一个 web 项目 : mvn archetype:create -DgroupId=com.demo -DartifactId=web-app -DarchetypeArtifactId=maven-archetype-webapp