2013年12月3日星期二

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

   过去的三年,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、不同页面设计的商品转化率。采用转化率更高的装修方式将提升整个网站商品的转化率,给企业带来更多订单。
优化供应链
京东的商品量非常大,面对成千上万的商品,如何做到每个商品的及时补货?后台供应链完全依靠人工,挑战很大。据李曦介绍,京东的很多商品都是自动补货,系统会根据销售情况和市场预期,依靠预测模型,在库存量达到某一个阀值时自动生成订单发给供货商。一些复杂的因素会被去除掉,例如团购等,以保证预测模型的准确。
大数据也被应用在了物流配送领域。京东会分析物流人员、仓库以及用户之间的地理关系,为物流人员提供最优配送路径,提高配送速度,提升用户体验。
智能网站
所谓智能网站,即“千人千面”,让每个来购物的用户都能获得最合适的体验。基于大数据挖掘和分析,网站将变得越来越智慧。
一些商品具有重复购买的特点,例如牙膏,购买之后在可预期的一段时间内将会用完。京东会分析此类商品用户两次购买之间的平均时间,在这个时间到来之后,推介系统有可能会给用户推介相应的商品,提升用户的体验,提高商品的转化率。
推介引擎是网站的主动出击,相比而言,搜索引擎似乎是被动行为。
在搜索日志里,京东发现,用户常常搜索的不是商品,而会直接表达自己的意图,例如“送老爸”、“送老婆”等等。此类查询,结果应当是什么呢?李曦分析道,一般很少有商品会将这些词汇放入到自己的商品描述中,而用户的评论则会对此有所提及,例如“特别适合老爸,老爸很高兴”等等。基于对用户海量评论的分析和挖掘,京东尝试去理解用户的意图,经过对数据的挖掘、统计和分析,为商品打上标签,例如商品适合送给男性,或是女性,将这些结果提供给用户。
“这是非结构化数据的处理在电商的应用,关键是对文本的理解是不是正确。”李曦说。
同样的算法京东也会应用到商品描述之上,例如挖掘商品的评论,可以了解某些商家商品的优缺点,商家可以据此做出改进;而这些主观描述的优缺点特征,也可以成为搜索的筛选条件。
此外,在互联网金融的热热潮之中,京东也涉足了数据金融领域,首先尝试面向供应链提供金融服务,使得供应商能够提前拿到账款,提高资金周转速度。京东也与全国各类金融机构展开了多样化的合作。
李曦分析,互联网金融的崛起,并非无根之水,谁掌握了用户数据,谁就可以涉足金融。根据用户消费数据分析,企业可以在很短的时间内评估消费者的信用,提供信贷服务。

2013年11月30日星期六

BootCamp 5.0 最新版驱动下载(Win8/Win7)

