私房菜 第三讲 杂记高负载

来源:互联网 发布:矩阵卷积 计算 编辑:程序博客网 时间:2024/04/30 00:55

 私房菜 第三讲 杂记高负载

最近很多人在提高并发,高负载,这个问题好像一下子,变得万分神秘,而且成为了,很多大公司的必须问你的问题,
如果你告诉他,我没做过高并发的,他立马问你,那你说说你做过多少pv的项目吧,或者直接问你这个。
当你听到这个问题的时候,万分汗颜,我做过最多的是 100w pv这个量级,那些大公司的员工,脱口而且,几千万吧,
这个问题多严峻,一个小公司的员工从此比那个大公司的员工,差了一个级别。

可以,问的人是否想过,一个人对于pv与高并发的判断,是要看后面的硬件平台而论的,如果几千台机器,
你做了那么些pv是否值得骄傲呢,那样的硬件平台你是否可以顺利的搭建起来,各种技术细节是否可以掌控呢?

这个要看个人的能力了,如果小公司的员工,给他环境,他也会上进的弄明白这个一个系列的问题,其实这个问题
很极端,做系统架构的人,一定会把系统做的很灵活,让使用的人,最少的操作得到最大的性能,而程序架构的人
一定想办法,在程序架构上面,就去规避掉各种情况,最后通过配置文件的修改,来实现各种部署,而最终的程序员
根本没机会,知道这些的不同,所以无论你在什么样的公司上班,记本上很难知道哪些烦乱的硬件知识,除非用心的挖掘。

我现在来做一个硬件的架构图,首先声明,我没做过 千万级别的pv。

高并发如何处理?
这个问题,问的太精妙了,不提任何的需求,直接把这个东西扔给你,如果你不去圈定详细的使用范围,无论你怎么回答都是错误的,呵呵。
其实大家去做面试也会扔出这样的问题,你的目的不是让他给你满意的答案,而且另有想法。

首页,单台机器的性能无论多优秀,都不能抗住所有的pv,而web开发,并发一定来自于,高pv,或者详细的说是单台机器的pv高,造就了高并发,
这样的情况,你无论在单台机器上怎么优化都不可能,解决问题,因为高并发,并没有告诉你,是什么瓶颈,而且没说到了什么程度,所以,我们能做的就是
增加服务器,然后呢,就是负载均衡。这个是第一个点,采用负载均衡,只有2种情况,一种硬件,一种软件,硬件设备我们不提了常用的就是f5.
软件解决,采用nginx,或者dns轮播,或者其他。这个完全看侧重点。

 

现在除了问题,比如session怎么办,缓存怎么办?
是啊,太可怕了,那样我们加上一台cache服务器,来解决这个问题,共用的信息,我们存储到cache服务器上。

 

 

我们现在看着比较完美了,这样的结构,我们可以无限的扩展了,关于文件同步的问题,我们可以采用很多开源的软件来解决。或者自己写个socket服务,用于文件传输,这都不是问题了。

现在我们还要进一步的优化,因为,如果我们发现,我们这样的平台,并不能无限的扩展,因为cache服务器,负载均衡服务器,以后会成为瓶颈那怎么办?
这个时候,我们就引出了,域名规划的问题,也就是一个域名下面有这样的一组服务器支撑,构成了,一个网路体系,我们就进一步缓解了压力。

 

 

 

 

 

现在出问题,几个域名下面的通用数据怎么办?如果用户名,用户id啥的,其实大部分公司均采用cookie加密来解决这个问题。那我们的数据库怎么办?
有些数据共享怎么办?

我们采用同样的情况,做到数据库读写分离,在数据库连接上,也采用数据集群

 

 

 

 

 

关于数据如何同步的问题,mysql本身带有这个功能,如何配置,以及怎么互补的问题,baidu下,解决方案,很多。
关于读写分离,我们可以在程序里面直接分离,关于分离的方案,请看我数据库封装类 。

另外,我们可以采用mysql的代理,使用的语言室lua,来实现这个功能。

我们这些都做了,还有什么问题呢?
其实我们系统大量的访问了,图片,js文件,css文件,而这些文件,我们修改的并不频繁,所以我们要加上一个文件服务器,同时,采用反向代理的方式,来解决用户频繁请求同一个公用文件的问题。


很多人问我了,你说了这么多一个最根本的问题你没说,就是静态化,这个静态化,可以大幅提高服务器的负载性能,但是并非所有的服务器,均可以采用,小页面,我们读取数量等等,我们采用静态化
,一些其他的数据,我们通过ajax来动态提取这个不是问题。其实静态化,这个问题很严重,因为方案很多,一种是直接生成,还有一种是利用404错误,也就是用户请求的文件不存在了,在建立,这些
真的要根据具体的使用,才可以谈论的。


另外还有一些更特殊的问题,现在web游戏特别的多,这些里面有很多频繁的交互怎么处理?
当前大部分解决多是,采用flash长连接,以及ajax轮询来解决,也就是还是转换到了,pv跟并发上面。所以牵扯到了http服务器的选型问题。这些就更具体了。

优化还有一个地方就是,首先您的程序是否做到了最优,程序的设计结构是否最优,用户请求是否可以增加缓存,用户对数据的变化,可以容忍多大的问题,等等。

所以说,用户需求,是一切的根本,pv这个东西,其实并不可怕,有效的解决方案,就这么多。

总结下:
1,需求分析的严谨
2,用户体验度的把握

3,域名规划
4,程序设计的合理性
5,缓存的使用
6,pv压力的化解
7,硬件平台的扩展性能

其实这些根本没有提到很多细节,因为有钱的公司可以使用cdn,做多线服务器,等等,有钱的做法。

关于服务器备份,监控,也有很多的解决方案,开源,付费的就更多了。

关于日志服务器的建立,等等,等等,细节上面的东西。

原创粉丝点击