首页 存档 技术 查看内容

为什么需要用Clojure来开发你的下一个微服务

2018-3-30 13:00 |来自: 互联网 313 0

摘要: 开发团队之所以选择将某些功能块作为微服务来实现是有很多原因的。我认为最重要的原因有: 代码重用:多个团队可以利用你所构建的内容。例如,检索(search)、文件存储(file storage)或pub/sub。 使用微服务可以独 ...

开发团队之所以选择将某些功能块作为微服务来实现是有很多原因的。我认为最重要的原因有:

  • 代码重用:多个团队可以利用你所构建的内容。例如,检索(search)、文件存储(file storage)或pub/sub。

  • 使用微服务可以独立于应用程序对功能进行扩展

  • 可以自由地进行技术选择

本文重点讨论以上三点。


自由地进行技术选择

这是属于微服务架构的一个非常重要的属性。微服务意味着每个服务都很小。至于有多小通常取决于公司或团队,但我听说有些微服务的代码不超过100行,还有些微服务有几千行代码(如果是Java代码,我仍然认为它很小)

既然微服务意味着每个服务都很小,所以鼓励开发人员可以使用他们认为的最好技术。如果事实证明那是很糟糕的选择,也没关系-我们就当学习了,并且会考虑将这些新知识用于未来的项目。既然微服务的代码多半只有几百行,所以有时开发团队甚至有可能决定用另一种更合适的语言重写微服务。

这都很好。但是既然可以完全自由地进行技术选择,那么为什么不选择Clojure呢?


现代语言Lisp

"Lisp是用秘密的外星人技术开发的语言。" lisperati.com

Clojure是运行在Java虚拟机上的现代Lisp语言。基于JVM有很多优点:

  • 经过数十年的人力投入,JVM的运行速度很快。

  • 在一个广泛的问题域中有非常多的功能强大的库。你只需集中精力去解决问题而无需一切从头开始。

  • JVM被广泛应用于一些小型和大型企业;应用JVM意味着开发的产品会被更多用户采用。

所以说,JVM很好,并且我们也在使用着Java。那为什么还要转换语言呢?

是这样, Java具有它自己的一些折衷方式。但它缺少其它平台认为理所当然应该具有的功能-比如lambdas,尽管Java 8已经对此进行了修正。Java的类型系统**过多,并且其类型推断也不够理想。Java也没有数据结构形式,使其代码过度繁琐。

另外Java一般的开发反馈周期太长。为了运行、测试程序,在一天内可能需要多次重启JVM - 哪怕你只是修改一行代码 (HotSwap热部署补丁对此有所缓解)。由于所需的结构数量也仅仅是开始,因此实验变得很难。最后,交互式开发环境的缺乏也让人受不了。


Lisp是什么样子的?

"Lisp不是一门语言,它是一种构建素材。" Alan Kay

作为Lisp ,它非常灵活,采用一种固执的数据驱动编程方法,通过宏功能提供了最大的延展性。必须指出的是Lisp宏和其它的宏非常不同,比如说,C宏。C宏是通过宏定义和C预处理器的处理以一种简单的方式在将源代码中找到的名字替换掉。

然而Clojure宏采用的方式是操作Clojure代码本身- 是的,你可以转换AST(抽象语法树)! - 包括有能力控制事情得以完全评估的时间和条件。


实验之美

“学习Lisp几周后,我发现用其它任何一种语言编程都有难以忍受的约束。” Paul Graham, Road to Lisp

如果我们还必须经历这种传统的开发周期的话,那么我们所有的能力将被耗尽: 改变源码-

声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除

路过

雷人

握手

鲜花

鸡蛋

相关分类

返回顶部