这个其实是前段时间公司项目整改的时候自己写的一点东西但是自己属于野路子,有些东西也参考了网络方案,由于写完之后时间跨度比较长,对于不能致谢参考文章深感遗憾!
适用范围:
以动态交互内容为主体的网站或应用系统;负载压力较大,且预算比较充足的网站或应用系统;
Web服务器组:
- Web服务无主从关系,属平行冗余设计;
- 通过前端负载均衡设备或Nginx反向代理实现负载均衡;
- 划分专用文件服务器/视频服务器有效分离轻/重总线;
- 每台Web服务器可通过DEC可实现连接所有数据库,同时划分主从。
数据库服务器组:
1. 相对均衡的承载数据库读写压力;
2. 通过数据库物理文件的映射实现多数据库的数据同步。
3. 共享磁盘/磁盘阵列
4. 将用于数据物理文件的统一读写
5. 用于大型附件的存储仓库
6. 通过自身物理磁盘的均衡和冗余,确保整体系统的IO效率和数据安全;
方案特性
- 通过前端负载均衡,合理分配Web压力;
- 通过文件/视频服务器与常规Web服务器的分离,合理分配轻重数据流;
- 通过数据库服务器组,合理分配数据库IO压力;
- 每台Web服务器通常只连接一台数据库服务器,通过DEC的心跳检测,可在极短时间内自动切换至冗余数据库服务器;
- 磁盘阵列的引入,大幅提升系统IO效率的同时,极大增强了数据安全性。
Web服务器:
Web服务器很大一部分资源占用来自于处理Web请求,通常情况下这也就是Apache产生的压力,在高并发连接的情况下,Nginx是Apache服务器不错的替代品。Nginx (“engine x”) 是俄罗斯人编写的一款高性能的 HTTP 和反向代理服务器。在国内,已经有新浪、搜狐通行证、网易新闻、网易博客、金山逍遥网、金山爱词霸、校内网、YUPOO相册、豆瓣、迅雷看看等多家网站、 频道使用 Nginx 服务器。
Nginx的优势:
高并发连接:官方测试能够支撑5万并发连接,在实际生产环境中跑到2~3万并发连接数。
内存消耗少:在3万并发连接下,开启的10个Nginx 进程才消耗150M内存(15M*10=150M)。
内置的健康检查功能:如果 Nginx Proxy 后端的某台 Web 服务器宕机了,不会影响前端访问。
策略:相对于老牌的Apache,我们选择Lighttpd和Nginx这些具有更小的资源占用率和更高的负载能力的web服务器。
Mysql:
MySQL本身具备了很强的负载能力,MySQL优化是一项很复杂的工作,因为这最终需要对系统优化的很好理解。大家都知道数据库工作就是大量的、 短时的查询和读写,除了程序开发时需要注意建立索引、提高查询效率等软件开发技巧之外,从硬件设施的角度影响MySQL执行效率最主要来自于磁盘搜索、磁盘IO水平、CPU周期、内存带宽。
根据服务器上的硬件和软件条件进行MySQl优化。MySQL优化的核心在于系统资源的分配,这不等于无限制的给MySQL分配更多的资源。在MySQL配置文件中我们介绍几个最值得关注的参数:
1. 改变索引缓冲区长度(key_buffer)
2. 改变表长(read_buffer_size)
3. 设定打开表的数目的最大值(table_cache)
4. 对缓长查询设定一个时间限制(long_query_time)
5. 如果条件允许 ,一般MySQL服务器最好安装在Linux操作系统中,而不是安装在FreeBSD中。
策略:
代理服务器(缓存服务器):
Squid Cache(简称为Squid)是一个流行的自由软件(GNU通用公共许可证)的代理服务器和Web缓存服务器。Squid有广泛的用途,从作为网页服务器的前置cache服务器缓存相关请求来提高Web服务器的速度,到为一组人共享网络资源而缓存万维网,域名系统和其他网络搜索,到通过过滤流量帮助网络安全,到局域网通过代理网。Squid主要设计用于在Unix一类系统运行。
策略:安装Squid 反向代理服务器,能够大幅度提高服务器效率。
压力测试:压力测试是一种基本的质量保证行为,它是每个重要软件测试工作的一部分。压力测试的基本思路很简单:不是在常规条件下运行手动或自动测试,而是在计算机数量较少或系统资源匮乏的条件下运行测试。通常要进行压力测试的资源包括内部内存、CPU 可用性、磁盘空间和网络带宽等。一般用并发来做压力测试。
压力测试工具:webbench,ApacheBench等
漏洞测试:在我们的系统中漏洞主要包括:sql注入漏洞,xss跨站脚本攻击等。安全方面还包括系统软件,如操作系统漏洞,mysql、apache等的漏洞,一般可以通过升级来解决。
漏洞测试工具:Acunetix Web Vulnerability Scanner