1.高负载的解决之道
1>硬件:处理能力的提升,内存带宽和容量,部署多核、更高效率和高速缓存的CPU。
2>软件:服务器分离,数据库集群。根据业务分离,如静态页面网站和对安全性比较高的系统
3>环境:系统占用资源少,优先nginx,给mysql做对应的优化,加载尽可能少的php模块
4>测试:使用webbench,apachebench模拟并发,进行压力测试,查看内存/cpu/磁盘空间/网络带宽等方面信息,对软件作最优配置
2.高负载的解决方案
1>尽可能的静态化html页面
2>图片与服务器分离,如使用cdn或阿里云oss
3>数据库使用多台,进行读写分离 流量大使用memcache redis等进行数据高速缓存
4>应用redis先进先出 锁等方案
3.优化配置
1>尽量少的安装php模块,最简单是最好的
2>根据机器内存调整fastcgi 比如4g内存一般为200
3>将tcp连接方式改为unixsocket tcp虽然稳定,但是是unix socket更快 fastcgi_pass 127.0.0.1=>unix:/php-cgi.sock
4.安全性:主要是防止系统漏洞,如sql注入、xss攻击,软件如mysql/apache漏洞可以通过升级解决
1>mysql中删除授权表中的通配符 php中对mysql的sql语句要进行预处理
2>要求使用安全密码,每个账号的权限控制
3>检查配置文件许可,密码存储在文本文件中,容易泄漏,需要把它配置在非公共位置,并设置权限
4>加密客户与服务器之间的数据通信 可以激活mysql中的ssl或者openssh这样的一个应用来传输,这种方式未授权的用户很难发现通信用户与服务器的通信
5>绑定127.0.0.1使外部用户无法访问,只能本机的用户通过本地访问
6>mysql有不同的日志文件,可以通过用户的访问,记录用户的访问、中断时间、查询操作等。如果有异常行为,这个日志监控就是了解行动来源的方法
7>禁止mysql的load data local infile载入命令 因为mysql5是默认开启的
8>定期备份数据
5.高可用缓存
1>把渲染出的页面进行缓存 可在nginx层做处理 避免走php服务器 需要在nginx设置一个有效期
2>多台服务器时,在nginx层使用一定的取模计算,将同一商品指向同一台服务器,保证缓存的最有效利用
3>缓存加数据库模式:先读缓存,没有则读数据库,然后将数据进行缓存,
4>更新的时候,先删除缓存,再更新数据库,不生成缓存,以避免更新频繁,但缓存命中太低,先删除缓存是因为避免数据库修改成功,删除缓存失败。
5>redis主从搭建,master关闭RDB和AOF,从服务器开启RDB 如果主机挂了 从服有完整数据,如果从挂了,换一台机器即可 同时宕机,使用从服RDB恢复