
七个用于云原生世界的Java框架
译文2022-07-05 08:00:00一些轻量级的Java框架能够将云原生的灵活性与Java久经考验的工程相结合。借助这些框架,开发人员可以编写易于部署的响应式代码。
译者 |李睿
审校 |孙淑娟
Java编程语言自诞生以来已有将近30年的历史,该语言及其字节码已经广泛应用在从嵌入式芯片到大型 服务器 群的所有领域。Java结合了坚不可摧的虚拟机和大量的库,为编写随处运行的代码提供了一个肥沃的生态系统。
然而,Java一直在努力的一个领域是服务器领域,它通常必须处理来自数千甚至数百万个用户的连接。早些年,Java工具是创建为所有用户强制执行业务逻辑的服务器端应用程序的最佳工具之一。J2EE、Hibernate、Spring等Java框架和基本的Javaservlet模型使得创建强大的Web应用程序变得相对容易。
在JavaScript和Node.js出现之前,Java技术得以蓬勃发展。在Node.js引起广泛关注之后,开发人员开始迁移到JavaScript运行时环境。这里有两个原因:首先,开发人员欢迎在服务器和浏览器客户机上运行相同的代码。其次,Node.js服务器通常可以显著地提高吞吐量,这要归功于它们的响应式模型。
Java生态系统如今适应了竞争。一开始,一些开发人员采用了Google Web Toolkit等工具,该工具可以将Java转换为JavaScript。接下来,他们致力于提高服务器上的Java运行速度。而早期的服务器Java框架有一个限制:每个传入的请求都有自己的线程。这是一种组织传入和传出数据的干净方式,但也很费事。创建线程需要数千字节的开销,这可能会限制每台服务器可以处理的用户数量。Node.js使用了一个不同的模型,它允许在没有这种开销的情况下处理更多的用户。
最近,Java开发人员将Node.js的创新引入Java堆栈,尤其是云原生Java框架。这些框架模仿Node.js的做法,支持轻量级的功能,运行在云计算服务器上,可以快速启动和停止。它们无需额外的库来支持在可用的服务器实例上的快速部署。云原生Java框架旨在支持可独立安装和重新启动的微服务群。它们通常在Docker或Podman等容器中发布,以实现最快的构建和安装。
寻求云原生体验的现代Java开发人员有多种选择。理想的云原生Java框架利用在Java平台及其第三方库中投入的丰富经验,同时调整它们以在云平台中更快、更轻地运行。以下是为云原生开发和部署从头开始构建的7个Java框架。

