阅读更多
HealthCare.gov是美国联邦健康保险交换系统的核心,该网站自10月1日开通运营以来一直遭受各种问题的困扰,比如性能、数据问题等等。

《纽约时报》曾报道称“大约1%的代码——相当于500万行——需要重写”,如果这个数据正确,也就是说Healthcare.gov的总代码量达到了惊人的5亿行。5亿行意味着什么呢?这意味着Healthcare.gov的代码量是Facebook、Windows XP和OS X之和的2倍还多。看下图你就一目了然了。



网站架构

也有一些“无聊”的人,比如Eduardo Garcia这位老兄,在帮父母买保险时遇到了问题,就利用自己的开发技术和浏览器中的开发者工具分析了这个网站的架构,见下面的信息图。图中的CMS指的是Centers for Medicare and Medicaid Services(医疗保险和医疗补助服务中心)。



该网站主要由6个复杂的系统组成,分别由6个承包商负责开发,而且这些承包商下面还有承包商(多达55个),由于没有一个总的负责人,网站最终出现各种各样的问题也在所难免。

其中FFM(Federally Facilitated Marketplace,联邦政府促进市场)系统最为复杂。从图中可以看出,该网站前端使用了HTML5技术,包括Twitter Bootstrap、jQuery、Backbone.JS等,使用Pingdom工具进行监控和优化,虚拟基础架构是由Terremark公司提供的。这个系统的合同金额高达2.93亿美元。

导致网站“瓶颈”的其中一个部分就是EIDM(Enterprise Identity Management,企业身份管理系统),目前还不清楚该系统使用什么技术,但很明显,它通过一个RESTful API提供身份验证、授权功能。

Healthcare.gov的核心是数据服务中心,该系统由Optum/QSSI开发,主要作为所有保险公司的数据库、CMS数据库和Equifax(美国三大信用局之一)收入验证服务的数据层和Web服务层,该系统由JBoss服务器、数据访问组件以及使用Java开发的RESTful Web服务所构成。该技术堆栈也被认为是导致应用比较慢的原因之一。

来看看一些细节,这个all.js文件中集合了Bootstrap.js、jQuery、Backbone.js、json2.js以及各种各样的插件和应用的代码。下面这个图中显示individualApplication.js文件中的第18415行代码出现问题,可见该工程的庞大。



问题根源

Ars网站列出了HealthCare.gov的七宗罪

  • 承包商太多,导致最终结构过度复杂
  • 整个项目都依赖于Experian提供的数据,而无论是政府还是承包商都对数据质量没有发言权,数据出现问题会导致整个网站遭遇问题;
  • 从未经过时间检验的全新结构;
  • 需求不断变化,设计不断改变;
  • 由于需求直到上线最后一分钟还在改,导致网站根本无法进行全面的测试;
  • 不是逐步增加新特性,网站将全部功能一下子推出,由于没有办法在高负荷下测试网站的性能,政府无法根据测试结果扩建基础设施;
  • 网站没有有效的方法在多层组件中管理bug跟踪,没有方法识别问题的根源。
奥巴马:新产品总是会有问题的

针对这些问题,美国政府如今也没有什么好的解决办法。美国总统奥巴马之前对此表示:

引用
每种新法律、新产品发布时,总会在初期遇到很多问题,这些问题将很快被修复。

这就像几周之前,苹果发布了全新的移动操作系统,几天之后,苹果发现了问题,公司马上发布了修正补丁。我可不记得有人建议苹果应该停止销售iPhone、iPad或者威胁公司应该关门倒闭。


据悉,已经有三名分别来自甲骨文、谷歌和红帽的工程师正在帮助政府改善这个网站,并且他们已经参与此事近一个月了。

这是一个典型的政府式项目。话说,有人知道12306的代码量是多少么?
  • 大小: 65.8 KB
  • 大小: 269.2 KB
  • 大小: 115.5 KB
21
2
评论 共 45 条 请登录后发表评论
45 楼 pker02 2014-02-21 12:44
ygzeng2010 写道
dacoolbaby 写道
colky 写道
所有的程序员都没有说中一个要害,12306的商品资源是稀缺的,很多的销售终端和网站要同时请求某张票的状态并完成交易。淘宝是无数的用户同时购买不同的产品,总并发量可能淘宝大,但是处理难度12306要高无数倍。

那你说像产品秒杀算不算高并发状态呢??
像双11的那种产品秒杀,和秒车票的,有具体的差别不?


我觉得双11的秒杀顶多是竞争同样资源,纯粹的并发问题。
而12306的某张票,可能产生的影响大多了。比如北京-上海的一张票,
中间停5个站,那这些站之间任意区间的人都可买,并且买后直接产生不同的结果,影响其他人的购票行为。如果还涉及返程、转车之类的,就更麻烦了。


