1

29号,我们在一起

Posted in PHP, 关于我们 at 06月 30th, 2008 / 1 Comment »

几天的北京一直阴雨连绵,路上泥水很多,我在担心有些朋友是不是来不了了,并且在路上打车也不好打,还被雨淋了半天,呵呵。

到了图书大厦,发现的确没有往常周末人多,毕竟是周日,而且还是雨天。
到了会场,我惊喜的发现,会场的座位几乎都坐满了!

在我整个演讲过程中,同学们也都非常积极踊跃,还有两位年龄稍长的读者,他们一直很认真的倾听,很感谢你们的支持!

在分发奖品时,每个人几乎都领到了礼物,希望下次有更多的人得到大奖:)
这是我们“开源之路,LAMP点亮中国”的第一站,大家有什么建议和感想,可以发到论坛上,活动照片会在稍候发上来,再次感谢大家。

0

PHP QT

Posted in PHP at 06月 23rd, 2008 / No Comments »

某位同学说了,什么是QT,QA?

其实是QT是个很强大的东东,这是使用PHP来编写桌面应用程序(Desktop)的库。

网址为:

http://php-qt.org/

在本文中,向各位网友介绍Web服务器的负载均衡技术。
目前除去Web编程(PHP和MySQL)的负载均衡技术主要有以下3种:

一 软件负载均衡

1 DNS轮询
即在DNS服务器为一个域名的A记录添加多个IP地址。
这样用户在访问网站时,DNS服务器会随机指向不同的服务器。

DNS轮询(Round-robin DNS)技术是负载平衡最常用的方法之一。最早的负载均衡技术是通过DNS服务中的随机名字解析来实现的。在DNS服务器中,可以为多个不同的地址配置同一个名字,这个数据被发送给其他名字服务器,而最终查询这个名字的客户机将在解析这个名字时随机使用其中一个地址。因此,对于同一个名字,不同的客户机会得到不同的地址,因此不同的客户访问的也就是不同地址的Web服务器,从而达到负载均衡的目的。

例如,如果希望使用三个Web服务器来回应对www.cqcc.com的HTTP请求,设它们的IP地址分别是:202.192.99.1,202.192.99.2,202.192.99.3

。安装一个循环复用DNS软件,配置这个软件使得每次要求解析www.cqcc.com时返回所有三个IP地址。第一次解析结果中返回地址的次序与前面

列出的相同,下一次请求则得到稍微不同的答案:202.192.99.2,202.192.99.3,202.192.99.1。再下一次则得到第三个答案:202.192.99.3

,202.192.99.1,202.192.99.2。第一个客户将同202.192.99.1建立连接,因为202.192.99.1是它所看到的第一个IP地址。第二个客户看到的

第一个IP地址是202.192.99.2,因此它将访问202.192.99.2。同样,第三个客户将访问202.192.99.3……

针对上面例子,可以设置该域的DNS服务器中关于该域的数据至少包括与下面例子类似的结果:

www1 IN A 202.192.99.1

www2 IN A 202.192.99.2

www3 IN A 202.192.99.3

www IN CNAME www1

www IN CNAME www2

www IN CNAME www3

这里先为每个计算机定义一个真实名字(www1、www2、www3),然后再为它们定义同一个别名。可以直接针对不同地址设置同一个真实名字(A

记录),只是使用别名的方法易于管理一些。

由于此时反向解析只能针对一台计算机,那么每个Web服务器都需要使用ServerName重新定义同一个名字,或者设置名字解析的顺序为hosts文

件优先,并在hosts文件中定义本身为www,以保证每个服务器的名字设置保持一致。

循环DNS具有对客户机和服务器透明的优点。在事务处理开始时,它也只执行一次。但是,循环DNS常常不能成功,因为中间名服务器和客户机

软件(包括应用很广的浏览器)常常将DNS返回的IP地址存储起来,或忽略存在时间(TTL)值。TTL是一位IP数据比特位,用来指示IP数据报在

被丢弃前可以转发到其它路由器的时间长度。

由于IP地址存储的原因,DNS服务器提供的负载平衡功能被绕过去了,客户机继续使用被存储起来的IP地址,而不去进行重新连接。这就产生了

一个“热点”,在这个“热点”上,过度使用的服务器继续接收额外的接入。

DNS负载均衡的另一个问题是一旦某个服务器出现故障,即使及时修改了DNS设置,还是要等待足够的时间(刷新时间)才能发挥作用,而DNS服

