Tuesday, January 16, 2007

虚拟 Linux

虚拟 Linux:


虚拟 Linux
虚拟化方法、架构和实现概述

M. Tim Jones (mtj@mtjones.com), 顾问工程师, Emulex
2007 年 1 月 15 日
虚拟化的含义丰富,应用广泛。目前虚拟化技术主要关注于服务器虚拟化,即在一个宿主计算机上提供多个独立操作系统。本文将探索虚拟化背后的思想,然后讨论实现虚拟化的一些技术。我们还将了解现有的其他一些虚拟化技术,例如 Linux 上操作系统的虚拟化。
进行虚拟化 就是要将某种形式的东西以另外一种形式呈现出来。对计算机进行虚拟化就是要将计算机以多台计算机或一台完全不同的计算机的形式呈现出来。
虚拟化也可以将多台计算机组合成一台计算机的形式呈现出来。这通常称为服务器聚合或网格计算。
下面让我们首先来看一下虚拟化的起源。
虚拟化的历史
虚拟化并不是什么新主题;实际上,它的存在已经超过 40 年了。虚拟化技术最早的一些用法包括 IBM® 7044、麻省理工学院(MIT)在 IBM 704 上开发的 CTSS(Compatible Time Sharing System)以及曼彻斯特大学的 Atlas 项目(世界上最早的超级计算机之一),这些都是请求页面调度和监管进程调用的先驱。
硬件虚拟化
IBM 早在 20 世纪 60 年代开发 System/360™ Model 67 大型机时就认识到了虚拟化的重要性。Model 67 通过 VMM(Virtual Machine Monitor)对所有的硬件接口都进行了虚拟化。在早期计算中,操作系统被称为 supervisor。能够在其他操作系统上运行的操作系统被称为 hypervisor(这个术语是在 20 世纪 70 年代出现的)。
VMM 可以直接在底层硬件上运行,允许运行多个虚拟机(VM)。每个 VM 都可以运行一个自己私有操作系统的实例 —— 在早些时候,这称为 CMS(或 Conversational Monitor System)。之后 VM 继续发展,现在您可以在 System z9™ 大型机上发现 VM。这提供了很好的向后兼容性,甚至是对 System/360 产品线的兼容性。
处理器虚拟化
虚拟化早期的另外一种用法(在本例中是对处理器的仿真)是 P-code(或伪码)机。P-code 是一种机器语言,运行于虚拟机而不是实际硬件。P-code 早在 20 世纪 70 年代就已在加州大学圣地亚哥分校(UCSD)Pascal 系统上颇有名气了,它将 Pascal 程序编译成 P-code,然后在一个 P-code 虚拟机上运行。这就使 P-code 程序具有了高度的可移植性,而且,只要有可用的 P-code 虚拟机,P-code 程序就可以运行。
Java 虚拟机(JVM)Java™ 语言对自己的虚拟机沿用了这种 P-code 模型。这样只需要通过简单地移植 JVM 就可以将 Java 程序广泛地分布到无数的体系架构上。
20 世纪 60 年代对 BCPL(Basic Combined Programming Language)的设计中也采用了相同的概念,C 语言即由 BCPL 发展而来。在这种用法中,编译器会将 BCPL 代码编译成称为 O-code 的中间机器代码。接下来的第二个步骤是将 O-code 编译成目标机器的原始语言。现代编译器所使用的这种模型为将编译器移植到新目标体系结构上提供了很大的灵活性(通过一种中间语言将前端和后端分隔开来)。
指令集虚拟化
虚拟化最新的发展称为指令集虚拟化,或者二进制转换。在这种模型中,虚拟指令集被转换成底层硬件的物理指令集,这个过程通常都是动态的。当代码执行时,就会对代码的某个段进行转换。如果出现分支情况,就会导入新代码集并进行转换。这使它与缓存操作非常类似,后者是将指令块从内存移动到本地快速缓存中执行。
这种模型最近在 Transmeta 设计的 Crusoe 中央处理单元(CPU)中得到了使用。二进制转换由 Code Morphing 的专利技术实现。类似的一个例子是完全虚拟化解决方案通过运行时代码扫描来查找和重定向特权指令(用来解决特定处理器指令集的一些问题)。
虚拟化和游戏一篇有关虚拟化的文章如果不提一下 MAME(Multiple-Arcade Machine Emulator),就不算完整。顾名思义,MAME 就是以前很多 arcade 游戏的一个完整的机器模拟器。除了对这些游戏中使用的处理器进行虚拟化之外,还可以对整个机器进行虚拟化,包括声音、图形处理硬件和控制单元。MAME 是一个非常不错的应用程序,不过要理解它们究竟实现了哪些功能,研读一下它的源代码会非常有帮助。
虚拟化的类型
实现虚拟化的方法不止一种。实际上,有几种方法都可以通过不同层次的抽象来实现相同的结果。本节将介绍 Linux 中常用的 3 种虚拟化方法,以及它们相应的优缺点。业界有时会使用不同的术语来描述相同的虚拟化方法。本文中使用的是最常用的术语,同时给出了其他术语以供参考。
硬件仿真
毫无疑问,最复杂的虚拟化实现技术就是硬件仿真。在这种方法中,可以在宿主系统上创建一个硬件 VM 来仿真所想要的硬件,如图 1 所示。图 1. 硬件仿真使用 VM 来模拟所需要的硬件
仿真和开发硬件仿真的应用之一是进行固件和硬件的协作开发。固件开发人员可以使用目标硬件 VM 在仿真环境中对自己的实际代码进行验证,而不需要等到硬件实际可用的时候。
正如您所能预见的一样,使用硬件仿真的主要问题是速度会非常慢。由于每条指令都必须在底层硬件上进行仿真,因此速度减慢 100 倍的情况也并不稀奇。若要实现高度保真的仿真,包括周期精度、所仿真的 CPU 管道以及缓存行为,实际速度差距甚至可能会达到 1000 倍之多。
硬件仿真也有自己的优点。例如,使用硬件仿真,您可以在一个 ARM 处理器主机上运行为 PowerPC® 设计的操作系统,而不需要任何修改。您甚至可以运行多个虚拟机,每个虚拟器仿真一个不同的处理器。
完全虚拟化
完全虚拟化(full virtualization),也称为原始虚拟化,是另外一种虚拟化方法。这种模型使用一个虚拟机,它在客户操作系统和原始硬件之间进行协调(参见图 2)。“协调”在这里是一个关键,因为 VMM 在客户操作系统和裸硬件之间提供协调。特定受保护的指令必须被捕获下来并在 hypervisor 中进行处理,因为这些底层硬件并不由操作系统所拥有,而是由操作系统通过 hypervisor 共享。图 2. 完全虚拟化使用 hypervisor 来共享底层硬件
老硬件上的 hypervisor有些比较老的硬件,例如 x86,会给完全虚拟化带来一些问题。例如,需要 VMM 处理的一些特定敏感指令并没有捕获。因此,hypervisor 必须要动态扫描并捕获这些特权模式代码来解决这一问题。
虽然完全虚拟化的速度比硬件仿真的速度要快,但是其性能要低于裸硬件,因为中间经过了 hypervisor 的协调过程。完全虚拟化的最大优点是操作系统无需任何修改就可以直接运行。惟一的限制是操作系统必须要支持底层硬件(例如 PowerPC)。
超虚拟化
超虚拟化(paravirtualization)是另外一种流行的虚拟化技术,它与完全虚拟化有一些类似。这种方法使用了一个 hypervisor 来实现对底层硬件的共享访问,还将与虚拟化有关的代码集成到了操作系统本身中(参见图 3)。这种方法不再需要重新编译或捕获特权指令,因为操作系统本身在虚拟化进程中会相互紧密协作。图 3. 超虚拟化与客户操作系统共享进程
正如前面介绍的一样,超虚拟化技术需要为 hypervisor 修改客户操作系统,这是它的一个缺点。但是超虚拟化提供了与未经虚拟化的系统相接近的性能。与完全虚拟化类似,超虚拟化技术可以同时支持多个不同的操作系统。
操作系统级的虚拟化
我们要介绍的最后一种技术是操作系统级的虚拟化,它使用的技术与前面所介绍的有所不同。这种技术在操作系统本身之上实现服务器的虚拟化。这种方法支持单个操作系统,并可以将独立的服务器相互简单地隔离开来(参见图 4)。图 4. 操作系统级虚拟化实现服务器的隔离
操作系统级的虚拟化要求对操作系统的内核进行一些修改,但是其优点是可以获得原始性能。
回页首
为什么虚拟化如此重要?
在了解目前 Linux 可以使用的虚拟化方法之前,让我们先来了解一下虚拟化的优点。
从商业角度来看,使用虚拟化技术有很多原因。大部分原因都可以归结于服务器的巩固(server consolidation)。简单来说,如果您可以对一个服务器上多个未经充分利用的系统进行虚拟化,由于服务器的数量少了,显然可以节省大量电力、空间、制冷和管理成本。由于很难确定服务器的利用情况,虚拟化技术支持称为动态迁移的技术。动态迁移(Live migration)允许操作系统及其应用程序迁移到新的服务器上,从而实现负载在可用硬件上的均衡。
虚拟化技术对于开发人员来说也非常重要。Linux 内核占据了一个单一的地址空间,这意味着内核或任何驱动程序的故障都会导致整个操作系统的崩溃。虚拟化技术意味着您可以运行多个操作系统,如果其中一个系统由于某个 bug 而崩溃了,那么 hypervisor 和其他操作系统都依然可以继续运行。这可以使内核的调试非常类似于用户空间应用程序的调试。
回页首
与 Linux 有关的虚拟化项目
表 1 给出了几个 Linux 系统上的虚拟化项目,并着重介绍了其中的开源解决方案。表 1. 与 Linux 有关的虚拟化项目
项目
类型
许可证
Bochs
仿真
LGPL
QEMU
仿真
LGPL/GPL
VMware
完全虚拟化
私有
z/VM
完全虚拟化
私有
Xen
超虚拟化
GPL
UML
超虚拟化
GPL
Linux-VServer
操作系统级虚拟化
GPL
OpenVZ
操作系统级虚拟化
GPL
有关其他解决方案的信息,请参看 参考资料 部分。
Bochs(仿真)
库级虚拟化尽管在正文中没有讨论,库级虚拟化是另外一种可以通过库对操作系统部分进行仿真的虚拟化技术。这种虚拟化技术的例子包括 Wine(Linux 上使用的一个部分 Win32 API)和 LxRun(Solaris 上使用的一个部分 Linux API)。
Bochs 是一个 x86 计算机仿真器,它在很多平台上(包括 x86、PowerPC、Alpha、SPARC 和 MIPS)都可以移植和运行。使 Bochs 更为有趣的是它不仅可以对处理器进行仿真,还可以对整个计算机进行仿真,包括计算机的外围设备,比如键盘、鼠标、视频图像硬件、网卡(NIC)等。
Bochs 可以配置作为一个老式的 Intel® 386 或其后继处理器使用,例如 486、Pentium、Pentium Pro 或 64 位处理器。它甚至还可以对一些可选的图形指令进行仿真,例如 MMX 和 3DNow。
使用 Bochs 仿真器,您可以运行任何 Linux 上的 Linux 发行版、Linux 上的 Microsoft® Windows® 95/98/NT/2000(以及各种应用程序),甚至 Linux 上的 BSD(Berkeley Software Distribution)操作系统(FreeBSD、OpenBSD 等)。
QEMU(仿真)
QEMU 是另外一个仿真器,它与 Bochs 非常类似,不过也有一些值得一提的区别。QEMU 支持两种操作模式。第一种是 Full System Emulation(完全系统仿真)模式。这种模式与 Bochs 非常类似,它可以对一个具有处理器和外围设备的完整个人计算机(PC)进行仿真。这种模式可以仿真很多处理器架构,例如 x86、x86_64、ARM、SPARC、PowerPC 和 MIPS,其动态转换的速度也比较理想。使用这种模式,您可以在 Linux、Solaris 和 FreeBSD 上仿真 Windows 操作系统(包括 XP)和 Linux。很多其他操作系统的组合也都可以得到支持(更多信息请参看 参考资料 部分)。
QEMU 还可以支持第二种模式,称为 User Mode Emulation(用户模式仿真)。这种模式只能宿主于 Linux,在这种模式下,可以启动不同体系结构的二进制文件。例如,在 x86 平台上运行的 Linux 系统上可以执行为 MIPS 体系架构编译的二进制文件。这种模式支持的其他体系结构还包括 ARM、SPARC 和 PowerPC,而且还有很多尚在开发之中。
VMware(完全虚拟化)
VMware 是完全虚拟化的一个商业解决方案。在客户操作系统和裸硬件之间有一个 hypervisor 作为抽象层使用。这个抽象层允许任何操作系统在硬件上运行,而不需要了解任何其他客户操作系统。
VMware 也会对可用的 I/O 硬件进行虚拟化,并将一些高性能的设备驱动程序加入到 hypervisor 中。
整个虚拟化后的环境都作为一个文件保存,这意味着整个系统(包括客户操作系统、VM 和虚拟硬件)可以很容易地快速迁移到新宿主机器上进行负载均衡。
z/VM (完全虚拟化)
尽管 IBM System z™ 是一个新品牌,不过它实际上已经有很长的一段历史,可以一直追溯到 20 世纪 60 年代。System/360 在 1965 年就可以支持使用虚拟机进行虚拟化。有趣的是,System z 保留了对之前的 System/360 产品线的向后兼容性。
z/VM® 是 System z 上的操作系统 hypervisor。其核心是 Control Program(CP),它为客户操作系统,包括 Linux,提供了物理资源的虚拟化(参见图 5)。这样,多个处理器和其他资源就可以在多个客户操作系统上被虚拟化。图 5. 使用 z/VM 的操作系统级虚拟化
z/VM 也可以为想要相互通信的客户操作系统仿真一个客户局域网(LAN)。仿真完全是在 hypervisor 中进行的,因此相当安全。
Xen(超虚拟化)
Xen 是一个来自于 XenSource 的操作系统级超虚拟化的免费开源解决方案。回想一下在超虚拟化中,hypervisor 和操作系统会共同协作,虽然操作系统需要进行一些更改,但却可以带来接近于原始系统的性能。
就像 Xen 需要进行协作(对客户操作系统进行修改)一样,只有那些修补过的操作系统才可以通过 Xen 进行虚拟化。Linux 本身就是开源的,所以从 Linux 角度来看,这是一个很合理的折衷,因为最终可以获得比完全虚拟化更好的性能。但是从广泛支持的角度来看(例如对其他非开源操作系统的支持),这显然是一个缺点。
Windows 可以在 Xen 上作为一个客户操作系统运行,但是它只能在运行 Intel Vanderpool 或 AMD Pacifica 的系统上使用。支持 Xen 的其他操作系统包括 Minix、Plan 9、NetBSD、FreeBSD 和 OpenSolaris。
User-mode Linux(超虚拟化)
User-mode Linux(UML)允许 Linux 操作系统在其他操作系统的用户空间中运行。每个客户 Linux 操作系统都存在于宿主 Linux 操作系统中的一个进程中(参见图 6)。这就允许 Linux 内核(使用自己的相关用户空间)在单个 Linux 内核中运行。图 6. User-mode Linux 中的 Linux
在 2.6 版本的 Linux 内核中,UML 驻留于主内核树内,但它必须提前启用,然后再重新编译才能使用。这些变化除了常见的虚拟化功能之外,还可以提供设备的虚拟化。这样一来,客户操作系统就可以共享可用的物理设备,例如块设备(比如软盘、CD-ROM 和文件系统)、控制台、NIC 设备、声音硬件等。
注意由于客户内核是在应用程序空间中运行的,因此它们必须为这种用法而被特殊编译(不过它们可以是不同的内核版本)。这样就产生了主机内核(硬件上的内核)和客户内核(在主机内核的用户空间中运行)。这些内核甚至可以是嵌套的,这样就允许一个客户内核在另外一个运行于主机内核的客户内核上运行。
Linux-VServer(操作系统级虚拟化)
Linux-VServer 是一个操作系统级虚拟化解决方案。Linux-VServer 对 Linux 内核进行虚拟化,这样多个用户空间环境 —— 又称为 Virtual Private Server(VPS) —— 就可以单独运行,而不需要互相了解。Linux-VServer 通过修改 Linux 内核实现用户空间的隔离。
要将各个用户空间与其他用户空间隔离开来,就需要从上下文的概念入手。上下文 是给定 VPS 进程使用的一个容器,这样通过诸如 ps 之类的工具就可以了解 VPS 的进程。内核为最初的引导定义了一个缺省的上下文。另外管理端还能查看所有的上下文(所有的执行进程)。正如您可能猜到的那样,内核和内部数据结构也需要进行修改来支持这种虚拟化方法。
Linux-VServer 还使用了一种 chroot 格式来为每个 VPS 隔离 root 目录。虽然 chroot 允许指定新 root 目录,但还是需要其他一些功能(称为 Chroot-Barrier)来限制 VPS 脱离其隔离的 root 目录回到上级目录。给定一个隔离的 root 目录之后,每个 VPS 就可以拥有自己的用户列表和 root 密码。
2.4 和 2.6 版本的 Linux 内核支持 Linux-VServer,它可以运行于很多平台之上,包括 x86、x86-64、SPARC、MIPS、ARM 和 PowerPC。
OpenVZ(操作系统级虚拟化)
OpenVZ 是另外一个操作系统级的虚拟化解决方案,它与 Linux-VServer 类似,不过也有一些有趣的区别。OpenVZ 是一个支持虚拟化的内核(修改过的),可以支持用户空间隔离、VPS 和一组用户管理工具。例如,您可以简单地从命令行创建一个新的 VPS:清单 1. 从命令行创建 VPS
$ vzctl create 42 --ostemplate fedora-core-4
Creating VPS private area
VPS private area was created
$ vzctl start 42
Starting VPS ...
VPS is mounted
另外还可以使用 vzlist 命令显示目前创建的 VPS,该命令与标准 Linux ps 命令类似。
为了对进程进行调度,OpenVZ 还包括了两级 CPU 调度器。首先,调度器确定哪个 VPS 应该获得 CPU。在这个步骤完成之后,第二级调度器会根据给定的标准 Linux 优先级挑选进程来执行。
OpenVZ 还包括了所谓的 beancounters。beancounter 包括很多参数,这些参数为给定的 VPS 定义了资源分配。这为 VPS 提供了一定层次上的控制,定义了有多少内存可用,有多少进程间通信(IPC)对象可用等。
OpenVZ 的一个特性是检查点功能和将 VPS 从一个物理服务器迁移到其他物理服务器上的能力。检查点 意味着正在运行的 VPS 的状态被冻结并存储到一个文件中。然后可以将这个文件迁移到一个新服务器上并加以还原以使 VPS 恢复运行。
OpenVZ 支持很多硬件体系结构,包括 x86、x86-64 和 PowerPC。
回页首
对完全虚拟化和超虚拟化的硬件支持
回想一下 IA-32(x86)体系结构在进行虚拟化时会产生的一些问题。特定的特权模式指令无法捕获,基于所使用的模式还可能返回不同的结果。例如,x86 STR 指令可以检索安全状态,但是所返回的值要取决于请求者特定的特权级别。在尝试在不同的层次对不同的操作系统进行虚拟化时,这会出现问题。例如,x86 支持 4 环保护,其中级别 0 (最高特权)通常运行操作系统,级别 1 和 2 支持操作系统服务,级别 3(最低级别)支持应用程序。不过硬件供应商已经认识到了这种缺陷(以及其他一些问题),并且已经开发了一些支持并加速虚拟化的新设计。
Intel 正在开发新虚拟化技术,能在 x86(VT-x)和 Itanium®(VT-i)体系架构上支持 hypervisor。VT-x 支持两种格式的操作,一种用于 VMM(root),另外一种用于客户操作系统(非 root)。root 格式完全是特权级的,而非 root 格式是非特权级的(即使对环 0 来说也是如此)。这种体系架构支持定义指令来使 VM(客户操作系统)退出到 VMM 和保存处理器状态。此外还添加了许多其他的功能,请参看 参考资料 部分。
AMD 也开发了硬件辅助虚拟化技术,称为 Pacifica。除了其他一些特性之外,Pacifica 还为在特殊指令执行时保存的客户操作系统维护了一个控制块。VMRUN 指令允许虚拟机(及其相关的客户操作系统)一直运行,直到 VMM 重新获得控制权为止(这也是可配置的)。这种可配置能力允许 CMM 为每个客户操作系统定制特权指令。Pacifica 还可以使用宿主和客户内存管理单元(MMU)表来进行地址转换。
这些新技术也可以应用到此处讨论的很多其他虚拟化技术中,包括 Xen、VMware、User-mode Linux 等。
回页首
Linux KVM(内核虚拟机)
Linux 传出的最新消息是将 KVM 合并到 Linux 内核中(2.6.20)。KVM 是一种完全虚拟化解决方案,它有一个方面非常独特:它将 Linux 内核转换为一个使用内核模块的 hypervisor。这个模块允许使用其他客户操作系统,然后在宿主 Linux 内核的用户空间中运行(参见图 7)。内核中的 KVM 通过 /dev/kvm 字符设备来公开虚拟化后的硬件。客户操作系统使用为 PC 硬件仿真修改过的 QEMU 进程与 KVM 模块接口。图 7. 使用内核虚拟机(KVM)的虚拟化
KVM 模块向内核中引入了一个新的执行模块。普通内核支持内核 模式和用户 模式,而 KVM 则引入了一种客户 模式。客户模式用来执行所有非 I/O 客户代码,而普通用户模式支持客户 I/O。
KVM 的引入是 Linux 的一个有趣革新,因为它代表了作为主流 Linux 内核一部分的第一个虚拟化技术。它已经存在于 2.6.20 树中,不过也可以作为 2.6.19 内核的一个内核模块使用。当在支持虚拟化的硬件上运行时,KVM 支持 Linux(32 位和 64 位)和 Windows(32 位)客户机。有关 KVM 的更多信息,请参看 参考资料 部分。
回页首
结束语
分享这篇文章......


