IBM®
跳转到主要内容
    中国 [选择]    使用条款
 
 
Select a scope: Search for:    
    首页    产品    服务与解决方案     支持与下载    个性化服务    
跳转到主要内容

developerWorks 中国  >  Linux | Open source  >

来自 OSCON 2009 的思想:开放的政府和并发性

在利用好多核和多节点同时为治理引入开放数据和标准

developerWorks
文档选项

未显示需要 JavaScript 的文档选项

英文原文

英文原文


级别: 初级

David Mertz, Ph.D., 开发人员, Gnosis Software, Inc.

2009 年 8 月 31 日

O'Reilly Open Source Convention (OSCON) 的可贵之处在于,它是一个收集关于软件开发的先进思想的场合。在 2009 年的大会上提出了许多新颖的思想,David Mertz 对这些思想进行浓缩,集中介绍两个非常不同但都很重要的领域:开放的政府和并发。

OSCON 今年的重点之一是开放的政府,包括在开放源码开发人员和更透明的政府之间可能实现的协作。我也参加了关于改进基于计算机的投票的可靠性的会议。

Tim O'Reilly 的开场演讲

OSCON 的开场演讲常常会定下大会的基调。Tim O'Reilly(他当然必须遵守大会计划)对于以后几天讨论的问题范围给出一些说明,然后谈到了他当前感兴趣的领域。与开放源码运动中的许多人一样,O'Reilly 最近把相当一部分精力放在政府项目上,与开放源码开发人员一起努力让政府信息资源发挥更大的作用。

在介绍他在 “Gov 2.0” 方面所做的工作之前,O'Reilly 先提到了另外几个有意思的主题,包括数据服务的 “联合” 和社交网络。O'Reilly 非常兴奋地讨论了向更小型的设备(主要是智能电话)发展的趋势,这些设备应用大量传感器(触摸屏、摄像头、麦克风、动作感应器、GPS),可以利用云数据服务实现多种功能,比如语音识别、搜索、定位、面部识别和与社交网络集成。云计算的主要优点是,数据服务之间的协作越多,每个服务的价值就越大;缺点是它有导致垄断的倾向。

说回政府方面。目前,在政府的运作中,各种信息的发布越来越开放,已经向 “开放的政府平台” 迈出了一大步;在开放的政府平台中,数据服务向公民(和开放源码开发人员)提供 SDK 和开放的 API。O'Reilly 高度赞扬了新的国家首席技术官 Aneesh Chopra 在这方面做出的贡献。

O'Reilly 指出,实体 Gov 2.0 具有几个特点。它强调社交网络的透明性,允许公民贡献和协作。它把政府当作一个平台,一种集体行动的方法,但是它更接近 Benjamin Franklin 的公民行动的概念,而不是 Donald Kent 所说的 “自动售货机式政府”。开放源码开发人员的态度是 “给我们工具,我们可以自己做”,这正反映了忙碌的公众的要求。

但是,仍然有一些因素妨碍 Gov 2.0 的发展,主要问题是目前仍然存在错综复杂的获取过程。O'Reilly 以 Brewster Kahle 和 archive.org 作为例子,这个项目希望以最低的成本反映白宫网站的历史状态,希望只花费几万美元构建一个敏捷的项目,而不是花费数百万(甚至上亿)资金开发不灵活和过度设计(且源码不开放的)项目,但是现有的获取过程导致这很难实现。因此,白宫工作人员现在仍然使用不方便又耗时很长的站点快照,与正确的方法相比,这么做效率很低而且成本高得多。





回页首


开放源码在选举方面的应用

我听了两场介绍开放源码在选举方面的应用的演讲。老读者可能看过我以前讨论开放源码在选举方面的应用的文章,了解我在 Open Voting Consortium (OVC) 做的工作。实际上,我在以前的 OSCON 上介绍过 OVC 的演示/原型系统的技术成果。

今年的一个演讲的演讲者是 Neal McBurnett,他为 Colorado 的 Boulder 市开发了一个使用 Django for Election Verification 的系统。除了他讨论的技术问题之外,引人注目的一点是他促使市政府在 2008 年采用 了这些系统,由此提高了选举的可靠性和透明度。