用苹果iMac或者Macbook笔记本玩Windows么?那么这个文章和最新版的BootCamp 5.0.5033下载对你会有帮助。Boot Camp 5 这个新版本并不是4月份刚发的,而是苹果在3月份发布,因为有网友索要,因此特别在IT之家补上。
当买回iMac、Macbook Pro(含 Retina)、Macbook Air 新款电脑和本本后,很多国内消费者习惯性的去安装Win7Win8。不管你是彻底抹掉Mac OS X分区单装Win7、单装Win8,还是双系统保留Mac OS用Boot Camp来安装第二个系统,你都需要苹果官方最新的驱动程序下载。实际上,在Mac OS里面用Boot Camp来安装Windows 的时候,有一步是提示你下载保存Boot Camp for Windows这个苹果官方驱动包的。一般情况下,软媒小编建议大家关注并下载最新版本的Boot Camp,毕竟每次更新都能解决N多的兼容性问题,尤其是Windows8系统。
微软在2012年正式发布了Windows8正式版,但知道2013年的3月份,苹果才迟迟的推出了为Win8和Win7精心准备的驱动软件套装——BootCamp 5.0.5033 正式版驱动下载。这个版本解决了非常多的大小问题,之前当你使用Mac OS X系统里面自带的BootCamp 4 的驱动的时候,你会发现在Windows8系统里会出现发热厉害、电池表现差、系统不稳定等一些毛病,现在2013年最新版本的BootCamp 5.0 一出,完美的解决了Win8和Win7下因驱动造成的一系列问题,同时,显卡驱动方面的带来了游戏性能的大提升也是非常好的消息。
强烈建议所有安装了 Win8 的 Mac 电脑用户升级 BootCamp,基本上2010年之后的 Macbook Pro、Air、Mini 以及 iMac 均能完美支持 BootCamp 5 以及 Win8,而早于此日期的大多产品只能使用 BootCamp 4 与 Win7 了,苹果将不再提供升级了。新版本的 BootCamp 除了解决了 Win8 驱动的一系列bug之外,显卡驱动的游戏性能也有了不小提升哦……
BootCamp 5.0 版本更新简介
BootCamp 是苹果电脑的 Windows 驱动程序包的名称,BootCamp 5 主要提供了一系列的关键Bug修正和 Windows 8 系统下的硬件驱动更新,包括最新的 Macbook Pro Retina 视网膜屏幕、雷电接口、USB 3.0、Apple Trackpad触控板及所有主板芯片、WiFi网卡、声卡、蓝牙、键盘输入以及显卡的驱动等。为了你的爱机着想,使用 Mac 安装 Windows 的朋友应该没理由不更新它的。当然如果你不是使用苹果电脑的话可以完全无视这篇文章。
除了支持Win7和Win8系统这一功能之外,Boot Camp 5.0还将可以让用户在他们的Mac机中安装3TB的硬盘驱动。不过,用户在安装之前必须要确保自己的系统已经升级到OS X 10.8.3,Safari已经升级到6.0.3。
BootCamp 5 支持机型与操作系统:
基本上大部分主流的 Mac 电脑都可以升级到 BootCamp 5,包括 MacBook,Mac Mini,MacBook Pro,MacBook Air,iMac 都可以,一些如2009年前及之前的旧型号则不支持,只能安装 BootCamp 4。最简单的判断办法就是,先将 BootCamp 5 下载回去,如果安装时提示错误的话就乖乖去下回 BootCamp 4 吧。而对于操作系统的要求,Win8 和 Win7 下可以装5或4,而在 XP、Vista 下则最高只能安装4。另外 BootCamp 5 只支持64位的系统。
BootCamp 主要用于安装原生的 Windows 系统时使用,如果你使用 Parallels Desktop、VMware Fusion、VirtualBox 等虚拟机软件安装 Windows 的话是不需要安装这个驱动的。
BootCamp 5.0.5033 最新版 for Win7/Win8 下载:
Boot Camp 5 苹果官方网站:http://www.apple.com.cn/support/bootcamp/
Boot Camp 5.0.5033 苹果官方下载(简体中文版):
http://support.apple.com/downloads/DL1638/zh_CN/BootCamp5.0.5033.zip 
建议使用魔方优化大师里面的魔方U盘启动软件,来制作微软原版的Win7、Win8系统安装U盘,魔方最新版下载:点击此处
软件版本:5.0.5033
发布日期:2013-3-14
文件大小:553.62 MB
系統需求: MacBook Air(2011 年中)或更新机型、MacBook Pro(2010 年中)或更新机型、* 不支持 MacBook Pro 13 英寸 - 2010 年中、Mac Pro(2009 年初)或更新机型、Mac mini(2011 年中)或更新机型、iMac(2010 年中或更新机型)、Windows 7 x64、Windows 8 x64
软媒再次提示一:BootCamp 5.0 只支持64位的Win7或Win8系统;
软媒再次提示二:2009年前及之前的旧型号苹果Mac电脑则不支持使用BootCamp 5.0,建议依然使用BootCamp 4系列;
BootCamp 5.0.5033 最新版 for Win7/Win8 使用方法:
1、在Win7或Win8系统里将整个 .zip 文件内容解压到您指定存放的地方;
2、运行Boot Camp 文件夹里面的 setup 文件;软媒提醒:如果你抹掉了Mac OS所需的BootCamp隐藏分区,就别运行Setup了,直接找文件夹里面的驱动手动安装就可以了。
3、系统提示允许更改时,点按“是”然后按照屏幕上的说明操作。安装可能需要几分钟。请勿中断安装进程。安装完成后,在出现的对话框中点按“完成”。
4、系统重新启动对话框会出现。点按“是”以完成安装。 

