看看传说5亿行代码的Healthcare.gov网站的架构

发布时间:2013-11-07

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的七宗罪

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

奥巴马:新产品总是会有问题的

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

每种新法律、新产品发布时,总会在初期遇到很多问题,这些问题将很快被修复。
这就像几周之前,苹果发布了全新的移动操作系统,几天之后,苹果发现了问题,公司马上发布了修正补丁。我可不记得有人建议苹果应该停止销售iPhone、iPad或者威胁公司应该关门倒闭。

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

这是一个典型的政府式项目。话说,有人知道12306的代码量是多少么?