2013年12月5日星期四

CentOS 6.4 Openstack Havana 多节点安装(OVS+GRE)

Openstack的网络一共有5种,其实对于租户网络来说,应该就是4种。所谓Flat模式,并不是租户的网络,而是把虚拟机直接放在 provider networks,就是管理员创建一个网络,让所有的租户直接连接到外网,获得的是公网的IP,不需要经过NAT
  1. local模式:这主要是给测试使用,只能是all in one,不能再添加节点
  2. GRE模式:隧道数量没有限制,性能有点问题。
  3. Vlan模式:vlan数量有4096的限制
  4. VXlan模式:vlan数量没有限制,性能比GRE好。
每一种模式,网络的配置都会有所不同,打算每种网络模式,写一篇文章介绍。这里主要是介绍GRE模式的配置。
我的RDO的网络设置和应答文件 GRE模式:http://t.cn/8DDql5W Vlan模式:http://t.cn/8DDql5O 完成后,自己手工创建ifcfg-br-ex http://t.cn/8DDql50
2013年11月22日:目前RDO在多节点部署有bug,在计算节点创建的虚拟机都会失败。http://openstack.redhat.com/forum/discussion/910/havanna-issues-with-multi-node#Item_14  解决办法就是装完后在控制节点,添加一条iptables的规则:
iptables -I INPUT -s 172.28.1.12/32 -p tcp --dport 9696 -j ACCEPT
并保存规则:service iptables save ,172,28,1,12是我计算节点的IP地址。
2013年11月27日:如果你发现虚拟机访问外网速度很慢,在控制节点,准确说,在网络节点,我的例子里是br-ex绑定在eth0上,运行下面命令,就会让虚拟机访问外网获得正常速度。
ethtool --offload eth0 gro off

基本情况

服务器公网虚拟机通讯网络角色
node10eth0:172.28.1.10/16eth1:10.1.1.10/24控制节点,网络节点,存储节点,计算节点
node12eth0:172.28.1.12/16eth1:10.1.1.12/24计算节点

和vlan模式配置一个明显的区别,就是eth1,是需要配置一个私有的IP地址,必须配置。
网关:172.28.0.1
需要注意:Neutron和Nova network一个明显的不同就是Floating IP的范围和fix ip,这些都是可以通过web方式进行设置。
虚拟机使用的Floating IP:172.28.3.100,172.28.3.200
GRE模式的一个好处就是不需要在交换机做任何配置。
这是龚永生的原理图,我稍微修改了一下,用eth0连接路由器
Snap3

网络基本设置

这是node10的IP设置,node12,也只是修改一下IP地址就可以。
Eth0
# cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
ONBOOT=yes
HWADDR=00:E0:81:D8:43:BE
TYPE=Ethernet
BOOTPROTO=none
IPADDR=172.28.1.10
NETMASK=255.255.0.0

Eth1
# cat /etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE=eth1
ONBOOT=yes
HWADDR="00:E0:81:D8:43:BF"
TYPE=Ethernet
BOOTPROTO=none
IPADDR=10.1.1.10
NETMASK=255.255.255.0

设置源

cd /etc/yum.repos.d/
wget http://mirrors.163.com/.help/CentOS6-Base-163.repo
yum list

LVM设置(可选)

这主要是为了给cinder-volumes单独一个分区,提高性能。
umount /dev/sda2
pvcreate /dev/sda2
vgcreate cinder-volumes /dev/sda2

修改/etc/fstab 去掉cinder-volume的开机挂载,不然会导致你无法重启
sed -i '/cinder-volume/s/^/#/' /etc/fstab

安装packstack

yum install -y http://rdo.fedorapeople.org/openstack/openstack-havana/rdo-release-havana.rpm
yum install -y openstack-packstack
yum -y update

内核更新,所以需要重启机器.

Packstack设置

创建一个应答文件
packstack --gen-answer-file=multi-node-gre-node10.txt
修改配置文件
修改应答文件,由于我已经有专门的cinder volume, 所以不需要创建。如果你没有手工创建cinder volume,那么你就不修改就可以。默认heat和Nagios是没有安装,你可以修改。
CONFIG_CINDER_VOLUMES_CREATE=n
CONFIG_NTP_SERVERS=0.uk.pool.ntp.org
CONFIG_KEYSTONE_ADMIN_PW=admin
CONFIG_NOVA_COMPUTE_HOSTS=172.28.1.10,172.28.1.12
CONFIG_NEUTRON_OVS_TENANT_NETWORK_TYPE=gre
CONFIG_NEUTRON_OVS_TUNNEL_RANGES=1:1000
CONFIG_NEUTRON_OVS_TUNNEL_IF=eth1

GRE的网络,主要是修改后面的3行就可以。
进行安装
packstack --answer-file=multi-node-gre-node10.txt

安装过程,有可能因为源的原因中断,你可以重复运行。

虚拟机访问外网

