Java微服务:用Spark替代SpringBoot才是正确的方式

一个真正的微服务是一个非常轻薄的程序,只有一个函数具有自己的数据库(如果有必要)和非常小的内存占用......在Java中可能吗?

问题

我已经使用Spring Framework多年了,现在和我的团队一起开始质疑它,特别是Spring Boot:它是开发微服务的正确选择吗?不,因为根据我们的经验,它太耗费内存了。

我发现在Spring Boot上运行的基本Java应用程序需要至少1GB的RAM才能运行,而且在开发中间件应用程序时也没问题,但在微服务架构中这非常糟糕!

我们注意到部署在CloudFoundry上的Spring Boot应用程序或带有k8s的OpenShift遭遇内存不足错误并且如果它们未设置为最小1GB则会崩溃。

我们正在寻找一种新工具来帮助我们使用这个技术规范开发真正的微服务:

符合Java标准

轻量级

没有无用的库

内存占用少

快速服务请求

正确的框架

下面是pom.xml的一小段摘录

那么,现在我们正确定义Docker文件......

我们选择了“ openjdk:8-jre-alpine ”,因为这个起始镜像在内存和大小方面都是更小,更轻的。如果你想提高性能,你可以选择Java 11 ...但是目前,不幸的是,可能不存在更小的镜像,Java12发布时,你可以在将来使用“ openjdk:12-jre-alpine ”。

结果

首先,Jar包大小:只有10MB的Jar!太棒了!使用SpringBoot,我们总是达到至少30MB ......不是那么糟糕!

启动时间(开发):使用我们的MCU库(这里查找信息)和Spark的启动时间非常简约。你可以在1分钟内完成“hello-world”GET方法......

启动时间:我们习惯等待将近30-40秒......现在我们的等待时间不到1秒。

代码行:在微服务架构中,您应该创建一个非常小的程序,具有极简主义配置,依赖性和仅一个功能......在这些前提下,我们假设代码行应该很少。在Spring Boot中,这并不总是正确的,因为框架往往是罗嗦的。使用Spark,LOC数量非常低。

内存占用:你可能知道Java是内存贪婪,但通过正确的配置和优化,你可以达到一个很好的目标!在带有Spring Boot的Docker容器中,我们很沮丧,因为很难获得低于500MB的RAM ......现在我们保持大约30~60MB的RAM。

可维护性:简单就是更好!微服务的目标之一是将主要问题领域切分成n个问题。没有比较难的配置,没有依赖关系,而且代码很小,可维护性非常简单。

可靠性:我们的压力测试没有任何问题......该框架非常强大且具有弹性。

基准测试

我们创建了两种类型的基准:

Hello World - 在JSON响应中序列化的简单“hello world”消息

计算任务 - 具有JSON反序列化,ETL作业和对象序列化响应的中等复杂度级别计算任务

我们已经实现了这两种基准类型:

使用Undertow Application Server进行Spring Boot

Spring Boot Webflux

VertX

SparkJava

结果如下:

有框架都是差不多的,但随着当代用户数量的增加,Spark开始受到影响。那么,关注点是内存占用而不仅仅是吞吐量。

使用此基准测试的Spark内存占用无关紧要:60 MB的堆大小和35 MB的平均使用率,没有任何类型的微调。

对于其他框架,堆大小是非常大,例如使用Spring Boot,我们有大约290-300 MB的堆(受-xmx JVM参数限制)

实际使用率约为100-150MB,比Spark重4-5倍。

结论

如果你必须做一个简单的微服务,正确的选择是Spark,因为:

它真的很轻

启动时间太快了

没有任何无用的类/库

最后的罐子重量非常轻

现在,您只关注开发和可扩展性,将其留给Docker和Kubernetes而不考虑内存。

例如:2个Spark容器使用70MB或更少的内存,并且比1个Spring Boot容器提供更多的请求处理。

“我自己是一名老程序员,辞职后在线上做讲师,今年我整理了一份适合2019年学习的Java编程资料干货,从最基础的面向对象到各种框架都有整理,送给每一位初学和进阶中学习Java编程的小伙伴。"

加QQ群:730379855(招募中)

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,295评论 6 512
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,928评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,682评论 0 357
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,209评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,237评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,965评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,586评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,487评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,016评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,136评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,271评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,948评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,619评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,139评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,252评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,598评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,267评论 2 358

推荐阅读更多精彩内容