标签:ar 使用 strong 数据 on 问题 代码 时间 管理
首先,我们需要清楚在业务上有什么要样的性能需求;
第二步,根据性能的要求去考虑系统的设计,
第三步,系统的开发过程中去关注可能存在的局部性能问题。
没有开发过性能敏感系统的团队,容易犯的错误是,不去考虑系统将来有多少人使用,并发访问有多高,需要存贮多少数量的数据? 直接就开始做系统的开发,抱着等着出了性能问题再说。系统做出来上线之后,性能的问题就暴露出来。但这时候,要解决好性能问题将要负出沉重的代价,往往是 一个系统的重写。 进度的压力成为了不考质量与性能的理由。造成一个现象:我们没有时间去把一个系统做好,但我们有时间去把同一个系统做上几遍。短期是高效率的,但长期是低效率的。
我举例说明一下:
10个用户以对系统有写的访问, 1000万级的用户对系统有访问。
广告主要投放在网站上, 一个页面往往具有几个广告的展现。每天要达到上亿的PV。高峰的QPS所达到上十亿。
广告每天的数据量在1G以内,没有历史数据需要处理。
千万级的用户量,并且都进行读写操作。
系统在热门期间,需要支持1亿的PV,高峰QPS 要达到1250 * 2 = 2500 QPS
贴吧的贴子数: 10000贴吧 * 1000主题 * 100 贴子 = 10亿个贴子; 一个贴子平均200个汉字,即有 400G的数据量。
用户量应具有百万级.
以每用户每天平均访问3次计算,那 100万 * 2 * 20(平均每次访问PV数)= 4000万的PV,在高峰期以平均的QPS*2 = 500 *2 = 1000 (QPS)
看到这些数据,大家都会有很大的疑问:
“太超前了,现在的业务发展情况远远不需要的这样高的性能业支持,如果以很大的代价来实现,实在是太浪费,并且业务当前所需要的紧急的问题,是功能、是易用性并不是性能。”
这的确是一个现实的情况,这里我将在第三部份来计论这个情况,现在假设我们需要应对这些高性能的挑战吧。
我们面对上千万级的用户、几千的QPS、百G以上的数据。 实在没有办法以单独的服务器来支撑,因此在设计系统时,第一个要考虑的就是:
大家应很容易就理解和认同这种做法。 但是做起来确并不是简单的事情,需要根据具体的应用来设计。
假设我们需要5000的QPS,那我分解成 500 * 10,使用10组服务器来支持。 这时我们需要考虑的问题是:
在数据存贮方面,超过千万级的数据记录,上10G的数据,就考虑到水平扩展的能力。不论是我们常用的mysql还是oracle, 单表处理数据量是有一个性能拐点的。就需要考虑到折表,单机的数据库处理能力也是有限的,就要考虑到使用数据量的集群。
系统的水平扩展能力是解决性能敏感系统的首要原则,它使得系统具有通过增加更多的硬件设备来提高性能。
并且需要让这个扩展是容易进行的。
另外,即使我们系统有很好的水平提展能力,提搞单机的QPS还是非常必要。 单机的QPS太低,使得服务器的成本变得不可接受。
当面对高性能的访问时,你分析发现,在互联网的WEB应用,用户的读写访问在一般都会达到100:1,甚至会更高。高并发访问的性能问题,就会减化为, 如何提高并发的读访问速度和保证写访问的正确性有及时性。
在开发系统中,我们常常会出现两种以下的做法:
这两种方法,都有他们适用的范围,但同时也有他们的不足。
面对不同的要求,我们需要区别对待, 读写分离的思路,不仅是程序和程序开发模式的分离,它还意味着:
举例说明:
*联盟的广告展现代码不到100行。广告的展现代码不到500行(因为定向投放),其中的逻辑只是读取本地数据,套展现模版。 所有数据都邮后端推送到前端的WEB服务器。而广告数据的生成修改,就有很复杂的系统来管理,这基本不考虑性能的问题.
*互动组开发评论系统和贴吧系统,设定的考虑也是读写分离的模式,写逻辑强调代码的结构良好,读逻辑追求性能。
在越接用户和越接用具体应用时,缓冲的效率越高。 因此可能考虑在WEB服务器来建立一缓存。 在缓存机制的设计与使用,互动团队的贴吧系统应是值得学习的项目。当然我们也清楚那些好东西是做缓存的必备良药。Memched,BDB, varnish 需要清楚他们适合解决的问题是什么,加以利用。
不管Cache的机制如何有效,但我们还得保证在无Cache的情况下,性能基本满足业务的需要。因为Cache总是有他的命中率的,并且也要考虑到在Cache失效后,我们系统还是能正常运行的。
在我的理解,”’Cache是性能的放大器。”’
在系统的开发过程的管理,本质上还是以风险驱动的,什么最可能产生严重的问题,就应该去优先去解决。在评估性能后,我们需要的是一个高性能要求的系统,并且系统一上线,就会马上遇到这种性能的压力,那么我建议如下:
对于进度紧张,并且预期在未来半年内不会遇到性能挑战,关于上述的第3点可以先不做。但你对于系统的当前状况一定要清楚。 在系统在性能挑战出现之后,就可从容的去解决性能的问题。
标签:ar 使用 strong 数据 on 问题 代码 时间 管理
原文地址:http://www.cnblogs.com/gaf617/p/4120413.html