装完后,查看一下网络
# ovs-vsctl show
9cf303ec-618d-4976-a031-b65646b4e491
    Bridge br-tun
        Port br-tun
            Interface br-tun
                type: internal
        Port patch-int
            Interface patch-int
                type: patch
                options: {peer=patch-tun}
    Bridge br-int
        Port br-int
            Interface br-int
                type: internal
        Port patch-tun
            Interface patch-tun
                type: patch
                options: {peer=patch-int}
    Bridge br-ex
        Port br-ex
            Interface br-ex
                type: internal
    ovs_version: "1.11.0"

由于目前RDO的问题,没有创建br-ex,需要我们手工来创建,这个只需要在node10进行就可以,具体点说,应该是在网络节点上进行。
# cat /etc/sysconfig/network-scripts/ifcfg-br-ex 
DEVICE=br-ex
IPADDR=172.28.1.10
PREFIX=16
GATEWAY=172.28.0.1 
DNS1=114.114.114.114
ONBOOT=yes

修改 /etc/sysconfig/network-scripts/ifcfg-eth0,  注意:一定要加上eth0 的mac地址,不然会出错。
# cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
ONBOOT=yes
HWADDR=00:E0:81:D8:43:BE
然后运行下面命令
ovs-vsctl add-port br-ex eth0; service network restart

Snap2
这个时候,看看网络的设置
# ovs-vsctl show
9cf303ec-618d-4976-a031-b65646b4e491
    Bridge br-tun
        Port br-tun
            Interface br-tun
                type: internal
        Port patch-int
            Interface patch-int
                type: patch
                options: {peer=patch-tun}
    Bridge br-int
        Port br-int
            Interface br-int
                type: internal
        Port patch-tun
            Interface patch-tun
                type: patch
                options: {peer=patch-int}
    Bridge br-ex
        Port "eth0"
            Interface "eth0"
        Port br-ex
            Interface br-ex
                type: internal
    ovs_version: "1.11.0"

网卡详细信息
# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000
    link/ether 00:e0:81:d8:43:be brd ff:ff:ff:ff:ff:ff
    inet6 fe80::2e0:81ff:fed8:43be/64 scope link 
       valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000
    link/ether 00:e0:81:d8:43:bf brd ff:ff:ff:ff:ff:ff
    inet 10.1.1.12/24 brd 10.1.1.255 scope global eth1
    inet6 fe80::2e0:81ff:fed8:43bf/64 scope link 
       valid_lft forever preferred_lft forever
94: virbr0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN 
    link/ether 52:54:00:3a:bf:90 brd ff:ff:ff:ff:ff:ff
    inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
95: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN qlen 500
    link/ether 52:54:00:3a:bf:90 brd ff:ff:ff:ff:ff:ff
107: ovs-system: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN 
    link/ether 9a:b8:00:8e:c9:6d brd ff:ff:ff:ff:ff:ff
108: br-int: <BROADCAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN 
    link/ether 66:30:7d:42:9c:43 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::70b6:c2ff:fef9:3509/64 scope link 
       valid_lft forever preferred_lft forever
110: br-tun: <BROADCAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN 
    link/ether 4e:41:41:1e:a1:43 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::30cc:7fff:fe2d:758b/64 scope link 
       valid_lft forever preferred_lft forever
111: br-ex: <BROADCAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN 
    link/ether 00:e0:81:d8:43:be brd ff:ff:ff:ff:ff:ff
    inet 172.28.1.10/16 brd 172.28.255.255 scope global br-ex
    inet6 fe80::2e0:81ff:fed8:43be/64 scope link 
       valid_lft forever preferred_lft forever

附录

OVS.integration_bridge:br-int
OVS.tunnel_bridge:br-tun
OVS.local_ip:GRE网络使用:就是内部的IP,这里就是eth1上的IP地址
OVS.tunnel_id_ranges:1:1000,就是ID的范围,GRE网络的隧道数量。
OVS.bridge_mappings :physnet1:br-eth1,vlan模式使用该参数
OVS.network_vlan_ranges:physnet1:10:20,vlan模式使用该参数

VPS 选购原则

性能
网络和带宽

附加服务

  • 固定IP的DNS 反解:从IP解析到域名,在架设邮件服务器时尤其重要
    • 反解这方面国内的ISP做得很烂,只有很少一段做有反解NS,而且在有做反解的ISP中大部分设置不是100%正确,即是会出现有时能解析,有时不能解析的现象
    • 可用dig 命令来验证,从反解的根 in-addr.arpa 开始一级一级往下查询,并验证每一级提供的NS是否一致(上下层一致,同级一致)。详情请参考《反向解析域是怎么授权的

国内的VPS

景安互联网数据中心 http://vps.zzidc.com/product.html

美国的VPS

到中国速度最快ping值最低的美国机房介绍

