appengine_使用Google AppEngine扩展Clojure Web Apps

appengine

Google引入了对Google App Engine (GAE)的Java支持,从而为世界范围内降低了维护成本。 尽管AppEngine中的Java支持受到限制 ,但它仍然允许大多数现有的JVM库-并且其中包括许多JVM语言

Clojure是一种受LISP启发的基于JVM的语言 ,例如,已在生产系统中使用。 FlightCaster 。 Clojure具有许多优势,其中一些来自其LISP祖先,例如用于元编程的宏,另一些则通过紧密而无缝的集成而发光,例如强大的并发机制(软件事务存储,代理等)或持久性数据结构。 (如果不熟悉这些后面的术语, 对Clojure创作者Rich Hickey的采访将很有帮助)。

但是Clojure和GAE如何相处呢?

TheDeadline是新发布的项目任务管理系统,由德国公司freiheit.com在GAE上使用Clojure构建。

InfoQ与freiheit.com的 Stefan Richter讨论了该产品,选择Clojure的原因-以及由于GAE线程限制,Clojure如何一只手绑在车上。

InfoQ :您如何以及在何处使用Clojure?

我们将Clojure用于我们的第一个Internet启动“ TheDeadline”。

我的公司freiheit.com技术是作为其他公司的承包商来专门开发大型Internet系统。 我们使用Java已有10多年了。

Clojure功能强大。 程序美观,简洁。 生产率很高。 并且:很好玩! 就像保罗·格雷厄姆(Paul Graham)曾经说过的那样:“ Lisp的力量乘以竞争对手没有得到的事实”。 我们希望我们也可以劝服新客户选择Clojure。

InfoQ :您是否在客户项目中使用过Clojure?

不,现在不是Clojure。 但是我们已经在Common Lisp中构建了系统。 一个是电子商务系统,另一个是通过对大数据集使用自然语言解析和机器学习来进行信息提取的系统。

InfoQ :您对Clojure在GAE上有何经验?

Clojure可与Google AppEngine(GAE)一起使用。 您不能使用并发功能,但实际上不需要它们。 GAE就是创建无状态应用程序,这些应用程序可以在单个线程/进程中处理一个请求。

我们首先要了解的是如何使用GAE开发环境和Emacs / Slime进行类似Lisp的交互式编程。 如果您习惯了这一点,就不想错过。 我们在博客http://www.hackers-with-attitude.com中发布了howto。

文章: “使用Clojure,Compojure,Google App Engine和Emacs进行交互式编程”

InfoQ :您喜欢Clojure吗?

对我而言,函数式编程就是拥有简单的数据结构并在其上应用强大的函数抽象。

这与OOP语言完全不同,在OOP语言中,您具有具有分层/网络依赖关系和封装功能的复杂数据结构。 这都是关于管理状态的。 至少以Java平台实现OOP的方式。

与此相伴,Clojure对我而言的关键特征实际上是:
I.-基于哈希表/映射的不可变,非常简单的数据结构
二。 -带有所有括号的lisp语法(代码=数据)
三, -宏系统。

这使Clojure真正强大。 您将简单数据传递给函数,这些函数返回新数据或可以传递的新函数。 您有小的但功能强大的构建块。 该语言使数据的折叠,转换和过滤变得非常容易。

InfoQ :GAE上没有RDBMS。 您如何在GAE上访问存储

数据存储是无模式的分布式键值存储。 无模式的并不意味着您不需要模式,而是需要在应用程序端进行维护。 我们实现了自己的DSL,以声明模式并自动生成所有代码以访问(插入,更新,删除)和查询数据存储。

这是我们在简单的Clojure数据结构上运行的上述“强大的功能抽象”之一。 您无需在Clojure代码内处理任何数据存储区实体类型。 您只需声明所需内容,宏系统就会为您生成相应的代码。

使用数据存储与使用关系数据库(RDB)完全不同。 您必须考虑不同。 但是键值模型与Clojure数据结构非常匹配。 并且比对象关系映射方法好得多。 即使当您将数据作为AJAX响应发送出去时,也不需要太多转换。 因此它很简单,并且可以从端到端进行追溯。

InfoQ :您将HTML前端用于什么?

我们正在将Compojureclj-html一起使用 。 我之所以习惯这种方法,是因为我经常使用Hunchentoot(来自Edi Weitz的Common Lisp Web服务器)和CL-WHO(也用于从Edi生成HTML的DSL)。