2013款MacBook Air装Windows7单系统


经过两天的摸索,查找无数资料终于把2013款的MacBook Air装上了WIN 7,虽然网上有很多的资料但是都不是我想要的,第一个我的是2013款的MacBook Air,跟原来2012 11款MacBook Air完全不一样,2013款MacBook Air需要usb3的芯片驱动,要不会在装的时候导致鼠标键盘失灵,所以我们要把usb3装到系统映像文件里面,第二个我要在2013款MacBook Air装Win7单系统(这是个人喜好,苹果再占个系统会感觉很不爽),好了,我们知道我的需求之后就开始行动吧

首先准备工作:

2个4G的U盘,这样为了方便,一个U盘来做PE(最低要求WIN7PE,WIN8也行的,我这用的老毛桃),一个U盘来做系统的启动盘

要准备硬件就这么多了

第一步:做系统盘(苹果电脑下完成)

在苹果OS X系统下打开bootcamp,拷贝你的系统镜像文件到桌面,插入的U盘,这个U盘就是来做系统的启动盘了,bootcamp里面的做系统盘相信大家一看就明白了,就不多说了,大概可能就不到一个小时就完成了,完了之后就拔下U盘吧,注意:安装单系统的话就不要在bootcamp下安装系统,那个是安装双系统的



第二步:做PE启动盘(WIN 7 或WIN 8电脑下完成)

我用的时老毛桃,可以百度搜索一下老毛桃,下载最新的那个就可以了,不懂做PE的可以去百度一下。



第三步:格式化苹果系统(苹果电脑下完成)

插入你做好的PE的U盘,按下开机键时会听到苹果电脑会响一声,这时尽快按option键就会进入选择启动的系统,你会看到除了OS X系统之后后面多了一个windows系统,没错,那个就是刚刚做的PE,点PE进去系统,用DiskGenius分区工具删掉所有分区,不要犹豫,删掉苹果系统吧,然后选择磁盘,编辑选择转换成MBR格式,因为windows系统是要在MBR格式的硬盘下安装,苹果的好像是GUID什么的去了,不用管它是什么了,转换MBR格式之后然后可以用快速分区也行,按照你自己的爱好分为3个或者4个都没问题。好了,现在你的苹果系统已经没了,你开机就没有系统了,要想回去也行,开机的时候按option+command+R 联网恢复OS X系统可能需要8小时左右(可能我这网速比较慢)



第四步:把usb3芯片驱动载入到系统盘里面去(最重要的一步)

首先我们在微软的官网下载了intel c220的usb3的驱动,点击这里直接下载吧,本人就用这个亲测可用

Intel(R)_USB_3.0_eXtensible_Host_Controller_Driver.zip

下载完之后在某个盘下新建一个文件夹,为了方便,最好英文名的,如aaa。在这个文件夹下面再建立两个文件夹,一个叫usb3,一个叫mount   。
 用上面下载好的usb3驱动。一个压缩包。解压后里面drivers文件夹下有hcsswitch和xhci两个文件夹,根据你安装的win7版本32位还是64位选择相应的文件。不管是哪个版本,应该都是12个文件,拷贝出来放到刚才建立的usb3文件夹里面。
 把boot.wim和install.wim两个文件拷贝到你建立的那个母文件夹(即里面有usb3和mount的,aaa目录下)。这两个文件在win7安装盘的sources文件夹里。
