文章目录
一、PHP源码编译、PHP和nginx的整合
源码编译
PHP是动态编译,因此如果在使用过程中需要任何增添,都可以再次编译,而nginx是静态编译;
编译完成之后,进行相关配置的修改,就可以启动PHP,我们可以看到9000端口代表PHP开启
PHP和nginx的整合
由于应用服务器的并发能力较差,所以我们会将PHP和nginx整合起来进行使用
当我们访问nginx的时候,nginx会将以.php结尾的请求通过fastcgi_pass并且由PHP-fpm来处理,完成后返回nginx再返回客户端;nginx是高并发高吞吐的,但是这里的处理并不是由nginx完成,所以有可能造成客户端和nginx之间的阻塞
我们还会添加memcahce模块,memcache是一套分布式高速缓存系统,许多网站用以提升网站的访问速度。
当我们做一个测试,做数据的上传与获取,我们会发现memcache命中率非常高,这说明了,我们的数据获取是从memcache中获取,速度非常快
上边的方式有可能会造成客户端和nginx之间的阻塞,所以我们可以采用nginx高速缓存的方式;这个方式是将nginx与memcache之间连接在了一起,当客户端向nginx发起请求,nginx先向memache中看一下是不是有缓存,如果有,直接返回,速度很快;如果没有就和上边一样通过fast-cgi由PHP处理并且将其记录在memcache中,方便下次访问直接快速获取数据;
二、lnmp架构整合
1、什么是lnmp架构
- LNMP是一套技术的组合,Linux、nginx、mysql、PHP
- nginx仅支持解析HTML文件,不支持PHP、python、Java等脚本文件
2、lnmp实现过程
当用户发起一个以php结尾的请求时,对于nginx而言,处理不了这样的请求,那么要怎样做?
- 当用户发起http请求时,请求先被nginx接收
- nginx通过提前定义好的location规则进行匹配
- nginx将匹配到的动态内容通过fastcgi协议传给后端的php应用服务处理
3、lnmp详细实现过程
- 客户端通过http协议发起请求,请求先到达nginx
- nginx通过用户的请求进行location规则进行匹配
- location如果匹配到的请求是静态,则由nginx读取本地并直接返回
- 如果匹配到的请求是动态,由nginx将请求转发给fastcgi协议
- fastcgi收到请求后交给php-fpm管理进程
- php-fpm管理进程收到后会调用具体的worker进程,worker进程会调用php解析器解析代码,php解析后返回
- 如果有查询数据库操作,由php连接数据库发起查询操作
流程大概为:客户端->http->nginx->fastcgi->php-fpm->php->tcp->mysql
三、lnmp架构多台主机部署(拆分数据库)
由于单台服务器上运行lnmp架构会导致网站访问缓慢,当系统内存吃满时,很容易导致系统oom,从而杀掉数据库;所以我们需要将web和数据库分开部署。
拆分数据库能够缓解web网站的压力、增强数据库读写性能、提高用户访问速度;
四、扩展多台相同的web服务器组成web集群
单台服务器能承受的访问量是有限的,所以配置多台web服务器能够提升用户访问速率
扩展多台节点可以解决:
1、单台web节点故障,导致业务无法正常进行
2、多台web节点能保证业务持续稳定,扩展性高
3、提升用户访问速度