我 们这些网站站长,面对国内日益恶化的网络环境,不得不将自己心爱的网站迁移到太平洋另一边的美国。虽然美国的空间主机或者VPS和服务器价格都是那么的低 廉、性价比那么的高,唯有一个问题让我们一直很头疼,那就是中美网络的连接速度。隔着一个太平洋,不管是再好的光线也是有损耗的。那么今天我就给大家罗列 一下从中国到美国VPS机房速度最快ping值最低的几个机房吧。
1.peer1 dedicated洛杉矶机房。 针对中国线路进行了优化,ping值在200ms以内。
2.he.net 加州(Frement)机房 he.net的单线路机房,这个线路对中国电信和网通比较友好,结点少,速度快。ping值200ms左右。 linode(加州数据中心)用的就是这个机房。
3.krypt圣安娜机房 对中国速度快,结点少,ping值200ms左右。
4.PacificRack的nLayer优化段 对中国速度快,结点少,ping值200ms左右。
大家继续补充,希望能够为新买vps/独立服务器的朋友一共参考。
比如加州还有几个机房, https://www.staminus.net/ 跟Krypt的洛杉矶机房在同一座ONE Wilshire大厦。
http://www.Awknet.com/ 跟PacificRack的洛杉矶机房在同一座大厦里。
http://www.webnx.com/ 跟PacificRack的洛杉矶机房在同一座大厦里。

ThrustVPS Ping 延迟测试和带宽测试

Ping 测试
  • 英国 – thrustvps.com
  • 美国东海岸 – speedtest.nj.damnvps.com
  • 美国Texas,Dallas – speedtest.tx.damnvps.com
  • 美国洛杉矶 – speedtest.la.damnvps.com
下载测试:

如何挑选VPS:Xen与OpenVZ技术性能测试及选购

Ramhost VPS (OpenVZ)

Ramhost提供OpenVZ的VPS,他们承诺自己的VPS不会超卖,并且提供了在线状态系统可供实时查看。他们有Atlanta和Kansas City两个机房。
测试IP:
  • Kansas City 机房: 208.110.73.130 、 Atlanta 机房: 98.142.216.34
可选配置:
  • 80MB内存、128MB突发内存、2G硬盘、50G流量,73元3个月。推荐新手学习Linux VPS使用
  • 128MB内存、192MB突发内存、10G硬盘、150G流量,115元3个月。
  • 256MB内存、384MB突发内存、20G硬盘、200G流量,73元/月。
  • 512MB内存、768MB突发内存、40G硬盘、500G流量,95元/月。
  • 768MB内存、1024MB突发内存、60G硬盘、650G流量,115元/月。
  • 1024MB内存、1.5GB突发内存、80G硬盘、800G流量,150元/月。

BURSTNET VPS (OpenVZ、XEN)

机房在美国东部宾夕法尼亚州斯克兰顿机房,ping 延迟大约有 300 ms ,比西部的主机(200 ms)慢。
特点是价格便宜,性价比很高。
销售价格(淘宝店示例站 Ubuntu China)(以下均为OpenVZ,XEN的贵很多):
  • VPS #1 (Virtual Private Server) - vePortal - CPU: 1GHZ, RAM: 512MB, DISKSPACE: 20GB, BANDWIDTH: 1000GB/MONTH 单月:35 人民币; 每年: 350 人民币
  • VPS #2 (Virtual Private Server) - vePortal - CPU: 1.5GHZ, RAM: 1GB, DISKSPACE: 50GB, BANDWIDTH: 1000GB/MONTH 单月:59 人民币; 每年: 590 人民币
  • VPS #3 (Virtual Private Server) - vePortal - CPU: 2GHZ, RAM: 1.5GB, DISKSPACE: 100GB, BANDWIDTH: 2000GB/MONTH 单月:118 人民币; 每年: 1180 人民币
  • VPS #4 (Virtual Private Server) - vePortal - CPU: 2.5GHZ, RAM: 2.5GB, DISKSPACE: 150GB, BANDWIDTH: 2000GB/MONTH 单月:178 人民币; 每年: 1780 人民币
  • VPS #5 (Virtual Private Server) - vePortal - CPU: 3GHZ, RAM: 3GB, DISKSPACE: 200GB, BANDWIDTH: 4000GB/MONTH 单月:238 人民币; 每年: 2380 人民币
  • VPS #6 (Virtual Private Server) - vePortal - CPU: 4GHZ, RAM: 4GB, DISKSPACE: 250GB, BANDWIDTH: 4000GB/MONTH 单月:298 人民币; 每年: 2980 人民币

Linode VPS


PhotonVPS

提供基于Xen和OpenVZ的VPS,位于加州Los Angeles洛杉矶机房,大陆访问速度比较不错,有中文客服

附录

本文参考和摘抄自:

2013年12月3日星期二

搭建自己的XenServer+CloudStack云平台,提供IaaS服务(一)环境搭建

目标

