1、11/21/2022PHP简介与网站架构顾 曾11/21/2022PHP简介与网站架构PHP简介PHP发展与现状PHP特性PHP框架网站架构11/21/2022简介11/21/2022简介 -PHP是什么Rasmus Lerdorf,PHP之父PHP(PHP:Hypertext Preprocessor),一种开源脚本语言,原名Personal Home Page混合了C、Java、Perl以及PHP自创的语法,入门门槛较低,易于学习,使用广泛,主要适用于Web开发领域,PHP的文件后缀名为*.php,可以运行在 Linux/Windows/Mac,支持MySQL、PostgreSQL、Ora
2、cle、Sybase、Informix 和 Microsoft SQL Server不需要任何费用,官网 11/21/2022简介 -应用服务器端,嵌入在 HTML 并由服务器解释。所有PHP开发的网站、网络系统均是这种用途,使用PHP 99.9%用在此方面。开发命令行脚本程式客户端的GUI应用程式11/21/2022发展与现状11/21/2022发展19951.0 2.019973.02000-5-224.02004-07-13 5.0.02005-11-24 5.1.02006-11-02 5.2.0 2009-06-30 5.3.02009-12-17 5.2.122012-03-01
3、5.4.02012-11-22 5.3.192013-06-20 5.5.02013-12-12 5.3.282014-02-06 5.4.252014-02-06 5.5.911/21/2022现状你所知道的很多网站都有PHP的影子,包括Google、百度、网易、新浪、搜狐、阿里巴巴、奇虎、eBay、腾讯、Yahoo、金山等。全球互联网网站中,有40%-60%使用着PHP技术,国内大多数的网站都在使用PHP开发。AlexaTOP500中国网站排名,有394家使用了PHP。11/21/2022特性11/21/2022特性开源、免费、开放、可扩展快捷,所见即所改跨平台效率高,相对于CGI、Per
4、l和ASP面向对象专业专注基于服务器端简单的语言,嵌入HTML11/21/2022框架11/21/2022框架11/21/2022框架在项目开发中,一些架构和代码都是重复的,为了避免重复劳动,于是各种各样的框架诞生了。采用框架的益处:1.统一开发规范2.程序设计模式3.遵循开发框架的各种约定4.无论在编码还是以后的维护过程中都是易于管理的5.框架会集成丰富的类库、函数库,提升开发的效率,加快软件开发6.有助于创建更加稳定和安全的应用程序11/21/2022框架PHP框架真正的发展要从php5开始,所有的框架都有几个共同特点:单一入口MVC模式类自动加载URL处理统一的输入和错误处理可扩展CUR
5、D操作(数据库操作的封装)未来的PHP开发框架同时也需要具备几个特点:1.采用更多PHP的新特性2.拥有更丰富可扩展的开发包3.文档丰富4.社区活跃11/21/2022框架国内框架ThinkPHP,Canphp,KYPHP,InitPHP,SpeedPHP,CdvPHP国外著名框架Zend Framework,Codeigniter,FuelPHP,Laraval,Phalcon,CakePHP,Symfony,Yii11/21/2022网站架构11/21/2022网站架构目的保证网站的正常访问,快速响应手段/方法根据网站当前的发展要求,相应调整软硬件资源,适应当前要求并具有前瞻性架构没有标配
6、,且在不断变化中,但围绕的重点离不开Web服务器、代理/缓存、DB、负载均衡、分布式存储。11/21/2022网站架构 -WEB服务器Apache世界上用得最多的Web服务器,市场占有率达60%左右。源代码开放,支持跨平台的应用(可以运行在几乎所有的Unix、Windows、Linux、Mac系统平台上)。Apache的模块支持非常丰富,属于重量级产品,因此在速度、性能上不及其他轻量级Web服务器,所消耗的内存也比其他Web服务器要高。官方网站:http:/httpd.apache.org。11/21/2022网站架构 -WEB服务器Lighttpd一款轻量级Web服务器,其目标是提供一个专门
7、针对高性能网站,安全、快速、兼容性好并且灵活的Web Server环境。内存开销低、CPU占用率低、效能好、模块丰富。支持FastCGI、CGI、URL重写及Alias等重要功能。支持PHP,不支持缓存,是Nginx的竞争对手之一。官方网站:http:/11/21/2022网站架构 -WEB服务器Nginx高性能的HTTP和反向代理服务器,占有内存少,并发能力强,处理静态页面是最优秀的,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。中国大陆使用nginx网站用户有新浪、网易、腾讯等。官网:http:/nginx.org11/21/2022网站架构 -WEB服务器比较11/2
8、1/2022网站架构 -代理缓存服务器Squid是一种代理服务器软件,又称为Squid cache。作为网页服务器的前置cache服务器缓存相关请求来提高Web服务器的速度。官网:http:/www.squid-cache.org11/21/2022网站架构-负载均衡负载均衡是由多台服务器以对称的方式组成一个服务器集合,每台服务器都具有等价的地位,都可以单独对外提供服务而无须其他服务器的辅助。通过某种负载分担技术,将外部发送来的请求均匀分配到对称结构中的某一台服务器上,而接收到请求的服务器独立地回应客户的请求。均衡负载能够平均分配客户请求到服务器列阵,籍此提供快速获取重要数据,解决大量并发访问
9、服务问题。这种群集技术可以用最少的投资获得接近于大型主机的性能。负载均衡建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。11/21/2022网站架构-负载均衡分类软件负载均衡适用于一些中小型网站系统,可以满足一般的均衡负载需求。软件负载均衡技术是在一个或多个服务器上安装相应的负载均衡软件来实现。配置简单、操作也方便,最重要的是成本很低。硬件负载均衡需要额外的增加负载均衡器,成本比较高,所以适用于流量高的大型网站系统。在多台服务器间安装相应的负载均衡设备,也就是负载均衡器来完成均衡负载,与软件负载均衡技
10、术相比,能达到更好的负载均衡效果。本地负载均衡是对本地服务器群进行负载均衡处理。该技术通过对服务器进行性能优化,使流量能够平均分配在服务器群中的各个服务器上,本地负载均衡技术不需要购买昂贵的服务器或优化现有的网络结构。全局负载均衡适用于拥有多个地域的服务器集群的大型网站系统。是对分布在各个地区的多个服务器进行负载均衡处理,该技术可以通过对访问用户的IP地理位置判定,自动转向地域最近点。11/21/2022网站架构-负载均衡实现方式DNS负载均衡DNS负载均衡技术是在DNS服务器中为同一个主机名配置多个IP地址,在应答DNS查询时,DNS服务器对每个查询将以DNS文件中主机记录 的IP地址按顺序
11、返回不同的解析结果,将客户端的访问引导到不同的机器上去,使得不同的客户端访问不同的服务器,从而达到负载均衡的目的。NAT负载均衡NAT负载均衡将一个外部IP地址映射为多个内部IP地址,对每次连接请求动态地转换为一个内部服务器的地址,将外部连接请求引到转换得到地址的那个服务器上,从而达到负载均衡的目的。可以通过软硬件方式来实现。反向代理负载均衡把将来自internet上的连接请求以反向代理的方式动态地转发给内部网络上的多台服务器进行处理,从而达到负载均衡的目的。能以软件方式来实现,也可以在高速缓存器、负载均衡器等硬件设备上实现。混合型负载均衡在有些大型网络,由于多个服务器群内硬件设备、各自的规模
12、、提供的服务等的差异,给每个服务器群采用不同的负载均衡方式,然后又在这多个 服务器群间再一次负载均衡或群集起来以一个整体向外界提供服务(即把这多个服务器群当做一个新的服务器群),从而达到最佳的性能。我们将这种方式称之为混 合型负载均衡。此种方式有时也用于单台均衡设备的性能不能满足大量连接请求的情况下。11/21/2022网站架构-总体方案Apache 用于后台服务器(主要处理php及一些功能请求)Nginx 用于前端服务器(利用它占用系统资源少得优势来处理静态页面大量请求)Lighttpd 用于图片服务器虽然我们希望网站一开始就能有一个很好的架构,但马克思告诉我们事物是在发展中不断前进的,网站
13、架构也是随着业务的扩大、用户的需求不断完善的,下面是一个网站架构逐步发展的基本过程。11/21/2022网站架构-总体方案NginxSquid cacheApache/PHPMySQL静态文件 css js imgSquid cacheApache/PHPMySQL分布式存储.网站架构不同类型、不同流量的网站架构不一而足,以下从小型到大型的架构供参考。11/21/2022网站架构一物理分离WebServer和数据库11/21/2022网站架构二增加页面缓存11/21/2022网站架构三增加页面片段缓存11/21/2022网站架构四数据缓存11/21/2022网站架构五增加WebServer11
14、/21/2022网站架构六数据库集群或分库11/21/2022网站架构七分表、DAL和分布式缓存11/21/2022网站架构八增加更多的WebServer11/21/2022网站架构九数据读写分离和廉价存储11/21/2022网站架构-问题当然,随着架构的变大,需解决的问题也会越多,如:改动时相当的不方便糟糕的复用性出问题的时候不是很好查常用的解决方式是将应用进行拆分,成为一个分布式的应用,同时面临的问题:拆成分布式后需要提供一个高性能、稳定的通信框架,并且需要支持多种不同的通信和远程调用方式将一个庞大的应用拆分需要耗费很长的时间,需要进行业务的整理和系统依赖关系的控制等如何对运行状况管理、错
15、误追踪、调优、监控和报警等问题无时不在,架构永无止境。11/21/2022网站架构-总结网站架构的关键是查找影响网站响应速度的结点是WEB服务器还是数据库。总的来说,WEB服务器演变的顺序:代理缓存-页面缓存 -增加server/集群数据库演变顺序:缓存-读写分离-分库/分表/集群。最重要的是每台服务器的性能最大化。11/21/2022网站架构 -优化配置APACHE,加大并发数量,关闭不需要的模块,尽量轻装上阵,可适当的使用长连接,关闭日志。PHP,以实用为目的加入参数,没有用到的坚决不加。MYSQL,尽量少使用长连接,限制为2-3秒 尽量使用手工编译安装优化的思路就是把尽可能多的系统资源提供给WEB和MYSQL服务,并且让这些服务单个进程可以占用尽可能少的系统资源11/21/2022谢谢