将本文提交到 Digg


发布到 del.icio.us

Monday, January 15, 2007

使用 AppFuse 的七个理由

使用 AppFuse 的七个理由


开始学习在 Java™ 平台上使用诸如 Spring、Hibernate 或 MySQL 之类的开放源码工具时可能非常困难。再加上 Ant 或 Maven,以及与 DWR 一起的小 Ajax,还有 Web 框架 —— 即 JSF,我们必须睁大眼睛盯着如何配置应用程序。AppFuse 减少了集成开放源码项目的痛苦。它可以把测试变成一等公民,让我们可以从数据库表生成整个 UI,并使用 XFire 来支持 Web 服务。另外,AppFuse 的社区也非常健全,这是不同 Web 框架用户可以一起融洽相处的地方之一。
AppFuse 是一个开放源码的项目和应用程序,它使用了在 Java 平台上构建的开放源码工具来帮助我们快速而高效地开发 Web 应用程序。我最初开发它是为了减少在为客户构建新 Web 应用程序时所花费的那些不必要的时间。从核心上来说,AppFuse 是一个项目骨架,类似于通过向导创建新 Web 项目时 IDE 所创建的东西。当我们使用 AppFuse 创建一个项目时,它会提示我们将使用开放源码框架,然后才创建项目。它使用 Ant 来驱动测试、代码生成、编译和部署。它提供了目录和包结构,以及开发基于 Java 语言的 Web 应用程序所需要的库。
与大部分 “new project” 向导不同,AppFuse 创建的项目从最开始就包含很多类和文件。这些文件用来实现特性,不过它们同时也会在您开发应用程序时被用作示例。通过使用 AppFuse 启动新项目,我们通常可以减少一到两周的开发时间。我们不用担心如何将开放源码框架配置在一起,因为这都已经完成了。我们的项目都已提前配置来与数据库进行交互,它会部署到应用服务器上,并对用户进行认证。我们不必实现安全特性,因为这都早已集成了。
当我最初开发 AppFuse 时,它只支持 Struts 和 Hibernate。经过几年的努力,我发现了比 Struts 更好的 Web 框架,因此我还添加了为这些 Web 框架使用的选项。现在,AppFuse 可以支持 Hibernate 或 iBATIS 作为持久性框架。对于 Web 框架来说,我们可以使用 JavaServer Faces(JSF)、Spring MVC、Struts、Tapestry 或 WebWork。
AppFuse 提供了很多应用程序需要的一些特性,包括:
认证和授权
用户管理
Remember Me(这会保存您的登录信息,这样就不用每次都再进行登录了)
密码提醒
登记和注册
SSL 转换
E-mail
URL 重写
皮肤
页面修饰
模板化布局
文件上载
这种 “开箱即用” 的功能是 AppFuse 与其他 CRUD 代 框架的区别之一(CRUD 取自创建、检索、更新 和删除 几个操作的英文首字母),包括 Ruby on Rails、Trails 和 Grails。上面提到的这些框架,以及 AppFuse,都让我们可以从数据库表或现有的模型对象中生成主页/细节页。
图 1 阐述了一个典型 AppFuse 应用程序的概念设计:

hacks.oreilly.com -- O'Reilly Hacks Series

hacks.oreilly.com -- O'Reilly Hacks Series:


Featured Hacks Book
Palm and Treo Hacks -- Written for both beginning and experienced Palm users, this book is full of practical, ingenious tips and tricks you can apply immediately. A few minutes spent reading hacks in this book will save you hours of research. Whether you're looking to master the built-in applications or you want to trick out your Palm to its fullest extent, this book will show you how.
All Hacks Books
Access Hacks Book & Ordering InfoRead it on SafariCommentary and CodeSample HacksReader Reviews

Ajax Hacks Book & Ordering InfoSample HacksReader Reviews

Amazon Hacks Book & Ordering InfoCommentary and CodeSample HacksReader Reviews

Astronomy Hacks Book & Ordering InfoCommentary and CodeSample HacksReader Reviews

Baseball Hacks Book & Ordering InfoRead it on SafariSample HacksReader Reviews

BlackBerry Hacks Book & Ordering InfoCommentary and CodeSample HacksReader Reviews

BSD Hacks Book & Ordering InfoCommentary and CodeSample HacksReader Reviews

Car PC Hacks Book & Ordering InfoCommentary and CodeSample HacksReader Reviews

Digital Photography Hacks Book & Ordering InfoRead it on SafariCommentary and CodeSample HacksReader Reviews