McBurnett 的演讲没有很深入地讨论代码,而是主要讨论选举审计的设计原则和选举系统的一般原则。他提出的重要原则之一是 Rivest 和 Wack 的 “软件独立性” 概念。简单地说,这种思想要求对软件的依赖并不是必需的,每个组件都是可替代的并通过定义良好的界面操作。纸制选票和开放格式是软件独立性的主要元素。

McBurnett 的演讲主要讨论选票和记票的统计学检验的最佳原则。他介绍了取样的细节以及固定百分比和风险限制审计之间的差异。他的幻灯片很好地说明了这些问题(见 参考资料 中的链接)。

第二场演讲与这个主题密切相关,演讲者是 James Tillman 和 Richard Benham,他们在 Florida 开发了一个选举系统,与卓越的选举活动家 Ion Sancho 一起工作。他们介绍了一个良好的选举系统,这个系统还没有在目前的公共选举中使用(而且还没有发布源代码,但是他们承诺不久就会发布)。

Tillman 和 Benham 通过许多独立项目得出的结论与 OVC 在 2003 年做出的结论相同:最好的投票系统应该使用计算机设备(可能是触摸屏界面)生成投票者可以检查的纸制选票。使用计算机的优点包括:

  • 让有身体机能障碍的投票者也可以投票
  • 提供多语种功能
  • 减少由于填写不当造成的废票

总之,计算机应该只是一个神奇的打印机。与 OVC 的设计一样,Tillman 和 Benham 决定在打印的选票上使用 2D 条形码。OVC 的代码使用 Python、PyGame 和 Postscript 实现这种效果;Tillman 和 Benham 使用 Java™ 代码,大多数工作用 EML、XSLT 和 XSL-FO 等 XML 技术直接完成。在这两个解决方案中,重要的设计元素之一都是使用开放源码工具集,由此确保投票者可以检查系统。

有一个名为 “Hacking the Open Government” 的会议也很有价值,尽管它的重点不是选举。参加这次会议的有 Adina Levin、Silona Bonewald、Kevin Marks、Ilan Rabinovitch 和 California 的州务卿 Debra Bowen。州务卿 Bowen 的出席是吸引我参加的原因;我很高兴看到民选的高官也对开放源码感兴趣。在会议后的提问阶段,我很高兴有机会与州务卿 Bowen 简短对话。

对于这次大会,我特别感兴趣的另一个领域是并发。目前 Moore 定律差不多已经失效了,处理器速度不可能像以前那样快速增长了,所以处理器性能的以后改进方向主要是提供更多的核,而不是提高时钟频率。因此,在核和芯片(以及节点和网络)之间分布工作越来越重要了,这已经成为良好的理论性应用程序设计的重点。另外,良好的分布需要有良好的工具来实现和维护它。





回页首


REvolution Computing 的 ParallelR

应公司新闻代表的邀请,我非常愉快地会见了 REvolution Computing 的 CEO,Richard Schultz。这家公司采用许多开放源码公司的模型,为基本的 REvolution R 产品开发增强的企业版,提供各种附加特性,按照一套定价机制让企业版实现商业应用。我对于 REvolution Computing 的市场营销并不太感兴趣,而是对他们开发的产品有兴趣。

在两个版本中,REvolution Computing 都大大提高了 R 编程语言的性能,还增加了用于计算和绘图的与领域相关的库。性能改进源于两个方面。一方面,改进了算法,优化了线性计算的速度。据 Schultz 所说,他们实现了 2-5 倍的改进。这很惊人,但是我更感兴趣的是他们如何在不同类型的资源(从核直到节点集群)之间分布工作。

ParallelR 基于一种为 Linda Coordination Language 开发的并发方法,它从集中管理的元组空间分配工作片段。R 本身很适合这种并行,主要功能都基于 R。ParallelR 增加了 foreachiterator 包,它们为并行计算提供高层构造,从程序员的角度来看工作分配的处理是透明的。对于通常使用 R 执行的大规模计算,这种高层并发是很大的优点。

在讨论异类并发时肯定会提到的一点是,它最适合那些属于 “畸形并行(embarrassingly parallel)” 的问题。幸运的是,大型数据集上的元素相关操作正是这一类问题,这也是 R 用户通常面对的问题类型。





回页首


并发构造纵览

