Blogger Information
Blog 9
fans 0
comment 0
visits 4977
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
thinkPHP中的商城系统利用缓存处理高并发的思路
>_<的博客
Original
704 people have browsed it

最近研究TP框架,就在网上下载了一个开源的TP框架的商城系统源码DSmall商城系统,刚好这家的商城源码又支持集群部署,这边就立马试验了下,以下是思路。

 

Thinkphp默认各类缓存都是以文件缓存的,改的话在配置文件里改

 

'DATA_CACHE_TYPE' => 'File', // 数据缓存类型,支持:File|Db|Apc|Memcache|Shmop|Sqlite|Xcache|Apachenote|Eaccelerator

S数据缓存与F快速缓存最大的区别是:S能设置缓存有效时间,来删除自动缓存数据

而F不能设置只能强制删除

F('data',NULL);S同理一样强制删S('data',NULL)除

查询缓存cache默认是true即开启了缓存的

 

注意:当向数据库发送不同数据库时,会产生不同的查询缓存文件,

M('admin')->cache()->where()->select();

 

M('admin')->cache()->where()->select();若像数据库发送相同同数据库时只产生一条查询缓存文件,

M('admin')->cache()->where()->select();

 

 M('admin')->cache()->where()->find();

处理高并发解决方案:

 

当我们网站访问量大了的时候,解决卡顿问题,

 

方法1:可以从数据库着手,运用主从式分布式数据库分配用户请求数据库地址,(上了百万级同理),

 

假如在线用户有10w人平均

每一个人1秒钟向数据库发送3条数据库那么就有30万数据发送数据库,

 

SQL的量可能会非常巨大,所以有必要设置下缓存的队列长度,例如,我们希望SQL解析缓存不超过5000条记录,可以设置:

 

1. 'DB_SQL_BUILD_LENGTH' => 5000, // SQL缓存的队列长度

2. 然后分配到各个数据中从而减轻了服务器的压力

方法二 从服务器端运用nginx配置服务器,(负载均衡)具体有待完善

 

方法3假如有100000用户同时在我们p2p平台借款(其中可能会出现一小部分用户卡

顿借款失败),为了解决其中出现的的问题,

 

我们可以设置两个线程:

 

1.主线程正常执行所有用户的请求

 

2.把所有用户全部放到事务队列处理,副线程只用来—>读事务队列的结果集


负载均衡

 

原理:根据用户的http请求计算出一个真实的web服务器地址,并将该web服务器地址写入http重定向响应中返回给浏览器,由浏览器重新进行访问。


优点:比较简单

缺点:浏览器需要零次请求服务器才能完成一次访问,性能较差。

http重定向服务器自身的处理能力可能成为瓶颈。

使用http302响应重定向,有可能使搜索引擎判断为SEO作弊,降低搜索排名。

【协议层】dns域名解析负载均衡

原理:在DNS服务器上配置多个域名对应IP的记录。例如一个域名www.baidu.com对应一组web服务器IP地址,域名解析时经过DNS服务器的算法将一个域名请求分配到合适的真实服务器上。

优点:将负载均衡的工作交给了DNS,省却了网站管理维护负载均衡服务器的麻烦,同事许多DNS还支持基于地理位置的域名解析,将域名解析成距离用户地理最近的一个服务器地址,加快访问速度吗,改善性能。

 

缺点:目前的DNS解析是多级解析,每一级DNS都可能化缓存记录A,当摸一服务器下线后,该服务器对应的DNS记录A可能仍然存在,导致分配到该服务器的用户访问失败。

 

DNS负载均衡的控制权在域名服务商手里,网站可能无法做出过多的改善和管理。

不能够按服务器的处理能力来分配负载。DNS负载均衡采用的是简单的轮询算法,不能区分服务器之间的差异,不能反映服务器当前运行状态,所以其的负载均衡效果并不是太好。

可能会造成额外的网络问题。为了使本DNS服务器和其他DNS服务器及时交互,保证DNS数据及时更新,使地址能随机分配,一般都要将DNS的刷新时间设置的较小,但太小将会使DNS流量大增造成额外的网络问题。

【协议层】反向代理负载均衡

 

原理:反向代理处于web服务器这边,反向代理服务器提供负载均衡的功能,同时管理一组web服务器,它根据负载均衡算法将请求的浏览器访问转发到不同的web服务器处理,处理结果经过反向服务器返回给浏览器。

例如:浏览器访问请求的地址是反向代理服务器的地址114.100.80.10,反向代理服务器收到请求,经过负载均衡算法后得到一个真实物理地址10.0.03,并将请求结果发给真实无服务,真实服务器处理完后通过反向代理服务器返回给请求用户。

优点:部署简单,处于http协议层面。

缺点:使用了反向代理服务器后,web 服务器地址不能直接暴露在外,因此web服务器不需要使用外部IP地址,而反向代理服务作为沟通桥梁就需要配置双网卡、外部内部两套IP地址。

【网络层】IP负载均衡

原理:在网络层通过修改目标地址进行负载均衡。

用户访问请求到达负载均衡服务器,负载均衡服务器在操作系统内核进程获取网络数据包,根据算法得到一台真实服务器地址,然后将用户请求的目标地址修改成该真实服务器地址,数据处理完后返回给负载均衡服务器,负载均衡服务器收到响应后将自身的地址修改成原用户访问地址后再讲数据返回回去。类似于反向服务器负载均衡。

优点:在响应请求时速度较反向服务器负载均衡要快。

缺点:当请求数据较大(大型视频或文件)时,速度较慢。

【链路层】数据链路层负载均衡

原理:在数据链路层修改Mac地址进行负载均衡。

负载均衡服务器的IP和它所管理的web 服务群的虚拟IP一致;

负载均衡数据分发过程中不修改访问地址的IP地址,而是修改Mac地址;

通过这两点达到不修改数据包的原地址和目标地址就可以进行正常的访问。

优点:不需要负载均衡服务器进行地址的转换。

数据响应时不需要经过负载均衡服务器。

缺点:负载均衡服务器的网卡带宽要求较高。

目前连路程负载均衡是特别常见的一种手段,典型的产品有LVS(Linux Virtual Server)。

 

 


Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post