Digital Video Hacks Book & Ordering InfoCommentary and CodeSample HacksReader Reviews

eBay Hacks, Second Edition Book & Ordering InfoCommentary and CodeSample HacksReader Reviews

Excel Hacks Book & Ordering InfoCommentary and CodeSample HacksReader Reviews

Firefox Hacks Book & Ordering InfoRead it on SafariCommentary and CodeSample HacksReader Reviews

Flash Hacks Book & Ordering InfoRead it on SafariCommentary and CodeSample HacksReader Reviews

Flickr Hacks Book & Ordering InfoRead it on SafariSample HacksReader Reviews

Gaming Hacks Book & Ordering InfoRead it on SafariCommentary and CodeSample HacksReader Reviews

Google Hacks, Third Edition Book & Ordering InfoRead it on SafariSample HacksReader Reviews

Google Maps Hacks Book & Ordering InfoRead it on SafariSample HacksReader Reviews

Greasemonkey Hacks Book & Ordering InfoRead it on SafariCommentary and CodeSample HacksReader Reviews

Halo 2 Hacks Book & Ordering InfoCommentary and CodeSample HacksReader Reviews

Home Theater Hacks Book & Ordering InfoCommentary and CodeSample HacksReader Reviews

iPod and iTunes Hacks Book & Ordering InfoRead it on SafariCommentary and CodeSample HacksReader Reviews