windows下用管理员模式运行cmd。并进入你刚才建立的母文件夹。
 比如你在d盘建立了aaa文件夹,那你需要打两条命令:
d:回车
cd aaa 回车(我擦,回车这词暴露年龄)
 然后继续输入下面的命令。
dism /mount-wim /wimfile:boot.wim /index:2 /mountdir:mount
 dism /image:mount /add-driver /driver:usb3\iusb3hub.inf
 dism /image:mount /add-driver /driver:usb3\iusb3xhc.inf
 dism /image:mount /add-driver /driver:usb3\iusb3hcs.inf
 dism /unmount-wim /mountdir:mount /commit
上面五条命令目的是给boot.wim添加驱动。第一条的意思是挂载镜像,然后是三条添加驱动的命令,最后一条命令是把镜像卸载。
 同理,把里面的boot.wim都替换成install.wim就可以给install.wim加驱动。install.wim文件比较大,所以会花些时间。
 注意!:挂载install.wim的命令里,针对你挂载的win7版本不同,index:后面的数字也是不同的,建议大家用旗舰版,旗舰版的话对应的数字是4,即挂载的那条命令里要打
index:4
两个文件加入驱动完成后,拷贝回原来的sources文件夹,这样win7的安装盘添加驱动就完成了。



第五步:安装WINDOWS7

用刚刚添加了驱动的win7 安装盘插入到macbook air 上面,按下电源键的同时一样按option键,进入选择windows系统,好了,安装步骤你应该都知道了,祝大家能安装成功

为了很多小伙伴可能看不懂我这些步骤,下面本人提供一个windows7 旗舰版添加了USB3驱动的镜像文件,用苹果自带的bootcamp做好安装盘直接装就可以了,那个添加USB3的步骤就省了



注:如有不懂的小伙伴可以留言联系我,本文绝对原创在博客园发表,网上经本人查找基本上没找到说这个的文章....

如何在 VMware ESXi 虚拟机上运行 KVM

记得以前就有人问过 “能不能在一个虚拟机上运行虚拟机”,答案当然是可以的,Xen HVM, KVM, VMware, Qemu 等 Hypervisor 都可以这样嵌套虚拟,不过由于性能低下实际用处不大。在 VMware ESXi 虚拟机上运行虚拟机,被称为多层虚拟或者嵌套虚拟机(Nested VMs)。如果只有一台电脑想测试多节点 OpenStack 环境的话,使用 VMware ESXi 虚拟几个运行 KVM Hypervisor 的 OpenStack 计算节点是个不错的办法。VMware ESXi 5.0 默认情况下不支持嵌套虚拟,所以在 VMware ESXi 虚拟机里安装完 KVM 以后会发现 KVM 虽然能装但不可用:
# kvm-ok 
INFO: Your CPU does not support KVM extensions
KVM acceleration can NOT be used
解决办法很简单:1、修改 VMware ESXi 的设置;2、修改对应虚拟机的设置。
登陆 VMware ESXi 控制台打开 VMware ESXi 5.0 的 SSH 服务(默认 SSH 服务是关闭的),然后用 ssh 登陆 VMware ESXi 后在 config 文件中最后加入 vhv.allow = “TRUE” 一行:
# vi /etc/vmware/config
libdir = "/usr/lib/vmware"
authd.proxy.vim = "vmware-hostd:hostd-vmdb"
authd.proxy.nfc = "vmware-hostd:ha-nfc"
authd.proxy.nfcssl = "vmware-hostd:ha-nfcssl"
authd.proxy.vpxa-nfcssl = "vmware-vpxa:vpxa-nfcssl"
authd.proxy.vpxa-nfc = "vmware-vpxa:vpxa-nfc"
authd.fullpath = "/sbin/authd"
authd.soapServer = "TRUE"
vmauthd.server.alwaysProxy = "TRUE"
vhv.allow = "TRUE"
重启 VMware ESXi 后编辑虚拟机选项(需要先关闭虚拟机),打开 Edit virtual machine settings 对话框,在 options 页面的 General Options 选项里把 Guest Operating System 的类型换成 Other 里面的 VMware ESxi 5.x,如图:
running nested vms on vmware esxi
最后启动虚拟机后再 kvm-ok 一下就可以看到 KVM 可以用了:
# kvm-ok 
INFO: /dev/kvm exists
KVM acceleration can be used
相关阅读:
在 CentOS 上安装和配置 KVM.
在 VMware ESXi 上安装 Minix.
在 VMware ESXi 虚拟机上运行不同的 Hypervisor 可以看看 VMware 的 Running Nested VMs.