Ted Leung 一直是一位有趣的演讲者 — 他为动态编程语言社区做了许多工作,尤其是在 Python 方面。他的演讲详细讨论了多种并发方法;其中一些是大多数读者熟悉的,但是一些方法对于主流计算机科学课程和实践程序员来说相当深奥。Leung 列举了六七种并发模型范型

大多数程序员最熟悉的并发模型是线程化。大家同样熟悉线程化的问题:锁冲突和死锁。在一般情况下,用锁实现的并行总是需要开发人员做大量显式的计划工作。其他方法虽然都有缺陷,但是大都支持更高层的抽象,避免显式地锁住资源。

一种并发方法是软件事务性内存,这在 Haskell 中已经比较普遍了。 这种方法按照与事务性数据库系统相似的方式对待内存,也就是操作保持原子性,在发生请求冲突时执行回滚和重试。 事务性内存可能导致重复计算,但是在操作冲突不多的情况下,开销仍然比锁机制低。

另一个模型是 Actor 模型,这在 Erlang 中尤其知名(但是 Leung 谨慎地指出 Actor 模型和 Erlang 的发展是相互独立的)。Actor 模型基本上是 “不共享任何东西” 体系结构,在向其他 Actor 发出请求时 Actor 总是传递自含的消息。在去年的 OSCON 上,我写过一份关于 Actor 的讲稿。

Leung 提到了 Linda 和 ParallelR 底层的元组空间模型,但是由于时间的限制,并未详细讨论。在这种模型中,任务按空间和时间分隔开,读和写也是分开的。

Leung 还提到了 Bill Ackerman 的 “数据流” 概念,这个概念支持声明式并发。这种方法的问题是,尽管它对问题进行划分,但是无法处理非确定性因素(也就是说,它只适合纯功能性语言);如果需要处理真实的非确定性因素(比如输入和输出),就需要 Actor。

Leung 讨论的最后一种模型是持久化数据结构。这是一个不完整的模型;它不能解决所有并发问题。但是,它是一种良好的措施。这种模型很早就出现了,但是在最近一两年,由于在 Clojure 语言中的应用开始流行了。基本思想是所有数据结构都被保存(即不可变),通过建立副本表示各种修改。实现不可变性之后,与锁相关的所有问题就不存在了。并非每个数据结构都是稳定的,但是大多数广泛使用的数据结构都有变体,它们会保持对应的可变版本的 big-O 效率(关于 big-O 表示法的更多信息请参见 参考资料 中的链接)。





回页首


Clojure 为 JVM 提供功能性并发

Howard Lewis Ship 在他的演讲中介绍了 Clojure 语言。我听到过关于这种用于 JVM 的新语言的各种议论。当然,您可能知道 Clojure 实际上是一种非常老的语言 Lisp(但是在内置的数据类型方面有一些改进,还增加了一些语法)。

我很高兴地看到 Clojure 有可能实现一些具体的发展,但是目前还不确定。Ship 介绍了 Clojure 的许多特性。由于 Clojure 是在 JVM 之上构建的,它的地位与其他 JVM 语言相当,尤其是能够访问 Java 语言附带的所有标准库(或者说,现有的任何 类)。

从并发的角度来看,Clojure 取得了许多进展,至少是在可能正确的方向上有所进步。它大量采用持久化数据结构来避免冲突问题。在可能产生操作冲突的一些领域,Clojure 使用软件事务性内存来管理并发性。另外,还在 Clojure 之上构建了一个代理框架。根据我的理解,基本功能只允许在同一 JVM 中的线程之间实现代理,但是我肯定有人已经或将会构建更大范围的多节点代理系统(或者干脆使用现有的 Java 代理系统之一)。



参考资料

学习

获得产品和技术

讨论
  • 加入 My developerWorks 社区;您可以通过个人信息和定制主页获得自己感兴趣的 developerWorks 文章,并与其他 developerWorks 用户进行交流。


关于作者

David Mertz

David Mertz 从 2000 年开始撰写 developerWorks 专栏可爱的 PythonXML 问题。请阅读他的书 Text Processing in Python。关于 David 的更多信息,请查阅他的 个人网页




对本文的评价










回页首


IBM 公司保留在 developerWorks 网站上发表的内容的著作权。未经IBM公司或原始作者的书面明确许可,请勿转载。如果您希望转载,请通过 提交转载请求表单 联系我们的编辑团队。
    关于 IBM 隐私条约 联系 IBM 使用条款