云计算 频道

专家支招:高并发交易型网站设计四原则

  问题三:基于上述问题,如何设计一个高并发的交易型网站?需要从哪些方面考虑?

  叶萌:做一个大型高并发的交易型网站不可能从一个技术点就能突破,它需要综合性的考虑,包括前端、后端,后端又包括业务逻辑和数据处理,都需要考虑到。业务逻辑需要特别强调,做任何网站最重要的一点就是它的业务逻辑本身以及这个业务逻辑的优化上。

  首先讲前端,在做真正交易部分的前端的界面,要设计的尽可能地简单和轻。做这些页面不是为了炫而是为了做事,页面要非常简洁,简洁反映在数据量尽可能少,同时最好都在一个http连接或者很少在http连接就能把这个页面下载过来或者上传回去。

  从后端业务逻辑上来讲,业务逻辑刚才讲了业务流程优化的一个问题,做这种大型的网站要多做横向扩展,就是大家说的scale-out。策略就几招:

  第一招就是尽可能做划分。所谓划分就是有功能上的划分和数据上的划分。第一,查询的和交易等功能尽可能地划分,由不同的服务器来做相关的事情。第二,从数据上划分,如果是一个数据库,尽可能地要把一张很复杂的大表分给各种小表,尤其不相关的信息,尽可能拆分到不同的表里甚至不同的数据库里。举一个例子,像淘宝很简单的一个划分方法就是以网店为单位设计这个表,一个极端的例子就是每个网店是一张表,当然这个例子很极端,它肯定不是这么做的,一个网店一张表的话,表的数量肯定太多了。我查了一些资料,在春运的时间根据铁道部发布的全国列车运行图,在2012年春运期间好象开了2064对列车,来往算一对的话,总共开了2064对。如果把一对看成一个网店话,就是开了2064个网店,每一个网店里面每一条铁路线,实际就是任何每两点都应该可以买到票,理论上讲可以买到票,如果一条线上N个节点,应该是(28:09ncr)都可以买到票。这么一个组合,这个数字出来相当于网店里的商品数。这个量也不算太大,如果以每一对列车作为一个处理单元,可以把(28:37)分开的。

  还有一招就是尽可能地把同步操作变成异步操作。所谓异步操作就是它不需要马上给你回复。举一个例子,大家都用过携程网,携程网订飞机票,大家知道在携程里选了以后就下单了,下单以后携程不会马上告诉你订票成功的,它会告诉你它会去处理,会把处理的结果给你,通过短信通知你。这样的流程带来什么好处?可以把收集订单,收集完以后用类似于批处理的方式,集中处理这些订单。在业务逻辑和业务流程上做一些调整,对大型网站的横向扩展是非常有好处。

  我们稍微总结一下,大型的网站设计主要是要注意四个方面:第一,前端要尽量轻;第二,有一些静态的或者变化不怎么频繁的数据尽可能地使用缓存机制。包括像CDN、自己做的缓存等;第三,尽可能地把同步的交易异步化。第四,数据要尽可能划分开,系统的设计从功能上要尽可能地划分开,从数据上不关联的数据或者弱相关的数据尽可能分开,甚至强相关的数据也需要想一定的方法把它们分开,变成弱相关的数据,因为这样可以最好地做横向扩展,做并发处理。

0
相关文章