OneStack:分步部署 All-in-One 的 OneStack 实验环境

囧,上次 OneStack 项目作者 Kayven 发过来的 OneStack 介绍和配置的文章只发了一半就忘了(本来打算分两部分发的~),今天在草稿箱里把这部分整理出来了,希望文章内容还没有过时(OpenStack 和 Ubuntu 版本都有了很大变化 …)。
前部分介绍请看:OneStack:Ubuntu 12.04 上一键自动部署 OpenStack。下面介绍的是用 OneStack 分步部署 OpenStack 的方法:
1、切换 root,或者用 sudo 执行脚本:
$ sudo -i
2、(可选,如果不需要跳过本步骤):
系统语言设置,可以参考 oneStack.sh locale 部分,不在此介绍。比如设置 apt 源:
# vi /etc/apt/sources.list
3、设置网络(可以参考 oneStack.sh locale 部分):
# vi /etc/network/interfaces
4、配置参数,除了网络 ip,其它可以不变:
## 数据库
MYSQL_PASSWD=${MYSQL_PASSWD:-"cloud1234"}
## 自行检查下面network/interfaces的两个网卡设置与此处一致
OUT_IP="192.168.139.50"
## 选择虚拟技术,裸机使用kvm,虚拟机里面使用qemu
VIRT_TYPE="qemu"
## token, 登录dashboard密码
ADMIN_TOKEN="admin"
5、部署基本系统
./setup_base.sh
6、添加镜像(Ubuntu12.04),添加一个实例,注意:里面的 ip 需要自己配置,镜像地址可以自己改动:
./setup_test.sh
7、分别部署控制节点和计算节点:
控制节点同上,可以去掉 nova-compute;
计算节点,只需要配置网络、数据库、虚拟机技术即可。
配置参数,除了计算节点 ip,其余与控制节点相同(包括 nova.conf 里的 ip)自行检查下面 network/interfaces 的两个网卡设置:
ServerControlIP=”192.168.139.50″
computeControlIP=”192.168.139.150″ # 本计算节点的外网IP
## token, 登录 dashboard 密码
ADMIN_TOKEN="admin"

## 网络配置
NETWORK_CONF=${NETWORK_CONF:-"/etc/network/interfaces"}
cat <$NETWORK_CONF
# The primary network interface
auto eth0
iface eth0 inet static
pre-up ifconfig eth0 hw ether b8:ac:6f:9a:ee:e5 #不需要绑定网卡的不需要这一行
        address 192.168.139.51 #外网ip
auto eth1
iface eth1 inet static
pre-up ifconfig eth1 hw ether b8:ac:6f:9a:ee:e5
        address 10.0.0.2 #内网IP

