浅谈高并发网站的设计技巧

时间:2022-10-01 02:33:52

浅谈高并发网站的设计技巧

摘要:伴随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).

上一篇:浅谈变电站的综合自动化系统 下一篇:网站建设与维护