寻求Java微服务的简单性

简单性有很大的价值。当事情很简单时,它们更容易理解、更容易扩展和更容易修改。他们是更好的。简洁是对架构或框架的终极褒奖。 在本文中,我将研究四个不同的框架—-Spring Boot, Javalin, Vert.x 和 Micronaut。

来寻求简单的方法。

简单并不意味着容易

我写这篇文章的灵感之一是Rich Hickey的一篇精彩的演讲,题目是《简单易做》。

这是这次演讲的幻灯片,突出了简单和容易的区别:

简单容易,但不是一回事。简单是复杂的反义词,容易是困难的反义词。

我不会在这里重复整个演讲(我真的建议你自己去看),但要强调几点:

  • 简单是我们的目标,我们希望事情不复杂
  • 容易是有益的,但如果它有隐藏的复杂性,它可以是非常危险的

让我们来看看Java框架中简单和复杂的历史。

Enterprise Java, Spring – 复杂和困难

在转到微服务框架之前,让我们先看看从哪里开始。

在微服务出现之前,我们有两种主要的方法用于用Java编写的大型服务器端应用程序:Enterprise Java和Spring框架:

我认为这两种框架既困难又复杂,当然,通过很好地理解Spring或JavaEE并学习如何使用它们,您可以使它们变得“简单”,但这并不能消除底层的复杂性。

似乎我并不是唯一一个认为这些都是问题的人,因为JavaEE(目前的Jakarta EE)社区正忙于MicroProfile的工作,Spring的爱好者们很快会把我引向了Spring Boot项目。

这里我不将重点放在MicroProfile上,因为它仍然相对较新的,Java EE到Jakarta EE的转换正在进行中。如果您感兴趣,我建议您检查Jakarta EE官方网站、MicroProfile官方网站及其GitHub资源库。

Spring Boot 容易的和健壮的

谁不喜欢Spring Boot呢?好吧,这是互联网,所以我敢肯定有相当一部分人不会!不管怎么说,Spring Boot是企业世界的游戏规则改变者。编写服务变得非常简单。

Spring Boot还通过将庞大的Spring生态系统划分为可组合的小部分来提供简单性。自动配置是消除服务开发人员巨大复杂性的法宝。

你想知道自动配置是如何工作的吗?查看2.0.3.RELEASE的源代码。它非常复杂,但完全由框架团队管理。他们决定吸收这种复杂性,并在这方面做得很好!

那么Spring框架本身呢?它可能非常复杂,但也非常健壮。选择实际上取决于开发人员——包括哪些内容,以及应该远离哪些内容。

我认为Spring Boot简单性如下:

  • 开发很容易开始
  • 自动配置的巨大复杂性是由框架团队处理的
  • 框架固有的复杂性
  • 仅仅依靠框架的关键部分就可以简化框架的复杂性

当处理非常困难的问题时,这种方法被证明是成功的。让我们看看其他框架。

简化事情Micronaut

Micronaut要比Spring Boot年轻得多。在写作的时候,我们的版本是1.0.0。M1,所以有很大的变化空间。

Micronaut自称是:

用于构建模块化、易于测试的微服务应用程序的现代、基于jvm的全栈框架。

它与Spring Boot有许多相似之处。我们有:

  • 依赖注入
  • 违约和自动配置
  • 内置多种云本地功能

是什么让Micronaut有趣呢?再次提到Micronaut文件:

  • 快速启动时间
  • 减少内存占用
  • 最少使用反射
  • 最小的使用代理
  • 简单的单元测试

我会加上我自己——它是从头开始写,头脑简单。问题是——随着框架的成熟,它会变得过于类似于Spring Boot吗?

这是一个新项目是它最大的优点也是最大的风险。当然,它并不依赖于可能的沉重和复杂的Spring,但与此同时,Spring是健壮的、受欢迎的和工作良好的。

我看到Micronaut的简单方法:

  • 开发很容易开始
  • 尝试构建比Spring Boot更简单的解决方案,同时仍然提供默认设置和自动配置
  • 该框架支持Micronaut是从零开始的
  • Micronaut是新的,所以未来仍在决定

我真的很喜欢Micronaut,因为它可以与Spring Boot的竞争。它尝试了一种非常类似的方法,但从一开始就考虑使用微服务进行更精简和编写。

如果你想达到终极的简单性,你会怎么做?

简单和容易的Javalin

如果您希望使您的微服务变得非常简单,那么您应该查看微框架。或者你应该这样做吗?让我们将Javalin作为microframework家族的一个示例。

那么,是什么让Javalin如此简单呢?它只有大约2000行源代码。它确实是一个微框架。有了这样一个简化的代码库,您可以实现真正的简单性。如果您有任何困难,源代码足够简单,可以理解和修复。

这种简单的代价是什么?Javalin没有Spring Boot提供的那么多。您没有Javalin数据(我的Spring数据介绍)或Javalin数据流(我的Spring云数据流)之类的项目。您甚至没有依赖注入!

