使用 Nginx 构建一个“高”可用的 PHP 集群

  跳过没必要的介绍,直接进入主题。目前建立一个高可用集群的方案不少,可以使用硬件或软件 LVS 类构建,现在我说的方案是只用 Nginx 来进行构建。

  这个集群的架构如下图:

  上面我们共部署了5个节点,每个节点上配有 Nginx + PHP。这个架构的重点就在于,Nginx 不只是与本机的 PHP 通信,整个集群应该把 Nginx 部分抽象到面向业务的第一层,而 PHP 则在第二层。每层都为多节点均衡架构。

  其中 Nginx 层面使用 DNS 均衡实现,DNS 负载均衡是一个很传统的方案,在单个域名下绑定多个 IP 进行轮循,可有效的把业务请求分发到多个节点上,但某节点故障时则需要有相应的解析处理,把故障的节点从 DNS 记录中删除。目前推荐使用 DNSPOD 的解析服务,可支持 API 操作。这样我们就可以自己建立一个服务器状态管理的程序,自动切换 DNS 解析。(注意:域名解析的切换需要 5~10 分钟,当然这是由域名解析记录的 TTL 值决定,为避免大量的 DNS 解析影响请求打开速度,建议 10 分钟或以上为佳)

  第二层 PHP 则由 Nginx 使用 upstream 实现均衡,Nginx 本身的 upstream 就已支持节点健康维护的功能,可以放心的交给 Nginx 来做。而如果 PHP 业务层带缓存功能,则要考虑使用一致性哈希模块来实现 upstream 的均衡策略,否则节点故障对整个 PHP 集群的缓存造成大幅度的震荡。根据我们测试的数据,在普通哈希策略下,一个节点故障会导致 90% 的缓存失效,而使用一致性哈希则可降低到 50% 。并且我们的 Nginx 一致性哈希模块,还可以把故障节点的请求分发到邻近的节点,可以再提高部分缓存命中率,使得整体提升到 70% 的样子。

  这样一个架构方案给我们实现了一个“高”可用的 PHP 集群,并且没有单点故障的隐患存在。DNS 解析服务是多节点,Nginx 层是多节点,PHP 层更是多节点的模式。如使用 LVS 方案,LVS 服务本身也要做一套热备,才能避免单点问题,且增加了架构复杂性。

  应该选择那套架构方案还由业务决定,这里我只是提供一个新思路罢了 ;)

  Nginx 一致性哈希模块:ngx_consistent_hash-1.0.tar

             ngx_consistent_hash-1.1.tar.gz (Fix nginx reload bug)

  使用方法:

upstream backend {
server 192.168.1.101 weight=1;
server 192.168.1.102 weight=2;
server 192.168.1.103 weight=3;
server 192.168.1.104 weight=4;
server 192.168.1.105 weight=5;
consistent_hash $host$request_uri 2;
}

  consistent_hash 支持2个参数,第一个参数为哈希字符串,第二个参数为备份节点数量。当某节点故障时,将把该节点的请求分发到2个备份节点上。当然你可以设置1或更高,建议2为佳 :)

  模块对 nginx 原 upstream 模块的 weight 节点权重功能进行了替换,weight 的功能是配置节点在集群中的位置顺序。(做一致性哈希,这是必须的)

Yo2Lua App Engine 一个全新的应用开发模式

