PHP逐渐被大家认可为一种严肃的语言,但还是很多人声称它是不可扩展的。这显然不是事实–互联网上很多最大的应用就是使用PHP。PHP是能扩展的,原因回溯到什么是真正的扩展。对PHP的批评往往集中在根本的性能问题上,而被误解为是扩展方面的问题。
满足扩展的三个标准是可维护性,容易理解。任何语言都可以写出容易或者难以维护的代码,虽然有些语言让他们自己能写出极其难以维护的代码,比如Perl,但几乎没有语言是难以写出可维护代码(专门为这个设计的语言除外),通过遵循严格的代码风格知道原则和在代码中添加正确的注释,PHP系统可以很容易维护。
数据集增长是可扩展系统的第二个标准。在PHP应用中,数据存储和处理是完全分离的。我们完全不用去管多少数据存储在数据库中–不管多少数据,都采用相同的方式查询。PHP把数据集增长责任下方到存储层,这样就能随心所欲进行扩展而不用担心数据集的大小。
最后一个可扩展的标准是能容纳流量增长。PHP通过无共享体系结构实现这一点。PHP像HTTP一样是无状态的,所有的状态都由更低层次处理。PHP进程每次只响应一个请求,并且不能和服务于其他请求的进程通话。进程也无法在请求之间记住任何事。这种做法有效地隔离各个请求到独立空间中,在请求或进程之间不共享任何信息。如果需要取出上次请求的用户数据,并将它显示在下一请求中,那么就得使用底层数据存储追踪这些数据。由于这种进程和请求之间的分离,对于后续请求实际上没有必要使用同一台服务器,要处理更多的请求实际上只要通过简单的添加更多的Web服务器。他们都可以同事服务请求,并且进程之间没有任何共享数据。用户的首次请求某一台服务器,下一次则请求另一台服务器,以此类推。如果可以控制流量走向,避免他们流向僵死的服务器,那么这种分离也为无缝的故障转义提供了条件。当然这并非PHP独有,他是REST的基础原则之一。通过正确的系统设计,这个原则就可以得以应用,而不是在于具体的实现请求。
但不管怎么说,有时候确实需要状态共享。PHP中有几个扩展是无法做到无状态的,而且对于同一个用户,不能随意更改相应服务器。sessions扩展存放用户会话数据到本地磁盘,这要求同一用户的每个请求都访问同一台服务器。要避免这种情况,可以使用msession扩展,它使用中央网络守护进程存放绘画数据,或者自己手工存放回话数据,使用数据库或者内存缓存来实现。有些PHP扩展让PHP进程可以映射一块共享内存用于IPC。由于进程并不一定在同一台机器上,IPC实际是不可行的。作为替代方案,可以将这些行为交给下面的层次,在数据库或者内存缓存中存放共享数据。
如果不使用一些特定扩展,那么PHP符合可扩展系统的三个标准:容纳流量增长、允许数据集增长,并且能创建可维护的系统。
Recent Comments