INTERFACES
sed -i -e "s/192.168.139.51/$computeControlIP/g" $NETWORK_CONF
/etc/init.d/networking restart
注意:以下与控制节点相同
## 配置 /etc/nova/nova.conf,这里与控制节点的配置相同!比如ip是控制节点的ip
MYSQL_PASSWD=${MYSQL_PASSWD:-"cloud1234"}
NOVA_DB_USERNAME=${NOVA_DB_USERNAME:-"novadbadmin"}
NOVA_DB_PASSWD=${NOVA_DB_PASSWD:-"cloud1234"}
OUT_IP="192.168.139.50" 
……
## 选择虚拟技术,裸机使用 kvm,虚拟机里面使用 qemu
VIRT_TYPE="qemu"
7、执行 ./addComputeNode.sh
./addComputeNode.sh
如果对这篇有任何技术问题请直接咨询 OneStack 项目的原作者 Kayven (Hily.Hoo@gmail.com),git/github 粉也可以从这里获得源码: https://github.com/Kayven/OneStack

DMTCP 分布式多线程检查点工具

高性能计算/分布式计算等大量计算需要程序运行几天、几周甚至几个月,如果期间因为电力或者不可避免的问题导致程序中断会浪费大量的时间和人力,还有超级计算机在这段时间里运行的电力成本。我们没有遇到过电力问题,不过我们最近遇到的场景是实验室需要做强制安全检查,要求关闭所有电脑,所以我们需要一种工具能设置断点暂停程序、把状态保存到硬盘、再按照要求恢复,就像程序员用 IDE 调试程序一样,设置断点、单步跟踪(或恢复运行)。
在多主机、多线程的复杂分布式计算环境,给程序设置断点不是一件容易的事情,因为程序的某部分可能在其他主机上运行。DMTCP: Distributed MultiThreaded CheckPointing 是我们目前正在考察的一个工具之一,我们喜欢它的一个原因是它不需要修改 Linux 内核,不依赖内核和内核模块。

安装

先安装一些编译 DMTCP 需要用到的软件包:
$ sudo apt-get install build-essential
下载 DMTCP 源代码后,解压、配置、编译、安装:
$ wget http://ufpr.dl.sourceforge.net/project/dmtcp/dmtcp/1.2.7/dmtcp-1.2.7.tar.gz
$ tar zxvf dmtcp-1.2.7.tar.gz
$ cd dmtcp-1.2.7
$ make
$ sudo make install
我们先来看一个例子程序,转到 dmtcp-1.2.7 里的 test 目录运行 dmtcp1,这个例子很简单,按照顺序输出 1 2 3 … 数字:
$ cd test
$ ./dmtcp1
  1   2   3   4   5   6 ^C
接下来我们要试验的是,中断这个例子程序,然后看看能不能恢复它。步骤是:
  1. 启动控制端 dmtcp_coordinator;
  2. 用 dmtcp_checkpoint 运行这个 dmtcp1 程序;
  3. 强制中断 dmtcp1;
  4. 恢复运行 dmtcp1.

使用

开另外一个窗口或者 screen 运行控制端 dmtcp_coordinator,用 l 查看当前节点状态:
$ dmtcp_coordinator
dmtcp_coordinator starting...
    Port: 7779
    Checkpoint Interval: disabled (checkpoint manually instead)
    Exit on last client: 0
Type '?' for help.

?
COMMANDS:
  l : List connected nodes
  s : Print status message
  c : Checkpoint all nodes
  i : Print current checkpoint interval
      (To change checkpoint interval, use dmtcp_command)
  f : Force a restart even if there are missing nodes (debugging only)
  k : Kill all nodes
  q : Kill all nodes and quit
  ? : Show this message

l
Client List:
#, PROG[PID]@HOST, DMTCP-UNIQUEPID, STATE
[7845] NOTE at dmtcp_coordinator.cpp:1039 in onConnect; REASON='worker connected'
     hello_remote.from = b51cf8-7846-516fbedc(-1)