IRC Hacks Book & Ordering InfoCommentary and CodeSample HacksReader Reviews

Knoppix Hacks Book & Ordering InfoRead it on SafariCommentary and CodeSample HacksReader Reviews

Linux Desktop Hacks Book & Ordering InfoRead it on SafariCommentary and CodeSample HacksReader Reviews

Linux Multimedia Hacks Book & Ordering InfoRead it on SafariCommentary and CodeSample HacksReader Reviews

Linux Server Hacks Book & Ordering InfoCommentary and CodeSample HacksReader Reviews

Linux Server Hacks, Volume Two Book & Ordering InfoSample HacksReader Reviews

Mac OS X Panther Hacks Book & Ordering InfoRead it on SafariCommentary and CodeSample HacksReader Reviews

Mapping Hacks Book & Ordering InfoSample HacksReader Reviews

Mind Hacks Book & Ordering InfoCommentary and CodeSample HacksReader Reviews

Mind Performance Hacks Book & Ordering InfoSample HacksReader Reviews

Network Security Hacks, Second Edition -- New! Book & Ordering InfoRead it on SafariReader Reviews

Nokia Smartphone Hacks Book & Ordering InfoRead it on SafariCommentary and CodeSample HacksReader Reviews

Online Investing Hacks Book & Ordering InfoRead it on SafariCommentary and CodeSample HacksReader Reviews