务器并不知道这一点,因此客户请求将被延迟,或返回一个“无法访问服务器”消息给用户,在此期间保存了故障服务器地址的客户计算机将

不能正常访问服务器。

由于DNS数据是具备一个刷新时间的标志的,一旦超过这个时间限制过期,其他DNS服务器就需要和这个服务器交谈以重新获得地址数据。如果

刷新时间较短,不同地方的DNS服务器能更新对应的地址,使出现故障的服务器地址可以及时删除,用户仍旧可以被引导到正常的服务器上,但

如果用户缓冲了故障服务器的IP地址,这种方法也不能解决问题。同时将过期时间设置的过低将使DNS流量大增,而造成额外的网络问题。

由于循环DNS没有区分端口的能力,不能意识到服务器的可用性并且不能考虑服务器上的现有负载,无法对服务器负载进行动态地分析从而使得

下一个请求总是由负载最小的服务器处理,因此循环复用DNS还有太多的限制,只能算是一种勉强可接受的负载平衡方案。

尽管存在多种问题,然而它可能是成本最低,也是最容易实现的技术,目前国内很多虚拟主机提供商和门户网站仍在使用,如Sohu网站,我们可以使用Nslookup www.sohu.com一试。

2 Apache2 mod_proxy_balancer
注意apache 1.x不包括此模块,而在Apache2中,使用它容易实现负载均衡。
相关文档:http://httpd.apache.org/docs/2.2/ja/mod/mod_proxy_balancer.html

3 HA Proxy
这是一款高性能,高稳定性的负载均衡模块。
相关URL:http://haproxy.1wt.eu/

4 LVS的(Linux Virtual Server)
这是一款广受赞誉的负载均衡软件。
相关URL:linuxvirtualserver

二 负载平衡硬件设备

1 Summit48I

2 NETscalar

3 BigIP

0

PHP CRUD与PHP框架

Posted in PHP at 06月 14th, 2008 / No Comments »

Web应用程序中,我们经常使用创建(CREATE),检索(SELCT),更新(UPDATE),删除(DELETE)等对MySQL等数据库的操作,也就是CRUD的定义-an acronym for Create, Retrieve, Update, and Delete,主要被用在描述软件系统中数据库或者持久层的基本操作功能。

PHP5中,提供了优秀的数据抽象层,如ADODB,PDO等,将一些SQL操作化繁为简。
数据库抽象层并不是唯一的解决方案,如果我们要使用CRUD,可以进一步减轻数据库应用程序的开发,下面是其它一些备选方案:

使用存储过程:

存储过程一般情况多用于独立的数据库开发,常见于开发团队中(国内常见于前几年的外包软件开发),不同的
小分队,比如数据库开发小组程序开发小组。数据库小组负责开发存储过程和执行CRUD操作,应用程序小组负责在应用程序中调用存储过程。
这种方式,除了实现不同业务的分离,没有太大的优势可言。不过,如果您的应用依赖于复杂的业务规则和大量的表格和数据转换,当然使用存储过程还是必然之选。

动态CRUD
目前在PHP开发领域中有一些动态CRUD库供我们选择:
      PHP CRUD(http://www.phpmycrud.com/)
      PHPSmpl(http://code.google.com/p/phpsimpl/)
这些类库可以分析你的数据表并创建虚拟的“PHP对象,可以很方便的实现保存,删除,创建和更新,验证等CRUD功能。
这类的动态库通常的开销会稍大,但只需要很少的改动就可以方便的创建自己的应用程序。

PHP框架
另外一个替代方案是使用目前为数众多的PHP应用开发框架。框架通常会提供一个高层次的API提供通用的编码工作,数据库抽象或CRUD通常只是其中之一。
Zend Framework
SymfonyCakePHP等就是这类框架的典型,它通常对于我们开发大型的Web应用非常有用,框架提供了很多优秀的组件,虽然我们有时只是在寻找数据库抽象层。

开源 Open Source
Linux,FreeBSD,OpenSolaris,MySQL,Eclipse….

开放
开放Api
Facebook,Google,Xiaonei,51….

开源并不意味免费,它是一个商业模式,我们并不标榜它有多高尚。
个人可以从开源大环境中,在参与中赢得最大化的尊重。
商业公司可以脱离IT巨头的控制,充分发挥社区的力量,使软件功能更完善,功能更强壮,开源软件与互联网是天生的一对,它使SAAS得以真正实现。