然后重新用 dmtcp_checkpoint 运行 dmtcp1 这个例子程序:
$ dmtcp_checkpoint ./dmtcp1
dmtcp_checkpoint (DMTCP + MTCP) 1.2.7
Copyright (C) 2006-2011  Jason Ansel, Michael Rieker, Kapil Arya, and
                                                       Gene Cooperman
This program comes with ABSOLUTELY NO WARRANTY.
This is free software, and you are welcome to redistribute it
under certain conditions; see COPYING file for details.
(Use flag "-q" to hide this message.)

  1   2   3
回到控制端,l 一下就会看到多了条结点状态,dmtcp1 程序[进程号 7846]运行在主机名为 vpseedev 的主机上。
l
Client List:
#, PROG[PID]@HOST, DMTCP-UNIQUEPID, STATE
1, dmtcp1[7846]@vpseedev, b51cf8-7846-516fbedc, RUNNING
现在我们在控制端设置一个检查点(checkpoint),用 c 命令:
c
[7845] NOTE at dmtcp_coordinator.cpp:1315 in startCheckpoint; REASON='starting checkpoint, suspending all nodes'
     s.numPeers = 1
[7845] NOTE at dmtcp_coordinator.cpp:1317 in startCheckpoint; REASON='Incremented Generation'
     UniquePid::ComputationId().generation() = 1
[7845] NOTE at dmtcp_coordinator.cpp:643 in onData; REASON='locking all nodes'
[7845] NOTE at dmtcp_coordinator.cpp:678 in onData; REASON='draining all nodes'
[7845] NOTE at dmtcp_coordinator.cpp:684 in onData; REASON='checkpointing all nodes'
[7845] NOTE at dmtcp_coordinator.cpp:694 in onData; REASON='building name service database'
[7845] NOTE at dmtcp_coordinator.cpp:713 in onData; REASON='entertaining queries now'
[7845] NOTE at dmtcp_coordinator.cpp:718 in onData; REASON='refilling all nodes'
[7845] NOTE at dmtcp_coordinator.cpp:747 in onData; REASON='restarting all nodes'
[7845] NOTE at dmtcp_coordinator.cpp:919 in onDisconnect; REASON='client disconnected'
     client.identity() = b51cf8-7846-516fbedc
然后用 Ctrl + c 强制中断这个正在运行的 dmtcp1:
$ dmtcp_checkpoint ./dmtcp1
dmtcp_checkpoint (DMTCP + MTCP) 1.2.7
Copyright (C) 2006-2011  Jason Ansel, Michael Rieker, Kapil Arya, and
                                                       Gene Cooperman
This program comes with ABSOLUTELY NO WARRANTY.
This is free software, and you are welcome to redistribute it
under certain conditions; see COPYING file for details.
(Use flag "-q" to hide this message.)

  1   2   3   4   5   6   7   8 ^C
这样在当前目录 test 下会生成一个临时文件用来保存程序镜像(稍后会看到就是通过这个文件来恢复程序的):
$ ls -l ckpt_dmtcp1_b51cf8-7846-516fbedc.dmtcp
-rw------- 1 vpsee vpsee 2532431 Apr 18 09:37 ckpt_dmtcp1_b51cf8-7846-516fbedc.dmtcp
用 dmtcp_restart 恢复就会看到 dmtp1 这个例子程序(从它中断的地方)继续运行了:
$ dmtcp_restart ckpt_dmtcp1_b51cf8-7846-516fbedc.dmtcp
dmtcp_checkpoint (DMTCP + MTCP) 1.2.7
Copyright (C) 2006-2011  Jason Ansel, Michael Rieker, Kapil Arya, and
                                                       Gene Cooperman
This program comes with ABSOLUTELY NO WARRANTY.
This is free software, and you are welcome to redistribute it
under certain conditions; see COPYING file for details.
(Use flag "-q" to hide this message.)

  9  10  11  12 ^C
DMTCP 甚至允许我们把运行了一半的程序暂停、保存到硬盘、拷贝到其他服务器上、继续运行,很酷吧~