Palm and Treo Hacks Book & Ordering InfoCommentary and CodeSample HacksReader Reviews

PayPal Hacks Book & Ordering InfoCommentary and CodeSample HacksReader Reviews

PC Hacks Book & Ordering InfoRead it on SafariCommentary and CodeSample HacksReader Reviews

PDF Hacks Book & Ordering InfoCommentary and CodeSample HacksReader Reviews

Perl Hacks Book & Ordering InfoRead it on SafariReader Reviews

PHP Hacks Book & Ordering InfoSample HacksReader Reviews

Podcasting Hacks Book & Ordering InfoRead it on SafariCommentary and CodeSample HacksReader Reviews

PSP Hacks Book & Ordering InfoRead it on SafariSample HacksReader Reviews

Retro Gaming Hacks Book & Ordering InfoCommentary and CodeSample HacksReader Reviews

Skype Hacks Book & Ordering InfoSample HacksReader Reviews

Smart Home Hacks Book & Ordering InfoCommentary and CodeSample HacksReader Reviews

Spidering Hacks Book & Ordering InfoCommentary and CodeSample HacksReader Reviews

SQL Hacks -- New! Book & Ordering InfoRead it on SafariSample ChapterReader Reviews

Statistics Hacks Book & Ordering InfoSample HacksReader Reviews

