改进的12306网站的架构设计

标签: 网站 架构 设计 | 发表时间:2013-02-07 11:45 | 作者:lijianhua1974
出处:http://blog.csdn.net
 像反向代理,负载均衡,静态化,缓存,数据库分区这些就不具体说了,主要是业务系统的设计,整个系统基于soa,主要设计如下

     1 前端页面发送请求,调用后台服务模块webservice

     2 服务模块api接受到请求,将接受的数据封装成map,调用后台交易模块webservice

  3 交易模块api将封装的map再次封装成一个event,放入交易Disruptor队列

  4 交易模块主线程从交易Disruptor队列中取出event,分析event的数据,进行处理,比如对于买票请求

    a.读取票池内存数据或内存数据库,查看是否有票

    b.如果没票,则返回出票失败
  
    c.如果有票,则将票池票数降1,将event状态设为支付中,放入支付网关Disruptor队列,返回支付中

    d.支付网关模块主线程从支付网关Disruptor队列中取出event,进行处理

    e.当支付完成时,支付网关主线程将event状态设为支付成功或支付失败,重新放入交易Disruptor队列

    f.交易模块主线程从交易Disruptor队列中取出event,如果状态是支付成功,则返回出票成功,如果状态是失败,则票池票数加1,返回支付失败

 核心思想就是把处理串行化,除此之外,在这个系统中,还有一些需要特殊设计的地方

   1 在系统启动时,将从核心票务数据库读取数据,构造票池内存数据结构,这样,在实际的业务中,就不再从物理数据库中读取数据,极大提高性能
  
   2 票池内存数据结构是个高度优化的数据结构,方便快速的读取和修改
  
   3 当系统发生故障时,快速的恢复是必须的,因此,每个event在放入队列前,都要先保存,可以保存到key-value类型的数据缓存系统中

   4 交易系统和支付网关系统的的主线程也要采取双线程监听,一旦主线程发生故障,立刻启动备用线程

   5 交易模块主线程执行的是一个个严格串行执行的任务,这样就确保了对处理的内存资源不需要进行加锁

        6 支付网关模块主线程执行的是一个个需要等待较长时间的任务,这些任务都是调用支付服务商的api进行支付,等待返回支付结果,这些任务互不相关,可以并行处理,  因此可以采取异步计算的job-worker结构
作者:lijianhua1974 发表于2013-2-7 11:45:33 原文链接
阅读:131 评论:0 查看评论

相关 [网站 架构 设计] 推荐:

做大的艺术 - 大型网站的架构设计 [转载]

- - kernelchina
(原文在这里 http://blog.sina.com.cn/s/blog_46d0a3930100euxb.html,看了一些关于网站架构方面的文章,基本上是大同小异. 也就是说,基本的原则都是一样的,而且软件也都是开源软件. 整合需要一些自制的工具或者根据业务定制软件;运营需要考虑数据中心建设,业务流程设计等等,不是一个简单的软件问题.

改进的12306网站的架构设计

- - CSDN博客架构设计推荐文章
 像反向代理,负载均衡,静态化,缓存,数据库分区这些就不具体说了,主要是业务系统的设计,整个系统基于soa,主要设计如下.      1 前端页面发送请求,调用后台服务模块webservice.      2 服务模块api接受到请求,将接受的数据封装成map,调用后台交易模块webservice.

千万级pv高性能高并发网站架构与设计(转)

- - BlogJava-
高并发访问的核心原则其实就一句话“把所有的用户访问请求都尽量往前推”. 如果把来访用户比作来犯的"敌人",我们一定要把他们挡在800里地以外,即不能让他们的请求一下打到我们的指挥部(指挥部就是数据库及分布式存储). 如:能缓存在用户电脑本地的,就不要让他去访问CDN. 能缓存CDN服务器上的,就不要让CDN去访问源(静态服务器)了.

Facebook 网站架构

- - idea's blog
我收集到一些文章和视频, 可以带你窥探 Facebook 的架构. Facebook 承载了几十亿的用户, 它的架构(包括思想和实现)是非常值得参考的. 当然, 你要小心不要照搬 Facebook 的每一字一句, 因为任何思想和实现都是有自己的应用场景的.. Google Talk 界面开发分析. 使用Python POST任意的HTTP数据以及使用Cookie.

网站架构演进

- - CSDN博客互联网推荐文章
很多年前,世界上出了互联网这个东东,不久之后又出来了网站这个家伙. 那时的程序员还只是程序员,有的程序员Deid,But他依然live的. 不像现在,他虽然活着,但已经不仅仅是程序员那么简单了,因为他更喜欢用屌丝来形容自己. 网站的远古时代就好像我们的原始时代一个意思的. 作者:enson16855 发表于2013-7-8 22:43:36 原文链接.

软件架构设计

- - 企业架构 - ITeye博客
软件架构设计尚没有万灵的方法论支持,还是个非常新兴的行业,给出个人理解的行业软件架构设计过程,受个人水平有限,仅供参考:. 1.业务分析:针对目标行业的业务战略、蓝图、业务功能及流程进行分析,提出其中部分功能可以使用信息化进行处理,通过分析可以得出信息化要解决的问题. 2.解决方案设计:根据业务战略,形成行业信息化解决方案.

架构设计-逻辑层

- - 人月神话的BLOG
知乎看到一个问题,也是当前在软件设计开发中普遍存在的一个问题,如下:. 现在要开发一个业务逻辑比较复杂的项目,但是在网上看了设计模式的思想后感觉自己以前写的东西扩展性都不好,接口定义也不合适,都是一个实体类一个接口,项目施工也感觉不合理,感觉项目施工中应该先集中定义好接口,并完成业务逻辑,然后在具体实现接口,不知道这样想是不是正确.

秒杀架构设计

- - IT瘾-dev
最近在部门内部分享了原来在电商业务做秒杀活动的整体思路,大家对这次分享反馈还不错,所以我就简单整理了一下,分享给大家参考参考. 通俗一点讲就是网络商家为促销等目的组织的网上限时抢购活动. 比如说京东秒杀,就是一种定时定量秒杀,在规定的时间内,无论商品是否秒杀完毕,该场次的秒杀活动都会结束. 这种秒杀,对时间不是特别严格,只要下手快点,秒中的概率还是比较大的.

架构设计和概要设计

- - 人月神话的BLOG
初步再来探讨下架构设计和概要设计的区别和边界问题. 架构设计包括了功能性架构和技术架构设计两个部分的内容,功能性架构解决业务流程和功能问题,而技术架构解决非功能性需求等问题. 两种架构都包括了动态和静态两个方面的内容,对于功能性架构中动态部分为业务流程驱动全局用例,用例驱动的用例实现等;对于技术架构中动态部分为架构运行机制,而静态部分为框架,分层等方面的内容.

网站首页的设计

- - 标点符
网站首页的设计是一件非常让人头痛的事. 虽然她看上去很简单:产品经路随便从网站里拿点东西出来,堆出一个看上去靠谱的页面. 也正因此,它往往非常麻烦:很多人都可以发表自己的见解,以致最终陷入到无尽的争执中. 首页的设计相对于其他页面要难的原因是,其他页面更多的是解决用户“能做”的问题,而首页的更多要解决用户“想做”的问题.