【IT168 技术】2012年春运期间,备受关注的火车票有了新的购买方式-网络和电话,人们一度天真的以为再不用去寒风瑟瑟的冬天去忍饥挨饿、排队购票了,但是现实无情了给了人们当头一棒,页面迟迟显示不出、登录半小时都能难系统……本来是一件利国利民的好事,结果有点出乎意料,当然究其背后的原因,很复杂,为此IT168专门采访了HP资深架构师汪洋,请他从技术的角度帮我们分析下网站架构过程中应该注意哪些问题?
汪洋(Richard Wang),安捷雨希软件咨询创始人(http://so.agilesharp.com),资深架构师和.NET技术专家。
针对12306目前的情况,汪洋表示最大的短板在于查询操作,由于在购票过程中,需要不断的查询火车的车次、日期及座位的相关情况,从而引导客户买票,正因为是基于实时的查询,所以查询的性能问题可能会引起蝴蝶效应。
而对于很多乘客提出的购票过程中的登录难的问题,汪洋谈到可以采用读缓存的方式解决;但对于下单难问题,由于其涉及到大数据量并发写入的问题,确实有一定的挑战,但并不是没办法解决,另外还猜想12306为了保证数据库的一致性等,其数据库里面的锁机制可能很严格,而锁机制正是性能的一大硬伤。
谈到12306的具体架构,汪洋表示可以借鉴国内电商淘宝、京东等的模式,因为流程很类似,但是针对每个部分(从前端到后端的数据存储)都需要作出改进。
网站架设 客户端如何改进
首先,对于一个站点,首先要考虑的是如何使用户可以最快的看到网页的内容。而对于一个网页来说,内容无非就是数据,html,资源(图片,脚本,css),其中对于资源(图片,js,css)可以采用CDN进行,一方面不占用站点本身的网络带宽,另一方面可以使不同地区的用户快速查看资源内容;而对于html和数据,就需要服务器端尽快的生成内容。
当相关的页面达到了客户端浏览器之后,就需要考虑交互问题了。用户最终是要向服务端提交内容的,而在这个时候可以考虑:只向其提交必要的数据,而不是每次把整个页面都传输过去,所以,可以适当的采用ajax技术,达到只提交数据,而不提交html标记的目的。当请求到达服务端后,也只把数据发送给客户端。
而关于客户端如何展示内容,可以采用客户端代码javascript来进行,同时客户端也可以设计缓存架构,例如,不要每次需要的时候都去服务端请求,可以一次多请求一部分数据,因为请求服务端是要开tcp连接的,一旦用户过多,服务端会不堪重负,就像我们在网上购物一样,需要显示一些商品列表,现在很多电商的做法是分页,一页一页的去请求;其实,我们可以考虑一次请求5页,10页的内容,当然很多人会考虑这其中会不会有浪费的问题,这个时候,其实就需要比较数据传输和 tcp连接成本问题。
从这一点可以看出,一个好的网站绝对是精打细算出来的,对于每一点都需要优化、仔细估算。要实现这个一方面需要挖掘用户的习惯,考虑用户一般需要翻几页,很多用户,习惯性的只翻前几页,极少用户会翻到几十页,二就是通过多传输一部分数据,以减少服务端的压力,这其中可以算笔账:多给5页的数据,在此之间就减少5次对服务端的请求,一个用户减少5次,百万,千万呢?