最近有人在 Clojure 的 Google 讨论组里发布了一条消息,说有一个部分使用 Clojure 语言开发的医疗服务系统已经在一个重要的兽医院投入使用。这个产品看上去使用了好几种语言和技术,但是 Clojure 看上去也在其中扮演了一个重要的角色。
这一发布引发了一阵骚动,因为这是目前为数不多和 Clojure 相关的报道,而且是在一个大规模产品部署中使用 Clojure,尤其是在医疗这么重要的环境中。作为一门语言,Clojure 相对比较年轻,才开发了没几年。
这一产品的核心是一个复杂的 HL7 消息总线。这些消息的路由和归档,以及总线的容错功能和错误处理都由 Clojure 控制:
我们设计了一个 HL7 消息总线来连接医院里的不同服务,比如将病例系统和放射科进行连接等。这样做的最大好处是避免了每个系统里病人和请求的密钥信息重置。 在总线上我们还提供了一些密钥程序,允许人们在他们每日使用的系统里,以一个持久的方式共享信息。这就就好像一个巴比塔,放射科医师想使用他们的放射系统,而管理人员想用病例系统处理账单等等。基于一个用户库,每个系统都遇到特定的需求,从而需要一个通用的平台来共享信息。这就是我们这个系统所要解决的。
在这个产品里还应用了其他一些技术和规范,比如:
这个产品目前部署在多个迷你 PC 设备上,使用主从运行时模式提供容错处理。该产品使用并行处理模式,据报道可以每小时至少处理 2000 个交易。作者还谈到,在将来他们会进一步扩展 Clojure 和 Terracotta 集群类库中的并发特性,最终完全抛弃主从模式,然后通过在所有工作设备上同时运行它们来扩展系统的容错能力。
Clojure 语言主要用于解决并发编程问题。通过软件事务内存模式和用作代理系统的线程分发框架,Clojure 提供了诸多特性,以一种持久安全的方式在线程之间传递状态。
在Clojure 的官方网站上你可以了解到更多关于Clojure 的内容,而 Clojure Google 讨论组是该社区交流和发布信息的最佳场所。
评论