Yo2Lua App Engine 简介:

  Yo2Lua App Engine (简称 YAE)于2009年开始研发,并在2011年5月正式推出第一个Alpha版本的公有云计算平台( http://yo2lua.com )。

  YAE 通过借鉴 PHP 语言的众多功能,来完善 LUA 语言在 Web 开发场景中所需要到的功能,充分模仿 PHP 的函数方法,让开发者可以很简单的从 PHP 语言转入到 LUA 语言开发环境。

  YAE 向用户提供一系列分布式计算、存储服务,包括分布式文件系统、分布式数据库集群、分布式缓存、分布式定时服务等。在这些服务基础上, YAE 更引入多个开放平台功能,以创新的模式提供给开发者使用。如:手机短信接口、网易微博开放接口等丰富多彩的应用。

关于 LUA 语言:

  Lua 是一个小巧的脚本语言。作者是巴西人。该语言的设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。它的主页是 http://www.lua.org

  Lua最著名的应用是在暴雪公司的网络游戏WOW中。

  更多信息请查阅:http://yo2lua.com/wiki/lua/

使用 YAE 进行开放平台的应用开发:

  YAE 已经把开放平台的 API 进行了完整的封装,开发者点下按钮就可以把开放平台的 API 接口集成到你的应用开发环境,形成简单的函数调用。

  如腾讯微博获取首页动态的接口是:weibo.qq.statuses.home_timeline()

  由此开发者在使用 YAE 进行应用开发的门槛和周期都大大降低,并且托管在 YAE 公有云计算平台上,开发者不再需要为架构而折腾,这些由 YAE 提供服务。

  对于应用开发者,YAE 带来的好处有:

  • 硬件成本更低,无需预先购买设备,承担更大的投入风险
  • 开发成本更低,YAE 提供许多服务供开发者使用,开发者无需重复开发,包括队列、数据库、缓存、定时、验证码、计数器,几乎覆盖了Web开发的所有领域。
  • 运维成本更低,在 YAE 上的应用无需关心硬件维护、服务监控、数据容灾等操作,YAE 会通过其高可靠的架构和方便的监控页面为用户将运维成本降到最低扩展性更强,在 YAE 上的服务无需关心服务压力猛增时带来的扩容等操作,YAE 自动支持服务扩展
  • 更加安全可靠,前端防攻击、代码检查等功能,在 YAE 上的所有应用均为多机房容灾部署,比传统的部署模式更加安全可靠,并且 YAE 提供服务的 SLA 来实现对用户服务质量的承诺

  数据库热备?有木有???负载均衡?有木有???

  都有 :) YAE 是云计算平台,你的应用会被分布到多台服务器上执行。并且我们可以确保没有单点故障,而导致你的应用访问受限。

YAE 作为开放平台应用托管服务商,我们到目前已接入的开放平台有:

  • 腾讯微博
  • 网易微博
  • 手机短信接口

  在未来半年我们还会加入更多第三方接口到我们 YAE 平台上。帮助开发者从众多第三方接口 API 中抽身出来,专注于做好自己的应用功能。