1.Micronaut
Micronaut的创建者希望利用Spring和Grails等经典Java框架的最佳部分,例如灵活的配置和依赖项注入,但要消除内存占用过大和启动速度慢的缺点,因为这些缺点使它们不太适合开发微服务。开发人员精心设计了注释,为依赖注入提供了足够的信息,而无需使用旧框架中的内存填充反射。在编译时完成更多Micronaut的配置意味着代码运行更快、更轻。
该框架旨在支持各种基于JVM的语言(目前是Java、Kotlin和Groovy)并在各种云平台中运行它们。预定义的配置文件简化了在所有主要云平台上部署服务器或无服务器功能,并且所有主要数据库连接都有编写良好的文档页面。
Micronaut的开发人员还希望该框架能够支持良好的开发团队合作。HttpClient实现与项目捆绑在一起,以简化编写单元测试,而无需离开Micronaut或添加更多工作。这些测试通常比动态框架所需的测试更简单、更全面。这再次归功于在编译时完成的工作。
Micronaut不仅用于开发具有云计算功能的应用程序。该框架足够通用,可以支持传统角色和一些桌面应用程序。它与GraalVM的紧密集成使得使用Micronaut生成原生应用程序成为可能。
想要使用易于理解的命令式和反应式代码组合的开发人员可以求助于Quarkus。Quarkus团队首先预测云原生开发的最常见用例,然后使用示例构建框架,这些示例支持那些只需零配置的用例。其结果可以轻松地集成到容器中,并部署在Kubernetes集群中。
开发团队需要确保快速启动,以便Kubernetes集群可以快速扩展。对于偶尔运行的函数来说,这是一个理想的特性,因为它们在被调用之前可以保持冷状态。
该项目的目标之一是接受和扩展Java社区中常见的许多现有标准和库。例如,JAX-RS注释定义了REST端点。配置从Eclipse微文件开始。Quarkus的开发团队还集成了50多个标准库,因此企业很有可能在某些情况下识别设计模式。
可以将基本的Quarkus框架用于各种服务。从Quarkus 2.8开始,Quarkus的开发人员正在鼓励使用RESTeasy Reactive模型。如果正在开始一个新项目,这是标准选项,但不必使用它。RESTeasy Reactive提供了一种更简单、非阻塞的结构和模式。不是为每个请求分配一个线程,而是一组非阻塞线程处理所有I/O,并在需要时调用代码。
Quarkus还包含广泛的部署选项。虽然它被称为“容器优先”,但它可以在裸机上运行。此外,还有一个名为Funqy的内置配置选项,可以简化创建AWS Lambda、Azure Functions、Knative和其他一些选项所接受的函数。
3.Spring Cloud Functions
Java开发人员非常熟悉Spring框架,因为它是大约20年来许多项目的基础。Spring的开发人员决定创建一个更适合云部署以及其他一些角色的新版本。Spring Cloud Functions中的函数旨在轻松地重新部署到各种任务,如Web服务、流处理或后台工作。
Spring Cloud Functions框架延续了Spring开创的许多相同的传统。此框架中的云功能支持反应式或命令式风格,以及两者的混合。
支持多种选择是该项目的一个重要目标。有一些适配器将这些函数嵌入到AWS Lambda、Microsoft Azure、Apache OpenWhisk、谷歌云平台和其他一些常见的云计算函数环境中。还有一些主要流式框架的适配器,如Apache Kafka、Solace和RabbitMQ,以及独立选项Spring Cloud Stream。打包和部署高度自动化,因此开发人员可以集中精力开发功能。
Spring Cloud Functions开发团队还努力处理云部署的许多常见陷阱和挑战。Spring Cloud Skipper可用于跨多个云平台进行部署。Spring Cloud Sleuth通过跟踪数据流来帮助调试。Spring Cloud Security管理许多用于保护应用程序的琐事,以便只有合适的人员才能执行这些功能。光是子项目就有几十个。
该项目为通过各种平台分发业务应用程序奠定了非常好的基础。一旦应用程序逻辑被封装到一个云函数POJO中,它就可以找到一个在几十个不同角色中工作的场所。
Vert.x的创建者希望通过简化事件循环和优化与数据库的连接来创建一个非常快速的框架。Vert.x有一个像Node.js一样的事件循环,它允许在事件到达时处理多个连接。它还利用Java的线程模型来处理池中的多个线程的事件,如果可用,它们可以在多个内核上运行。
该结构还计划简化创建管道以处理事件流。它借用了诸如promises和futures之类的结构来避免带有分层回调的混乱代码。当事件沿着事件总线移动时,异步选项有助于生成干净、可读的代码,其中填充了简单的方法调用链。
Vert.x开发团队对他们的发展愿景并不死板教条。他们认为Vert.x是一个工具包而不是一个框架。该代码是模块化的,因此开发人员可以选择使用一些功能集成到适合其应用程序的架构中。想要更多命令式结构而不是响应式结构的开发人员可以找到对Kotlin协同程序的支持。
该项目是Eclipse生态系统的一部分。多种版本和选项提供了很大的自由度。例如,Vert.x应用程序生成器将生成Java或Kotlin代码,其中包含许多潜在的依赖项,例如模板引擎或API支持。
5.Eclipse MicroProfile

