高并发网站的设计技巧
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
浅谈高并发网站的设计技巧
摘要:伴随web2.0兴起后出现的新一轮的网站开发创业大潮中,网站用户不仅是内容的浏览者,而且成为了网站内容的制造者。
这决定了网站结构上以数据库为中心,以用户为导向的新网站建设概念,使得新网站具有高并发、高流量、大数据量、逻辑复杂等特点。
笔者围绕网站的高并发特性,讨论数据库优化、分布式网站的编程要点、以及程序核心优化三方面的技巧。
关键词:服务器数据库分布式开发
1 数据库优化技巧
现在网站的特点,就是以数据库为中心。
如何最大化地利用数据库的能力,包括提高缓存命中、降低io开销、优化查询等,是目前需要进一步研究的课题。
1.1 确定主键主键是能唯一标识表中数据行的属性或者组合属性。
主键中该表中的值必须唯一。
如果数据更新不频繁,必须需要对主键进行排序,一定要是聚集索引;如果数据更新频繁,主键上一定要使用非聚集索引。
1.2 优化索引数据库表索引是避免全表扫描,降低数据库磁盘io的最重要的手段。
关系型数据库中,每个数据表不是孤立存在的,而是通过主、外键联系起来,共同形成完整的数据库结构。
所以,除了主键必须有索引外,外键通常也需要有非聚集索引,以方便对数据进行分类查询和汇总。
几乎每个表中,都需要有和时间相关的字段。
常用的网站用例中,多对数据的时间段进行查询、汇总,所
以对这些时间字段,一定要建立聚集索引,方便进行排序查询,避免全表扫描。
1.3 合理选用共享锁和排它锁死锁对数据库的性能、可用性、吞吐量都有重要的影响。
但在现在企业的信息化管理系统中,经常是可以由多个人同时对同个表进行操作,造成死锁的概率大大增加。
一般情况下,如果对数据的一致性要求很高,使用排它锁,其它都应该使用共享锁来提高性能。
1.4 分表在实践工作中,数据表中的每列的数据都有其特定的使用场景。
例如新闻表,在对新闻进行列表时,常使用新闻标识、新闻分类、新闻添加人、新闻时间信息,但不会使用新闻内容字段。
并且新闻内容的字段一般为“text”类型。
对于这种情况,我们一般把新闻表拆分成两个表,一个新闻表(包含常用用于检查的字段),一个新闻内容表(只有新闻的内容)。
从而让程序员使用常规方法,只检索出来常用的小数据量属性,只要表示新闻时,才加载超大的“text”类型的新闻内容,大大降低了数据的io开销和网络开销、提高数据库的吞吐量。
1.5 数据冗余在关系型数据库中,有些查询频次很高,但需要的数据字段又分属于不同的表,需要多达4个表以上才能选到所需要的全部数据。
此时,会造成表关联造成的开销过大,查询时间较长。
此时,可以通过空间来换时间。
把表中的某个常用属性,依业务需要,在其它的表中冗余存储,这样就减少了表关联的次数,提高了性能。
2 分布式网站编程要点
2.1 面向服务编程便于横向扩展复杂的网站由许多功能模块组成,有的系统之间的模块是相同的。
随着业务的拓展,有的功能模块逐渐成为系统的“瓶颈”,需要单独扩容。
面向服务的模块可以支持单独扩容。
企业信息化是整体的信息化。
在设计每个局部的信息化产品时,如果站在企业的角度,就可以更合理地抽象出来服务模块。
对这些服务模块定义接口,然后单实现和部署。
面向服务是全面实现企业信息化的有利工具。
对服务的良好规划,有利于将来平衡地引入企业服务总线,更好地统计、监控每个服务的运行状态,及时地发现信息化的性能瓶颈并定位解决。
2.2 分布式缓存减少数据库交互企业信息化中,大部分系统数据展示的频次远大于被更新的频次。
利用这些,我们可以把近一段经常被展示的数据缓存到分布式缓存中。
这样下一次相同的页面被打开或查询被执行时,可以在缓存中直接命中结果,省去了查询数据库和运算加工的开销,加快页面展示速度,提高用户体验。
分面式缓存使用淘汰算法,来保证缓存在内存中的数据不会造成内存溢出。
常用的算法有最近最少使用算法(lru)。
2.3 client cookie方便分布式部署企业网站被打开时,一般是具有用户的身份信息的。
传统的网站中,身份信息保存在session (会话)中,而session默认保存到每个服务器的进程中。
服务器中的session信息不能被其它服务器上的网站使用。
还有共享式
session,单独出来某服务器保存session信息,其它的网站都访问读写共享session服务器。
这解决了分布式环境中,用户从一台网站跳到别一台网站身份丢失的情况,但使共享式session成为单点,性能也因为共享式session的集中性而损失。
为了解决上述问题,在分布式环境中,通过把session信息,加密后保存在cookie中是更好的方案。
用户浏览器访问网站的时候,总是会把cookie信息提交到服务器,服务器进行解密后,就可以得到访问用户的信息,继续为用户服务。
同时,因为cookie保存在每个用户的计算机上,同时加解密同时在每个服务器上运行,不存在单点问题,理论上可以无限进行扩容。
3 结束语
设计高并发网站不是一日之功,上述只是阐述了最基本的原理。
相信只要努力做到设计精致化,并时时考虑如何更有效地实现并行计算和运行,网站的并发性能一定会步步高升。
参考文献:
[1]梅华威,张铭泉,李天.高并发高负载网站系统架构研究[j].计算机与网络,2009(14).
[2]李宇,曾志文,汤明.大型高并发高负载网站优化策略探讨[j].希望月报(上半月),2007(11).
[3]刘军.高并发数据库下的索引创建和使用技巧[j].中小企业
管理与科技(下旬刊),2012(12).。