<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_云端漫步</title><subtitle type="text">“云”是一种理念，一种共享的理念，一种协作的理念</subtitle><id>http://feed.cnblogs.com/blog/u/8067/rss</id><updated>2012-06-01T13:03:24Z</updated><author><name>Jonson Li</name><uri>http://www.cnblogs.com/licheng/</uri></author><generator>feed.cnblogs.com</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/licheng/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/8067/rss"/><entry><id>http://www.cnblogs.com/licheng/archive/2012/06/01/2529850.html</id><title type="text">[OpenStack] OpenStack ESSEX 全新手动安装，动手，实践，出真知！</title><summary type="text">OpenStack最新的版本 ESSEX出来了，需要为用户讲清楚，如何使用此系统所以要做实验，要认真分析此系统了，现在对这官方文档一步一步的做下来，实践出真知，肯定会有收获的。先搞定手动安装，然后再使用Dell Crowbar自动化工具来进行批量安装部署，先手动了解原理，再自动提高生产效率，然后深入了解其工作原理及源代码，最终达到深刻理解的目标。开始，行动！！！</summary><published>2012-06-01T01:44:00Z</published><updated>2012-06-01T01:44:00Z</updated><author><name>Jonson Li</name><uri>http://www.cnblogs.com/licheng/</uri></author><link rel="alternate" href="http://www.cnblogs.com/licheng/archive/2012/06/01/2529850.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/licheng/archive/2012/06/01/2529850.html"/><content type="html">&lt;p&gt;OpenStack最新的版本 ESSEX出来了，需要为用户讲清楚，如何使用此系统所以要做实验，要认真分析此系统了，现在对这官方文档一步一步的做下来，实践出真知，肯定会有收获的。&lt;/p&gt;&lt;p&gt;先搞定手动安装，然后再使用Dell Crowbar自动化工具来进行批量安装部署，先手动了解原理，再自动提高生产效率，然后深入了解其工作原理及源代码，最终达到深刻理解的目标。&lt;/p&gt;&lt;p&gt;开始，行动！！！&lt;/p&gt;&lt;p&gt;=========================================================&lt;/p&gt;&lt;p&gt;参考文档：（Ubuntu 12.04 最新的操作系统，最新的OpenStack Release版本，新鲜出炉啊，而且身份认证和UI也包含进来了，应该是最全的配置了）&lt;/p&gt;&lt;p&gt;OpenStack Starter Guide for Ubuntu 12.04 - Compute, Object Storage (all-in-one), Image, and Identity services plus Dashboard&lt;/p&gt;&lt;p&gt;&lt;a href="http://docs.openstack.org/essex/openstack-compute/starter/content/"&gt;http://docs.openstack.org/essex/openstack-compute/starter/content/&lt;/a&gt;&lt;/p&gt;&lt;p&gt;先看看环境介绍吧，由于使用Laptop来做实验系统最好资源最少最好，了解搭建步骤就好，达到学习目标就好，看看一台虚机能否搭建，最多不超过两台虚机。&lt;/p&gt;&lt;div class="titlepage"&gt;&lt;div&gt;&lt;div&gt;&lt;h2 class="title" style="clear: both;"&gt;&lt;a id="Introduction-d1e390"&gt;&amp;nbsp;&lt;/a&gt;Introduction&lt;/strong&gt;&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;The following section describes how to set up a minimal cloud infrastructure based on OpenStack using 3 machines. These machines are referred to in this and subsequent chapters as &lt;strong&gt;Server1, Server2 and Client1&lt;/strong&gt;. Server1 runs all the components of Nova, Glance, Swift, Keystone and Horizon (OpenStack Dashboard). Server2 runs only nova-compute. Since OpenStack components follow a shared-nothing policy, each component or any group of components can be installed on any server.&lt;/p&gt;&lt;p&gt;Client1 is not a required component. In our sample setup, it is used for bundling images, as a client to the web interface and to run OpenStack commands to manage the infrastructure. Having this client ensures that you do not need to meddle with the servers for tasks such as bundling. Also, bundling of desktop Systems including Windows will require a GUI and it is better to have a dedicated machine for this purpose. We would recommend this machine to be VT-Enabled so that KVM can be run which allows launching of VMs during image creation for bundling.&lt;/p&gt;&lt;div id="toolbar-left"&gt;&lt;p&gt;演示环境需要3台机器：Server1, Server2, Client1，Server1是大总管上面什么都装，Server2上面只装nova-compute，Client1不是必需的，用于创建Images，访问web interface，运行OpenStack命令来管理基础架构，OK！go on...&lt;/p&gt;&lt;table id="d6e287" rules="all"&gt;&lt;caption&gt;Table&amp;nbsp;2.1.&amp;nbsp;Configuration&lt;/caption&gt;&lt;thead&gt;&lt;tr&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;td&gt;Server1&lt;/td&gt;&lt;td&gt;Server2&lt;/td&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Functionality&lt;/td&gt;&lt;td&gt;All components of OpenStack including nova-compute&lt;/td&gt;&lt;td&gt;nova-compute&lt;/td&gt;&lt;td&gt;Client&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Network Interfaces&lt;/td&gt;&lt;td&gt;eth0 - Public N/W, eth1 - Private N/W&lt;/td&gt;&lt;td&gt;eth0 - Public N/W, eth1 - Private N/W&lt;/td&gt;&lt;td&gt;eth0 - Public N/W&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;IP addresses&lt;/td&gt;&lt;td&gt;eth0 - 10.10.10.2, eth1 - 192.168.3.1&lt;/td&gt;&lt;td&gt;eth0 - 10.10.10.3, eth1 - 192.168.3.2&lt;/td&gt;&lt;td&gt;eth0 - 10.10.10.4&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Hostname&lt;/td&gt;&lt;td&gt;server1.example.com&lt;/td&gt;&lt;td&gt;server2.example.com&lt;/td&gt;&lt;td&gt;client.example.com&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;DNS servers&lt;/td&gt;&lt;td&gt;10.10.8.3&lt;/td&gt;&lt;td&gt;10.10.8.3&lt;/td&gt;&lt;td&gt;10.10.8.3&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Gateway IP&lt;/td&gt;&lt;td&gt;10.10.10.1&lt;/td&gt;&lt;td&gt;10.10.10.1&lt;/td&gt;&lt;td&gt;10.10.10.1&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Server1&amp;nbsp;安装部署过程&lt;/strong&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Base OS -&amp;gt; Network Configuration -&amp;gt; NTP -&amp;gt; Databases -&amp;gt; Keystone -&amp;gt; Glance -&amp;gt; Nova -&amp;gt; Dashboard -&amp;gt; Swift&lt;/p&gt;&lt;p&gt;开始安装部署 Server1之前我们先要搞清楚Server1上要做哪些安装内容，先有个整体把握再各个击破，看了一下可以分为三个阶段：&lt;/p&gt;&lt;p&gt;1. 操作系统准备(BaseOS -&amp;gt; Network -&amp;gt; NTP)&lt;/p&gt;&lt;p&gt;2. 数据库准备(MySQL)&lt;/p&gt;&lt;p&gt;3. OpenStack组件安装（Keystone -&amp;gt; Glance -&amp;gt; Nova -&amp;gt; Dashboard -&amp;gt; Swift）&lt;/p&gt;&lt;p&gt;大体了解了，开工吧！&lt;/p&gt;&lt;p&gt;&lt;strong&gt;1. 操作系统准备(BaseOS -&amp;gt; Network -&amp;gt; NTP)&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;1.1 Base OS&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;安装&lt;span style="color: #ff0000;"&gt;Ubuntu server 12.04&lt;/span&gt;，没有的到这个地址下载吧或者找个离你最近的镜像地址下载吧（&lt;/p&gt;&lt;p&gt;&lt;a href="http://releases.ubuntu.com/12.04/ubuntu-12.04-server-amd64.iso"&gt;http://releases.ubuntu.com/12.04/ubuntu-12.04-server-amd64.iso&lt;/a&gt;），设置用户名'localadmin'，设置IP地址，只选择'Opessh-server'别的服务不选。&lt;/p&gt;&lt;p&gt;在Server1上面还要运行nova-volume，因此分区的时候手动分区为nova-volume留个分区，我觉得我用虚机新挂一块硬盘来搞定吧，手动分区嫌麻烦。&lt;/p&gt;&lt;p&gt;安装好系统之后，更新到最新，并且安装"bridge-utils"，搞明白了就，动手，行动！！！&lt;/p&gt;&lt;p&gt;几分钟之后系统安装好了，我用虚拟机来安装的系统，创建的双网卡环境来模拟内网（Host-Only）和公网（NAT），接下来要更新一下源了，咱们得找中国的源更新或者安装软件会快一些。&lt;/p&gt;&lt;p&gt;=============================&lt;/p&gt;&lt;p&gt;ubuntu 12.04更新源方法：&lt;/p&gt;&lt;p&gt;ubuntu 12.04的开发代号是Precise Pangolin，译为精确的穿山甲。&lt;br /&gt;&lt;br /&gt;1、首先备份Ubuntu 11.10源列表&lt;br /&gt;sudo cp /etc/apt/sources.list /etc/apt/sources.list.backup （备份下当前的源列表，有备无患嘛）&lt;/p&gt;&lt;p&gt;2、修改更新源&lt;br /&gt;sudo&amp;nbsp;vi /etc/apt/sources.list （打开Ubuntu 11.10源列表文件）&lt;/p&gt;&lt;p&gt;#网易 Ubuntu 11.10 源（速度很快）&lt;br /&gt;deb http://mirrors.163.com/ubuntu/ precise main universe restricted multiverse&lt;br /&gt;deb-src http://mirrors.163.com/ubuntu/ precise main universe restricted multiverse&lt;br /&gt;deb http://mirrors.163.com/ubuntu/ precise-security universe main multiverse restricted&lt;br /&gt;deb-src http://mirrors.163.com/ubuntu/ precise-security universe main multiverse restricted&lt;br /&gt;deb http://mirrors.163.com/ubuntu/ precise-updates universe main multiverse restricted&lt;br /&gt;deb http://mirrors.163.com/ubuntu/ precise-proposed universe main multiverse restricted&lt;br /&gt;deb-src http://mirrors.163.com/ubuntu/ precise-proposed universe main multiverse restricted&lt;br /&gt;deb http://mirrors.163.com/ubuntu/ precise-backports universe main multiverse restricted&lt;br /&gt;deb-src http://mirrors.163.com/ubuntu/ precise-backports universe main multiverse restricted&lt;br /&gt;deb-src http://mirrors.163.com/ubuntu/ precise-updates universe main multiverse restricted&lt;/p&gt;&lt;p&gt;3、通知ubuntu启用新的更新源 sudo apt-get update&lt;/p&gt;&lt;p&gt;4、进行系统更新 sudo apt-get upgrade&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Install 64 bit version of &lt;span style="color: #ff0000;"&gt;Ubuntu server 12.04&lt;/span&gt; keeping the following configurations in mind.&lt;/p&gt;&lt;div class="itemizedlist"&gt;&lt;ul class="itemizedlist" type="disc"&gt;&lt;li class="listitem"&gt;&lt;p&gt;Create the first user with the name &lt;span style="color: #ff0000;"&gt;'localadmin'&lt;/span&gt; .&lt;/p&gt;&lt;/li&gt;&lt;li class="listitem"&gt;&lt;p&gt;Installation lets you setup the IP address for the first interface i.e. eth0. &lt;span style="color: #ff0000;"&gt;Set the IP address details&lt;/span&gt;.&lt;/p&gt;&lt;/li&gt;&lt;li class="listitem"&gt;&lt;p&gt;During installation select only &lt;span style="color: #ff0000;"&gt;Openssh-server&lt;/span&gt; in the packages menu.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;p&gt;We will also be running &lt;span style="color: #ff0000;"&gt;nova-volume&lt;/span&gt; on this server and it is ideal to &lt;span style="color: #ff0000;"&gt;have a dedicated partition for the use of nova-volume&lt;/span&gt;. So, ensure that you choose manual partitioning scheme while installing Ubuntu Server and create a dedicated partition with adequate amount of space for this purpose. We have referred to this partition in the rest of the chapter as &lt;span style="color: #ff0000;"&gt;/dev/sda6&lt;/span&gt;. You can substitute the correct device name of this dedicated partition based on your local setup while following the instructions. &lt;span style="color: #ff0000;"&gt;Also ensure that the partition type is set as Linux LVM (8e) using fdisk either during install or immediately after installation is over&lt;/span&gt;. If you also plan to use a dedicated partition as Swift backend, create another partition for this purpose and follow the instructions in "Swift Installation" section below.&lt;/p&gt;&lt;p&gt;Update the machine using the following commands.&lt;/p&gt;sudo apt-get update&lt;br/&gt;sudo apt-get upgrade&lt;br/&gt;&lt;p&gt;Install bridge-utils:&lt;/p&gt;sudo apt-get install bridge-utils&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;================== Base OS 准备完毕 向下一步进发 ==========================&lt;/p&gt;&lt;p&gt;&lt;strong&gt;1. 操作系统准备(BaseOS -&amp;gt; Network -&amp;gt; NTP)&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;1.2 Network&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;由于要模拟外网和内网两个网络，而且都要静态地址，所以要编辑/etc/network/interfaces文件来设置静态地址和配置Gateway, DNS等信息。&lt;/p&gt;&lt;p&gt;为了配合OpenStack的部署，我也把VMware Workstation 网络配置进行了修改，将NAT的IP段设置为10.10.10.0, 255.255.255.0，将Host-Only的IP段设置为192.168.3.0, 255.255.255.0，这样模拟的就更加逼真了，行动！&lt;/p&gt;&lt;p&gt;Edit the /etc/network/interfaces file so as to looks like this:&lt;/p&gt;auto lo&lt;br/&gt;iface lo inet loopback&lt;br/&gt;&lt;br/&gt;auto eth0&lt;br/&gt;iface eth0 inet static&lt;br/&gt;address 10.10.10.2&lt;br/&gt;netmask 255.255.255.0&lt;br/&gt;broadcast 10.10.10.255&lt;br/&gt;gateway 10.10.10.1&lt;br/&gt;dns-nameservers 10.10.8.3&lt;br/&gt;&lt;br/&gt;auto eth1&lt;br/&gt;iface eth1 inet static&lt;br/&gt;address 192.168.3.2&lt;br/&gt;netmask 255.255.255.0&lt;br/&gt;network 192.168.3.0&lt;br/&gt;broadcast 192.168.3.255&lt;br/&gt;&lt;p&gt;Restart the network now&lt;/p&gt;sudo /etc/init.d/networking restart&lt;br/&gt;&lt;p&gt;==================&amp;nbsp;Network 准备完毕 向下一步进发 ==========================&lt;/p&gt;&lt;p&gt;1. 操作系统准备(BaseOS -&amp;gt; Network -&amp;gt; NTP)&lt;/p&gt;&lt;p&gt;1.3 NTP 配置&lt;/p&gt;&lt;p&gt;Server1 将扮演NTP Server的角色，为大家提供NTP服务。sudo apt-get install&amp;nbsp;ntp 来安装ntp，/etc/ntp.conf 来进行配置。&amp;nbsp;&lt;/p&gt;&lt;p&gt;Install NTP package. This server shall act as the NTP server for the nodes. The time on all components of OpenStack will have to be in sync. We can run NTP server on server1 and have other servers/nodes sync to it.&lt;/p&gt;sudo apt-get install ntp&lt;p&gt;Open the file /etc/ntp.conf and add the following lines to make sure that the time on the server stays in sync with an external server. If the Internet connectivity is down, the NTP server uses its own hardware clock as the fallback.&lt;/p&gt;server ntp.ubuntu.com&lt;br/&gt;server 127.127.1.0&lt;br/&gt;fudge 127.127.1.0 stratum 10&lt;br/&gt;&lt;p&gt;Restart the NTP server&lt;/p&gt;sudo service ntp restart&lt;p&gt;Ensure that, IP addresses of the servers are resolvable by the DNS. If not, include the hostnames in /etc/hosts file.&lt;/p&gt;&lt;p&gt;==================&amp;nbsp;NTP 准备完毕 向下一步进发 ==========================&lt;/p&gt;&lt;p&gt;&lt;strong&gt;2. 数据库准备(MySQL)&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;MySQL数据库安装，设置数据库的密码: password，修改配置 /etc/mysql/my.cnf，搞定。&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;MySQL&lt;/p&gt;&lt;p&gt;Install mysql-server and python-mysqldb package&lt;/p&gt;sudo apt-get install mysql-server python-mysqldb&lt;br/&gt;&lt;p&gt;Create the root password for mysql. The password used in this guide is "mygreatsecret"&lt;/p&gt;&lt;p&gt;Change the bind address from 127.0.0.1 to 0.0.0.0 in /etc/mysql/my.cnf. It should be identical to this:&lt;/p&gt;bind-address = 0.0.0.0&lt;br/&gt;&lt;p&gt;Restart MySQL server to ensure that it starts listening on all interfaces.&lt;/p&gt;sudo restart mysql&lt;br/&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div class="section"&gt;&lt;div class="titlepage"&gt;&lt;div&gt;&lt;div&gt;&lt;h4 class="title"&gt;&lt;a id="Creating_Databases-d1e921"&gt;&amp;nbsp;&lt;/a&gt;Creating Databases&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;nova, glance, keystone 这三个组件都需要数据库的支持。&lt;/p&gt;&lt;p&gt;创建数据库：nova -&amp;gt; 创建数据库管理员：novadbadmin -&amp;gt; Grant all privileges -&amp;gt;&amp;nbsp;设置密码： 'password'&lt;/p&gt;&lt;p&gt;创建数据库：glance -&amp;gt; 创建数据库管理员：glancedbadmin -&amp;gt; Grant all privileges -&amp;gt;&amp;nbsp;设置密码： 'password'&lt;/p&gt;&lt;p&gt;创建数据库：keystone -&amp;gt; 创建数据库管理员：keystonedbadmin -&amp;gt; Grant all privileges -&amp;gt;&amp;nbsp;设置密码： 'password'&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;Create MySQL databases to be used with &lt;strong&gt;nova&lt;/strong&gt;, &lt;strong&gt;glance&lt;/strong&gt; and &lt;strong&gt;keystone&lt;/strong&gt;.&lt;/p&gt;&lt;p&gt;Create a database named nova.&lt;/p&gt;&lt;p&gt;sudo mysql -uroot -ppassword -e 'CREATE DATABASE nova;'&lt;/p&gt;&lt;p&gt;Create a user named novadbadmin.&lt;/p&gt;&lt;p&gt;sudo mysql -uroot -ppassword -e 'CREATE USER novadbadmin;'&lt;/p&gt;&lt;p&gt;Grant all privileges for novadbadmin on the database "nova".&lt;/p&gt;&lt;p&gt;sudo mysql -uroot -ppassword -e "GRANT ALL PRIVILEGES ON nova.* TO &lt;a href="mailto:'novadbadmin'@'%'"&gt;'novadbadmin'@'%'&lt;/a&gt;;"&lt;/p&gt;&lt;p&gt;Create a password for the user "novadbadmin".&lt;/p&gt;&lt;p&gt;sudo mysql -uroot -ppassword -e "SET PASSWORD FOR &lt;a href="mailto:'novadbadmin'@'%'"&gt;'novadbadmin'@'%'&lt;/a&gt; = PASSWORD('password');"&lt;/p&gt;&lt;p&gt;Create a database named glance.&lt;/p&gt;&lt;p&gt;sudo mysql -uroot -ppassword -e 'CREATE DATABASE glance;'&lt;/p&gt;&lt;p&gt;Create a user named glancedbadmin.&lt;/p&gt;&lt;p&gt;sudo mysql -uroot -ppassword -e 'CREATE USER glancedbadmin;'&lt;/p&gt;&lt;p&gt;Grant all privileges for glancedbadmin on the database "glance".&lt;/p&gt;&lt;p&gt;sudo mysql -uroot -ppassword -e "GRANT ALL PRIVILEGES ON glance.* TO &lt;a href="mailto:'glancedbadmin'@'%'"&gt;'glancedbadmin'@'%'&lt;/a&gt;;"&lt;/p&gt;&lt;p&gt;Create a password for the user "glancedbadmin".&lt;/p&gt;&lt;p&gt;sudo mysql -uroot -ppassword -e "SET PASSWORD FOR &lt;a href="mailto:'glancedbadmin'@'%'"&gt;'glancedbadmin'@'%'&lt;/a&gt; = PASSWORD('password');"&lt;/p&gt;&lt;p&gt;Create a database named keystone.&lt;/p&gt;&lt;p&gt;sudo mysql -uroot -ppassword -e 'CREATE DATABASE keystone;'&lt;/p&gt;&lt;p&gt;Create a user named keystonedbadmin.&lt;/p&gt;&lt;p&gt;sudo mysql -uroot -ppassword -e 'CREATE USER keystonedbadmin;'&lt;/p&gt;&lt;p&gt;Grant all privileges for keystonedbadmin on the database "keystone".&lt;/p&gt;&lt;p&gt;sudo mysql -uroot -ppassword -e "GRANT ALL PRIVILEGES ON keystone.* TO &lt;a href="mailto:'keystonedbadmin'@'%'"&gt;'keystonedbadmin'@'%'&lt;/a&gt;;"&lt;/p&gt;&lt;p&gt;Create a password for the user "keystonedbadmin".&lt;/p&gt;&lt;p&gt;sudo mysql -uroot -ppassword -e "SET PASSWORD FOR &lt;a href="mailto:'keystonedbadmin'@'%'"&gt;'keystonedbadmin'@'%'&lt;/a&gt; = PASSWORD('password');"&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;/div&gt;&lt;div class="section"&gt;&lt;div class="titlepage"&gt;&lt;div&gt;&lt;div&gt;&lt;h4 class="title"&gt;&lt;a id="Creating_Databases-d1e921"&gt;&amp;nbsp;&lt;/a&gt;==================&amp;nbsp;MySQL数据库&amp;nbsp;准备完毕 向下一步进发 ==========================&lt;/strong&gt;&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;3. OpenStack组件安装（Keystone -&amp;gt; Glance -&amp;gt; Nova -&amp;gt; Dashboard -&amp;gt; Swift）&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Keystone&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&amp;nbsp; 安装 keystone -&amp;gt; 配置 Keystone /etc/keystone/keystone.conf admin_token = admin, connection = -&amp;gt; Restart keystone -&amp;gt; keystone-manage db_sync -&amp;gt; Export 环境变量。&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Keystone is the identity service used by OpenStack. Install Keystone using the following command.&lt;/p&gt;sudo apt-get install keystone python-keystone python-keystoneclient&lt;br/&gt;&lt;p&gt;Open /etc/keystone/keystone.conf and change the line&lt;/p&gt;admin_token = ADMIN&lt;p&gt;so that it looks like the following:&lt;/p&gt;admin_token = admin&lt;p&gt;(We have used 'admin' as the token in this book.)&lt;/p&gt;&lt;p&gt;Since MySQL database is used to store keystone configuration, replace the following line in /etc/keystone/keystone.conf&lt;/p&gt;connection = sqlite:////var/lib/keystone/keystone.db&lt;p&gt;with&lt;/p&gt;connection = mysql://keystonedbadmin:keystonesecret@10.10.10.2/keystone&lt;p&gt;Restart Keystone:&lt;/p&gt;sudo service keystone restart&lt;p&gt;Run the following command to synchronise the database:&lt;/p&gt;sudo keystone-manage db_sync&lt;p&gt;Export environment variables which are required while working with OpenStack.&lt;/p&gt;export SERVICE_ENDPOINT="http://localhost:35357/v2.0"&lt;br/&gt;export SERVICE_TOKEN=admin&lt;br/&gt;&lt;p&gt;You can also add these variables to ~/.bashrc, so that you need not have to export them everytime.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Creating Tenants&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Create the tenants by executing the following commands. In this case, we are creating two tenants - admin and service.&lt;/p&gt;keystone tenant-create --name admin&lt;br/&gt;keystone tenant-create --name service&lt;br/&gt;&lt;h4 class="title"&gt;&lt;a&gt;Creating Users&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Create the users by executing the following commands. In this case, we are creating four users - admin, nova, glance and swift&lt;/p&gt;keystone user-create --name admin --pass admin --email admin@foobar.com &lt;br/&gt;keystone user-create --name nova --pass nova   --email nova@foobar.com&lt;br/&gt;keystone user-create --name glance --pass glance   --email glance@foobar.com&lt;br/&gt;keystone user-create --name swift --pass swift   --email swift@foobar.com&lt;br/&gt;&lt;h4 class="title"&gt;&lt;a&gt;Creating Roles&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Create the roles by executing the following commands. In this case, we are creating two roles - admin and Member.&lt;/p&gt;keystone role-create --name admin&lt;br/&gt;keystone role-create --name Member&lt;br/&gt;&lt;h4 class="title"&gt;&lt;a&gt;Listing Tenants, Users and Roles&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;The tenants, users and roles that have been created above can be listed by following commands:&lt;/p&gt;&lt;p&gt;List Tenants:&lt;/p&gt;keystone tenant-list&lt;br/&gt;+----------------------------------+--------------------+---------+&lt;br/&gt;|                id                |        name        | enabled |&lt;br/&gt;+----------------------------------+--------------------+---------+&lt;br/&gt;| 7f95ae9617cd496888bc412efdceabfd | admin              | True    |&lt;br/&gt;| c7970080576646c6959ee35970cf3199 | service            | True    |&lt;br/&gt;+----------------------------------+--------------------+---------+&lt;br/&gt;&lt;p&gt;List Users:&lt;/p&gt;keystone user-list&lt;br/&gt;+----------------------------------+---------+-------------------+--------+&lt;br/&gt;|                id                | enabled |       email       |  name  |&lt;br/&gt;+----------------------------------+---------+-------------------+--------+&lt;br/&gt;| 1b986cca67e242f38cd6aa4bdec587ca | True    | swift@foobar.com  | swift  |&lt;br/&gt;| 518b51ea133c4facadae42c328d6b77b | True    | glance@foobar.com | glance |&lt;br/&gt;| b3de3aeec2544f0f90b9cbfe8b8b7acd | True    | admin@foobar.com  | admin  |&lt;br/&gt;| ce8cd56ca8824f5d845ba6ed015e9494 | True    | nova@foobar.com   | nova   |&lt;br/&gt;+----------------------------------+---------+-------------------+--------+&lt;br/&gt;&lt;p&gt;List Roles:&lt;/p&gt;keystone role-list&lt;br/&gt;+----------------------------------+----------------------+&lt;br/&gt;|                id                |         name         |&lt;br/&gt;+----------------------------------+----------------------+&lt;br/&gt;| 2bbe305ad531434991d4281aaaebb700 | admin                |&lt;br/&gt;| d983800dd6d54ee3a1b1eb9f2ae3291f | Member               |&lt;br/&gt;+----------------------------------+----------------------+&lt;br/&gt;&lt;p&gt;Please note that the values of the 'id' column, would be required later when we associate a role to a user in a particular tenant.&lt;/p&gt;&lt;p&gt;Adding Roles to Users in Tenants&lt;/p&gt;&lt;p&gt;Now we add roles to the users that have been created. A role to a specific user in a specific tenant can be assigned with the following command:&lt;/p&gt;keystone user-role-add --user $USER_ID --role $ROLE_ID --tenant_id $TENANT_ID&lt;br/&gt;&lt;p&gt;The required 'id' can be obtained from the commands - keystone user-list, keystone tenant-list, keystone role-list.&lt;/p&gt;&lt;p&gt;To add a role of 'admin' to the user 'admin' of the tenant 'admin'.&lt;/p&gt;keystone user-role-add --user b3de3aeec2544f0f90b9cbfe8b8b7acd --role 2bbe305ad531434991d4281aaaebb700 --tenant_id 7f95ae9617cd496888bc412efdceabfd&lt;br/&gt;&lt;p&gt;The following commands will add a role of 'admin' to the users 'nova', 'glance' and 'swift' of the tenant 'service'.&lt;/p&gt;keystone user-role-add --user ce8cd56ca8824f5d845ba6ed015e9494 --role 2bbe305ad531434991d4281aaaebb700 --tenant_id c7970080576646c6959ee35970cf3199&lt;br/&gt;keystone user-role-add --user 518b51ea133c4facadae42c328d6b77b --role 2bbe305ad531434991d4281aaaebb700 --tenant_id c7970080576646c6959ee35970cf3199&lt;br/&gt;keystone user-role-add --user 1b986cca67e242f38cd6aa4bdec587ca --role 2bbe305ad531434991d4281aaaebb700 --tenant_id c7970080576646c6959ee35970cf3199&lt;br/&gt;&lt;p&gt;The 'Member' role is used by Horizon and Swift. So add the 'Member' role accordingly.&lt;/p&gt;keystone user-role-add --user b3de3aeec2544f0f90b9cbfe8b8b7acd --role d983800dd6d54ee3a1b1eb9f2ae3291f --tenant_id 7f95ae9617cd496888bc412efdceabfd&lt;br/&gt;&lt;p&gt;Replace the id appropriately as listed by keystone user-list, keystone role-list, keystone tenant-list.&lt;/p&gt;&lt;p&gt;Creating Services&lt;/p&gt;&lt;p&gt;Now we need to create the required services which the users can authenticate with. nova-compute, nova-volume, glance, swift, keystone and ec2 are some of the services that we create.&lt;/p&gt;keystone service-create --name service_name --type service_type --description 'Description of the service'keystone service-create --name nova --type compute --description 'OpenStack Compute Service'&lt;br/&gt;keystone service-create --name volume --type volume --description 'OpenStack Volume Service'&lt;br/&gt;keystone service-create --name glance --type image --description 'OpenStack Image Service'&lt;br/&gt;keystone service-create --name swift --type object-store --description 'OpenStack Storage Service'&lt;br/&gt;keystone service-create --name keystone --type identity --description 'OpenStack Identity Service'&lt;br/&gt;keystone service-create --name ec2 --type ec2 --description 'EC2 Service'&lt;br/&gt;&lt;p&gt;Each of the services that have been created above will be identified with a unique id which can be obtained from the following command:&lt;/p&gt;keystone service-list&lt;br/&gt;+----------------------------------+----------+--------------+----------------------------+&lt;br/&gt;|                id                |   name   |     type     |        description         |&lt;br/&gt;+----------------------------------+----------+--------------+----------------------------+&lt;br/&gt;| 1e93ee6c70f8468c88a5cb1b106753f3 | nova     | compute      | OpenStack Compute Service  |&lt;br/&gt;| 28fd92ffe3824004996a3e04e059d875 | ec2      | ec2          | EC2 Service                |&lt;br/&gt;| 7d4ec192dfa1456996f0f4c47415c7a7 | keystone | identity     | OpenStack Identity Service |&lt;br/&gt;| 96f35e1112b143e59d5cd5d0e6a8b22d | swift    | object-store | OpenStack Storage Service  |&lt;br/&gt;| f38f4564ff7b4e43a52b2f5c1b75e5fa | volume   | volume       | OpenStack Volume Service   |&lt;br/&gt;| fbafab6edcab467bb734380ce6be3561 | glance   | image        | OpenStack Image Service    |&lt;br/&gt;+----------------------------------+----------+--------------+----------------------------+&lt;br/&gt;&lt;p&gt;The 'id' will be used in defining the endpoint for that service.&lt;/p&gt;&lt;div class="section"&gt;&lt;div class="titlepage"&gt;&lt;div&gt;&lt;div&gt;&lt;h4 class="title"&gt;&lt;a id="Creating_Endpoints-d1e469"&gt;&amp;nbsp;&lt;/a&gt;Creating Endpoints&lt;/strong&gt;&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;Create endpoints for each of the services that have been created above.&lt;/p&gt;keystone endpoint-create --region region_name --service_id service_id --publicurl public_url --adminurl admin_url  --internalurl internal_url&lt;br/&gt;&lt;p&gt;For creating an endpoint for nova-compute, execute the following command:&lt;/p&gt;keystone endpoint-create --region myregion --service_id 1e93ee6c70f8468c88a5cb1b106753f3 --publicurl 'http://10.10.10.2:8774/v2/$(tenant_id)s' --adminurl 'http://10.10.10.2:8774/v2/$(tenant_id)s' --internalurl 'http://10.10.10.2:8774/v2/$(tenant_id)s'&lt;br/&gt;&lt;p&gt;For creating an endpoint for nova-volume, execute the following command:&lt;/p&gt;keystone endpoint-create --region myregion --service_id f38f4564ff7b4e43a52b2f5c1b75e5fa --publicurl 'http://10.10.10.2:8776/v1/$(tenant_id)s' --adminurl 'http://10.10.10.2:8776/v1/$(tenant_id)s' --internalurl 'http://10.10.10.2:8776/v1/$(tenant_id)s'&lt;br/&gt;&lt;p&gt;For creating an endpoint for glance, execute the following command:&lt;/p&gt;keystone endpoint-create --region myregion --service_id fbafab6edcab467bb734380ce6be3561 --publicurl 'http://10.10.10.2:9292/v1' --adminurl 'http://10.10.10.2:9292/v1' --internalurl 'http://10.10.10.2:9292/v1'&lt;br/&gt;&lt;p&gt;For creating an endpoint for swift, execute the following command:&lt;/p&gt;keystone endpoint-create --region myregion --service_id 96f35e1112b143e59d5cd5d0e6a8b22d --publicurl 'http://10.10.10.2:8080/v1/AUTH_$(tenant_id)s' --adminurl 'http://10.10.10.2:8080/v1' --internalurl 'http://10.10.10.2:8080/v1/AUTH_$(tenant_id)s'&lt;br/&gt;&lt;p&gt;For creating an endpoint for keystone, execute the following command:&lt;/p&gt;keystone endpoint-create --region myregion --service_id 7d4ec192dfa1456996f0f4c47415c7a7 --publicurl http://10.10.10.2:5000/v2.0 --adminurl http://10.10.10.2:35357/v2.0 --internalurl http://10.10.10.2:5000/v2.0&lt;br/&gt;&lt;p&gt;For creating an endpoint for ec2, execute the following command:&lt;/p&gt;keystone endpoint-create --region myregion --service_id 28fd92ffe3824004996a3e04e059d875 --publicurl http://10.10.10.2:8773/services/Cloud --adminurl http://10.10.10.2:8773/services/Admin --internalurl http://10.10.10.2:8773/services/Cloud&lt;br/&gt;&lt;/div&gt;&lt;h4 class="title"&gt;&lt;a id="Creating_Databases-d1e921"&gt;&amp;nbsp;&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;h4 class="title"&gt;==================&amp;nbsp;Keystone&amp;nbsp;准备完毕 向下一步进发 ==========================&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;3. OpenStack组件安装（Keystone -&amp;gt; Glance -&amp;gt; Nova -&amp;gt; Dashboard -&amp;gt; Swift）&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Glance&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Install glance using the following command:&lt;/p&gt;sudo apt-get install glance glance-api glance-client glance-common glance-registry python-glance&lt;br/&gt;&lt;p&gt;Glance Configuration&lt;/p&gt;&lt;p&gt;Glance uses SQLite by default. MySQL and PostgreSQL can also be configured to work with Glance.&lt;/p&gt;&lt;p&gt;Open /etc/glance/glance-api-paste.ini and at the end of the file, edit the following lines:&lt;/p&gt;admin_tenant_name = %SERVICE_TENANT_NAME%&lt;br/&gt;admin_user = %SERVICE_USER%&lt;br/&gt;admin_password = %SERVICE_PASSWORD%&lt;br/&gt;&lt;p&gt;These values have to be modified as per the configurations made earlier. The admin_tenant_name will be 'service', admin_user will be 'glance' and admin_password is 'glance'.&lt;/p&gt;&lt;p&gt;After editing, the lines should be as follows:&lt;/p&gt;admin_tenant_name = service&lt;br/&gt;admin_user = glance&lt;br/&gt;admin_password = glance&lt;br/&gt;&lt;p&gt;Now open /etc/glance/glance-registry-paste.ini and make similar changes at the end of the file.&lt;/p&gt;&lt;p&gt;Open the file /etc/glance/glance-registry.conf and edit the line which contains the option "sql_connection =" to this:&lt;/p&gt;sql_connection = mysql://glancedbadmin:glancesecret@10.10.10.2/glance&lt;p&gt;In order to tell glance to use keystone for authentication, add the following lines at the end of the file.&lt;/p&gt;[paste_deploy]&lt;br/&gt;flavor = keystone&lt;br/&gt;&lt;p&gt;Open /etc/glance/glance-api.conf and add the following lines at the end of the document.&lt;/p&gt;[paste_deploy]&lt;br/&gt;flavor = keystone&lt;br/&gt;&lt;p&gt;Create glance schema in the MySQL database.:&lt;/p&gt;sudo glance-manage version_control 0&lt;br/&gt;sudo glance-manage db_sync&lt;br/&gt;&lt;p&gt;Restart glance-api and glance-registry after making the above changes.&lt;/p&gt;sudo restart glance-apisudo restart glance-registry&lt;p&gt;Export the following environment variables.&lt;/p&gt;export SERVICE_TOKEN=admin&lt;br/&gt;export OS_TENANT_NAME=admin&lt;br/&gt;export OS_USERNAME=admin&lt;br/&gt;export OS_PASSWORD=admin&lt;br/&gt;export OS_AUTH_URL="http://localhost:5000/v2.0/"&lt;br/&gt;export SERVICE_ENDPOINT=http://localhost:35357/v2.0&lt;br/&gt;&lt;p&gt;Alternatively, you can add these variables to ~/.bashrc.&lt;/p&gt;&lt;p&gt;To test if glance is setup correectly execute the following command.&lt;/p&gt;glance index&lt;p&gt;The above command will not return any output. The output of the last command executed can be known from its return code - echo $?. If the return code is zero, then glance is setup properly and connects with Keystone.&lt;/p&gt;&lt;p&gt;&lt;span style="color: #ff0000;"&gt;With glance configured properly and using keystone as the authentication mechanism, now we can upload images to glance. This has been explained in detail in "Image Management" chapter.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;h4 class="title"&gt;==================&amp;nbsp;Glance&amp;nbsp;准备完毕 向下一步进发 ==========================&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;3. OpenStack组件安装（Keystone -&amp;gt; Glance -&amp;gt; Nova -&amp;gt; Dashboard -&amp;gt; Swift）&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Nova&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Install nova using the following commands:&lt;/p&gt;sudo apt-get install nova-api nova-cert nova-compute nova-compute-kvm nova-doc nova-network nova-objectstore nova-scheduler nova-volume rabbitmq-server novnc nova-consoleauth&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br /&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br /&gt;&lt;strong&gt;Nova Configuration&lt;/strong&gt;&lt;p&gt;Edit the /etc/nova/nova.conf file to look like this.&lt;/p&gt;--dhcpbridge_flagfile=/etc/nova/nova.conf&lt;br/&gt;--dhcpbridge=/usr/bin/nova-dhcpbridge&lt;br/&gt;--logdir=/var/log/nova&lt;br/&gt;--state_path=/var/lib/nova&lt;br/&gt;--lock_path=/run/lock/nova&lt;br/&gt;--allow_admin_api=true&lt;br/&gt;--use_deprecated_auth=false&lt;br/&gt;--auth_strategy=keystone&lt;br/&gt;--scheduler_driver=nova.scheduler.simple.SimpleScheduler&lt;br/&gt;--s3_host=10.10.10.2&lt;br/&gt;--ec2_host=10.10.10.2&lt;br/&gt;--rabbit_host=10.10.10.2&lt;br/&gt;--cc_host=10.10.10.2&lt;br/&gt;--nova_url=http://10.10.10.2:8774/v1.1/&lt;br/&gt;--routing_source_ip=10.10.10.2&lt;br/&gt;--glance_api_servers=10.10.10.2:9292&lt;br/&gt;--image_service=nova.image.glance.GlanceImageService&lt;br/&gt;--iscsi_ip_prefix=192.168.4&lt;br/&gt;--sql_connection=mysql://novadbadmin:novasecret@10.10.10.2/nova&lt;br/&gt;--ec2_url=http://10.10.10.2:8773/services/Cloud&lt;br/&gt;--keystone_ec2_url=http://10.10.10.2:5000/v2.0/ec2tokens&lt;br/&gt;--api_paste_config=/etc/nova/api-paste.ini&lt;br/&gt;--libvirt_type=kvm&lt;br/&gt;--libvirt_use_virtio_for_bridges=true&lt;br/&gt;--start_guests_on_host_boot=true&lt;br/&gt;--resume_guests_state_on_host_boot=true&lt;br/&gt;# vnc specific configuration&lt;br/&gt;--novnc_enabled=true&lt;br/&gt;--novncproxy_base_url=http://10.10.10.2:6080/vnc_auto.html&lt;br/&gt;--vncserver_proxyclient_address=10.10.10.2&lt;br/&gt;--vncserver_listen=10.10.10.2&lt;br/&gt;# network specific settings&lt;br/&gt;--network_manager=nova.network.manager.FlatDHCPManager&lt;br/&gt;--public_interface=eth0&lt;br/&gt;--flat_interface=eth1&lt;br/&gt;--flat_network_bridge=br100&lt;br/&gt;--fixed_range=192.168.4.1/27&lt;br/&gt;--floating_range=10.10.10.2/27&lt;br/&gt;--network_size=32&lt;br/&gt;--flat_network_dhcp_start=192.168.4.33&lt;br/&gt;--flat_injected=False&lt;br/&gt;--force_dhcp_release&lt;br/&gt;--iscsi_helper=tgtadm&lt;br/&gt;--connection_type=libvirt&lt;br/&gt;--root_helper=sudo nova-rootwrap&lt;br/&gt;--verbose&lt;br/&gt;&lt;p&gt;Create a Physical Volume.&lt;/p&gt;sudo pvcreate /dev/sda6&lt;br/&gt;&lt;p&gt;Create a Volume Group named nova-volumes.&lt;/p&gt;sudo vgcreate nova-volumes /dev/sda6&lt;br/&gt;&lt;p&gt;Change the ownership of the /etc/nova folder and permissions for /etc/nova/nova.conf:&lt;/p&gt;sudo chown -R nova:nova /etc/nova&lt;br/&gt;sudo chmod 644 /etc/nova/nova.conf&lt;br/&gt;&lt;p&gt;Open /etc/nova/api-paste.ini and at the end of the file, edit the following lines:&lt;/p&gt;admin_tenant_name = %SERVICE_TENANT_NAME%&lt;br/&gt;admin_user = %SERVICE_USER%&lt;br/&gt;admin_password = %SERVICE_PASSWORD%&lt;br/&gt;&lt;p&gt;These values have to be modified conforming to configurations made earlier. The admin_tenant_name will be 'service', admin_user will be 'nova' and admin_password is 'nova'.&lt;/p&gt;&lt;p&gt;After editing, the lines should be as follows:&lt;/p&gt;admin_tenant_name = service&lt;br/&gt;admin_user = nova&lt;br/&gt;admin_password = nova&lt;br/&gt;&lt;p&gt;Create nova schema in the MySQL database.&lt;/p&gt;sudo nova-manage db sync&lt;p&gt;Provide a range of IPs to be associated to the instances.&lt;/p&gt;sudo nova-manage network create private --fixed_range_v4=192.168.4.32/27 --num_networks=1 --bridge=br100 --bridge_interface=eth1 --network_size=32 &lt;br/&gt;&lt;p&gt;Export the following environment variables.&lt;/p&gt;export OS_TENANT_NAME=admin&lt;br/&gt;export OS_USERNAME=admin&lt;br/&gt;export OS_PASSWORD=admin&lt;br/&gt;export OS_AUTH_URL="http://localhost:5000/v2.0/"&lt;br/&gt;&lt;p&gt;Restart nova services.&lt;/p&gt;sudo restart libvirt-bin; sudo restart nova-network; sudo restart nova-compute; sudo restart nova-api; sudo restart nova-objectstore; sudo restart nova-scheduler; sudo restart nova-volume; sudo restart nova-consoleauth;&lt;br/&gt;&lt;p&gt;To test if nova is setup correctly run the following command.&lt;/p&gt;sudo nova-manage service list&lt;br/&gt;Binary           Host              Zone             Status     State Updated_At&lt;br/&gt;nova-network     server1           nova             enabled    :-)   2012-04-20 08:58:43&lt;br/&gt;nova-scheduler   server1           nova             enabled    :-)   2012-04-20 08:58:44&lt;br/&gt;nova-volume      server1           nova             enabled    :-)   2012-04-20 08:58:44&lt;br/&gt;nova-compute     server1           nova             enabled    :-)   2012-04-20 08:58:45&lt;br/&gt;nova-cert        server1           nova             enabled    :-)   2012-04-20 08:58:43&lt;br/&gt;&lt;p&gt;If the output is similar to the above with all components happy, your setup is ready to be used.&lt;/p&gt;&lt;h4 class="title"&gt;==================&amp;nbsp;Nova&amp;nbsp;准备完毕 向下一步进发 ==========================&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;3. OpenStack组件安装（Keystone -&amp;gt; Glance -&amp;gt; Nova -&amp;gt; Dashboard -&amp;gt; Swift）&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Dashboard&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;OpenStack Dashboard&lt;/p&gt;&lt;p&gt;Install OpenStack Dashboard by executing the following command:&lt;/p&gt;sudo apt-get install openstack-dashboard&lt;br/&gt;&lt;p&gt;Restart apache with the following command:&lt;/p&gt;sudo service apache2 restart&lt;p&gt;Open a browser and enter IP address of the server1. You should see the OpenStack Dashboard login prompt. Login with username 'admin' and password 'admin'. From the dashboard, you can create keypairs, create/edit security groups, raise new instances, attach volumes etc. which are explained in "OpenStack Dashboard" chapter.&lt;/p&gt;&lt;h4 class="title"&gt;==================&amp;nbsp;Dashboard&amp;nbsp;准备完毕 向下一步进发 ==========================&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;3. OpenStack组件安装（Keystone -&amp;gt; Glance -&amp;gt; Nova -&amp;gt; Dashboard -&amp;gt; Swift）&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Swift&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div class="titlepage"&gt;&lt;div&gt;&lt;div&gt;&lt;h5 class="title"&gt;&lt;a id="Swift_Installation-d2s744"&gt;&amp;nbsp;&lt;/a&gt;Swift Installation&lt;/strong&gt;&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;The primary components are the proxy, account, container and object servers.&lt;/p&gt;sudo apt-get install swift swift-proxy swift-account swift-container swift-object&lt;br/&gt;&lt;p&gt;Other components that might be xfsprogs (for dealing with XFS filesystem), python.pastedeploy (for keystone access), curl (to test swift).&lt;/p&gt;sudo apt-get install xfsprogs curl python-pastedeploy&lt;br/&gt;&lt;h4 class="title"&gt;&amp;nbsp;Swift Storage Backends&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;There are two methods one can try to create/prepare the storage backend. One is to use an existing partition/volume as the storage device. The other is to create a loopback file and use it as the storage device. Use the appropriate method as per your setup.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;h4 class="title"&gt;=================&amp;nbsp;Swift&amp;nbsp;准备完毕 向下一步进发 ==========================&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;/div&gt;&lt;img src="http://www.cnblogs.com/licheng/aggbug/2529850.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/licheng/archive/2012/06/01/2529850.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/licheng/archive/2012/03/07/2383380.html</id><title type="text">[PaaS] 深入 Cloud Foundry（一）构架 （转载）</title><summary type="text">转载地址：http://qing.weibo.com/2294942122/88ca09aa330004r8.html深入 Cloud Foundry（一）构架 ​EMC中国研究院高级研究员 彭麟引子今年4月份，VMware突然发布了业内第一个开源的PaaS——CloudFoundry。几个关键字：开源、PaaS、 VMware，如果你对云计算感兴趣，就冲着它的ApacheV2协议，如果不去GitHub拿它的代码好好研读一下，真有点对不起自己。笔者当时就是以 这样的心态去研究它的代码，并把它部署在我们labs里面。发布至今的这几个月里，笔者一直关注它的演进，并从它的架构设计中获益良多，觉得有.</summary><published>2012-03-07T05:29:00Z</published><updated>2012-03-07T05:29:00Z</updated><author><name>Jonson Li</name><uri>http://www.cnblogs.com/licheng/</uri></author><link rel="alternate" href="http://www.cnblogs.com/licheng/archive/2012/03/07/2383380.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/licheng/archive/2012/03/07/2383380.html"/><content type="html">&lt;p&gt;转载地址：http://qing.weibo.com/2294942122/88ca09aa330004r8.html&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span class="title"&gt;深入 Cloud Foundry（一）构架  &lt;/span&gt;&lt;/p&gt;&lt;div class="caption"&gt;&lt;p&gt;​EMC中国研究院高级研究员 &amp;nbsp;彭麟&lt;/p&gt;&lt;div&gt;&lt;br /&gt;&lt;div&gt;&lt;div&gt;&lt;strong&gt;引子&lt;/strong&gt;&lt;/div&gt;&lt;div&gt;&lt;strong&gt;&lt;br /&gt;&lt;/strong&gt;&lt;/div&gt;&lt;div&gt;&lt;p&gt;今年4月份，VMware突然发布了业内第一个开源的PaaS&amp;mdash;&amp;mdash;CloudFoundry。几个关键字：开源、PaaS、 VMware，如果你对云计算感兴趣，就冲着它的ApacheV2协议，如果不去GitHub拿它的代码好好研读一下，真有点对不起自己。笔者当时就是以 这样的心态去研究它的代码，并把它部署在我们labs里面。发布至今的这几个月里，笔者一直关注它的演进，并从它的架构设计中获益良多，觉得有必要写出来 与大家分享一下。由于个人知识、认知等原因，其中有些看法难免不成熟，大家可以直接批评、指教。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;本文会分为两个部份：第一部份主要介绍CloudFoundry的架构设计，从它所包含的模块介绍起，到各部份的消息流向，各模 块如何协调合作；第二部份会在第一部份的基础上，以如何在你的数据中心里面用CloudFoundry部署一个私有PaaS为目标，把第一部分介绍到的架 构知识使用起来。在本文，我不想简单的介绍如何使用CloudFoundry，这方面的文章，在SpringSource的官方博客里面有具体的介绍。如 果需要这方面的介绍，笔者强烈建议到SpringSource或者CloudFoundry的官博找资料。另外，本文也不会具体介绍如何&amp;ldquo;贡 献&amp;rdquo;Cloud Foundry，例如添加自己的Runtime，添加第三方的Service，这将会是两个很大的话题，以后我们会有专门的文章介绍，本文更多的算是入门 级的架构介绍，可能会涉及到具体代码，但是只为更好地理解架构而服务。在第二部份，会简单介绍到如何用OrchestrationEngine来把 CloudFoundry部署到IaaS上面，但是具体的实现方法将会放到介绍OrchestrationEngine的文章上面去，这里更多的是一种思 想和BestPractice的分享。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;第一部份讲的很多内容，会引用Pat在10月12日的VMwareCloud Forum上面关于CloudFoundry架构的演讲。Pat是CloudFoundry Core的负责人，他的那次演讲很值得一听。如果你当时在场，并且理解他所说的内容，本部份可以选择直接跳过。我除了会把说的内容讲具体点外，不太可能可 以讲得比他好。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;strong&gt;一、架构及模块&lt;/strong&gt;&lt;/div&gt;&lt;div&gt;&lt;strong&gt;&lt;br /&gt;&lt;/strong&gt;&lt;/div&gt;&lt;div&gt;&lt;p&gt;从总体地看，CloudFoundry的架构如下：&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div class="timg" style="position: relative; height: 391px; width: 568px;"&gt;&lt;img class="qImg media" src="http://ww1.sinaimg.cn/mw600/88ca09aajw1dmgbe6ogebj.jpg" alt="" /&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp; &lt;/p&gt;&lt;p&gt;这个架构图以及下文所用到的各模块架构图均来自Pat的PPT。从上图能够看到CloudFoundry主要有以下几大组件组成：&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;1、&amp;nbsp; Router：顾名思义，Router组件在CloudFoundry中是对所有进来的Request进行路由。进入Router的request主要有 两类：首先是来自VMCClient或者STS的，由CloudFoundry使用者发出的，管理型指令。例如：列出你所有apps的vmcapps，提 交一个apps等等。这类request会被路由到AppLife Management组件，又叫CloudController组件去；第二类是外界对你所部署的apps访问的request。这部份requests 会被路由到Appexecution，又或者叫做DEAs的组件去。所有进入CloudFoundry系统的requests都会经过Router组件， 看到这里可能会有朋友会担心Router成为单点，从而成为整个云的瓶颈。但是CloudFoundry作为云系统，其设计的核心就是去单点依赖，组件平 行扩充，且可替代的以保证扩展性，这是CloudFoundry，甚至所有云计算系统的设计原则，后文会讨论CloudFoundry如何做到这点，目前 只要知道，系统可以部署多个Routers共同处理进来的requests，但是Router上层的LoadBalance不在CloudFoundry 的实现范围，CloudFoundry只保证所有的request是无状态的，这样就使上层均衡附载选择面非常非常大了，例如可以通过DNS做，也可以部 署硬件的LoadBalancer，或者简单点，弄台ngnix作负载均衡器，都是可行的。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Router组件，目前版本是对nginx的一个简单封装。熟悉ngnix的朋友应该知道，它可以一个套接字文件（.sock文件）作为输入输出。所有安装CloudFoundry的Router组件服务器都会安装一个nginx，其ngnix.conf文件有以下配置：&lt;/p&gt;&lt;div class="timg" style="position: relative; height: 87px; width: 610px;"&gt;&lt;img class="qImg media" src="http://ww2.sinaimg.cn/mw600/88ca09aajw1dmgbh0xa3fj.jpg" alt="" /&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;从整体的来看，Router组件的结构如下：&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div class="timg" style="position: relative; height: 453px; width: 361px;"&gt;&lt;img class="qImg media" src="http://ww2.sinaimg.cn/mw600/88ca09aajw1dmgbqbvur5j.jpg" alt="" /&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;外界httprequest进入CloudFoundry服务器，nginx会首先接到request，nginx通过sock 与router.rb进行交互，于是真正处理请求的是Router组件。router.rb里面根据传入的url，用户名密码等，进行逻辑判断，到 CloudController组件或者DEA组件取数据并且返通过与niginx连接的.sock文件返回。router.rb是对nginx进行了逻 辑封装。熟悉CloudFoundry的朋友肯定知道，CloudFoundry给每一个app分配了一个url访问，如果直接使用VMware所托管的 CloudFoundry.com的话，那你的app的url可能就是xxx.cloudfoundry.com，无论通过命令给你的app扩展了多少个 instances，都是从这个url访问的，这里面的url转换路由就是由router.rb实现的。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;2、&amp;nbsp; DEA(Droplet Execution Agency): 首先要解析下什么叫做Droplet。Droplet在CloudFoundry的概念里面是指一个把你提交的源代码，以及CloudFoundry配套 好的运行环境，再加上一些管理脚本，例如Start/Stop这些小脚本全部压缩好在一起的tar包。还有一个概念，叫做Stagingapp，就是指制 作上面描述这个包，然后把它存储好的过程。CloudFoundry会自动保存这个Droplet，直到你start一个app的时候，一台部署了DEA 模块的服务器会来拿一个Droplet的copy去运行。所以如果你扩展你的app到10个instances，那这个Droplet就被会复制十份，让 10个DEA服务器拿去运行。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;下图是DEA模块的架构图：&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div class="timg" style="position: relative; height: 328px; width: 464px;"&gt;&lt;img class="qImg media" src="http://ww1.sinaimg.cn/mw600/88ca09aajw1dmgbr2nq1vj.jpg" alt="" /&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Cloud Controller模块（下面会介绍）会发送start/stop等基本的apps管理请求给DEA，dea.rb接收这些请求，然后从NFS里面找到 合适的Droplet。前面说到Droplet其实是一个带有运行脚本的，带运行环境的tar包，DEA只需要把它拿过来解压，并即行里面的start脚 本，就可以让这个app跑起来。到此，app算是可以访问，并start起来了，换句话说就是有这台服务器的某一个端口已经在待命，只要有request 从这个端口进来，这个app就可以接收并返回正确的信息。接着dea.rb要做些善后的工作：1、把这个信息告诉Router模块。我们前面说到，所有进 入CloudFoundry的requests都是由Router模块处理并转发的，包括用户对app的访问request，一个app起来后，需要告诉 router，让它根据loadbalance等原则，把合适的request转进来，使这个app的instance能够干起活；2、一些统计性的工 作，例如要把这个用户又新部署了一个app告诉CloudController，以作quota控制等；3、把运行信息告诉HealthManager模 块，实时报告该app的instance运行情况。另外DEA还要负责部份对Droplet的查询工作，譬如，如果用户通过 CloudController想查询一个app的log信息，那DEA需要从该Droplet里面取到log返回等等。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;3、CloudController：CloudController是CloudFoundry的管理模块。主要工作包括：&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;a) 对apps的增删改读；&lt;/p&gt;&lt;p&gt;b) 启动、停止应用程序；&lt;/p&gt;&lt;p&gt;c) Staging apps（把apps打包成一个droplet）；&lt;/p&gt;&lt;p&gt;d) 修改应用程序运行环境，包括instance、mem等等；&lt;/p&gt;&lt;p&gt;e) 管理service，包括service与app的绑定等；&lt;/p&gt;&lt;p&gt;f) Cloud环境的管理；&lt;/p&gt;&lt;p&gt;g) 修改Cloud的用户信息；&lt;/p&gt;&lt;p&gt;h) 查看Cloud Foundry，以及每一个app的log信息。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;这似乎有点复杂，但简单的说，可以很简单：就是与VMC和STS交互的服务器端。VMC和STS与CloudFoundry通信 采用的是restful接口，另一方面CloudController是一个典型的Rubyon Rails项目，从VMC或者STS接到JSON格式的协议，然后写入CloudController Database，并发消息到各模快去控制管理整个云。和其他ROR项目一样，CloudController的所有API可以从 conf/routes.rb里看到。开放的Restful接口好处在于第三方应用开发和集成，企业在用CloudFoundry部署私有云的时候，可以 通过这些接口来自动化控制管理整个Cloud环境。这部份内容将在第二部份论述。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;下图是Cloud Controller的架构图：&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div class="timg" style="position: relative; height: 334px; width: 373px;"&gt;&lt;img class="qImg media" src="http://ww3.sinaimg.cn/mw600/88ca09aajw1dmgbucgyz2j.jpg" alt="" /&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;图中Health Manager和DEA是外部模块，CCDatabase就是CloudController Database，这个是整个CloudFoundry不能做HP的地方。CloudController Database的并发性不会很多，应用级别的数据库访问是由底下的Service模块处理的，这个数据库存的是Cloud的配置信息。读操作主要来自 DEA启动，作为初始化DEA的依据；以及healthmanager模块会从这里读取预期的状态信息，这部份数据会与从DEA得到的实际状态信息进行比 对。NFS是多个CloudController的共享存储，CloudController其中一个重要工作就是StagingApps。 Droplets的存储是在集群环境的唯一的。而CloudController是集群运行，换言之，就是每一个控制Request可能由不同的 CloudController处理，假设一个简单的用户场景：我们需要部署一个app到CloudFoundry中。我们在敲完那条简单的push命令 后，VMC开始工作，在做完一轮的用户鉴权、查看所部署的apps数量是否超过预定数额，问了一堆相关app的问题后，需要发4个指令：&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;1．发一个POST到&amp;rdquo;apps&amp;rdquo;，创建一个app;&lt;/p&gt;&lt;p&gt;2．发一个PUT到&amp;rdquo;apps/:name/application&amp;rdquo;，上传app;&lt;/p&gt;&lt;p&gt;3．发一个GET到&amp;rdquo;apps/:name/&amp;rdquo;，取得app状态，看看是否已经启动；&lt;/p&gt;&lt;p&gt;4．如果没有启动，发一个PUT到&amp;rdquo;apps/:name/&amp;rdquo;，使其启动。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;如果第2和第4步由不同的Cloud Controller来处理，而又无法保证他们能找到同一个Droplet，那第4步将会因为找不到对应的Droplet而启动失败。如何保证这一连串指 令过来所指向的Droplet都是同一个呢？使用NFS，使CloudController共享存储是最简单的方法。但是这个方法在安全性等方面并不完 美。在10月12日的VMwareCloud Forum上，Pat告诉我们下一版本的CloudFoundry这里将会有大调整，但是在那部份代码公开前，我不方便在这评价太多。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;4、&amp;nbsp; HealthManager: 做的事情不复杂，简单的说是从各个DEA里面拿到运行信息，然后进行统计分析，报告等。统计数据会与CloudController的设定指标进行比对， 并提供Alert等。HealthManager模块目前还不是十分完善，但是CloudManage栈里面，自动化health管理、分析是一个很重要 的领域，而这方面可以扩展的地方也很多，结合OrchestrationEngine可以使云自管理、自预警；而与BI方面技术结合，可以统计运营情况， 合理分配资源等。这方面CloudFoundry还在发展之中。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;5、&amp;nbsp; Services:Cloud Foundry的Service模块从源代码控制上看就知道是一个独立的、可Plugin的模块，以方便第三方把自己的服务整合入 CloudFoundry生态系统。在Github上看到service是与CloudFoundry Core项目vcap独立的一个repository，为vcap-service。Service模块其中设计原则是方便第三方服务提供商提供服务。在 这方面CloudFoundry做得很成功，从Github上看，已经有以下服务提供：a)MongoDB; b) mysql; c) neo4j; d) PostgreSql; e) RabbitMQ; f) Redis; g)vBlob。基类都是放在base文件夹中。 第三方如果需要自己开发CloudFoundry的服务，需要继承改写它里面的两个基础类：Node和Gateway；而里面一些操作， 如：Provision，可以在base的provisioner.rb基础上加入自己的逻辑，同样的还有Service_Error和 Service_Message等。关于如何写自己的Service，ELC的博客会推出相应文章详细论述，并不在本文的讨论范围里面，从架构了解上来 说，只要知道服务间的关系，知道个服务与base间透过继承关系来横向扩充，而CloudFoundry与apps调用Service是通过base来完 成这一简单的架构方法即可。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;6、&amp;nbsp; NATS(Message bus): 从CloudFoundry的总架构图看，位于各模块中心位置的是一个叫nats的组件。NATS是由CloudFoundry的架构师Derek开发的 一个轻量级的，支持发布、订阅机制的消息系统。Github开源地址是：https://github.com/derekcollison/nats。 其核心基于EventMachine开发，代码量不多，可以下载下来慢慢研究。CloudFoundry是一个多模块的分布式系统，支持模块自发现，错误 自检，且模块间低耦合。其核心原理就是基于消息发布订阅机制。每个台服务器上的每个模块会根据自己的消息类别，向MessageBus发布多个消息主题； 而同时也向自己需要交互的模块，按照需要的信息内容的消息主题订阅消息。譬如：一个DEA被加入CloudFoundry集群中，它需要向大家吼一下，以 表明它已经准备好服务了，它会发布一个主题是&amp;rdquo;dea.start&amp;rdquo;的消息：&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div class="timg" style="position: relative; height: 42px; width: 610px;"&gt;&lt;img class="qImg media" src="http://ww3.sinaimg.cn/mw600/88ca09aajw1dmgc7tbng2j.jpg" alt="" /&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;@ hello_message_json中包括DEA的UUID,ip, port, 版本信息等内容。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;再例如，CloudController需要启动一个Droplet的instance：&lt;/p&gt;&lt;p&gt;a) &amp;nbsp;首先一个DEA在启动的时候，会首先会对自己UUID的消息主题进行订阅。&lt;/p&gt;&lt;div class="timg" style="position: relative; height: 42px; width: 610px;"&gt;&lt;img class="qImg media" src="http://ww1.sinaimg.cn/mw600/88ca09aajw1dmgc990xa1j.jpg" alt="" /&gt;&lt;/div&gt;&amp;nbsp;&amp;nbsp;&lt;p&gt;其他模块需要通过&amp;rsquo;&amp;rsquo;dea.#{uuid}.start&amp;rdquo;这个主题发送消息来使它启动，一旦这个DEA接收到消息，就会触发process_dea_start(msg)这个方法来处理启动所需要的工作。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;b) &amp;nbsp;Cloud Controller或者其他模块发送消息，让UUID为xxx的DEA启动。&lt;/p&gt;&lt;div&gt;&lt;div class="timg" style="position: relative; height: 41px; width: 610px;"&gt;&lt;img class="qImg media" src="http://ww2.sinaimg.cn/mw600/88ca09aajw1dmgc9x3v6oj.jpg" alt="" /&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;c)&amp;nbsp;&amp;nbsp;DEA模块接收到消息后，就会触发process_dea_start(msg)方法。msg是由其他模块发送过来的消 息内容，包括：droplet_id,instance_index, service, runtime等内容，process_dea_start会取得这些启动DEA必须的信息，然后进行一系列操作，例如从NFS中取得Droplet，解 压，修改必要环境配置，运行启动脚本等等。等一切都准备好后，然后需要给Router发个消息，告诉它这个Droplet已经随时准备好报效国家，以后有 相应的request记得让它来处理。&lt;/p&gt;&lt;div class="timg" style="position: relative; height: 183px; width: 610px;"&gt;&lt;img class="qImg media" src="http://ww2.sinaimg.cn/mw600/88ca09aajw1dmgcessdizj.jpg" alt="" /&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;d) &amp;nbsp;Router模块在启动时就已经订阅&amp;rdquo;router.register&amp;rdquo;消息主题。&lt;/p&gt;&lt;div class="timg" style="position: relative; height: 159px; width: 610px;"&gt;&lt;img class="qImg media" src="http://ww1.sinaimg.cn/mw600/88ca09aajw1dmgcfbftntj.jpg" alt="" /&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;收到前面DEA发出的信息后，会触发register_droplet方法，去绑定Droplet。到此启动一个Droplet的instance工作完成。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;我们可以看到整个CloudFoundry的核心就是一套消息系统，如果想了解CloudFoundry的来龙去脉，去跟踪它里 面复杂的消息机制是非常好的方法。另一方面，CloudFoundry是一套基于消息的分布式系统，面向消息的架构是它节点横向扩展，组件自发现等云特性 的基础。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Cloud Foundry的架构简单介绍至此，其实作为第一款开源的PaaS，CloudFoundry架构有很多可以学习借鉴的地方，很多细节上的处理是很精妙 的，这些内容如果有可能会在后续文章继续探讨，本文题虽为深入CloudFoundry，其实也只是浅尝即止，把总体架构介绍一下，目标在于使我们有足够 的背景知识去用CloudFoundry搭建企业内部的私有PaaS。总结一下，笔者从CloudFoundry的结构中学到的东西：&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;1、&amp;nbsp; 基于消息的多组件架构是实现集群的简单、且有效方法。消息可以使集群节点间解耦，使自注册，自发现这些在大规模数据中心中很重要的功能得到实现；&lt;/p&gt;&lt;p&gt;2、&amp;nbsp; 适当的抽象层，模板模式的使用，方便第三方可以方便在CloudFoundry开发扩展功能。CloudFoundry在DEA及Service层都做了 抽象层处理，相对应地使开发者可以容易地为CloudFoundry开发Runtime和Service。例如，在CloudFoundry刚推出的时 候，只支持Node.js,Java, Ruby，但第三方提供商、开源社区快速跟进，为CloudFoundry添加了PHP,Python的支持。这得益于CloudFoundry精巧的 DEA架构设计，如何开发新的Runtime支持，会在后续博文中有所论述.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;二、源码导读&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;br /&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;笔者一直觉得深入理解一个技术的最好方法就是读它的源码，而CloudFoundry是完全开源的PaaS平台，而因为刚发展起 来，代码量不多，主要作者们的代码功力也相当不错，读起来很舒服，很适合研读。而不得不再次表扬一下它完全基于消息机制的架构设计，对组件扩展性，第三方 接入等方面做得很好，读者可以从中学到不少思想性的东西。笔者很推荐大家去读一下它的源代码。你可以在Github上找到CloudFoundry的全部 代码：https://github.com/cloudfoundry，你会看到几个不同的Repositories，它们分别是：&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;1、vcap: Cloud Foundry的Core，又或者称作Kernel；&lt;/p&gt;&lt;p&gt;2、vcap-service: Cloud Foundry的Service组件。Cloud Foundry的service是作为插件提供的，这出于它方便第三方开发service而设计的；&lt;/p&gt;&lt;p&gt;3、vmc: VMware Cloud CLI. 是一个Ruby应用，与Cloud Foundry的CLI交互。主要通过分析用户输入的CLI，向CloudFoundry发送Restful请求；&lt;/p&gt;&lt;p&gt;4、vcap-java: 如果你的app是用java开发，且需要与Cloud Foundry交互，例如取得当前serviceserver的ip地址等，你可能需要这个jar，里面对我们Java开发常用框架有所支持，它底层也是 对CloudFoundry的Restful请求的包装；&lt;/p&gt;&lt;p&gt;5、vcap-java-client: Cloud Foundry的Restful API的Java封装，与上面的项目不一样，它只是个简单的读取CloudFoundry信息，并放如JavaBean中；&lt;/p&gt;&lt;p&gt;6、vcap-test: Cloud Foundry的test cases;&lt;/p&gt;&lt;p&gt;7、vcap-test-assets: Cloud Foundry一些apps示例。&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;img src="http://www.cnblogs.com/licheng/aggbug/2383380.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/licheng/archive/2012/03/07/2383380.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/licheng/archive/2012/02/07/2341741.html</id><title type="text">海淀、西城、东城各类小学排名（转载）</title><summary type="text">http://blog.sina.com.cn/s/blog_6f0ff6f90100qnp5.htmlMARK一下，以后备用海淀区一流一类小学顺序排名（共3所） 1．中关村一小（点评：海淀区性价比最高的小学，在海淀激烈的竞争 中是唯一可以保持循序渐进教学的一流小学；注重阶段培养、学生基础极其扎实、后劲十足；学生进入4年级以后课外竞赛获奖人数攀升很快，获奖名次总体靠前， 获奖人数比例在最高层次；生源纯净，主要来自北京中科系“土著”，家庭科学文化素质水平高且整齐；师资极其优异，校长、老师配合堪称业界楷模；行事较为低 调，凭实力说话、凭行为服人，潜心做教育，是海淀区的首选最优质小学。） 2．...</summary><published>2012-02-07T09:29:00Z</published><updated>2012-02-07T09:29:00Z</updated><author><name>Jonson Li</name><uri>http://www.cnblogs.com/licheng/</uri></author><link rel="alternate" href="http://www.cnblogs.com/licheng/archive/2012/02/07/2341741.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/licheng/archive/2012/02/07/2341741.html"/><content type="html">&lt;p&gt;http://blog.sina.com.cn/s/blog_6f0ff6f90100qnp5.html&lt;/p&gt;&lt;div id="sina_keyword_ad_area2" class="articalContent  "&gt;&lt;p&gt;MARK一下，以后备用&lt;/p&gt;&lt;p&gt;&lt;strong&gt;海淀区一流一类小学顺序排名（共3所）&lt;br /&gt;&lt;/strong&gt;1．中关村一小（点评：海淀区性价比最高的小学，在海淀激烈的竞争 中是唯一可以保持循序渐进教学的一流小学；注重阶段培养、学生基础极其扎实、后劲十足；学生进入4年级以后课外竞赛获奖人数攀升很快，获奖名次总体靠前， 获奖人数比例在最高层次；生源纯净，主要来自北京中科系&amp;ldquo;土著&amp;rdquo;，家庭科学文化素质水平高且整齐；师资极其优异，校长、老师配合堪称业界楷模；行事较为低 调，凭实力说话、凭行为服人，潜心做教育，是海淀区的首选最优质小学。）&lt;br /&gt; 2．RDF小（点评：已经形成&amp;ldquo;人大&amp;rdquo;教育的系列品牌，主导了北京教育界诸多的话语权，小学、初中、高中配合堪称完美，学校目前还处于上升阶段。它的 活动多而丰富、课内外教育结合十分紧密，成绩突出。学校竞争较为激烈、择校就学成本较高、非子弟后代难获同等机会，择校生家庭基本属于&amp;ldquo;贵族&amp;rdquo;系列。）&lt;br /&gt; 3．中关村三小（点评：规模在北京最大、最引人瞩目、学科竞赛获奖人数最多且较低龄化；教育设施、师资在北京市首屈一指，老师教学、学生学习的竞争也 是最大最激烈的；行为高调，以学校学生人数最多、小金库数额最大、择校最难进、前校长被抓、课后不许下楼、课业管理最严、作业数量最大最为出名。生源极其 多元，是北京很多很多对孩子寄予高度希望家长最向往的学校。择校家长要紧密配合学校的教学和安排，大力督促孩子，专注课外教育，否则性价比大打折扣。）&lt;br /&gt; &lt;strong&gt;海淀区一流二类小学顺序排名（共8所）&lt;br /&gt;&lt;/strong&gt;4．海淀实验（点评：实力强、学风好、规模大是二里沟学区排名第一的小学，其已有成绩稍逊中1、RDF和中3）；&lt;br /&gt; 5．&amp;ldquo;五&amp;bull;一&amp;rdquo;小学（点评：传统名校，五棵松学区首选小学、口碑好）；&lt;br /&gt; 6．翠微小学（点评：海淀区西南部最令人向往的小学，学校老师负责程度很高、各种竞赛获奖者基本都有这所学校的学生，性价比很高，是羊坊店学区无可争辩的最牛小学，学校素质教育也成绩斐然。）&lt;br /&gt; 7．北大附小、北师大附属实验小学（点评：这两所学校近乎属于子弟小学，教学理念先进、教学水平很高，是教育界公认的。子弟生由于都有很好的小升初学 校：北大、三帆等名校，这两所学校参加竞赛的人数并不多，很多数据无从知晓，但这丝毫不影响它的水平。非子弟生择它，如又不参加课外辅导，性价比就不很高 了。这两所学校赞助费基本都在10万上下。）&lt;br /&gt; 8．中关村二小（点评：夹在中1和中3之间，是一所不温不火的学校，乐团办得最棒，没有这个乐团中2会失去很多魅力。虽被人评说的几率在减少，但作为名校其教学水平是令人称道的，最近两次统测成绩连续表现出很高水平，超过了排在它前面的学校。）&lt;br /&gt; 9．万泉小学、上地实验。&lt;br /&gt; &lt;strong&gt;海淀区二流一类小学顺序排名（共11所）&lt;br /&gt;&lt;/strong&gt;10．育英（点评：它的小学教育无可挑剔，但作为衔接的中学教育有很大差距，在海淀区位于中下游。）&lt;br /&gt; 11．&amp;ldquo;七&amp;bull;一&amp;rdquo;、农科院；&lt;br /&gt; 12．石油附、二里沟；&lt;br /&gt; 13．中关村四小、北航附小、北医大附；&lt;br /&gt; 14．海淀第二实验、双榆树中心（点评：性价比很高）、海淀外国语、。&lt;br /&gt; &lt;strong&gt;海淀区二流二类小学顺序排名（共25所）&lt;br /&gt;&lt;/strong&gt;15．羊坊店中心、清华附小、；&lt;br /&gt; 16．花园村二、育新、太平路、羊四、今典、羊五；&lt;br /&gt; 17．北外附属外国语学校、四季青、永泰、科技大学附小、北方交大附小；九一、双榆树一、知春里、玉泉。&lt;br /&gt; 18．立新、育鹰、育鸿、红英、培英；&lt;br /&gt; 19．西苑、西颐、清河第一。&lt;br /&gt; &lt;strong&gt;总结：&lt;br /&gt;&lt;/strong&gt;1．我在这里一共谈了47所小学，限于资料有限，未上榜的小学不代表不好；&lt;br /&gt; 2．根据海淀区的升学政策，如果是外区或海淀本区的学生择校的话选择前22名的小学最为理想（也就是一流一类、一流二类、二流一类的小学）；&lt;br /&gt; 3．二流二类小学虽也可以作为择校选择，但最重要的是离处住要近、花费要最低。&lt;br /&gt; 4．以上仅代表我个人研究观点，参考而已！请根据自己的实际情况统筹考虑，以适合为先。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;东城区一流一类小学顺序排名（共3所）&lt;br /&gt;&lt;/strong&gt;1．府学小学（点评：北京最早的学校，640年了，文化底蕴的积淀 北京任何一所小学也无法比拟，古代、近代、现代教育融合和谐，它的文化熏陶是任何一所小学也无法复制的；师资、校园设施在东城区位居首位，生源多元但素质 高，学校教育质量出类拔萃，是北京公认的第一阵营的一流小学，择校者趋之若鹜，择校成本较高，根据东城区的升学政策&amp;mdash;&amp;mdash;对普通家庭而言性价比并不高，对非 北京户口的家庭而言如果在小学、小升初阶段没有共建，选择它也许会有另一种&amp;ldquo;痛楚&amp;rdquo;；它是东城区课外竞赛获奖学生人数、比例最多的小学，是市奥校最佳生源 来源地。）&lt;br /&gt; 2．史家小学（点评：由于历史的原因成为北京四大名小之一，其校长的知名度在府学之上，但确实在教育理念，学校的深耕细作上广有建树；是中央机关、各 大部委重点选择的小学，共建关系单位均实力超卓，与东城区最好的中学&amp;mdash;&amp;mdash;北京2中关系特别密切，学生出口非常理想，是一所与主流社会关系紧密相连的小学， 令人刮目相看；外语教学特色非常令人羡慕。）&lt;br /&gt; 3．景山学校（点评：多少年来的事实无以辩驳地证明它是北京市直升学校中做的最好、重点中学、大学升学率最高的学校；中国现代教育改革的先锋学校，东 城区现代化教育的第一名片，虽有些神秘，但实力超群，实验举措自成体系；小学、中学的衔接中尖子生层出不穷，不过中学层次整体教育水准被认为位于红旗中 学&amp;lt;171中学&amp;gt;之后，使小学的光彩失去些色彩；是东城区择校成本最高的小学，性价比并不很突出。）&lt;br /&gt; 东城区一流二类小学顺序排名（共4所）：&lt;br /&gt; 4．丁香小学（点评：曾经的市重点小学，口碑幽香，住宿管理优质，教学扎实，校风严谨，学习氛围温馨而浓厚，是东城区最抢手的小学之一。）&lt;br /&gt; 5．灯市口小学；&lt;br /&gt; 6．黑芝麻小学；&lt;br /&gt; 7．西中街小学&lt;br /&gt; &lt;strong&gt;东城区二流一类小学顺序排名（共8所）&lt;br /&gt;&lt;/strong&gt;8．和平里第九、和平里第四；&lt;br /&gt; 9．史家小学分校、分司厅、北官厅；&lt;br /&gt; 10．曙光、东交民巷、和平里第一。&lt;br /&gt; &lt;strong&gt;东城区二流二类小学顺序排名（共4所）&lt;br /&gt;&lt;/strong&gt;11．东四九条、东师附；&lt;br /&gt; 12．美术馆后街、地坛。&lt;br /&gt; 说明：做东城区二流小学的排名比较困难，因为东城区所有的小学都主打&amp;ldquo;特色&amp;rdquo;牌，侧重点各有不同，从教书育人的角度是十分需要的，但有的小学由于人数 很少，统计数据费尽心机也找不到，比如，北锣鼓巷、方家、新鲜胡同小学等，北锣鼓自行教学特色特别独特、方家合并一所小学后大秀国学、新鲜胡同小学是难得 的百年老校，李敖、梁实秋都是它的校友。。。。。。东城区这样的小学还有很多，不一而足。&lt;br /&gt; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;西城区一流一类小学顺序排名（共3所）：&lt;br /&gt;&lt;/strong&gt;1．北京实验二小：北京市教育理念最先进&amp;mdash;&amp;mdash;京城中与景山、史 家、中关村一、北师大实验附小、北京大学附小、府学、北京小学、光明小学同处巅峰；校园建筑的现代部分华盖京城之首；教育质量、师资水平在全国堪称最佳翘 楚；毕业生、在校生均可深入社会、政治、经济、科技、教育等领域最高层，其基础教育社会主导话语权少有对手；雄冠京城影响力历久弥新，长盛不衰。北京官宦 上层主流群体的&amp;ldquo;集体母校&amp;rdquo;。&lt;br /&gt; 2．育民小学：西城区争议最大的小学。教育质量最牛的小学之一，招生、选拔、考试独辟蹊径，教师压力大，学生负担也较大，很多举措往往有惊人之举，是 一所不甘寂寞也不会寂寞的小学，也是一所在教学、管理、改革上非常勇敢的小学，个性十足棱角分明。很多在社会上的竞赛总能出类拔萃，很多时候获奖人数比例 为最高，是一所教育质量有口皆碑的小学，西城区的又一面教育的旗帜。想进这所学校要么孩子有千里挑一的潜质，要么有社会高阶的渠道。&lt;br /&gt; 3．黄城根小学：红色的传统、过硬的教学、超群的口碑、特殊的地位、最好的亲戚（四中）使这所小学成为西城最热门的小学之一，也是西城区择校非常困难的小学，但在软实力、生源上与实验二小、育民还是有一定差距的。&lt;br /&gt; &lt;strong&gt;西城区一流二类小学顺序排名（共6所）&lt;br /&gt;&lt;/strong&gt;4．中古友谊：看着就让人喜欢，综合统测成绩始终很稳定而且总在前四左右；&lt;br /&gt; 5．育翔：因每年进入三帆的学生最多，大受追捧；&lt;br /&gt; 6．三里三：曾经是西城区性价比最高的小学，2009年因择校者过多，已有很多下降；&lt;br /&gt; 7．西师附小：内敛持重，始终如一的小学，生源一直很不错，教学一丝不苟，是西城区六铺炕地区最好的小学，因进入三帆人数的比例略低于育翔而居其后，2009年择校人数超乎想象；&lt;br /&gt; 8．宏庙小学：老牌区重点，教学质量稳定出众，低调不张扬，性价比很高的小学。&lt;br /&gt; 9．奋斗小学：设施一流，教学水平提高很快，学校组织管理水平有待提升，由于毕业生走向渠道较多，统计数据很不全面，所以排名靠后，但由于这个学校带头人的影响力这所学校快速上升，备受关注，已是西城区最受追捧的小学之一。&lt;br /&gt; &lt;strong&gt;西城区二流一类小学顺序排名（共5所）&lt;br /&gt;&lt;/strong&gt;10．复兴门外一小：止跌回升、气象愈新，曾经是西城区一类小学，据了解该校中远期规划宏大，是西城最具后续发展潜力的小学，目前性价比很高；&lt;br /&gt; 11．自忠小学：在当地口碑最好，是居民的首选，因每班人数过多，性价比降低，曾经也是西城区一类小学；&lt;br /&gt; 12．展览路一小（别总看它借读生较多，升学、教学都挺牛）、五路通小学（性价比较高，但周边环境堪称西城最差）、阜成门外一小（性价比较高，但周边环境让人挠头，使人觉得这里不像是个学校）；&lt;br /&gt; &lt;strong&gt;西城区二流二类小学顺序排名（共29所）&lt;br /&gt;&lt;/strong&gt;13．厂桥、力学、进步、鸦儿、德外二小、北长街、白云路、青龙桥、长安、裕中、银河、官园、玉桃园、受水河、民族团结、北礼士路、西什库、顺城街一小、西单、华嘉。 (这18所小学从不同角度看目前都有很高或较高性价比，这些学校都是小班教学，有的还是超小班教学。)&lt;br /&gt; 14．柳荫街、西四北四条、文兴街、四根柏（因要拆迁）、中华路（因要拆迁）、新街口东街、什刹海、护国寺、雷锋。（这9所小学在我这里几乎没有统计 数据，因为西城区的小学我都去过，我根据生源、校园所处环境、学校规模、当地北京居民的认可度作的排名，它们往往也有相当不错的性价比，只是由于各种原因 显得沉寂。）&lt;/p&gt;&lt;/div&gt;&lt;img src="http://www.cnblogs.com/licheng/aggbug/2341741.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/licheng/archive/2012/02/07/2341741.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/licheng/archive/2011/12/11/2283960.html</id><title type="text">云操作系统OpenStack 优势与问题并存</title><summary type="text">http://www.china-cloud.com/yunjishu/yunjiagou/20111209_8570.htmlOpenStack是由Rackspace公司（世界最大的主机托管服务商之一）启动的一个开源项目，它旨在实现“云操作系统”，即一个具有部署和管理公有云、私有云以及混合云基础架构能力的平台。云操作系统在这里“操作系统”的含义很简单，即一个资源的控制、监测和协调的平台。另一方面，云操作系统也提供了一系列完整的API。互联网厂商和云计算提供商是OpenStack的潜在用户，这也同样为准备部署云计算基础架构的企业提供了一种选择。OpenStack的优势1.与开源社区的广泛合作C</summary><published>2011-12-11T07:27:00Z</published><updated>2011-12-11T07:27:00Z</updated><author><name>Jonson Li</name><uri>http://www.cnblogs.com/licheng/</uri></author><link rel="alternate" href="http://www.cnblogs.com/licheng/archive/2011/12/11/2283960.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/licheng/archive/2011/12/11/2283960.html"/><content type="html">&lt;p&gt;&lt;a href="http://www.china-cloud.com/yunjishu/yunjiagou/20111209_8570.html"&gt;http://www.china-cloud.com/yunjishu/yunjiagou/20111209_8570.html&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;OpenStack是由Rackspace公司（世界最大的主机托管服务商之一）启动的一个开源项目，它旨在实现&amp;ldquo;云操作系统&amp;rdquo;，即一个具有部署和管理公有云、私有云以及混合云基础架构能力的平台。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;云操作系统&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;在这里&amp;ldquo;操作系统&amp;rdquo;的含义很简单，即一个资源的控制、监测和协调的平台。另一方面，云操作系统也提供了一系列完整的API。互联网厂商和&lt;a class="ReplaceKeyword" style="color: blue;" href="http://www.china-cloud.com/" target="_blank"&gt;云计算&lt;/a&gt;提供商是OpenStack的潜在用户，这也同样为准备部署&lt;a class="ReplaceKeyword" style="color: blue;" href="http://www.china-cloud.com/" target="_blank"&gt;云计算&lt;/a&gt;基础架构的企业提供了一种选择。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;OpenStack的优势&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;img style="width: 549px; height: 170px; cursor: pointer;" src="http://www.china-cloud.com/uploads/allimg/111209/09561563L-0.png" alt="" border="0" /&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;1.与开源社区的广泛合作&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Cloud.com（&lt;a class="ReplaceKeyword" style="color: blue;" href="http://www.china-cloud.com/" target="_blank"&gt;云计算&lt;/a&gt;领域的领导厂商之一，已被Citrix收购）的CMO Pedar Ulander先生对OpenStack做出了高度评价：他表示&amp;ldquo;&lt;a class="ReplaceKeyword" style="color: blue;" href="http://www.china-cloud.com/" target="_blank"&gt;云计算&lt;/a&gt;已经成为一种新的运营模式，它对于人们如何消费、如何提供IT服务和从事IT行业是一个根本性的转变。作为一家崭露头角的小公司，我们在大约14个月之前开始运营我们的品牌&amp;mdash;&amp;mdash;Cloud.com，OpenStack对我们现在的强劲发展起到了巨大的推动力。&amp;rdquo;&lt;/p&gt;&lt;p&gt;Cloud.com是OpenStack的创始公司之一。在开源社区中，有多名来自不同公司的志愿者，汇聚他们的智慧，推动了OpenStack项目的发展。OpenStack是一个非常类似于 Kernel.org或Eclipse.org技术社区，你可以在这里下载代码、进行各种社区活动。如果你对源代码感兴趣，那么将会有机会构建自己的OS，或者与其它正在对其进行商业化的公司合作。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;2.积极的客户支持&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Cloud.com十分注重对OpenStack项目的支持，Pedar Ulander表示在项目开发方面，我们添加了对微软Hyper-V虚拟化技术的支持。我们将一些我们自己的网络堆栈协议集成到平台之中，并在API兼容性方面做了许多工作。&lt;/p&gt;&lt;p&gt;而对于客户，我们对想采用OpenStack的客户提供了最大的支持。我们有几个客户对Swift服务很感兴趣，Swift是一个模仿了Amazon S3的存储服务。现在我们正围绕此技术构建管理框架，从而使得这些公司可以在OpenStack平台上提供类似于S3的服务。&amp;rdquo;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;3.支持一切应用的统一平台&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;和其它OpenStack的创始公司一样，Cloud.com想让OpenStack成为一个可以支持一切应用的最终平台。&amp;ldquo;客户不希望等待，我们也没有让客户等待的理由。对于我们的平台，我们需要着重关心的是向后兼容。随着代码越来越成熟，它如何运作，API如何工作，以及作业如何调度成为需要被同等关注的问题。我们最终的目标是，对开发人员而言，你只需要支持一个平台；对企业而言，我们要让他们知道OpenStack就是最终的平台。&amp;rdquo;Pedar Ulander说到。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;OpenStack目前的问题&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;img style="width: 549px; height: 270px; cursor: pointer;" src="http://www.china-cloud.com/uploads/allimg/111209/0956153V9-1.jpg" alt="" border="0" /&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;1.项目中面临的风险&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;OpenStack的开发步伐充满激情，新版本带来的功能令人印象深刻，研发路线图也十分清晰，让人觉得真是满怀雄心壮志。但有许多类似的开源项目，在实现上其自身存在风险。&lt;/p&gt;&lt;p&gt;Rackspace公司的商务拓展总监Scott Sanchez与参与OpenStack项目的人员进行了许多交谈。他提到了150多名核心开发人员和138家供应商，但实际上仅有三分之一的公司以某种形式贡献了代码。数目看起来虽然不小，但要想维护社区项目的各个分支，这是必要的。&lt;/p&gt;&lt;p&gt;事实上，他们想让OpenStack成为最终平台的解决方案存在风险，甚至会变成一个很大的问题。一个明显的例子是对虚拟化管理程序的支持，OpenStack虽然支持几乎所有的虚拟化管理程序，不论是开源的（Xen、KVM）还是厂商的（Hyper-V、VMware），但对它们的支持仅仅是开启、关闭而已。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;2.厂商之间的利益冲突&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;在许多情况下，你会发现许多参与OpenStack项目的供应商之间存在利益的冲突。对于项目中的方案，许多公司都有自己的替代解决方案。例如，存储解决方案提供商和Swift项目都旨在构建存储平台。存储供应商在项目中并没有免费、开放地提供技术支持，恰恰相反，他们只想确保API的兼容性，并以自己的收费产品替代开源解决方案。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;3.兼容性与开发成本&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;OpenStack是一个框架，一个可以建立公有云和私有云的基础架构。这并不是一个现成的产品，要想开展基础架构方面的工作，企业需要顾问和开发人员。很多时候还需要第三方的集成工具。&lt;/p&gt;&lt;p&gt;此外，新版本的发布过于频繁，一些地方同老版本出现了兼容性问题。如果你对代码做了一些改进，却不被社区接受，那么你使用自己代码更新的版本将变得难以维护。&lt;/p&gt;&lt;p&gt;最后，得考虑一下OpenStack技术人员的成本。比如，在北美和欧洲的成本显然不同。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;4.滞后的服务支持&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;OpenStack一跃而成为&lt;a class="ReplaceKeyword" style="color: blue;" href="http://www.china-cloud.com/" target="_blank"&gt;云计算&lt;/a&gt;市场的明星，但是要想让企业广泛采用它，就必须提供易于部署的产品，并提供明确的技术支持服务。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/licheng/aggbug/2283960.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/licheng/archive/2011/12/11/2283960.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/licheng/archive/2011/12/05/2276470.html</id><title type="text">[Hadoop in China 2011] Hadoop之上 中国移动“大云”系统解析</title><summary type="text">http://server.it168.com/a2011/1203/1283/000001283163.shtml▲中国移动研究院业务支撑所所长孙少陵 在12月3日的HiC2011大会上，中国移动研究院业务支撑所所长孙少陵发表了“电信运营商大数据处理应用研究和实践”的主题演讲。 孙少陵引用了维基百科对大数据的定义，即无法在一定时间内用常规软件工具对其内容进行抓取、管理和处理的数据集合。同时他介绍了大数据呈现出三大特征，即3V：数据大(Volume)，例如Facebook每天在30万台服务器上 处理25Tb数据;时效性要求高(Velocity)，例如搜索引擎要求在几分钟内为用户查询新闻;种..</summary><published>2011-12-05T02:32:00Z</published><updated>2011-12-05T02:32:00Z</updated><author><name>Jonson Li</name><uri>http://www.cnblogs.com/licheng/</uri></author><link rel="alternate" href="http://www.cnblogs.com/licheng/archive/2011/12/05/2276470.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/licheng/archive/2011/12/05/2276470.html"/><content type="html">&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;http://server.it168.com/a2011/1203/1283/000001283163.shtml&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;img src="http://image20.it168.com/201112_0x0/872/efeeb19f3626d05f.jpg" alt="11111111111111111111" border="1" /&gt;&lt;br /&gt;▲中国移动研究院业务支撑所所长孙少陵&lt;/p&gt;&lt;p&gt;在12月3日的HiC2011大会上，中国移动研究院业务支撑所所长孙少陵发表了&amp;ldquo;电信运营商大数据处理应用研究和实践&amp;rdquo;的主题演讲。&lt;/p&gt;&lt;p&gt;孙少陵引用了维基百科对大数据的定义，即无法在一定时间内用常规软件工具对其内容进行抓取、管理和处理的数据集合。同时他介绍了大数据呈现出三大特征，即3V：数据大(Volume)，例如Facebook每天在30万台&lt;a class="nounderline" title="服务器" href="http://product.it168.com/list/b/0402_1.shtml" target="_blank"&gt;服务器&lt;/a&gt;上 处理25Tb数据;时效性要求高(Velocity)，例如搜索引擎要求在几分钟内为用户查询新闻;种类和来源多样化(Variety)，除了结构化的数 据、半架构化、非结构化的数据大量产生，有的数据来自关系型数据库，有的数据来自数据仓库，而有的数据来自互联网网页等。目前对大数据的处理主要应用于分 析型的应用场景，如搜索引擎网页处理、用户行为分析、商业智能(BI)等。&lt;/p&gt;&lt;p&gt;根据IDC的报告，未来10年全球数据量将以40%的速度增长，2020年全球数据量将达到35ZB，是2009年的44倍。随着移动终端的快速发展，&lt;a class="nounderline" title="手机" href="http://product.it168.com/list/b/0302_1.shtml" target="_blank"&gt;手机&lt;/a&gt;每 天产生的信息量已经大大增加，与此同时，和很多企业一样，中国移动也越来越需要长期保存各类数据，来对用户行为进行分析、做市场研究。但由于存储容量的限 制，中国移动对数据存储的周期正在逐年缩短。截止2010年，中国移动业务支撑系统存储容量约3万TB，网管系统约3000TB。&lt;/p&gt;&lt;p&gt;在2007年，中国移动开始了对&amp;ldquo;大云&amp;rdquo;的研究，目前已经推出了&amp;ldquo;大云&amp;rdquo;1.5版本，孙少陵介绍，&amp;ldquo;大云&amp;rdquo;1.5产品中的分析型PaaS产品就基于Hadoop平台。&lt;/p&gt;&lt;p&gt;&lt;img src="http://image20.it168.com/201112_0x0/872/10bffdebecbaedd5.jpg" alt="11111111111111111111" border="1" /&gt;&lt;br /&gt;▲中国移动&amp;ldquo;大云&amp;rdquo;1.5产品总体架构&lt;/p&gt;&lt;p&gt;　 　在中国移动&amp;ldquo;大云&amp;rdquo;1.5产品总体架构中，分析型PaaS产品底层基于Hadoop数据存储和分析平台，在此数据基础之上建立数据仓库系统，整合并行数 据挖掘工具、数据抽取转换以及搜索引擎，来提供商务智能平台，该商务智能平台既可以用于移动自身对用户数据的挖掘和处理，可可以作为IDC服务供应。&lt;/p&gt;&lt;p&gt;　 　根据孙少陵分享的测试数据来来看，基于Hadoop的数据抽取转换具有明显的低成本高性能特征，硬件成本仅为1/5，而性能却提升了3倍以上，这也更加 坚定了孙少陵对Hadoop平台发展前景的信心。同时他还透露中国移动希望建立Hadoop中国的分支，并计划在2012年启动。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/licheng/aggbug/2276470.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/licheng/archive/2011/12/05/2276470.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/licheng/archive/2011/12/05/2276446.html</id><title type="text">[Hadoop in China 2011] 淘宝OceanBase打造结构化NoSQL数据库</title><summary type="text">http://tech.it168.com/a2011/1204/1283/000001283214.shtml在今天下午进行的NoSQL系统及应用分论坛中，来自淘宝的核心系统存储组技术专家杨传辉(淘宝花名：日照)发表主题演讲“OceanBase——结构化数据海量存储系统”，介绍了淘宝OceanBase的架构、应用及其后续发展。▲淘宝核心系统存储组技术专家杨传辉 据杨传辉介绍，淘宝的OceanBase数据库最初的设计目的就是将NoSQL的可扩展性和低成本与关系型数据库的性能进行融合，充分发挥两者的优势。 Note : NoSQL 可扩展性和低成本，与关系型数据库的性能，进行融合，充分发挥两者.</summary><published>2011-12-05T02:20:00Z</published><updated>2011-12-05T02:20:00Z</updated><author><name>Jonson Li</name><uri>http://www.cnblogs.com/licheng/</uri></author><link rel="alternate" href="http://www.cnblogs.com/licheng/archive/2011/12/05/2276446.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/licheng/archive/2011/12/05/2276446.html"/><content type="html">&lt;p&gt;http://tech.it168.com/a2011/1204/1283/000001283214.shtml&lt;/p&gt;&lt;p&gt;在今天下午进行的NoSQL系统及应用分论坛中，来自淘宝的核心系统存储组技术专家&lt;strong&gt;杨传辉&lt;/strong&gt;(淘宝花名：日照)发表主题演讲&amp;ldquo;&lt;strong&gt;OceanBase&amp;mdash;&amp;mdash;结构化数据海量存储系统&lt;/strong&gt;&amp;rdquo;，介绍了&lt;strong&gt;淘宝OceanBase的架构、应用及其后续发展&lt;/strong&gt;。&lt;/p&gt;&lt;p&gt;&lt;img src="http://image20.it168.com/201112_500x375/872/6acfd3b4dba3d06a.jpg" alt="淘宝OceanBase打造结构化NoSQL数据库" border="1" /&gt;&lt;br /&gt;▲淘宝核心系统存储组技术专家杨传辉&lt;/p&gt;&lt;p&gt;据杨传辉介绍，&lt;span style="color: #ff0000;"&gt;&lt;strong&gt;淘宝的OceanBase数据库最初的设计目的就是将NoSQL的可扩展性和低成本与关系型数据库的性能进行融合，充分发挥两者的优势。&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #ff0000;"&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Note : NoSQL 可扩展性和低成本，与关系型数据库的性能，进行融合，充分发挥两者的优势。&lt;br /&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;img src="http://image20.it168.com/201112_500x375/872/d203af887eaf3d6b.jpg" alt="淘宝OceanBase打造结构化NoSQL数据库" border="1" /&gt;&lt;br /&gt;▲淘宝OceanBase数据类型&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;　 　OceanBase适用于以下四类场景：&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;&lt;span style="color: #ff0000;"&gt;一是 业务需要大表Join或者千万级数据秒级在线统计的场景;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #ff0000;"&gt;&lt;strong&gt;二是 数据库性能不好，需要迁移到NoSQL的场景;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;&lt;span style="color: #ff0000;"&gt;三是 分库分表麻烦，数据增长快的场景;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;&lt;span style="color: #ff0000;"&gt;四是 NoSQL系统遇到问题，考虑其他NoSQL系统的场景。&lt;/span&gt;&lt;/strong&gt;不适用线下分析、网页库、淘宝图片存储等非结构化数据的场景。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;img src="http://image20.it168.com/201112_500x375/872/905afbf2836d16ec.jpg" alt="淘宝OceanBase打造结构化NoSQL数据库" border="1" /&gt;&lt;br /&gt;▲淘宝OceanBase系统架构&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;杨传辉表示在线存储数据量大，但最近一段时间修改数据量不大，因此将&lt;strong&gt;基准数据&lt;/strong&gt;和&lt;strong&gt;增量数据&lt;/strong&gt;分离，将&lt;strong&gt;增量数据不断合并到基准数据&lt;/strong&gt;。其中&lt;span style="color: #ff0000;"&gt;&lt;strong&gt;基准数据的数据量大，一般采用SATA或者SSD存储;增量数据的数据量小，一般采用&lt;a class="nounderline" title="内存" href="http://product.it168.com/list/b/0205_1.shtml" target="_blank"&gt;&lt;span style="color: #ff0000;"&gt;内存&lt;/span&gt;&lt;/a&gt;或者SSD服务&lt;/strong&gt;&lt;/span&gt;。&lt;/p&gt;&lt;p&gt;&lt;img src="http://image20.it168.com/201112_500x375/872/399d923840fc7156.jpg" alt="淘宝OceanBase打造结构化NoSQL数据库" border="1" /&gt;&lt;br /&gt;▲淘宝OceanBase设计要点&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;　 　OceanBase的新功能是&lt;strong&gt;海量数据实时分析&lt;/strong&gt;，它支持按列存储，可以将千万级数据实时统计时间控制在秒级，简单统计操作两秒内。淘宝OceanBase的应用有很多，杨传辉着重介绍了收藏夹应用和CTU aCookie统计应用。后续OceanBase还将在可用性、可扩展性和工作方向等方面进行改进。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/licheng/aggbug/2276446.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/licheng/archive/2011/12/05/2276446.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/licheng/archive/2011/12/05/2276429.html</id><title type="text">[Hadoop in China 2011] 华为 - NoSQL/NewSQL在传统IT产业的机遇和挑战</title><summary type="text">http://tech.it168.com/a2011/1204/1283/000001283212.shtml在今天下午进行的NoSQL系统及应用分论坛中，来自华为的IT产品线企业数据解决方案架构师钟顒发表主题演讲“NoSQL/NewSQL在传统IT产业的机遇和挑战”，介绍了NoSQL/NewSQL的兴起、挑战与演进，以及传统IT产业的演变与挑战。▲华为IT产品线企业数据解决方案架构师钟顒 传统IT产业在数据领域面临很多挑战，据钟顒介绍，历史数据对企业来说是有价值的，国家的法规也规定一些特定的历史数据要长时间保留下来，这就需要对历史数据进行管理。随着传统IT产业的不断演进，电信系统容量的..</summary><published>2011-12-05T02:14:00Z</published><updated>2011-12-05T02:14:00Z</updated><author><name>Jonson Li</name><uri>http://www.cnblogs.com/licheng/</uri></author><link rel="alternate" href="http://www.cnblogs.com/licheng/archive/2011/12/05/2276429.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/licheng/archive/2011/12/05/2276429.html"/><content type="html">&lt;p&gt;http://tech.it168.com/a2011/1204/1283/000001283212.shtml&lt;/p&gt;&lt;p&gt;在今天下午进行的NoSQL系统及应用分论坛中，来自华为的IT产品线企业数据解决方案架构师钟顒发表主题演讲&amp;ldquo;NoSQL/NewSQL在传统IT产业的机遇和挑战&amp;rdquo;，介绍了&lt;strong&gt;&lt;span style="color: #ff0000;"&gt;NoSQL/NewSQL的兴起、挑战与演进，以及传统IT产业的演变与挑战&lt;/span&gt;&lt;/strong&gt;。&lt;/p&gt;&lt;p&gt;&lt;img src="http://image20.it168.com/201112_500x375/872/e210dc42982c2684.jpg" alt="NoSQL/NewSQL在传统IT产业的机遇和挑战" border="1" /&gt;&lt;br /&gt;▲华为IT产品线企业数据解决方案架构师钟顒&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;　 　传统IT产业在数据领域面临很多挑战，据钟顒介绍，历史数据对企业来说是有价值的，国家的法规也规定一些特定的历史数据要长时间保留下来，这就需要对历史数据进行管理。随着传统IT产业的不断演进，电信系统容量的增加和多系统融合、信令监测系统由抽样到全量的演变、数据中心安全与监控等问题正在挑战传统数据库。&lt;/p&gt;&lt;p&gt;&lt;img src="http://image20.it168.com/201112_500x375/872/c47f723f75df878a.jpg" alt="NoSQL/NewSQL在传统IT产业的机遇和挑战" border="1" /&gt;&lt;br /&gt;▲传统IT产业演进对数据处理挑战总结&lt;/p&gt;&lt;p&gt;　 　为了应对以上挑战，NoSQL/NewSQL应运而生。钟顒对新兴数据库技术进行了如下总结：&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1、NoSQL是从构建分布式系统的角度出发，首先解决量的问题;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2、NewSQL是从继承SQL/ACID处理能力的视角出发，构建分布式系统，其技术优势在于几乎可以无缝的完整的替换原有系统的 RDBMS;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3、流处理技术是将数据从先存储、后处理的模式，转换为先处理的模式。&lt;/p&gt;&lt;p&gt;&lt;img src="http://image20.it168.com/201112_500x375/872/ee59854deec03e53.jpg" alt="NoSQL/NewSQL在传统IT产业的机遇和挑战" border="1" /&gt;&lt;br /&gt;▲NoSQL技术的机遇&lt;/p&gt;&lt;p&gt;钟顒表示现阶段NoSQL面临的挑战主要为两方面，一是不够标准化，二是不能工程化。但目前有些值得关注的进展，如俄亥俄州立大学计算机团队的YSmart工作和普林斯顿大学做的COPS工作。&lt;/p&gt;&lt;p&gt;&lt;img src="http://image20.it168.com/201112_500x375/872/c590623d53317110.jpg" alt="NoSQL/NewSQL在传统IT产业的机遇和挑战" border="1" /&gt;&lt;br /&gt;▲Hadoop企业级应用存在的挑战&lt;/p&gt;&lt;img src="http://www.cnblogs.com/licheng/aggbug/2276429.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/licheng/archive/2011/12/05/2276429.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/licheng/archive/2011/12/05/2276427.html</id><title type="text">[Hadoop in China 2011] Facebook Message在HBase基础上的应用</title><summary type="text">http://tech.it168.com/a2011/1203/1283/000001283206.shtml在今天下午进行的NoSQL系统及应用分论坛中，来自Facebook的技术经理Guoqiang Jerry Chen和软件工程师 Liyin Tang发表主题演讲“Building mission critical messaging system on top of HBase(在HBase的基础上建立关键业务消息系统)”，分享了Facebook开发HBase的经验，并且介绍Facebook Message系统的应用情况。▲Facebook的技术经理Guoqiang Jerry Ch</summary><published>2011-12-05T02:12:00Z</published><updated>2011-12-05T02:12:00Z</updated><author><name>Jonson Li</name><uri>http://www.cnblogs.com/licheng/</uri></author><link rel="alternate" href="http://www.cnblogs.com/licheng/archive/2011/12/05/2276427.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/licheng/archive/2011/12/05/2276427.html"/><content type="html">&lt;p&gt;http://tech.it168.com/a2011/1203/1283/000001283206.shtml&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;在今天下午进行的NoSQL系统及应用分论坛中，来自Facebook的技术经理Guoqiang Jerry Chen和软件工程师 Liyin Tang发表主题演讲&amp;ldquo;Building mission critical messaging system on top of HBase(&lt;strong&gt;&lt;span style="color: #ff0000;"&gt;在HBase的基础上建立关键业务消息系统&lt;/span&gt;&lt;/strong&gt;)&amp;rdquo;，分享了Facebook开发HBase的经验，并且介绍Facebook Message系统的应用情况。&lt;/p&gt;&lt;p&gt;&lt;img src="http://image20.it168.com/201112_500x375/872/4dbb964a6de49902.jpg" alt="Facebook Message在HBase基础上的应用" border="1" /&gt;&lt;br /&gt;▲Facebook的技术经理Guoqiang Jerry Chen&lt;/p&gt;&lt;p&gt;Facebook Message是一个整合了&lt;span style="color: #ff0000;"&gt;&lt;strong&gt;站内消息、电子邮件、短信和聊天功能的综合消息系统&lt;/strong&gt;&lt;/span&gt;，可以在不考虑通讯渠道的情况下联系到想要联系的人，用户还可申请到以@facebook.com结尾的电子邮箱。&lt;/p&gt;&lt;p&gt;&lt;img src="http://image20.it168.com/201112_500x375/872/459fd79453936fd4.jpg" alt="Facebook Message在HBase基础上的应用" border="1" /&gt;&lt;br /&gt;▲Facebook Message&lt;/p&gt;&lt;p&gt;　 　据Guoqiang Jerry Chen介绍，Facebook Message自2009年12月开发以来，经历了小规模的测试到大规模的试用的过程，今年7月份所有的Facebook用户均可使用Facebook Message。&lt;strong&gt;&lt;span style="color: #ff0000;"&gt;Facebook Message每天约80亿的消息，75亿以上的读和写操作。高峰时期每分钟150万的读和写操作，其中约55%的读和45%的写操作，每次的写操作会插入16个记录。&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;img src="http://image20.it168.com/201112_500x375/872/afde39ff1fe4e2d6.jpg" alt="Facebook Message在HBase基础上的应用" border="1" /&gt;&lt;br /&gt;▲为什么会选择HBase&lt;/p&gt;&lt;p&gt;　 　谈到为什么会选择HBase，Guoqiang Jerry Chen&lt;span style="color: #ff0000;"&gt;&lt;strong&gt;认为HBase具有高效率的写操作、良好的随机读操作性能、水平扩展性、自动故障转移、强一致性的特点使得Facebook Message选择HBase，并且HDFS和MapReduce也是一个重要原因。&lt;/strong&gt;&lt;strong&gt;其中强一致性是Facebook Message选择HBase而不是Cassandra的主要原因。&lt;/strong&gt;&lt;/span&gt;&lt;strong&gt;&lt;/strong&gt;&lt;span style="color: #ff0000;"&gt;&lt;strong&gt;HBase中存放短消息、信息元数据和搜索引擎，而Haystack(图像存储)存放 附件和长消息。&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;img src="http://image20.it168.com/201112_500x375/872/f2e5900ec0367f17.jpg" alt="Facebook Message在HBase基础上的应用" border="1" /&gt;&lt;br /&gt;▲Facebook对HBase进行了改良&lt;/p&gt;&lt;img src="http://www.cnblogs.com/licheng/aggbug/2276427.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/licheng/archive/2011/12/05/2276427.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/licheng/archive/2011/12/05/2276417.html</id><title type="text">[Hadoop in China 2011] 中兴：NoSQL应用现状及电信业务实践</title><summary type="text">http://tech.it168.com/a2011/1203/1283/000001283154.shtml在今天下午进行的NoSQL系统及应用分论坛中，中兴云计算平台研发总工、中兴通讯技术专家委员会专家高洪发表主题演讲“NoSQL技术的电信业务实践”，介绍了NoSQL的发展现状及其在电信业务中的应用。▲中兴云计算平台研发总工、中兴通讯技术专家委员会专家高洪 关系型数据库凭借其强大的事物处理能力、灵活的结构化数据查询，以及数据的高可靠性在很多领域都有着广泛的应用，占有非常重要的地位。但是近几年这一形 势发生了变化，随着移动互联网的兴起，电信业务在高性能、低迟延、海量数据处理和高扩展性上..</summary><published>2011-12-05T02:06:00Z</published><updated>2011-12-05T02:06:00Z</updated><author><name>Jonson Li</name><uri>http://www.cnblogs.com/licheng/</uri></author><link rel="alternate" href="http://www.cnblogs.com/licheng/archive/2011/12/05/2276417.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/licheng/archive/2011/12/05/2276417.html"/><content type="html">&lt;p&gt;http://tech.it168.com/a2011/1203/1283/000001283154.shtml&lt;/p&gt;&lt;p&gt;在今天下午进行的NoSQL系统及应用分论坛中，中兴云计算平台研发总工、中兴通讯技术专家委员会专家高洪发表主题演讲&amp;ldquo;NoSQL技术的电信业务实践&amp;rdquo;，介绍了NoSQL的发展现状及其在电信业务中的应用。&lt;/p&gt;&lt;p&gt;&lt;img src="http://image20.it168.com/201112_500x375/872/4fcf97c0361f1dae.jpg" alt="中兴：NoSQL应用现状及电信业务实践" border="1" /&gt;&lt;br /&gt;▲中兴云计算平台研发总工、中兴通讯技术专家委员会专家高洪&lt;/p&gt;&lt;p&gt;　 　关系型数据库凭借其强大的事物处理能力、灵活的结构化数据查询，以及数据的高可靠性在很多领域都有着广泛的应用，占有非常重要的地位。但是近几年这一形 势发生了变化，随着移动互联网的兴起，电信业务在高性能、低迟延、海量数据处理和高扩展性上对数据存储提出了更高的要求，传统的关系型数据库以及无法满足 这种需求。NoSQL的趋势已不可避免。据高洪介绍，中兴自08年开始启动NoSQL的技术研发，现已在移动互联网、物联网等平台发挥重要的作用。&lt;/p&gt;&lt;p&gt;&lt;img src="http://image20.it168.com/201112_500x375/872/9045bc637402027f.jpg" alt="中兴：NoSQL应用现状及电信业务实践" border="1" /&gt;&lt;br /&gt;▲什么是NoSQL?&lt;/p&gt;&lt;p&gt;谈到为什么会使用NoSQL，高洪认为在web2.0是的，各种应用层出不穷，数据量急剧增长，对数据库技术提出了新的需求，例如对数据库高并发读写的需求、对海量数据的高效率存储和访问的需求、对数据库的高可扩展性和高可用性的需求，以及对数据库低成本的需求等。&lt;/p&gt;&lt;p&gt;&lt;img src="http://image20.it168.com/201112_500x375/872/b88576bb39e55c06.jpg" alt="中兴：NoSQL应用现状及电信业务实践" border="1" /&gt;&lt;br /&gt;▲NoSQL的优势和挑战&lt;/p&gt;&lt;p&gt;　 　现阶段，NoSQL主要应用于互联网企业中，国外的如Google、Facebook和Amazon，国内的如新浪、淘宝、视觉中国、优酷、中国移动、 豆瓣网等。NoSQL目前面临着一些挑战，比如不成熟、没有足够的支持资源、缺少数据分析和商业智能，另外，NoSQL系统的需要大量的技能进行安装，并 需要大量的维护工作。&lt;/p&gt;&lt;p&gt;&lt;img src="http://image20.it168.com/201112_500x375/872/63a488b34b6ff047.jpg" alt="中兴：NoSQL应用现状及电信业务实践" border="1" /&gt;&lt;br /&gt;▲中兴通讯云计算总体架构&lt;/p&gt;&lt;img src="http://www.cnblogs.com/licheng/aggbug/2276417.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/licheng/archive/2011/12/05/2276417.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/licheng/archive/2011/12/05/2276414.html</id><title type="text">[Hadoop in China 2011] HBase在淘宝平台上的应用和改进经验</title><summary type="text">http://tech.it168.com/a2011/1202/1283/000001283152.shtml在今天下午进行的NoSQL系统及应用分论坛中，来自淘宝的软件工程师张毅发表主题演讲“淘宝HBase应用和改善”，介绍了HBase在淘宝平台上使用，以及对HBase的调试和改进的经验分享。▲淘宝软件工程师张毅 随着淘宝的数据的快速增长，数据量每年都会翻一翻，这样的增长速度是淘宝选择HBase的重要原因。据张毅介绍，淘宝自今年年初开始对HBase进行预 演，包括线上应用和调优，以及bug的修改。这一过程包括三个阶段，第一阶段是对HBase的属性和配置等性能方面的熟悉过程;第二阶段将H..</summary><published>2011-12-05T02:03:00Z</published><updated>2011-12-05T02:03:00Z</updated><author><name>Jonson Li</name><uri>http://www.cnblogs.com/licheng/</uri></author><link rel="alternate" href="http://www.cnblogs.com/licheng/archive/2011/12/05/2276414.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/licheng/archive/2011/12/05/2276414.html"/><content type="html">&lt;p&gt;http://tech.it168.com/a2011/1202/1283/000001283152.shtml&lt;/p&gt;&lt;p&gt;在今天下午进行的NoSQL系统及应用分论坛中，来自淘宝的软件工程师张毅发表主题演讲&amp;ldquo;淘宝HBase应用和改善&amp;rdquo;，介绍了HBase在淘宝平台上使用，以及对HBase的调试和改进的经验分享。&lt;/p&gt;&lt;p&gt;&lt;img src="http://image20.it168.com/201112_500x375/872/1bd0a196f7d60664.jpg" alt="HBase在淘宝平台上的应用和改进经验" border="1" /&gt;&lt;br /&gt;▲淘宝软件工程师张毅&lt;/p&gt;&lt;p&gt;　 　随着淘宝的数据的快速增长，数据量每年都会翻一翻，这样的增长速度是淘宝选择HBase的重要原因。据张毅介绍，淘宝自今年年初开始对HBase进行预 演，包括线上应用和调优，以及bug的修改。这一过程包括三个阶段，第一阶段是对HBase的属性和配置等性能方面的熟悉过程;第二阶段将HBase应用 到线上;第三阶段是修改其内部代码，并投入到HBase的社区中，使其得到进一步的发展。&lt;/p&gt;&lt;p&gt;&lt;img src="http://image20.it168.com/201112_500x375/872/9b0f816efa184927.jpg" alt="HBase在淘宝平台上的应用和改进经验" border="1" /&gt;&lt;br /&gt;▲淘宝选择HBase的原因&lt;/p&gt;&lt;p&gt;　 　HBase是分布式NoSQL存储系统，其底层数据存储基于HDFS，具有高可用和高性能的特点，可以处理百亿行*百万列*上万个版本的列式存储。谈到 淘宝为什么会选择HBase，张毅表示，淘宝选择HBase就像当年选择Hadoop一样，因其具有海量数据处理的能力。淘宝每天的数据量都能达到PB 级，需要HBase应对海量数据带来的挑战。另外，HBase还具有易于横向扩展、随机读写的高性能、高可靠性和稳定性、单行写入的强一致性的特点。&lt;/p&gt;&lt;p&gt;&lt;img src="http://image20.it168.com/201112_500x375/872/b4bb46ebfc16879d.jpg" alt="HBase在淘宝平台上的应用和改进经验" border="1" /&gt;&lt;br /&gt;▲HBase在淘宝的规模&lt;/p&gt;&lt;p&gt;　 　张毅认为数据瞬间写入量很大，数据库不好支撑或者需要很高成本支撑的场景可以考虑使用HBase，或者数据需要长久保存，且量会持续增长到比较大的场景 可以选择HBase。但是HBase毕竟不是关系型数据库，因此不适用于有Join、多级索引、表关系复杂的数据模型。&lt;/p&gt;&lt;p&gt;&lt;img src="http://image20.it168.com/201112_500x375/872/ab4918e7c854fad5.jpg" alt="HBase在淘宝平台上的应用和改进经验" border="1" /&gt;&lt;br /&gt;▲NoSQL专场爆满 向坐在地上的同学们致敬&lt;/p&gt;&lt;img src="http://www.cnblogs.com/licheng/aggbug/2276414.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/licheng/archive/2011/12/05/2276414.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry></feed>