Swing Hacks Book & Ordering InfoCommentary and CodeSample HacksReader Reviews

TiVo Hacks Book & Ordering InfoCommentary and CodeSample HacksReader Reviews

Ubuntu Hacks Book & Ordering InfoSample HacksReader Reviews

Visual Studio Hacks Book & Ordering InfoRead it on SafariCommentary and CodeSample HacksReader Reviews

VoIP Hacks Book & Ordering InfoSample HacksReader Reviews

Web Site Measurement Hacks Book & Ordering InfoRead it on SafariCommentary and CodeSample HacksReader Reviews

Windows Server Hacks Book & Ordering InfoCommentary and CodeSample HacksReader Reviews

Windows XP Hacks, Second Edition Book & Ordering InfoCommentary and CodeSample HacksReader Reviews

Wireless Hacks, Second Edition Book & Ordering InfoRead it on SafariSample HacksReader Reviews

Word Hacks Book & Ordering InfoCommentary and CodeSample HacksReader Reviews

XML Hacks Book & Ordering InfoCommentary and CodeSample HacksReader Reviews

Yahoo! Hacks Book & Ordering InfoCommentary and CodeSample HacksReader Reviews
More Hacks books
Suggestions
Suggestion Box -- Submit ideas for a Hacks title or ideas about the series in general.
What People Are Saying
"Google Hacks" is an excellent industrial strength tips and tools book that both the novice newbie as well as the seasoned veteran will appreciate and keep next to their computer as a important search reference! Definitely appreciate and enjoy the no nonsense to the point style of information delivery offered by this book! The information, layout and format of the book all relate to obtaining information quickly and concisely in the same way that it shows one to receive the same from Google(tm). I consider "Google Hacks" to be a "must have" for anyone interested in searching the Internet using Google(tm) as their primary source! I will mention it in my national speeches and talk show interviews.-- Marcus P. Zillman, M.S., A.M.H.A. on Google Hacks
This is one of the best books I've laid my hands on. It is small but the quality and level of technical details in many tips are just too good. Most notable are the tips on backing up, ssh and various other hacks with perl, shell scripts, apache etc. Any system administrator with about 1-2 years of experience would definitely appreciate most of the cool hacks in this book. Great work by the author.-- Ravi on Linux Server Hacks