轻量级有问题吗?这是个有趣的问题。现在,有了Kubernetes、Service Mesh和其他微服务技术,对服务本身的复杂性的需求就减少了。我写过关于微框架的兴起,我相信我们正在见证这一趋势的开始!

我认为Javalin的简单方法是:

  • 简约的代码库
  • 与服务的交互非常简单
  • 微服务的最小可行功能集。
  • “Do it yourself”的方法

您能将Javalin方法的简单性和风格与功能更全面的框架结合起来吗?相信你可以!我们将在Vert.X上完成这个展示。

追逐简单Vert.X

VertX是这里提到的第二大流行框架(Spring Boot之后)。它不仅针对微服务(Spring Boot也不针对微服务),它将自己描述为:

Eclipse Vert.x 是用于在JVM上构建反应性应用程序的工具包。

反应/功能方法的核心是简单。它很简单,但不容易。我们需要一些时间来理解,也许还需要将我们的方法从非功能性世界中转移出来。

在我看来,Javalin似乎是一种简单的方式,可以将您的脚趾浸入到这种风格和风格中。X提供更成熟的企业产品。两者都是伟大的,而且绝对是有意义的。即使是Spring Boot也在尝试使这个反应/功能模型可行。

如果您想了解在Vert.x中编写一个简单的REST服务是什么样子的。在GitHub上有很好的例子。

我看到了Vert.X简单方法如下:

框架完全围绕反应/功能模型构建

提供可以与更传统的企业产品竞争的特性列表

为了简单的本质,牺牲了进入的轻松

将框架分割成许多可组合的部分

如果你不害怕一些最初的困难,为了处理一些简单的东西的核心,Vert.X是一个有趣的选择!

总结

有许多可用的微服务框架和方法。比我在这里评论的要多。他们每个人都努力使开发变得简单和容易。这些方法之间存在着权衡,不同的权衡将吸引不同的受众。

我希望本文能给您提供一种看待框架和开发方法的不同方式,并可能激励您尝试一些困难但简单的东西!

原文发布于微信公众号 - 程序你好(codinghello)

原文发表时间:2018-07-09

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏EAWorld

应用容器云:接过Java EE的枪

主要大纲: 一、回顾Java EE的发展 二、揭露Java EE的根本性缺陷 三、从Java EE的角度看应用容器云 四、对未来的展望 老实说,今天的观点如果放...

37460
来自专栏技术/开源

强大的API测试工具Hitchhiker v0.9 基于UI的断言测试,回顾2017

v0.9是Hitchhiker在2017农历年的最后一个版本,而起点正是刚过完2016农历年,农历2018即将到来,一年轮回,今天写点东西稍微回顾下hitchh...

21770
来自专栏Java架构

Java程序员如何面试拿到月薪3万, 这些成功秘籍你知道吗?

前言:想要成为合格的Java程序员或工程师到底需要具备哪些专业技能,面试者在面试之前到底需要准备哪些东西呢?本文陈列的这些内容既可以作为个人简历中的内容,也可以...

15680
来自专栏JackieZheng

开发人员看测试之TDD和BDD

前言:   已经数月没有来社区了,写博客贵在坚持,一旦松懈了,断掉了,就很难再拾起来。但是每每看到自己博客里的博文的浏览量每天都在增加,都在无形当中给了我继续写...

44760
来自专栏智能计算时代

微服务与SOA架构(4)

image.png 较架构能力 上一章中我们讨论了架构模式如何帮助确定基本的架构特性。本章中,我们采用类似方法,集中讨论架构模式所描述的架构能力而不是架构特性。...

31240
来自专栏Golang语言社区

微服务架构介绍和RPC框架对比

一种将一个单一应用程序开发为一组小型服务的方法,每个服务运行在自己的进程中,服务间通信采用轻量级通信机制(通常用HTTP资源API)。可通过全自动部署机制独立部...

17650
来自专栏13blog.site

记录一下从懵懂到理解RESTful的过程

前言 前文中提到了RESTful设计,后端实战及前端代码的修改,写完之后本来想写一下对RESTful的一些看法的,但是写着写着跑题了,最终是写成了不同阶段对于R...

31240
来自专栏CSDN技术头条

100%代码覆盖率的悲剧

本文Daniel Lebrero在大数据团队担任IG的技术架构师。拥有超过15年的Java经验和4年的Clojure经验,他现在是函数式编程的大力倡导者。 以下...

207100
来自专栏技术/开源

强大的API测试工具Hitchhiker v0.9 基于UI的断言测试,回顾2017

v0.9是Hitchhiker在2017农历年的最后一个版本,而起点正是刚过完2016农历年,农历2018即将到来,一年轮回,今天写点东西稍微回顾下hitchh...

28750
来自专栏纯洁的微笑

微服务(Microservice)那点事

摘要: 微服务架构被提出很短的时间内,就被越来越多的开发人员推崇,简单来说其主要的目的是有效的拆分应用,实现敏捷开发和部署 。本分享即尝试介绍微服务架构的一些实...

30860

扫码关注云+社区

领取腾讯云代金券