其实火车的车票不是完全实时分配的,是分时间段分配的。
举例:
北京-上海,中间停靠10个车站,在第一次发售的时候,只分配北京到上海的车票,中间车站的不分配,1个小时或者1天后,再根据剩余票额重新分配。
这只是举个例子,实际情况比这个要复杂的多。我只是想说明不是每个席位都是实时分配的。
再说一个实际情况,过年的时候我买返程票(从临汾到北京,该车次是从韩城到北京),到了放票的时间点,我没有抢到票,然后我再等下个放票时间,然后买到了襄汾到北京的卧铺,襄汾是临汾的上一站。按照你的说法,也就是当时有襄汾到北京的卧铺,我需要买的是其中一个区间,应该实时计算,然后把票卖给我。可是实际情况是铁道部压根就不这么卖。
44 楼 ray_linn 2014-02-21 12:12
pker02 写道
java007008 写道
pker02 写道
zha_zi 写道
天猫双十一当天晚上快捷支付根本无法完成,我尝试的不下10次,就不要吹比阿里巴巴了

双十一快捷支付失败的主要问题是银行接口,而不是支付宝。
0点开始后的半小时内,并发过高,导致银行压力太大。过了半小时就基本恢复正常了。
支付宝余额支付和余额宝支付的成功率还是非常高的。

你怎么知道???

当天我也买东西了,实际情况和我描述的一样,并且我的朋友也是这样。
然后根据淘宝公布的数据,0点的交易额,1点的交易额之类的来推算的。


那天很多情况不是支付出问题,是刷购物车都出不来了。
43 楼 pker02 2014-02-21 12:06
java007008 写道
pker02 写道
zha_zi 写道
天猫双十一当天晚上快捷支付根本无法完成,我尝试的不下10次,就不要吹比阿里巴巴了

双十一快捷支付失败的主要问题是银行接口,而不是支付宝。
0点开始后的半小时内,并发过高,导致银行压力太大。过了半小时就基本恢复正常了。
支付宝余额支付和余额宝支付的成功率还是非常高的。

你怎么知道???

当天我也买东西了,实际情况和我描述的一样,并且我的朋友也是这样。
然后根据淘宝公布的数据,0点的交易额,1点的交易额之类的来推算的。
42 楼 ygzeng2010 2014-01-08 10:59
dacoolbaby 写道
colky 写道
所有的程序员都没有说中一个要害,12306的商品资源是稀缺的,很多的销售终端和网站要同时请求某张票的状态并完成交易。淘宝是无数的用户同时购买不同的产品,总并发量可能淘宝大,但是处理难度12306要高无数倍。

那你说像产品秒杀算不算高并发状态呢??
像双11的那种产品秒杀,和秒车票的,有具体的差别不?


我觉得双11的秒杀顶多是竞争同样资源,纯粹的并发问题。
而12306的某张票,可能产生的影响大多了。比如北京-上海的一张票,
中间停5个站,那这些站之间任意区间的人都可买,并且买后直接产生不同的结果,影响其他人的购票行为。如果还涉及返程、转车之类的,就更麻烦了。
41 楼 hotapple 2014-01-03 16:45
dacoolbaby 写道
colky 写道
所有的程序员都没有说中一个要害,12306的商品资源是稀缺的,很多的销售终端和网站要同时请求某张票的状态并完成交易。淘宝是无数的用户同时购买不同的产品,总并发量可能淘宝大,但是处理难度12306要高无数倍。

那你说像产品秒杀算不算高并发状态呢??
像双11的那种产品秒杀,和秒车票的,有具体的差别不?


秒杀产品,一般服务器会过滤掉大部分的用户的请求,最后去处理的是少量的请求。
40 楼 筱龙缘 2013-12-26 11:51
看热闹   上次不是说巴西医疗系统2000万行代码么   这次又来个500万万
39 楼 dacoolbaby 2013-12-09 13:47
colky 写道
所有的程序员都没有说中一个要害,12306的商品资源是稀缺的,很多的销售终端和网站要同时请求某张票的状态并完成交易。淘宝是无数的用户同时购买不同的产品,总并发量可能淘宝大,但是处理难度12306要高无数倍。

那你说像产品秒杀算不算高并发状态呢??
像双11的那种产品秒杀,和秒车票的,有具体的差别不?
38 楼 colky 2013-12-09 09:32
所有的程序员都没有说中一个要害,12306的商品资源是稀缺的,很多的销售终端和网站要同时请求某张票的状态并完成交易。淘宝是无数的用户同时购买不同的产品,总并发量可能淘宝大,但是处理难度12306要高无数倍。
37 楼 kanen001 2013-12-06 16:32
其实我只想知道 all.js 他们一边都用什么工具来修改和维护,难道是拷到记事本中修改再改回去么!!
36 楼 java007008 2013-11-15 13:18
lection.yu 写道
pker02 写道
ray_linn 写道
sawadari_k 写道
dieslrae 写道
sawadari_k 写道
java007008 写道
有人能编写出替代12306网站的网站吗?
多长时间写完?
什么架构?