Eclipse团队创建了Micro Profile项目,以此来调整Jakarta EE以运行较小的微服务群。它消除了一些较大平台的开销,同时将许多微服务架构的标准库捆绑在一起。
对于可能从较大、较旧的JavaEE或Jakarta EE项目迁移代码的开发人员来说,这种方法最有吸引力。大部分配置和架构保持不变。在许多情况下调整很小。但是该设计鼓励做出更简单的决策来创建更轻量级、更快的代码。一些开发人员使用MicroProfile作为通往更现代的云原生框架的垫脚石。
6.Dropwizard
一些开发人员对经过良好测试的旧模块有一种天然的感情,他们喜欢采用Dropwizard。Dropwizard的开发团队一直强调稳定和成熟等特性。他们收集了Hibernate之类的数据库连接模块,并在表单和其他标准Web应用程序组件的框架中进行了混合。Dropwizard还简化了依赖项注入和运行时维护过程,如配置和日志记录。
Dropwizard是致力于修改和扩展现有应用程序的团队的最爱。该结构与原有成熟的方法兼容,因为它是在这些方法的基础上构建的。
7.Starter frameworks FOR cloud platforms
所有的云平台都保留了基本示例,这些示例是开始编写简单函数的好地方。它们主要用于支持非常简单的决策,并帮助开发人员快速启动。
例如,谷歌云平台的开发团队开源了他们在其功能即服务(FaaS)中运行的Java功能的基本框架。使用它构建的代码旨在与谷歌云平台的标准触发器快速集成,尽管它也可以在任何本地机器上成功运行。
微软公司还开源了它的Java框架。该模型包括几个用于简化数据传输的例程,例如用于将JSON数据转换为Java POJO和从Java POJO转换的库。如果函数触发器为调用提供元数据,则框架可以直接处理它。
这两个框架都可以让开发人员通过编写具有单个函数的单个类来完成许多简单的工作。更复杂的项目可能希望将这一基本工具与其他一些框架合并。这些只是起点,但有时这就足够了。
原文标题: 7 Java frameworks for a cloud-native world ,作者:Peter Wayner
好自唯之是什么意思
好自为之成语: 好自为之 (拼音:hǎo zì wéi zhī)出处: 清·王韬《淞隐漫录·五·四奇人合传》:“此时正大丈夫建功立业之秋,原勿以儿女为念。 行矣李君,好自为之。 ”意思: 劝别人或自勉要好好地活下去或干下去。 还有另一种:成语: 好自为之 (拼音:hào zì wéi zhī)出处: 《淮南子·本经训》:“君人者不任能,而好自为之,则智日困而自负其责也。 ”意思: 为:干,做。 喜欢自己亲手去做。 另外:好自为之 ( hǎo zì wéi zhī )解 释 自己妥善地处理,好好地干出 处 田海燕《吴玉章同志在辛亥革命前后的革命活动》:“至于四川的革命事情,还望四川同志好自为之。 ”用 法 偏正式;作谓语;用于劝诫人示 例 你还是~吧
猥锁是什么意思?
网络百科里的1.(容貌、举止)庸俗不大方2.(身材)不魁梧;短小为便于大家理解,作一阐释:1.猥琐一般用于形容男人,不能用于女人,当然,行为粗俗的也可以说是猥琐。 2.猥琐是贬义词,指男人因身材或举止给人的感受很糟糕。 用口语就是“男人长得不壮阳,行为举止没有阳刚之气”。 3.在指人的形象时,很多网络上解释为“鄙陋卑下,不大方”这是不妥当的。 猥琐并不含有“鄙陋”“卑下”之意,人的容貌并不与见识和地位有必然联系。 4 .(小说,网络)指这个人的行为阴暗,一般指不采取正面方法,采取“赖,无耻,狡猾”的手段。 5 . 指男人色迷迷的,不注意自己的言行,开不适宜的话,喜欢盯关键部位!6 . 动词:做出猥琐的行为如果你还想有更形象的理解,可以搜索一下猥琐图片,或猥琐男图片。 目前已知的猥琐流派有七个:原生派,海带派,yy派,受影响派,WS教(Lのこころ),遣送派,还有一个是叫兽派(1) [of wretched appearance]∶(容貌、举止)庸俗不大方且夫贤君之践位也,岂特委琐喔啮,拘文牵俗,修诵习传,当世取说云尔哉!——司马相如《难蜀父老》举止猥琐(2) [short]:一作“委琐”。 不魁梧;短小看贾环人物委琐,举止粗糙。 ——《红楼梦》身材猥琐然而,在学生之间常互称猥琐,此时,“猥琐”一词并无贬义。 例:“清华式猥琐”的定义——“清华理工科男生智慧中略带狡黠,睿智中不乏幽默,以及对优秀女生特有的欣赏与执着追求的特质。 ”
度量衡分别指什么?
度—计量长短的用的器具;量—测定计算容积的器皿;衡—测量物体轻重的工具。
度量衡是指在日常生活中用于计量物体长短、容积、轻重的物体的统称。 度量衡的发展大约始于原始社会末期。 因地域和国情不同计量统计方式不同。
“度”详解长度单位的名称,产生很早,上古时都是以人身体的某个部分或某种动作为命名依据的,例如寸、咫、尺、丈、寻、常、仞等都是。 在这些名称中,尺是长度的基本单位。 一尺的长度与一手的长相近,容易识别,所以古时就有“布手知尺”、“尺者识也”等的说法。 此外,仞是量深度的实用单位,并且单独构成一个系统。 仞与尺的比例关系,一向没有明确的定数,说一仞为四尺、五尺六寸、七尺、八尺的都有,一般认为是八尺。 周代以前的长度单位的名称,经过《汉书·律历志》的整理,保留了寸、尺、丈三个,并在寸位以下加一“分”位,丈位以上加一“引”位,都是十进,这就是所谓五度。 长度的小单位,一般都是算数学者使用的。 所谓“度长短者,不失毫厘”,只是表示测量时应该具有微小数的精度的意思。 《孙子算经》卷上有“蚕所吐丝为忽,十忽为一秒,十秒为一毫,十毫为一厘,十厘为一分”的说法。 这些十退位的分、厘、毫、秒、忽成为算术上专用的小数名称和长度小单位名称。 到了宋代,把秒改为丝。 清末时把长度小单位定到毫位为止。
“量”详解量器是封建社会计量农产品多少的主要器具,因此容量的计量产生最早,它的单位名称也最复杂。 在《左传》、《周礼》、《仪礼》、《尔雅》等经典著作中都有关于容量单位的记载,其专用名称有升、斗、斛、豆、区、釜、钟以及溢、掬等。 同长度一样,周代以前容量单位也是用人的身体计量,以一手所能盛的叫作溢,两手合盛的叫作掬,掬是最初的基本的容量单位。 《小尔雅·广量》说“掬四谓之豆”,《左传·昭公三年》说“四升为豆”,这两种说法是相通的,就是说掬也就是升。 升的本义是“登”、“进”的意思,两手所盛是基本的容量数,然后从这个数登进,按四进有豆、区、釜,按十进有斗、斛。 所以升(亦即掬)是容量的基本单位。 后来《汉书·律历志》对容量单位作了系统的整理,命名为龠、合、升、斗、斛五量,一合等于二龠,合以下都是十进(宋以后一斛为五斗)。 升是容量的基本单位,斗和斛则为实用单位。 至于《说苑·辨物》云“十龠为一合”,说法有所不同,可资参考。 附带提一下石,石本来是重量单位,为一百二十斤,但自秦汉开始,石也作为容量单位,与斛相等。 关于容量的小单位,《孙子算经》卷上说:“六粟为一圭,十圭为抄,十抄为撮,十撮为勺,十勺为合。 ”这样,六粟为一圭(一说,十粟为一圭),其余圭、抄、撮、勺以及合、升、斗、斛八个单位,都是十进。 这种计算方法,自汉代以后一直都在采用。
“衡”详解很早以来,铢、两、斤、钧、石五者都用作重量的单位。 但古时对重量单位的说法复杂不一。 例如《孙子算经》卷上:“称之所起,起于黍,十黍为一絫(“累”的古字),十絫为一铢,二十四铢为一两。 ”《说苑?辨物》:“十粟重一圭,十圭重一铢。 ”《说文·金部》:“锱,六铢也。 ”《淮南子·铨言》高诱注:“六两曰锱。 ”《玉篇·金部》;“镒,二十两。 ”《集韵·质韵》:“二十四两为镒。 ”等等。 “黍”、“粟”、“絫”、“圭”等,都是借用粟黍和圭璧的名称,实际上早已不用。 “锱”、“镒”及“锾”、“釿”等都是借用钱币的名称,也早就不用。 所以各家说法有种种不同。 自《汉书·律历志》把铢、两、斤、钧、石这五个单位命名为五权之后,名称就比较一致起来,直至唐代都没有改变。 其进位方法颇值一提:二十四铢为两,十六两为斤,三十斤为钧,四钧为石。 关于使用两以下的钱、分、厘、毫、丝、忽等小单位,南朝 梁陶弘景《名医别录》曾说:“分剂之名,古与今异,古无分之名,今则以十黍为一铢,六铢为一分,四分成一两。 ”唐苏敬注云:“六铢为一分,即二钱半也。 ”可见自唐代起已把本作为货币的“钱”当作重量单位,并且“积十钱为一两”,但那时分的进位还没有确定为钱的十分之一。 再说分、厘、毫、丝、忽等,原是小数名称,后从长度借用为重量单位名称,自宋代开始定为钱的十退小单位。 宋代权衡的改制废弃了铢、絫、黍等名称,其重量单位名称自大到小依次为石、钧、斤、两、钱、分、厘、毫、丝、忽,其进位方法已如前述。 宋制衡量一直沿用至元明清,很少改易。 但有一点须指出,宋元明清之医方,凡言“分”者,是分厘之“分”,而晋唐时一分则为两钱半,二者不同。 度量衡的发展度量衡的发展大约始于原始社会末期。 传说黄帝“设五量”,“少昊同度量,调律吕”。 度量衡单位最初都与人体相关:“布手知尺,布指知寸”、“一手之盛谓之溢,两手谓之掬”。 这时的单位尚有因人而异的弊病。 《史记·五帝本纪》:“岁二月,东巡狩,至於岱宗,祡,望秩於山川。 遂见东方君长,合时月正日,同律度量衡,脩五礼五玉三帛二生一死为挚,如五器,卒乃复。 ”《史记·夏本纪》中记载禹“身为度,称以出”,则表明当时已经以名人为标准进行单位的统一,出现了最早的法定单位。 距今5000年前的大地湾仰韶晚期房F901中出土的一组陶质量具,是迄今为止,我国发现最早的量器。 大地湾这套陶质古量器,出土于房F901的主室中(前堂);主要有泥质槽状条形盘、夹细砂长柄麻花耳铲形抄、泥质单环耳箕形抄、泥质带盖四把深腹罐等。 其中条形盘的容积约为264.3立方厘米;铲形抄的自然盛谷物容积约为2650.7立方厘米;箕形抄的自然盛谷物容积约为5288.4立方厘米;四把深腹罐的容积约为.1立方厘米。 由此可以看出,除箕形抄是铲形抄的二倍外,其余三件的关系都是以十倍的递增之数。 为了与古代量具名称相贴切,我们将在其相应容量的名称上冠以升、斗、斛之称谓,即可称为条升、抄斗、四把斛等,另外,在大地湾仰韶早期遗迹中出土的几件骨匕和铲形器上多见有等距离的圆点形钻窝刻度,并在窝内涂有红色颜料,它们应为当时测定某些东西长宽地尺度。 包括前述F901内所出的一组陶质量具在内,它们都是我国最早“度、量、衡”器的实物佐证;并将我国度量衡实物史提前了二三千年。 同时,这些度量衡具的发现也为研究我国古代分配制度、度量衡史以及十进制的起源等,提供了非常珍贵的实物资料。 商代遗址出土有骨尺、牙尺,长度约合16厘米,与中等身材的人大拇指和食指伸开后的指端距离相当。 尺上的分寸刻划采用十进位,它和青铜器一样,反映了当时的生产和技术水平。 春秋战国时期,群雄并立,各国度量衡大小不一。 秦始皇统一全国后,推行“一法度衡石丈尺,车同轨 ,书同文字”(车同轨、书同文、钱同币、币同形、度同尺、权同衡、行同伦、一法度。 ),颁发统一度量衡诏书,制定了一套严格的管理制度,商代牙尺为中国2000多年封建社会的度量衡制奠定了基础。
发表评论