搭建一个完整的基于XenServerCloudStack的虚拟化平台,提供IaaS服务。
  • 搭建三台安装了XenServer的服务器
  • 搭建一台安装了CloudStack的服务器用以管理云平台
  • 搭建一个NFS服务器负责进行存储工作
  • 可以使用CloudStack云平台进行虚拟机管理

先期准备

服务器准备

  • 三台服务器安装XenServer
  • 一台安装CentOS和CloudStack进行管理
  • 一台安装CentOS和NFS服务负责存储
  • 一台HTTP服务器公共,用来进行模板,iso下载等支持

需要准备的各种安装包

然后使用工具软件将iso文件刻录成光盘或者启动U盘。

环境准备

IP地址分配:
机器名: XS1 系统:XenServer IP地址:192.168.100.61
机器名: XS2 系统:XenServer IP地址:192.168.100.62
机器名: XS3 系统:XenServer IP地址:192.168.100.63
机器名: NFS 系统:CentOS6.2 IP地址:192.168.100.64
机器名: MGR 系统:CentOS6.2 IP地址:192.168.100.65
虚拟机地址分配:
虚拟机地址分配池使用192.168.7.X地址段

安装NFS服务器

安装操作系统

安装CentOS操作系统到服务器,插入光盘,选择默认安装。

配置服务器名称

默认的服务器名为localhost,可以修改/etc/hosts文件来更换服务器名。将etc/hosts添加下面的语句
192.168.100.64 nfs
12.0.0.1 localhost nfs

配置服务器的SELinux

SELinux是一个linux下的安全模块,具体说明见这里,我们这里需要将SELinux打开,需要执行如下指令。
setenforce permissive
为确保其持久生效需更改配置文件/etc/selinux/config,设置为permissive,修改或添加配置文件的内容,添加上下面两句话。
SELINUX=permissive
SELINUXTYPE=targeted

安装NTP服务

NTP服务是一个时间服务,最好所有服务器都有个统一的时间管理,所以需要安装NTP服务。
yum install ntp
service ntpd start

配置NFS服务

首先,安装NFS服务
yum install nfs-utils
建立挂载点目录。使用root建立,为了方便,讲目录权限设置为777
mkdir /primary
mkdir /secondary
修改/etc/exports文件,建立挂载点信息,在文件中添加如下两行
/primary *(rw,async,norootsquash)
/secondary *(rw,async,norootsquash)
配置防火墙信息,允许NFS访问权限,修改/etc/sysconfig/iptables,添加如下内容
-A INPUT -s 192.168.100.0/24 -m state --state NEW -p udp --dport 111 -j ACCEPT
-A INPUT -s 192.168.100.0/24 -m state --state NEW -p tcp --dport 111 -j ACCEPT
-A INPUT -s 192.168.100.0/24 -m state --state NEW -p tcp --dport 2049 -j ACCEPT
-A INPUT -s 192.168.100.0/24 -m state --state NEW -p tcp --dport 32803 -j ACCEPT
-A INPUT -s 192.168.100.0/24 -m state --state NEW -p udp --dport 32769 -j ACCEPT
-A INPUT -s 192.168.100.0/24 -m state --state NEW -p tcp --dport 892 -j ACCEPT
-A INPUT -s 192.168.100.0/24 -m state --state NEW -p udp --dport 892 -j ACCEPT
-A INPUT -s 192.168.100.0/24 -m state --state NEW -p tcp --dport 875 -j ACCEPT
-A INPUT -s 192.168.100.0/24 -m state --state NEW -p udp --dport 875 -j ACCEPT
-A INPUT -s 192.168.100.0/24 -m state --state NEW -p tcp --dport 662 -j ACCEPT
-A INPUT -s 192.168.100.0/24 -m state --state NEW -p udp --dport 662 -j ACCEPT
重启防火墙
service iptables restart
配置NFS为开机自启动
service rpcbind start
service nfs start
chkconfig rpcbind on
chkconfig nfs on
至此,NFS服务器已经配置完成,可以使用mount命令检查是否配置成功,最好使用其他机器进行测试,来保证防火墙是否配置成功,用另外一台连接到一个局域网下的Linux机器,在命令行输入:
mount -t nfs 192.168.0.24:/primary /mnt/primary
如果挂载成功表示NFS配置完成。

安装CloudStack服务器

操作系统安装

将一台服务器安装成CloudStack管理服务器,首先也要安装CentOS操作系统,和NFS一样,操作系统安装默认安装即可。
安装完操作系统以后同样要按照NFS服务器的方式设置一下IP地址和HOSTNAME以及SELinux配置。

安装CloudStack

解压缩安装包
tar zxvf CloudStack-oss-3.0.2-1-rhel6.2.tar.gz

安装数据库