12306这个级别的,恐怕不是一家公司能够搞得定的吧。。。

阿里

不大可能吧。。。铁道部是不会把这些项目给阿里之类的商业软件公司做的。。。


一个双11,阿里自己吹的牛皮就破了,呵呵,12306那是几十倍的双11.


12306的并发绝对不会几十倍于双十一
双十一0点的并发量是非常恐怖的,具体的可以等详细报告。

12306居然几十倍双十一。。。双十一光一小时的静态资源流量我估计就能顶12306一年了。


数据对比在哪里?
35 楼 java007008 2013-11-15 13:18
pker02 写道
zha_zi 写道
天猫双十一当天晚上快捷支付根本无法完成,我尝试的不下10次,就不要吹比阿里巴巴了

双十一快捷支付失败的主要问题是银行接口,而不是支付宝。
0点开始后的半小时内,并发过高,导致银行压力太大。过了半小时就基本恢复正常了。
支付宝余额支付和余额宝支付的成功率还是非常高的。

你怎么知道???
34 楼 lection.yu 2013-11-15 10:35
pker02 写道
ray_linn 写道
sawadari_k 写道
dieslrae 写道
sawadari_k 写道
java007008 写道
有人能编写出替代12306网站的网站吗?
多长时间写完?
什么架构?

12306这个级别的,恐怕不是一家公司能够搞得定的吧。。。

阿里

不大可能吧。。。铁道部是不会把这些项目给阿里之类的商业软件公司做的。。。


一个双11,阿里自己吹的牛皮就破了,呵呵,12306那是几十倍的双11.


12306的并发绝对不会几十倍于双十一
双十一0点的并发量是非常恐怖的,具体的可以等详细报告。

12306居然几十倍双十一。。。双十一光一小时的静态资源流量我估计就能顶12306一年了。
33 楼 pker02 2013-11-14 18:54
ray_linn 写道
sawadari_k 写道
dieslrae 写道
sawadari_k 写道
java007008 写道
有人能编写出替代12306网站的网站吗?
多长时间写完?
什么架构?

12306这个级别的,恐怕不是一家公司能够搞得定的吧。。。

阿里

不大可能吧。。。铁道部是不会把这些项目给阿里之类的商业软件公司做的。。。


一个双11,阿里自己吹的牛皮就破了,呵呵,12306那是几十倍的双11.


12306的并发绝对不会几十倍于双十一
双十一0点的并发量是非常恐怖的,具体的可以等详细报告。
32 楼 pker02 2013-11-14 18:50
zha_zi 写道
天猫双十一当天晚上快捷支付根本无法完成,我尝试的不下10次,就不要吹比阿里巴巴了

双十一快捷支付失败的主要问题是银行接口,而不是支付宝。
0点开始后的半小时内,并发过高,导致银行压力太大。过了半小时就基本恢复正常了。
支付宝余额支付和余额宝支付的成功率还是非常高的。
31 楼 zha_zi 2013-11-14 10:56
天猫双十一当天晚上快捷支付根本无法完成,我尝试的不下10次,就不要吹比阿里巴巴了
30 楼 canon99 2013-11-13 15:17
ray_linn 写道
阿里也不怎么地,从昨天开始付款就出现各种错误了。买东西的人那可是绝没有买车票的人多。

人品问题
29 楼 canon99 2013-11-13 15:16
阿里秒杀全部,估计全球没有几家公司处理迸发有阿里强
28 楼 hanz188 2013-11-13 14:15
这篇文章的原文来自于 CSDN 呢,链接地址是 http://www.csdn.net/article/2013-11-07/2817431-Healthcare-Architecture
27 楼 hanz188 2013-11-13 14:14
wangguo 写道
ansjsun 写道
12306 的代码应该至少有 12306行

单个文件至少12306行
尼玛,楼上两位配合真是默契...
26 楼 ray_linn 2013-11-11 12:49
sawadari_k 写道
dieslrae 写道
sawadari_k 写道
java007008 写道
有人能编写出替代12306网站的网站吗?
多长时间写完?
什么架构?

12306这个级别的,恐怕不是一家公司能够搞得定的吧。。。

阿里

不大可能吧。。。铁道部是不会把这些项目给阿里之类的商业软件公司做的。。。


一个双11,阿里自己吹的牛皮就破了,呵呵,12306那是几十倍的双11.

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

Global site tag (gtag.js) - Google Analytics