Friday, January 05, 2007

余世维-余世维管理者的EQ(一)

余世维-余世维管理者的EQ(一)
那么现在回到我们中国的教育,第一个问话就不一样。我看看就知道你们的小宝就很大了,你们家里的小宝,当初从幼儿园回来的时候是怎么问他的,我替你讲好了,我们都是中国人,我很清楚。小宝,老师今天有没有给你喝牛奶?小宝,老师今天有没有给你们吃饼干?二块还是三块?小宝今天有没有打你?都是这样问的。后来,到日本去,才知道日本不是这样问的。比如他叫次郎,今天你有没有帮同学做事?你帮老师做什么?你知道这两句问话的差别吗?你想想看你家小宝可能不喝牛奶,别的同学都喝吗?虽人都三块饼干,你们家小宝一块吗?这种话叫做废话!不用问。中国的爸爸妈妈把自己的心肝宝贝看作这么重要?其实,忘了他只是人中间的一部分。你们家的小宝到了幼儿园,其实与别的小宝是没有差别的,你不相信你到幼儿园去看,随便叫一声,小宝,一定是几十个都回头,因为几十个都是小宝。既然是这个样子,那你们那个宝跟别人那个宝贝难道又有什么不同呢?你应该说你们家那个宝帮别人作了些什么?我听到日本妈妈是这样问话,我大吃一惊,接着讲,你今天帮老师做了什么?你有没有帮同学做了什么?他们从小就重视EQ,难怪长大了就不一样?你记得我们中国办了一个中日儿童野外生活训练吗?就是这样造成的,日本小孩一出去,就是拿蜡烛、手电筒、火柴、绳子、帐篷,棉被,大家分工合作。我们中国的孩子一出去就是巧克力、饼干、可乐,吃完就坐在树底下。你没有注意到从小没有帮同学做事?就从这个问话就看得出来。
接下来你们家小宝到了小学,他回家你又问什么?我也替你讲好了。小宝,老师今天教了什么?我到了美国才知道,美国人不是这样问的,譬如如那个小孩叫乔治,老师今天教的东西你问了哪些?你问了老师一些什么?所以,美国的小孩一回家,妈妈就问你问了老师些什么?中国就问,老师教了什么?你知道中国祖先留下怎样的学问?就是统统注意底下的学,忘了底下的问。那么你想不想问我余先生,这个老师问了些什么跟EQ有什么关系?当然有关系,因为老师教你问,这叫互动,因为互动,人的EQ就起来了。我们的孩子像傻子一样坐在下面一直听,回家以后你也只是讲述老师讲了什么?不就暗示你只要像傻瓜一样就可以了吗?所以,中国的孩子在学校统统沉默,没有声音,不想讲话,你看中国人开会就知道,中国人一开会统统坐后面,让前面看谁去坐?不想参与。所以我在讨论问题的时候,我也不抱希望,我知道中国人通常没有声音,就是因为EQ不是太高,因为,就是从小教育的时候忘了这一点,当然不是你们的错,整个中国的社会要注意这个问题。