CXYVIP官网源码交易平台_网站源码_商城源码_小程序源码平台-丞旭猿论坛
CXYVIP官网源码交易平台_网站源码_商城源码_小程序源码平台-丞旭猿论坛
CXYVIP官网源码交易平台_网站源码_商城源码_小程序源码平台-丞旭猿论坛

现代化的Java(一)语言、框架和技术栈-源码交易平台丞旭猿

关于软件开发,特别是服务端软件开发的技术栈的探索,几乎贯穿了我整个的职业生涯。几年前我就想写这样一个专题,但是开了个头就又很快搁笔。反复思考,感觉自己仍然太过浅薄。

近几年随着技术领域的整体进步,和自己的学习积累,感觉现在是个比较合适的时机,建立一个围绕Java体系的工程技术栈,将它整理成文字,与同行分享。

一方面,Java8之后,语言的进步,使它在生产力上与旧版本已有很大提高。虽然Java与新时代的编程语言相比,仍显得比较笨拙,但是做为一个技术体系的基础,已经足够可用。另一方面,基于JVM环境的编程语言的发展,使得Jvm可以成为一个通用的运行时环境,在其上利用若干互补的编程语言构建工程。

JVM平台上最著名的新贵莫过于 Scala,特别是Spark的兴起为Scala争取了很多爱好者。但是就我亲身体验而言,Scala 也有一些问题:

  • 首先是Scala本身是一门复杂语言,要用好这门语言,需要大量的领域知识。当然将其作为一个更好的Java来用,未尝不是一件好事,这也是我向普通用户推荐的用法。要发挥Scala的全部优势,需要一个优秀的团队,成员有对代码风格和质量的追求和共识,愿意为驾驭工具,提高生产力付出精力。
  • 其次Scala的构建工具sbt实在不能说令人满意
  • 另外就是,scala实在跟java太像了,它是一个自成一体的复杂体系,如果用scala,很难划清一个边界,找到其它语言的切入点。这倒不能说是Scala的缺点,更准确的说,其它技术需要Scala的多,Scala需要其它技术的少。

我尝试了Java+Clojure的体系,发现是一个非常好的组合。Java是静态编译型语言,Clojure是动态类型,虽然它本质上仍然是编译型的,但是可以在repl中方便的交互,也可以以脚本形式运行。两者可以在工程上建立非常清晰的功能边界,各司其职。Clojure的构建工具 leiningen 是 maven 的高级封装,可以充分利用 Clojure 的语法和 maven 的资源。Clojure的语言风格和内置库,都强调了与 Java 的互通,而s表达式内在的数据抽象能力,以及大量依赖clojure语法的功能支持,可以将java项目变得更敏捷和干净。在Java项目中引入 Clojure ,可以有效提高生产力。

或许Java语言层面的笨拙,本身也促进了其工具库和框架的蓬勃发展,现代Java生态中,负责组建项目架构的Spring/Guice,提供并行/并发抽象的java concurrent 和akka、clojure.core.async 、提供数据库访问的hibernate等,都是很好的作品。在具体的项目中,找到一个互补的工具集很有意义。

一个复杂工程,往往不是单一架构和技术栈能够覆盖的,技术组合能够互补就很重要了。例如异步框架中 vertx曾经是我期待很高的一环,它为多种语言提供了SDK,包括Java、scala、nodejs等。但是实践中这个东西完全无法让人满意,在高性能压力下,出现大量无法管理的错误。更重要的是它非常的排外,一旦在项目中使用vertx,就要整个在编程风格上遵循它的需要,大量的回调并没有节省开发人员的思考时间,相反还要削足适履,不断思考自己的代码逻辑是否会阻塞框架。而它的异步安全,依赖全局的单一vertical对象,在原生支持多核并行的JVM环境下,强制开发人员依赖GIL,是一个非常愚蠢的退步。

================================================================

前面是我写错了,是verx,不是verticle。但是如果一定要吵架的话,喜欢 vert.x 的都是傻逼。爱他妈谁谁╮(╯▽╰)╭

不是骂评论里那几位的。

爱过,懂吗?

妈的╮( ̄▽ ̄””)╭

===============================================================

相反,我在尝试Akka的过程中,体验非常好,Akka不会强制用户在一个单一的 materializer 下运行逻辑,跨节点扩展非常容易,而进程内的actor运行负担也非常小,接入akka的过程很友善,并不会污染actor之外的代码风格,在spring mvc中使用akka也不会有任何问题,我还尝试在Google Cloud的 App Engine 实例(war环境)中用akka 管理爬虫逻辑,整个过程没有任何问题。这也印证了前面所说的其它Jvm技术需要Scala的场景。感谢Akka提供了完整的 java dsl,虽然它只能用在 JVM 项目中,但是对于服务端开发并不是很大问题。我编写了很多在clojure/java中使用akka的代码,组合使用了各种各样的框架和库,都没有遇到风格上的冲突。

后面的文章中,我会和大家分享一些 Java+Clojure+Leiningen+AKKA 的开发体验。

=================================

朋友提醒项目代码放的不够醒目,链接在https://github.com/MarchLiu/market

© 版权声明
THE END
喜欢就支持一下吧
点赞0赞赏 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容