对我来说,这是编写现代Web应用程序的方式:拥有特定的DSL来生成HTML,以便您可以将其与应用程序代码混合。 您仍在将演示文稿与应用程序逻辑分开。 您可以创建组件。 它确实功能强大,因此您无需使用类似Lisp的语言的额外模板框架。

InfoQ :您在GAE上使用Clojure是否遇到任何问题

AppEngine有效。 我们只有一些小问题。 AppEngine与其他云计算环境不同,您不管理自己的虚拟服务器阵列。 您只需使用AppEngine SDK编写应用即可。 部署真的很容易,并且该应用程序会自动在全球范围内分发到Google数据中心。 当有人尝试访问您的应用程序时,它会在靠近该用户的数据中心中实例化。 您可以根据需要获得任意数量的“机器”。 或者您可以支付。 :)

最初,JVM上的动态语言(jRuby,Clojure等)比本机Java应用程序慢得多。 现在情况更好了,但是App“ Warmup”(第一个实例化)仍然有些慢。 而且,当Google部署新的API版本时,旧的API版本变得越来越慢。 因此,我们快速更新到新的API版本。

一件事会很好:使用MapReduce进行数据处理。 如果我们可以在MapReduce-Tasks中使用我们的应用程序数据,那将很酷。 但总的来说,我们对此感到非常满意。

InfoQ :GAE 限制对您有何影响?

大型系统需要这些限制:您不应在请求中启动自己的线程。 您对每个请求都有时间限制。 当您的数据存储区中可能有数亿或数十亿条记录时,您不应该期望拥有count-Function。那么您需要其他机制。 因此,在为全球受众编写应用程序时,无论如何,您必须做一些必须牢记的事情。


InfoQ :那么, TheDeadline是什么产品?

我们用自己的敏捷软件开发方法工作了将近10年。 我们组织得很好,没有官僚作风。 我们在这一领域拥有丰富的经验,我们为自己构建了用于敏捷软件项目的完整工具链。

现在,我们正在重新构建用于云计算的工具链,并将其作为服务提供给更大的受众。 而且,我们仅提供在自己的项目中使用的产品,范围从1-2个开发人员到平均3-5个开发人员,最多20个开发人员。

第一项服务是TheDeadline,这是一个易于使用的Todo-Manager,其作用类似于个人助手。 该系统使您随时了解所有重要任务,而不会烦扰您。 而且,我们采用了一种新颖的方式来共享待办事项并将其委托给更多的用户。 因此,第一个产品不仅针对开发人员,而且针对所有类型的知识工作者和小型企业。 “财富5.000.000”而不是“财富500”。 :)

TheDeadline的公开测试版现在开始。 下一步,我们将发布iPhone,iPad和Android的移动客户端以及Google Apps集成。


InfoQ :您提到了用于TheDeadline的AI概念 。 那是什么意思

我们正在使用在Game-AI中也使用的AI技术。 因此,我们试图做的是构建一个行为表现像一个非常好的智能,自主NPC(非玩家角色)的AI系统。 例如,我们在Clojure中构建了基于规则的Expertsystem-Shell,与CLIPS,LISA或OPS5相当。 这些规则是AI行为的核心。 其他技术是面向目标的行动计划和贝叶斯学习。 我们正在尝试从用户行为中学习,但是在这里我们仍处于起步阶段。

这就像试图模仿您遇到的最佳项目经理或项目助手的行为一样。 我们的目标是消除地球上所有的人类项目管理工作。 (不是“项目经理”,而是“项目管理工作”)。 大多数项目管理工作都是关于找到正确的任务并将其委派给正确的人,然后监视进度,提醒人们,重新计划事物等。其中许多事情可以通过与人友好互动的机器来完成。 只需将所有待办事项放入TheDeadline。 然后,机器会注意使每个人保持最新状态,并在出现问题之前提出异常和问题。 因此,您可以专注于实际工作。

要了解使用GAE和本文提到的各种Clojure技术的可能性,请查看TheDeadline-它是免费的。 该工具提供了一个现代的Web UI,并具有用于大多数交互的键盘快捷键。 Twitter样式的内联“ @name”符号可用于分配任务,“#tag”符号可用于使用一组宽松的标签对任务进行分组。

要进一步了解其背后的技术,请参阅Stefan今年早些时候在TheDeadline上发表的演讲幻灯片

翻译自: https://www.infoq.com/articles/deadline-clojure-appengine/?topicPageSponsorship=c1246725-b0a7-43a6-9ef9-68102c8d48e1

appengine

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值