使用./install.sh的D选项自动安装mysql数据库,安装完成以后,可以更改数据库配置/etc/my.cnf文件,添加以下内容
innodbrollbackontimeout=1
innodblockwait
timeout=600
max_connections=350
log-bin=mysql-bin
binlog-format = 'ROW'
启动数据库
service mysqld restart
配置防火墙,编辑/etc/sysconfig/iptables,添加
-A INPUT -p tcp --dport 3306 -j ACCEPT
重启iptables服务
service iptables restart

安装管理平台

执行./install.sh的M,安装管理平台。

初始化数据库

cloud-setup-databases cloud:password@localhost --deploy-as=root

配置管理服务器

cloud-setup-mangament
至此,管理服务器安装完成。

安装XenServer虚拟机

XenServer虚拟机安装较为简单,按照步骤进行安装即可,注意虚拟机的服务器名,IP地址之类的选择我们之前约定好的服务器名和IP地址。

买房贷款利息怎么算? 按揭贷款的利息计算公式


编者按:买房贷款利息怎么算?虽然通过网页版的房贷计算器很容易就能算出房贷月供,但购房者为图个放心还是想知道买房贷款利息怎么算、银行按揭贷款的利息计算公式是什么。本文将回答购房者这个问题,希望对大家的购房置业起到帮助。
一套房子,100平方,10000每平方,首付三成,月供多少,总利息多少,我主要想知道是怎么算的??以贷款20年来算:
按以上的是题意:该房屋的总价为10000*100=100万元,首付三成(30万元),贷款金额为70万元,贷款期限20年,按揭利率为6.8%(最新利率),按还款方式“等额本息法、等额本金法”分别计算如下:
1、等额本息法:计算公式
月还款额=本金*月利率*[(1+月利率)^n/[(1+月利率)^n-1]
式中n表示贷款月数,^n表示n次方,如^240,表示240次方(贷款20年、240个月)
月利率=年利率/12
总利息=月还款额*贷款月数-本金
经计算:月还款额为5343.38 元(每月相同)。还款总额为1282411.20 元,总利息为582411.20 元。
2、等额本金法:计算公式
月还款额=本金/n+剩余本金*月利率
总利息=本金*月利率*(贷款月数/2+0.5)
经计算:第一个月还款额为6883.33 元(以后逐月减少,越还越少),最后一个月还款额为2933.19元。还款总额为1177983.33 元,总利息为477983.33 元。
以上两种方法相比较,等额本金法比等额本息法少还104427.08 元。
采取哪种方法还款,借款人在银行办理贷款手续时可以选择。

Facebook 的系统架构

根据我现有的阅读和谈话,我所理解的今天Facebook的架构如下:
  • Web 前端是由 PHP 写的。Facebook 的 HipHop[1] 会把PHP转成 C++ 并用 g++编译,这样就可以为模板和Web逻贺业务层提供高的性能。
  • 业务逻辑以Service的形式存在,其使用Thrift [2]。这些Service根据需求的不同由PHP,C++或Java实现(也可以用到了其它的一些语言……)
  • 用Java写的Services没有用到任何一个企业级的应用服务器,但用到了Facebook自己的定制的应用服务器。看上去好像是重新发明轮子,但是这些Services只被暴露给Thrift使用(绝大所数是这样),Tomcat太重量级了,即使是Jetty也可能太过了点,其附加值对Facebook所需要的没有意义。
  • 持久化由MySQL, Memcached [3], Facebook 的 Cassandra [4], Hadoop 的 HBase [5] 完成。Memcached 使用了MySQL的内存Cache。Facebook 工程师承认他们的Cassandra 使用正在减少,因为他们更喜欢HBase,因为它的更简单的一致性模型,以到其MapReduce能力。
  • 离线处理使用Hadoop 和 Hive。
  • 日志,点击,feeds数据使用Scribe [6],把其聚合并存在 HDFS,其使用Scribe-HDFS [7],因而允许使用MapReduce进行扩展分析。
  • BigPipe [8] 是他们的定制技术,用来加速页面显示。
  • Varnish Cache [9]用作HTTP代理。他们用这个的原因是高速和有效率。 [10].
  • 用来搞定用户上传的十亿张照片的存储,其由Haystack处理,Facebook自己开发了一个Ad-Hoc存储方案,其主要做了一些低层优化和“仅追加”写技术 [11].
  • Facebook Messages 使用了自己的架构,其明显地构建在了一个动态集群的基础架构上。业务逻辑和持久化被封装在一个所谓的’Cell’。每个‘Cell’都处理一部分用户,新的‘Cell’可以因为访问热度被添加[12]。 持久化归档使用HBase [13]。
  • Facebook Messages 的搜索引擎由存储在HBase中的一个倒置索引的构建。 [14]
  • Facebook 搜索引擎实现细节据我所知目前是未知状态。
  • Typeahead 搜索使用了一个定制的存储和检索逻辑。 [15]
  • Chat 基于一个Epoll 服务器,这个服务器由Erlang 开发,由Thrift存取 [16]
  •     关于那些供给给上述组件的资源,下面是一些信息和数量,但是有一些是未知的:

  • Facebook估计有超过60,000 台服务器[16]。他们最新的数据中心在俄勒冈州的Prineville,其基于完全自定设计的硬件[17] 那是最近才公开的 Open Compute 项目[18]。
  • 300 TB 的数据存在 Memcached 中处理 [19]
  • 他们的Hadoop 和 Hive 集群由3000 服务器组成,每台服务器有8个核,32GB的内存,12TB的硬盘,全部有2万4千个CPU的核,96TB内存和36PB的硬盘。 [20]
  • 每天有1000亿的点击量,500亿张照片,100 billion hits per day, 50 billion photos, 3 万亿个对象被 Cache,每天130TB的日志(2010年7月的数据) [21]
  •     参考引用
        [1] HipHop for PHP: http://developers.facebook.com/blog/post/358
    [2] Thrift: http://thrift.apache.org/
    [3] Memcached: http://memcached.org/
    [4] Cassandra: http://cassandra.apache.org/
    [5] HBase: http://hbase.apache.org/
    [6] Scribe: https://github.com/facebook/scribe
    [7] Scribe-HDFS: http://hadoopblog.blogspot.com/2009/06/hdfs-scribe-integration.html
    [8] BigPipe: http://www.facebook.com/notes/facebook-engineering/bigpipe-pipelining-web-pages-for-high-performance/389414033919
    [9] Varnish Cache: http://www.varnish-cache.org/
    [10] Facebook goes for Varnish: http://www.varnish-software.com/customers/facebook
    [11] Needle in a haystack: efficient storage of billions of photos:http://www.facebook.com/note.php?note_id=76191543919
    [12] Scaling the Messages Application Back End: http://www.facebook.com/note.php?note_id=10150148835363920
    [13] The Underlying Technology of Messages: https://www.facebook.com/note.php?note_id=454991608919
    [14] The Underlying Technology of Messages Tech Talk:http://www.facebook.com/video/video.php?v=690851516105
    [15] Facebook’s typeahead search architecture:http://www.facebook.com/video/video.php?v=432864835468
    [16] Facebook Chat: http://www.facebook.com/note.php?note_id=14218138919
    [17] Who has the most Web Servers?:http://www.datacenterknowledge.com/archives/2009/05/14/whos-got-the-most-web-servers/
    [18] Building Efficient Data Centers with the Open Compute Project:http://www.facebook.com/note.php?note_id=10150144039563920
    [19] Open Compute Project: http://opencompute.org/
    [20] Facebook’s architecture presentation at Devoxx 2010: http://www.devoxx.com
    [21] Scaling Facebook to 500 millions users and beyond:http://www.facebook.com/note.php?note_id=409881258919
        (全文完)

    移动互联网系统架构十大陷阱

       过去的三年,54chen一直奋斗在中国移动互联网一线,历经各种坑爹的情况。以下特做记录。
       Top 1.时不我待 连通性
       cmwap cmnet这样的词语以后应该都会消失在人世间。三年前,经常性地有移不动联不通手机连不上服务器机房的情况。两年前,这种情况要好了一些。一年前,改善很多。现在还存在。相信未来会越来越好,时代在召唤!解法,花钱找有“背景”的机房。
       Top 2.生不逢时 HTML5
       在去年的网络情况下,HTML5依旧不适合用来做优秀的app。前几年的时候,网速各种烂的情况下,2G下的html5应用基本上完全不能用。现在好一点,开始有闲人把html5全部封装好native的调用,使其只做view的显示部分,但是,性能也是个大问题。当然了,同样地,相信未来会越来越好,同样是时代在召唤!解法,过几年再用。
       Top 3.环境恶劣 DNS
       DNS解析也有失败的情况下,app做得再漂亮,请求也不可达。IP要比域名靠谱一些,却有别的问题。解法就是在客户端多留下点域名和ip,一个不能用换下一个。
       Top 4.车匪路霸 http拦截
       天朝运营商,可以干得出你想不到的事情。各种小广告帖你家防盗门上。所以你最好还是在header里声明好了:畜生,这个不是html,这是json,不要加广告!
       Top 5.五花八门 app添加按钮一定要克制
       特别是android app,完全没有限制,或者统一标准,什么样的App都有,做一个大气的App,最重要的一点,看看能不能打开就是主要功能,手指点一下就能到重要功能。
       Top 6.逆流而上 完全不要在传统web上有所期待
       除了新浪微博、QQ空间这种从传统web上推出的App之外,几乎不可能在完成一个App之后,能够让用户按你的引导打开一个网站。其难度不低于当年在传统广告商打完广告,等用户来访问网站一样。
       Top 7.天下大同 App上的sqlite与服务器的mysql数据同步,是个大麻烦
       当App也有一个db在保存数据的时候,就会接二连三地出现数据不一致的问题。最好的解法,公司有个统一的同步机制,最好是固定的框架代码,让业务逻辑隔离开这个同步过程。当然,实际工作过程中,我们甚至还想把所有的云端数据只当成备份,干脆全部交给客户端工程师来完成逻辑,我们让cluster更加可靠和可扩展。
       Top 8.通则不痛 下载渠道要通畅
       动则几M的包,下载不通畅,基本上分分钟新增用户就归零了。而且,要上CDN。这里有个坑,有些个CDN厂商的代理服务器可能会出现缓存有限的情况,文件太大会出现前半部分下载挺快,后面越下越慢,请谨慎使用。
       Top 9.兵贵中速 移动网络更新太快不是好事,太慢也不是好事
       你看看哪个App天天在更新,已经不是web2.0时代了,亲! 同时,不要慢速运转,你的伙伴们会养成拖拉的习惯。最好的办法,内部天天更新,外部月更新甚至是季更新。
       Top 10.未雨绸缪 一定要提前准备全体用户可以看到的公告条,以备不时之需
       web2.0时代,我们要维护系统,在全部页面顶部加一个黄条:今天xx点全站维护。移动时代,这不太可能了,于是你会看到各种微博公告、微信公告、xx公告,反正就是不在自己家公告,因为自己家坏了要维护。

    2013年12月1日星期日

    大数据在京东的应用

    过去几年,京东高速发展,用户数超过了1亿,日PV量达到两亿,SKU(保存库存控制的最小可用单位)接近千万,自建了遍布全国的物流体系,向用户提供了各种各样的特色配送服务。
    在快速发展的过程中,大数据已经成为京东参与竞争的利器。
    京东商城的大数据应用包括商业智能、京东为商家提供的数据产品、以及京东智能网站的有关产品等。
    京东商城大数据研发副总裁李曦介绍说,大数据包含三个层面的内容。
    首先,企业的数据量要达到足够大的规模。“大家普遍同意的定义是,用BI的方式处理不了的数据才叫大数据。”
    大数据的另外一个重要组成部分是模型。“可能是预测模型,也可能是统计模型,或者是其他模型。”
    大数据的落地,还需要能够被最终用户理解并使用的应用。“目前整个行业的大数据应用,大多都是在之前的成熟应用中加入了大数据的内容。”
    在这三个层面之下是大数据的技术平台。
    李曦认为,大数据的上述组成部分都有自己的发展路径,例如模型即服务,数据即服务等等,后者的直观体现是广泛应用于广告领域的数据交易系统——数据拥有者通过互联网和移动互联网将数据开放给商家或供应商。
    三个特点:实时、融合、平台
    与大多数企业一样,数据对于京东的首要意义在于为企业提供决策支持。
    目前,京东有三万多名员工,分布在全国各地,每天都有海量的订单生成,也有海量的货物需要配送,客服也会接听海量的电话。京东的管理者们每天都会接收到各种各样的报表,这些报表都是数据平台产生的。
    “传统的商业智能提供的就是此类服务。”李曦分析道,大数据与BI的区别在于,BI数据分析的结果是延时的,可能是第二天,也可能是几天、几个月之后生成报表,而京东作为电商企业,很多大数据分析必须是实时的,如流量数据、订单数据等等。
    京东大数据应用的第二个特点是“结构化数据”和“非结构化数据”的融合。
    李曦解释说,传统公司,如银行、保险机构、电信企业等,它们的数据大多都是结构化的;而互联网公司,像百度、腾讯等企业的数据,多来源于网络评论、用户日志等,这些数据是非结构化或半结构化的。
    “电商企业的数据处于二者之间:从用户下单到仓储分拣,再到配送,整个交易链条上的数据是结构化的;而用户的网站浏览行为、购买评价等各种数据是非结构化的。”李曦坦言,京东需要做的是将结构化和非结构化的数据巧妙的融合起来,从而实现客户洞察、用户定位、风险评估等一系列与大数据有关的分析和决策行为。
    例如,在商业流通领域,现货率是一个非常重要的概念。简而言之,就是指在一个周期内,如一天,某些商品在仓储中有货的比例。假如某个商品24小时内12小时有货,那么这个商品的现货率为50%。商品的现货率低,意味着用户总是购买不到该商品,采购就需要及时补货。
    京东发现,现货率这个指标在电商应用时,并不一定能够真实反映商品的有、缺货情况。
    用户的购买行为会随时间变化而波动,例如,在深夜的6-8小时内,订单的数量会锐减,那些在交易高峰时间段总是购买不到的货品,在这个时候往往有货,这些商品的现货率有可能并不低。
    也就是说,某些商品,特别是那些销售流速快的商品,用户浏览它时总是缺货的,但是现货率是一个与时间挂钩的概念,与销售流量无关,这些商品的现货率有可能很高。
    “用户没有来的时候有货,并不表明用户来的时候一定会有货。”李曦说。
    为此,京东引进了一个新的指标,聚焦每个PV,每次商品浏览时,每个用户所阅读的商品是否有货,有货的比例是多少;某个商品多少用户看到的是有货;多少个商品用户看到的是缺货等。
    这是非常复杂的用户分析,李曦阐释道,首先必须知道用户从哪里来。京东在全国建有仓储,一些大的区域有很多种仓库,大的仓库也会对货品进行调拨,用户下单时,仓储会知道用户的地点,知道相应的仓库某个商品有没有货,再与这个商品每天的访问量,整合到一起计算出新的指标,实时提供给采销部门。
    这样就能够得出一个较为准确的现货率,真正指导采销备货,提升用户的体验。
    京东大数据应用的另一个鲜明特点是平台化。
    李曦表示,大数据时代企业都希望实现数据驱动,但提供数据服务的人是有限的,因此将平台的能力开放出去就显得至关重要——应当让全公司都可以看到数据,各个部门的分析人员都能够提取数据做自己的分析。
    “从大数据平台的角度而言,关键是做好监控,包括数据的质量,数据的及时性、准确性、一致性要有保障,有监控。”他说。
    京东商城的大数据应用包括商业智能、京东为商家提供的数据产品、以及京东智能网站的有关产品等等。
    大数据应用已经成为了京东日常运营的常规性动作,京东商城大数据研发副总裁李曦介绍了一些京东大数据应用的典型场景。
    精准营销
    几乎所有的电商企业都会基于用户的购买行为做精准营销,主要方式是E-mail、短信等。网站推介系统也是一种较为隐蔽的营销方式。
    在李曦看来,依靠大数据进行精准营销,最重要的是用户建模,即用户画像。
    例如,建一个模型来分析用户的购买心理——在用户首次浏览的商品和最终购买的商品之间,用户浏览了多少同类型的商品,中间的时间段有多长。一看到商品就去购买属于冲动性消费;看某类商品的时间较长,又互相比较,最终选择了相对便宜的商品,这是目标明确的消费。根据这些特征,可以分析出用户笼统的购物心理,进而得出某个品类商品的购物心理。
    一些品类,用户较少去做比较,另一些品类,用户则较为谨慎,促销的时候,可以根据这种心理,采用有针对性的营销方式。
    在创新用户体验方面,大数据也能带来收益。例如,京东会测试不同UI、不同页面设计的商品转化率。采用转化率更高的装修方式将提升整个网站商品的转化率,给企业带来更多订单。
    优化供应链
    京东的商品量非常大,面对成千上万的商品,如何做到每个商品的及时补货?后台供应链完全依靠人工,挑战很大。据李曦介绍,京东的很多商品都是自动补货,系统会根据销售情况和市场预期,依靠预测模型,在库存量达到某一个阀值时自动生成订单发给供货商。一些复杂的因素会被去除掉,例如团购等,以保证预测模型的准确。
    大数据也被应用在了物流配送领域。京东会分析物流人员、仓库以及用户之间的地理关系,为物流人员提供最优配送路径,提高配送速度,提升用户体验。
    智能网站
    所谓智能网站,即“千人千面”,让每个来购物的用户都能获得最合适的体验。基于大数据挖掘和分析,网站将变得越来越智慧。
    一些商品具有重复购买的特点,例如牙膏,购买之后在可预期的一段时间内将会用完。京东会分析此类商品用户两次购买之间的平均时间,在这个时间到来之后,推介系统有可能会给用户推介相应的商品,提升用户的体验,提高商品的转化率。
    推介引擎是网站的主动出击,相比而言,搜索引擎似乎是被动行为。
    在搜索日志里,京东发现,用户常常搜索的不是商品,而会直接表达自己的意图,例如“送老爸”、“送老婆”等等。此类查询,结果应当是什么呢?李曦分析道,一般很少有商品会将这些词汇放入到自己的商品描述中,而用户的评论则会对此有所提及,例如“特别适合老爸,老爸很高兴”等等。基于对用户海量评论的分析和挖掘,京东尝试去理解用户的意图,经过对数据的挖掘、统计和分析,为商品打上标签,例如商品适合送给男性,或是女性,将这些结果提供给用户。
    “这是非结构化数据的处理在电商的应用,关键是对文本的理解是不是正确。”李曦说。
    同样的算法京东也会应用到商品描述之上,例如挖掘商品的评论,可以了解某些商家商品的优缺点,商家可以据此做出改进;而这些主观描述的优缺点特征,也可以成为搜索的筛选条件。
    此外,在互联网金融的热热潮之中,京东也涉足了数据金融领域,首先尝试面向供应链提供金融服务,使得供应商能够提前拿到账款,提高资金周转速度。京东也与全国各类金融机构展开了多样化的合作。
    李曦分析,互联网金融的崛起,并非无根之水,谁掌握了用户数据,谁就可以涉足金融。根据用户消费数据分析,企业可以在很短的时间内评估消费者的信用,提供信贷服务。