虚拟化导论
人们很容易想当然的以为虚拟化技术仅仅应用于服务器。而在现实中,虚拟化这一苏醒的概念正被运用于各个层面,其中包括网络,存储以及应用基础架构。在这篇导论中,InfoQ将深入每个方面,详尽向您描述虚拟化技术的运用以及其优点与不足。
- Architecture, .NET, Java,
- 1
作者 Jean-Jacques Dubray译者 郭晓刚 发布于 2008年6月29日 下午11时18分
Eelco Visser是荷兰Delft University of Technology大学的副教授,他讲授的课程是“程序变换和自动生成(Program Transformation & Generation)”。
他刚刚完成了一篇题为《WebDSL: A Case Study in Domain-Specific Language Engineering》的论文,主题是讨论WebDSL这种领域特定语言的设计和实现。
论文用两章介绍“领域特定语言工程”的过程,用三章评估WebDSL作为Web设计解决方案,讨论相关的DSL设计方法,及研究语言工程中的挑战。
WebDSL是一种领域特定语言,用于开发具有丰富数据模型的动态Web应用。它采用JBoss Seam作为底层的目标架构基础。WebDSL的第一个alpha版本发布于2007年12月。
Eelco将DSL定义为:
- DSL是一种语言,也就是说,它是由文本或图形标记构成的语句的集合,有着正式定义的语法和语义。
- DSL是高层次的,由低层次的实现细节和实现平台的具体事物抽象而来。
- DSL应该支持软件实现。
- DSL中的概念和抽象与特定的领域相关联。
在Eelco看来,DSL的目标应该是:
……从低层次的重复代码中抽象出来,提高软件工程的生产效率。
通用语言中的传统的抽象机制,如方法和类,已不足以满足建立新的抽象层次的需要。库和框架很适合封装功能,但程序员用来访问那些功能的语言,也就是API,常常都很别扭。
有时候,API允许使用更合适的语言,但却采取了字符串的形式将语句传递给库调用(如SQL查询),宿主语言是不会检查这些语句的语法的,更别提语义了。
他认为我们需要:
……设计和实现DSL的技术,更需要指导如何使用这些技术的方法学。也就是说,我们需要一套指导方针、设计模式和可重用的DSL组件,向开发者演示如何解决一般的语言设计和实现问题。
虽然如此,他说,
Web应用的设计是相当成熟的一个领域……为这个领域开发DSL已经具备了坚实的基础:
- 任务自动化:即便有了Java Servlets和JSF,Web编程中仍然存在数量可观的重复(boilerplate)代码。
- 表示法(Notation):当前的平台将多种相当繁琐、且针对不同问题的语言混杂在一起,未能融为一个整体。
- 检查(Verification):多种Web应用技术之间缺乏整合的另一项后果,是导致缺乏对实现的静态检查。
- GUI构建:[JSP风格的框架通常]对由模板生成的HTML代码的结构一无所知,因此很容易产生结构不正确的文档。[即使在JSF中,]模板非常繁琐,过于关注低层次的细节。
- 分析和优化:例如,采用Wiedermann and Cook【译注:请参阅论文的参考文献108】方法优化数据库查询能提高程序的性能,而无需求助于手工调整自动生成的查询。
Eelco总结了三项DSL设计模式:
- 寻找编程模式
- 设计核心语言
- 在核心语言的基础上建立语法抽象
他从定义一种文本的Data Model DSL开始着手设计WebDSL。代码生成器对用Java代码(JPA)定义的实体作变换。接着他开发了一种View/Edit DSL,用来生成JSF页面和Seam session bean。然后在这两种DSL的基础上进一步“扩大WebDSL的覆盖范围”,引入可以自定义的View/Edit页面、数据集合以及复杂的关联关系。
Eelco报告说生成的代码行数与DSL代码的比值超过100,并认为改善代码生成器会有很好的回报。
论文接着讨论了“语言工程范式”和“语言工程中的挑战”,尤其是“模型的变迁”。
根据他的经验,他建议说:
查看英文原文:WebDSL: Lessons Learned from Creating a DSL
- 如果对应用领域有深刻的理解,且在领域的系统已经具备相当程度的代码基础,即可开始开发DSL。
- 第一步观察一些较大的程序段,看是否可以作为一种编程模式。
- 研究和理解技术,识别共通的模式。尽早建立一个基本的代码生成器。
- 语法不应太过“特定”。
- 不要一开始就试图识别出核心语言。那样可能会使设计出的语言过于接近目标技术。
- 在核心语言的基础上扩展出语法抽象,语法抽象的表述应当简洁。
- 为库的构建提供便利,比如将代码组织成模块,以及在DSL片断上增加参变抽象(parametric abstraction)。
人们很容易想当然的以为虚拟化技术仅仅应用于服务器。而在现实中,虚拟化这一苏醒的概念正被运用于各个层面,其中包括网络,存储以及应用基础架构。在这篇导论中,InfoQ将深入每个方面,详尽向您描述虚拟化技术的运用以及其优点与不足。
在这篇案例研究中,InfoQ对Adobe AIR和Amazon的简单存储服务(Simple Storage Service ,S3)在NASDAQ市场回放程序(NASDAQ Market Replay)中的应用进行了详细的分析。
本视频对SOA在互联网系统中的应用进行了探讨,主要以支付宝在SOA的实践为例,主题从敏捷的应用程序(对象与组件)到敏捷的企业系统(应用集成与面向服务),再到敏捷的生态圈(网关与开放平台)。
因为不知道如何反击,技术人员不得不听从业务人员的要求。这已经是老生常谈了。问题何在?开发人员用数字主要是进行计算的,而业务人员使用数字辅助决策。在下面的故事中,“敏捷精灵”鼓励一个开发人员用数字来描述与计算无关的问题。
本文介绍了Hadoop如何配置分布式框架运行环境,同时特别讲解了其中的一些细节。Hadoop可以单机跑,也可以配置集群跑,这里主要重点说一下集群配置运行的过程。本文是Hadoop入门实践三部曲的第二部。
2 条回复
回复