探讨问题 高并发:多个进程或线程同时(或着说在同一段时间内)访问同一资源会产生并发问题。
初期解决方案
- 系统或服务器级别的解决方案
- 增大服务器的CPU。
- 增加内存条。
- 增加硬盘个数,对硬盘做Raid5。
- 换掉免费的Tomcat,使用商用weblogic(美国Oracle公司出品的)
- 增加到二块网卡。
- 聘请系统架构师优化Linux内核
- 甚至花高价直接购买高性能服务器
- 应用级别的解决方案
- 网页HTML 静态化(需要CMS项目支持)
- 图片服务器分离(常用解决方案)
- 缓存(常用解决方案) 上上策为分布式缓存
- 镜像(下载较多)
-
增加App服务器
- 采用DNS解决用户IP多问题
终级解决方案
采用负载均衡技术
由于目前现有网络的各个核心部分随着业务量的提高,访问量和数据流量的快速增长,其处理能力和计算强度也相应地增大, 使得单一的服务器设备根本无法承担。在此情况下,如果扔掉现有设备去做大量的硬件升级,这样将造成现有资源的浪费, 而且如果再面临下一次业务量的提升时,这又将导致再一次硬件升级的高额成本投入,甚至性能再卓越的设备也不能满足当前业务量增长的需求。 针对此情况而衍生出来的一种廉价有效透明的方法以扩展现有网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、 提高网络的灵活性和可用性的技术就是负载均衡(Load Balance)。
总结:负载均衡功能
1.转发请求 2.故障移除 3.恢复添加
负载均衡种类
1.一种是通过硬件来进行解决,常见的硬件有NetScaler、F5、Radware和Array等商用的负载均衡器,但是它们是比较昂贵的 2.一种是通过软件来进行解决的,常见的软件有LVS、Nginx、apache等,它们是基于Linux系统并且开源的负载均衡策略
负载均衡–软件解决
** 主流软件 **
- apache + JK
- nginx
- lvs + keepalived
LVS 对比 Nginx
- 负载度 LVS 胜于 Nginx
- 功能多少 Nginx 胜于 LVS
- 稳定度 LVS 胜于 Nginx
- 服务器性能要求 LVS 胜于 Nginx
调度器的实现技术中,IP负载均衡技术是效率最高的,IP虚拟服务器软件(IPVS)是在linux内核中实现的
数据库出现瓶颈怎么办
演进
- 对Mysql进行优化
- 缓存,主流缓存Memcached,redis…
- mysql读写分离 + 主从复制
- Oracle
- Oracle读写分离 + 主从复制
- Oracle Partition 分区
- Oracle RAC集群(终级解决方案)太贵
主要方案:水平拆分,库表散列
备选方案:Mysql主从复制(Master-Slave)与读写分离(MySQL-Proxy)
Mysql作为目前世界上使用最广泛的免费数据库,相信所有从事系统运维的工程师都一定接触过。 但在实际的生产环境中,由单台Mysql作为独立的数据库是完全不能满足实际需求的,无论是在安全性, 高可用性以及高并发等各个方面。因此,一般来说都是通过 主从复制(Master-Slave)的方式来同步数据, 再通过读写分离(MySQL-Proxy)来提升数据库的并发负载能力这样的方案来进行部署与实施的。