理解云计算

  现在互联网最热门的关键字“云计算”,大大小小的公司纷纷加入到这块领域。简单来说,目前的“云计算”主要分为:SaaS、PaaS和IaaS三大类。

  其中SaaS云计算,为软件即服务的概念。把传统客户端软件部署在互联网上,用户只需要一个浏览器就可以使用到软件的模式。其实早在2000年就已经有B/S结构的软件服务,与现在所说的SaaS云计算相近,但此前的B/S结构软件服务,数据库等服务端是需要用户自行部署的,而非由软件提供商进行统一部署。SaaS模式则由软件提供商统一部署并提供计算和存储服务。鉴于此特性一方面用户的使用成本降低很多,在软硬件的投入都大大缩小,但由此而衍生新的问题:数据保密和安全性。因为数据都是存放在软件服务商的服务器上,如何保障用户的数据保密性和安全性,将是SaaS模式在推广上的主要门槛。

  PaaS云计算,为平台即服务的概念。这是一种较创新的服务模式,PaaS云计算平台将为用户提供一个标准的、可扩展的应用计算与数据存储服务。用户可以在PaaS平台上开发并部署自己的应用程序,目前已有Google的App Engine(Java、Python语言)、Sina的App Engine(PHP语言)、HeroKu.com的App Engine(Ruby语言)和我们的Yo2lua App Engine(Lua语言)等多个PaaS平台。PaaS云计算要求用户使用平台所支持的开发语言,并以平台开发SDK为基础进行应用程序开发。按业界常规服务都会提供数据库和文件存储服务,其中数据库服务因需要做到云服务支持非常庞大的数据量,一般服务商多为基于key/value非关系型数据库为主,当然有技术实力的云计算平台还在此基础上实现类关系型数据库的特性,以方便开发者使用;而文件存储服务也是一个巨大的系统,可容纳PB级别的文件。

  目前大多数网站因其规模已有较多在使用云存储系统(文件/KeyValue DB),这部分就是我们一般说的私有云服务。这些系统一般只为其网站本身使用,而非公有云计算平台是为计算服务。

  对于PaaS云计算平台的数据保密和安全,同样是平台发展的主要门槛。但相对SaaS平台则要低一些,并且数据服务敏感度也没有SaaS类服务高。PaaS平台的数据存储服务为应用程序服务,平台方并不理会客户的应用存储什么类型的数据和数据结构,但SaaS平台则对于平台方更简单易懂,是由SaaS平台方制定的存储方案,最清楚的也是平台方咯 ;)

  IaaS云计算,为系统计算和存储服务为主。这是由原来虚拟机服务延伸出来的服务,(虚拟机:把一台服务器虚拟成多台服务器使用)就是我们在05年间开始流行的VPS虚拟服务器。但IaaS云计算跟我们此前的虚拟机服务有非常大的区别,老的虚拟机服务只是简单的在一台服务器上虚拟出多台虚拟的服务器,以供多种业务使用,但这些虚拟服务器的计算和存储都将局限在一台物理服务器上,并且要跟其他几个虚拟服务器共同使用这台物理服务器,计算能力和存储能力都无法达到一台物理服务器的效果。而IaaS云计算服务则可按客户需求,购买需要多快的CPU、更大的内存和磁盘空间,通常这些要求可以大于一台物理服务器;比如我可以个购买几个TB的磁盘,并且这个磁盘还会带有Raid备份,不需要担心硬盘损坏而丢失任何数据。

  IaaS云计算服务平台更侧重于提供硬件服务,客户需要在购买到的虚拟机上安装自己需要的操作系统,并部署应用服务。也因此IaaS云计算服务跟传统的应用程序兼容性最好,不需要客户对原应用程序进行修改就可以迁移到IaaS云计算平台上,享用云计算带来的多种好处。虽然IaaS提供的类虚拟服务器服务,看似没有数据保密和安全的问题,但可不要忽略虽然数据是一个虚拟的硬盘空间,但同样是可以被可获取到该磁盘映像的第三方读取。当然这个风险较PaaS平台和SaaS平台都要低。

  目前国外的亚马逊EC2和国内的阿里云、世纪互联和华为等企业都在发展自己的IaaS云计算平台。但目前国内的IaaS云计算平台与亚马逊所提供的云计算服务还有一定差距,国内还未有一个标杆服务,大家仍处于紧张的研发和测试阶段,并未出现国内的亚马逊 :) 但相信未来两年就会有的了。届时国内的IDC服务将被彻底颠覆(当然服务的售价可不能比普通托管服务器的费用还高)如世纪互联的服务,因其机房带宽资源比较优秀,但其云计算服务的销售价格偏高,相信一般网站不会轻易选择他们的服务。毕竟托管物理服务器价格比你低的话,那么IaaS云计算还有哪些优势来吸引客户?

  总结来说,PaaS和IaaS才是严格意义上的云计算平台,而SaaS只是一个云计算的服务场景。而PaaS云计算平台也包括一部分标准的IaaS平台服务,如:文件存储和数据库服务;IaaS云计算平台更容易让客户接受,但虽然客户在使用IaaS云计算服务与传统的服务器计算没什么区别,同样客户也是需要SA(运维工程师)来管理这些虚拟服务器,IaaS只是提供虚拟的服务器而已。

  现在来看,SaaS平台可以构建在PaaS平台或IaaS云平台上,PaaS平台也包括一些IaaS平台所提供的服务,而IaaS平台更接近传统的服务器服务、更容易让客户接受(现阶段是这样)

  依我看:未来云计算必然会是PaaS云计算平台为主,PaaS云计算平台可给客户更廉价、更简单的服务。

