什么是高并发?
多个进程或线程同时(或着说在同一段时间内)访问同一资源会产生并发问题。
要想解决高并发,就要先了解高并发产生的位置.
高并发一般发生在两个位置,一:访问服务器时;二:访问数据库时;
1.1初期解决方案
1.1.1系统或服务器级别的解决方案
1)增大服务器的CPU。
2)增加内存条。
3)增加硬盘个数,对硬盘做Raid5。
4)换掉免费的Tomcat,使用商用weblogic(美国Oracle公司出品的)
5)增加到二块网卡。
6)聘请系统架构师优化Linux内核
7)甚至花高价直接购买高性能服务器
随着业务的不断增加,服务器性能很快又到达瓶颈
1.1.2应用级别的解决方案
1)网页HTML静态化(需要CMS项目支持)
2)图片服务器分离(常用解决方案)
3)缓存(常用解决方案)上上策为分布式缓存
4)镜像(下载较多)
随着业务的不断增加,服务器性能很快又到达瓶颈
这时考虑增加服务器,增加服务器就会出现以下问题
问题1:用户访问IP多了怎么解决?
问题2:数据库出现瓶颈怎么办?
解决用户IP多了的办法是?
1.1开始:准备采用DNS
什么是DNS
DNS(Domain Name System,域名系统),因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。通过主机名,最终得到该主机名对应的IP地址的过程叫做域名解析(或主机名解析)。DNS协议运行在UDP协议之上,使用端口号53。
解决IP多—DNS
DNS服务器可以解决IP多了的问题
http://www.itcast.cn: 192.168.1.100
192.168.1.101
192.168.1.102
……更多
缺点:虽然循环复用DNS是一个普遍使用的在Web服务器上负载平衡的解决方案,但是,该方式有它自身的缺陷。循环复用DNS将传入的IP请求映射到定义的一系列循环形式的服务器。一旦发生服务器故障,循环复用DNS继续把请求发送到这个故障服务器,一直到把该服务器从DNS中移走为止。这样许多用户必须等到DNS连接超时以后才能成功地访问目标网站
1.2采用负载均衡技术
由于目前现有网络的各个核心部分随着业务量的提高,访问量和数据流量的快速增长,其处理能力和计算强度也相应地增大,使得单一的服务器设备根本无法承担。在此情况下,如果扔掉现有设备去做大量的硬件升级,这样将造成现有资源的浪费,而且如果再面临下一次业务量的提升时,这又将导致再一次硬件升级的高额成本投入,甚至性能再卓越的设备也不能满足当前业务量增长的需求。
针对此情况而衍生出来的一种廉价有效透明的方法以扩展现有网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性的技术就是负载均衡(Load Balance)。
问题2:数据库出现瓶颈怎么办?
以Mysql为例:
1:对Mysql进行优化(重点讲解)
2:缓存,主流缓存Memcached,redis…
3: mysql读写分离+主从复制
4:Oracle
5:Oracle读写分离+主从复制
6:Oracle Partition分区
7:Oracle RAC集群(终级解决方案)
此方案:非常贵,即使是淘宝,京东这样的大公司,也是很难受的。
主要方案:水平拆分,库表散列(分库分表)
此方案已经在阿里运行长达3年以上 可以说是非常成熟的解决方案
待续…
备选方案:Mysql主从复制与读写分离
优化:解决了高并发问题
缺点:没有解决高可用问题;Mysql-Proxy存在一个单点问题;Mysql主机是单点问题
Tomcat与Mysql-proxy 搭建在一台服务器上就可以 了;
MySQL主从复制(Master-Slave)与读写分离(MySQL-Proxy)实践
Mysql作为目前世界上使用最广泛的免费数据库,相信所有从事系统运维的工程师都一定接触过。但在实际的生产环境中,由单台Mysql作为独立的数据库是完全不能满足实际需求的,无论是在安全性,高可用性以及高并发等各个方面。
因此,一般来说都是通过主从复制(Master-Slave)的方式来同步数据,再通过读写分离(MySQL-Proxy)来提升数据库的并发负载能力这样的方案来进行部署与实施的。