常见动态资源服务模型
LAMP Linux
Apache
Mariadb|Mysql|Mongdb Php|Perl|PythonLAMMP Linux Apache Mariadb|Mysql|Mongdb
Memocache
Php|Perl|PythonLNMP Linux
Nginx
Mariadb|Mysql|Mongodb Php|Perl|PythonLNMMP Linux Nginx Mariadb|Mysql|Mongodb
Memocache
Php|Perl|PythonLAMT Linux Apache Mariadb|Mysql|Mongdb
Tomcat
LNMT Linux Nginx Mariadb|Mysql|Mongdb
Tomcat
httpd静态资源的响应模型
客户端通过http协议连接静态资源服务器
httpd动态态资源的响应模型
程序文件需要在虚拟机(PHP, Perl, Tomcat, Python)
中运行后响应。
如果虚拟中的程序运行过程中需要数据库时,就通过连接数据库的驱动
,驱动内提供的函数库
完成封装报文、解封装报文和与mysql服务器交互。
CGI
静态资源: fork自身用子进程响应。
动态资源:CGI调用对应程序,fork自身,程序作为子进程运行
在同一个主机上通信IPC:
消息队列、共享内存、旗语、套接字 message queue, shared memor, semaphores, unix socket
缺陷:
**httpd处理的请求过多**
FastCGI
跨主机通信IPC:
套接字、远程过程调用 socket, rpc
动态网站特性
静态资源>动态资源(一个PV内1/10个为动态)
1/100个需要mysql的数据[在应用程序服务器中]
加强后端服务器的性能
httpd与php结合的方式
CGI: 作为HTTPD子进程<与tomcat, perl, python整合>
Modules: php作为httpd的模块, httpd调用模块不用生成子进程
FastCGI: 独立的服务器
文件查询和数据库查询的区别
操作文件时都需要将数据载入内存中
将文件中的所有数据块加载至内存进行查找
数据库管理系统:[可以将数据存储为较小的数据集],查询时只用装载较小的数据集
将部分字段抽取<复制>出来,做为一个较小的数据集,存储的位置有指向原位置的指针
将抽取出的字段按特定的逻辑,再抽取一份,做为一个小的数据集
查找到的key对应的指针会指向原位置所在的行[每行或多行为一个数据块]
php解释器与mysql交互
php解释器中运行的php代码/程序,需要用到mariadb时,用驱动,连接mariadb
php
服务器端脚本编程语言,动态网站开发语言:php, asp, ruby, c, bash<解释器,提供程序功能>
代码执行过程
扫描(词法分析) --> parsing(语义分析-->表达式) --> compilation(表达式-->opcode) --> exec(opcode-->机器指令)
php加速方式
请求相同的动态资源时,之前缓存在内存中的opcode相同代码可以重复利用
即使是prefork,进程间也可以共用opcode
注意:prefork每个进程独立的,进程有自己的内存空间,不能使用其他进程内资源
存储系统
文件系统: 文件 操作文件时,需要内核的系统调用
SQL数据库: mariadb, mysql, oracle, ms_sql 交互时,用驱动[函数库]连接
no_sql: redis, mongodb, hbase
new_sql: <存储,基于分布式模式,管理的存储的系统>
rpm提供LAMP组合布署开源程序
wordpress, phpMyadmin, discuss
CentOS 6rpm安装LAMP
配置yum源
# install -d /media/cdrom # mount -r /dev/cdrom /media/cdrom # mv -v /etc/yum.repos.d/CentOS-Base.repo{,.bak} # vim /etc/yum.repos.d/CentOS-Base.repo [C6CentOS] name=CentOS 6 failovermethod=priority baseurl=file:///media/cdrom http://mirrors.aliyun.com/centos/6/os/i386/ gpgcheck=0 enabled=1 [EPEL] name=Fedora EPEL failovermethod=priority baseurl=http://mirrors.aliyun.com/epel/6/i386/ http://mirrors.sohu.com/fedora-epel/6/i386/ gpgcheck=1 gpgkey=http://mirrors.aliyun.com/epel/RPM-GPG-KEY-EPEL-6 enabled=1
安装
# yum -y install httpd php php-mysql mysql-server
配置
# rpm -ql php /etc/httpd/conf.d/php.conf //提供httpd的配置文件 /usr/lib/httpd/modules/libphp5.so //提供给httpd的模块 PS:此模块仅能运行prefork模型, worker|event模型:libphp5-zts.so模块 # httpd -M php5_module (shared) //模块已经被装载
启用httpd, mysql
# service httpd start # service mysqld start
测试httpd
# ss -tnl 在Windows浏览器中键入IP地址测试 http://
测试mysql
# ss -tnl # mysql mysql>
测试
php程序执行环境
# vim /var/www/html/index.php <?php phpinfo(); ?>
测试php程序通过
驱动连接mysql服务器
php-mysql驱动所提供的调用: mysql_connect, mysql_close php代码以';'结尾
# vim /var/www/html/index.php <?php $link=mysql_connect('localhost','root',''); if($link) echo "Success"; else echo "Failure"; mysql_close(); ?>
停止服务 # service mysqld stop
布署wordpress[个人博客站点]
获取wordpress wordpress中文站点
服务器环境要求
PHP 5.2.4或更新版本
MySQL 5.0或更新版本
Apache mod_rewrite模块(可选,用于支持“固定链接”和“站点网络”功能)
展开并配置
# unzip wordpress-4.8.1-zh_CN.zip # cp -a wordpress /var/www/html/ # cd /var/www/html/ # ln -sv wordpress wp //便于升级 # cd wp # cp wp-config-sample.php wp-config.php # vim wp-config.php define('DB_NAME', 'wpdb'); define('DB_USER', 'wpuser'); define('DB_PASSWORD', 'wppass');
mysql中添加用户
# mysql mysql> GRANT ALL ON *.* TO 'wpuser'@'localhost' IDENTIFIED BY 'wppass'; mysql> GRANT ALL ON *.* TO 'wpuser'@'127.0.0.1' IDENTIFIED BY 'wppass'; mysql> FLUSH PRIVILEGES; mysql> CREATE DATABASE wpdb; mysql> \q
在Windows主机中,输入CentOS虚拟主机的IP测试
布署phpMyadmin[mysql Web GUI]
获取phpMyadminphpMyadmin官网
旧版本与PHP 5.2和MySQL 5兼容。不支持PHP 5.5或更新版本。至2017年4月1日为止。
当前版本与PHP 5.5至7.1和MySQL 5.5及更高版本兼容。
获取版本
# rpm -q php # rpm -q mysql # rpm -q httpd
展开并配置
# unzip phpMyAdmin-4.0.10.20-all-languages.zip # cp -a phpMyAdmin-4.0.10.20-all-languages.zip /var/www/html # cd /var/www/html/ # ln -sv phpMyAdmin-4.0.10.20-all-languages pma # cd pma # cp config.sample.inc.php config.inc.php # openssl rand -hex 16 e870cf5bb5e30295ca0389f77b469919 # vim config.inc.php $cfg['blowfish_secret'] = ' e870cf5bb5e30295ca0389f77b469919'; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */ ['AllowNoPassword'] = false; //拒绝空密码登陆
mysql中给root用户添加密码
# mysql mysql> SET PASSWORD FOR 'root'@'localhost'=PASSWORD('magedu'); mysql> SET PASSWORD FOR 'root'@'127.0.0.1'=PASSWORD('magedu'); mysql> FLUSH PRIVILEGES; mysql> \q
在Windows主机中,输入CentOS虚拟主机的IP测试
安装php扩展: php-mbstring
# yum install php-mbstring //A module for PHP applications which need multi-byte string handling
[root@localhost pma]# rpm -ql php-mbstring /etc/php.d/mbstring.ini /usr/lib/php/modules/mbstring.so //提供了php的扩展模块或库
重载httpd,因为php是httpd的模块
# rpm -ql php /etc/httpd/conf.d/php.conf /usr/lib/httpd/modules/libphp5.so //php是httpd的模块 # service httpd reload
再次测试
CentOS 7rpm安装LAMP
安装
# yum -y install httpd php php-mysql mariadb-server
启动
# systemctl start httpd.service # systemctl start mariadb.service
给php添加xcache模块,实现缓存加速
安装前测试
# ulimit -n 65535 # php -m [Zend Modules]
[root@localhost pma]# ab -c 1000 -n 4000 172.16.100.3/pma Server Software: Apache/2.2.15 Server Hostname: 172.16.100.3 Server Port: 80 Document Path: /pma Document Length: 310 bytes Concurrency Level: 1000 //并发数 Time taken for tests: 5.968 seconds Complete requests: 4000 //请求数 Failed requests: 0 Write errors: 0 Non-2xx responses: 4003 Total transferred: 2137602 bytes HTML transferred: 1240930 bytes Requests per second: 670.23 [#/sec] (mean) //每秒请求数 Time per request: 1492.033 [ms] (mean) //每批请求所需要的时间 Time per request: 1.492 [ms] (mean, //每个请求所需要的时间 Transfer rate: 349.77 [Kbytes/sec] //3MiB带宽 Connection Times (ms) min mean[+/-sd] median max Connect: 0 338 613.4 157 3130 //客户端建立连接 Processing: 1 379 771.3 168 4759 //服务器处理请求 Waiting: 0 322 700.7 133 4505 //服务器响应 Total: 187 716 1088.9 329 5798 //一次完整的事务
安装xcache
# yum -y install php-xcache // Fast, stable PHP opcode cacher 查看安装所提供的模块: # rpm -ql php-xcache /etc/php.d/xcache.ini /usr/lib/php/modules/xcache.so //为php提供的模块
重载httpd
# service httpd reload # php -m [Zend Modules] XCache XCache Cacher XCache Coverager XCache Optimizer
测试
预热
# ab -c 10 -n 100 www.mykernel.cn/pma # ab -c 10 -n 100 www.mykernel.cn/pma # ab -c 10 -n 100 www.mykernel.cn/pma
测试
[root@localhost pma]# ab -c 1000 -n 4000 172.16.100.3/pma Server Software: Apache/2.2.15 Server Hostname: 172.16.100.3 Server Port: 80 Document Path: /pma Document Length: 310 bytes Concurrency Level: 1000 Time taken for tests: 6.510 seconds Complete requests: 4000 Failed requests: 0 Write errors: 0 Non-2xx responses: 4006 Total transferred: 2139204 bytes HTML transferred: 1241860 bytes Requests per second: 614.46 [#/sec] (mean) //每秒请求 Time per request: 1627.457 [ms] (mean) Time per request: 1.627 [ms] (mean, across all concurrent requests) Transfer rate: 320.91 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 0 180 590.6 4 3014 Processing: 0 531 1086.5 101 6376 Waiting: 0 527 1086.1 97 6372 Total: 75 711 1431.8 106 6477 Percentage of the requests served within a certain time (ms) 50% 106 66% 114 75% 145 80% 542 90% 3210 95% 4408 98% 5325 99% 6081 100% 6477 (longest request) ...
有问题反馈
在使用中有任何问题,欢迎反馈给我,可以用以下联系方式跟我交流
邮件:lccnx@foxmail.cn
QQ: 2192383945
感激
QQ: 2580259468