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 的七宗罪:
奥巴马:新产品总是会有问题的
针对这些问题,美国政府如今也没有什么好的解决办法。美国总统奥巴马之前对此表示:
每种新法律、新产品发布时,总会在初期遇到很多问题,这些问题将很快被修复。
这就像几周之前,苹果发布了全新的移动操作系统,几天之后,苹果发现了问题,公司马上发布了修正补丁。我可不记得有人建议苹果应该停止销售 iPhone、iPad 或者威胁公司应该关门倒闭。
据悉,已经有三名分别来自甲骨文、谷歌和红帽的工程师正在帮助政府改善这个网站,并且他们已经参与此事近一个月了。
这是一个典型的政府式项目。话说,有人知道 12306 的代码量是多少么?