聊聊创业

  创业?人人都在说创业,我从18岁开始就想着开网吧。哈哈,当时是2000年哦。整体在计算5块/小时耶,网吧50台电脑上座率达到80%,持续8小时就不得了。40x8x5=1600/天。幸苦当时老爸没钱给我折腾这个,否则我就可能因为这个改道了。并且后来验证了我当时的想法很天真,背后的成本是多大自己完全不知道。但也不否认一部分人是做网吧做到上市了(顺网?)

  我觉得这个机会不适合我,我当时也没有能力把这个机会把握得住。看看现在我们今天,刚出校门就有太多人是想开始创业的。谁不想做老板而去做个小员工?成功率不到1%。

  机会对大家都是平等的,但并不是人人都有做好准备去迎接机会。成功的背后有着很多辛酸,未吃过苦头光有远大想法有何用?如果上帝真眷顾你,让你成功了,但也很难保证你能对这个成功有深刻的认识和珍惜。有句俗语“来得快,去得快”。我们可以找找看谁中彩票后能得到成功的发展,成为亿万富翁。

  在我未有社会经验的情况下,我选择了打工。当然我知道我自己未来是属于互联网的,所以我的工作是网站后台开发一职。我也从份工作中得到了很多经验,在04年我投入到了一份全新的工作岗位:弱电工程师(网络、监控、安防系统)、智能灯光系统工程师。why ?因为互联网需要网络,另外是智能灯光这个项目可与互联网连接。05年我们就可以在手机上控制家中的电灯、电视机 :) 我是在为自己的未来积累着很多很多有可能需要到的经验,让我可以从多个角度去理解互联网。

  我在06年感觉时机到了,创办了Yo2.cn优博网。虽然当时已经过了博客热潮,但我们凭借更专业的技术得以跻身于BSP前列。我对成功的定义并不是说我们是否获得投资,发展更大。而是我们却却实实的体现到自我价值,才使得我们在08年实现收支平衡。也是因为Yo2项目让我这个乡下农民可以跻身于浩浩荡荡的互联网行业之中。目前还跟BlogCN合并,想当初我们还在想如果我们有BlogCN,BlogBUS的用户量,会是怎样的发展。

  在09年我到了杭州跟一老板做网游,但最终因游戏题材不算入流只能作罢。现在他们还在继续努力,我祝福他们可以早日得到大家的认可,打入市场:) 从这个项目中让我学到不做自己不在行的事!否则成本是巨大的。当然我在这个项目中获得最大还是技术经验,毕竟自己从来没接触过网游的开发,具体的技术实现也是由我们几个同事从无到有做出来的。更重要的是我从中得到Lua开发的方向,可行性:) so~有了我们目前正在筹备的 yo2lua.com 项目。

  Yo2LUA 项目从09年开始筹备一直到今天,它依然是在筹备状态。不过我们在10年可做了很多准备工作,1.技术预览、评估, 2.收购 yo2.com 域名,3.组建团队,4.开发demo,5.积累资金人脉。等等很多事情

  当你想到一个idea时,世界上不少于3个人也都想到了。云计算这算啥,现在很多公司都在做,google app engine、sina app engine、yun engine太多了。所以我说想法不值钱,值钱的是实现。谁有能力把想法以最低成本最高效率做出来。反观我们的状态好像有点滞后 _-!! 呵呵,但我有信心可以做好,因为我们走不寻常路。也许我们的赛道还未有竞争者加入,但我们也不能放松!在我们的筹备阶段,已经把技术核心实现得差不多并且在给其他项目提供技术支撑了 :) 未来几个月我们还将更大的努力,尽快能够立项正式开始发展。

   最后我想对创业说的是:机会和时机!你要有丰富的经验把握机会,在不同的阶段请做正确的事,沉着稳定的走向自己目标。

Yo2.com 回家了!~

  Yo2,多么熟悉的感觉。不过在我注册yo2域名时,yo2.com 已经被老外给注册了。退而求次购买了yo2.cn域名。04年cn域名还很好注册(但是要公司身份注册,所以有好多短的域名可供选择哦 :P )现在时代不一样了,时间很快就走了7年。.cn域名的注册量已经非常高啦。再想挑到个好点的域名来注册都挺难的~当然.com的域名就更难咯。

  不过近期的政策给我的信息是,.com 稳妥一些。而 yo2.com 域名一直是在荒废,注册者把它挂到域名拍卖的网站好几次,域名也是停靠在这些域名拍卖网站上的。早几年就想过把 yo2.com 买回来的(当然这笔费用肯定不小)苦于是 yo2 的起步阶段,未有这个能力。今年看到 yo2.com 停靠在 sedo.com 这个域名拍卖网站上,恰好又遇到被赶出国门的事情,使我的热火重新燃烧起来了 _-!!

  so~注册一个sedo帐号(居然注册还要签名验证,老外一点不马虎),尝试把 yo2.com 拍一下。经过一个月的拍卖过程(没有第三方加入,嘿好事),终于能跟卖家达成一个合适的价位 :P 。当然还是高,但还是把自己一直以来的心愿完成重要!~哈哈。

  上周四跑银行电汇,周一钱就到sedo公司的帐上了。接着周二开始正式进入域名转移的流程,期间sedo的客服帮了很多忙(居然还有中国人的客服,直接中文沟通联系,方便 :P )今天下午就正式转入到我在 godaddy 的账户上了。

  嗯,就是2010年04月13日,下午15点20分。Yo2.com 正式属于俺的了!~谢谢,谢谢各位乡亲父老。弟达成这个心愿了。当然这个域名肯定是Yo2使用,至于是否使用在博客服务上,或其他项目这还未有决定。(Yo2不只是一个博客服务上唷~我们还有更酷的产品呢:P)

  拭目以待!~Yo2.com 必将给你惊喜!