面向大型服务器场的云原生世界芯片组的七个Java框架。Java结合其坚不可摧的虚拟机和庞大的库,为编写可在任何地方运行的代码提供了一个肥沃的生态系统。然而,Java苦苦挣扎的一个领域是服务器领域,它通常必须处理来自数千甚至数百万用户的连接。在早期,Java工具是创建服务器端应用程序的最佳工具之一,这些应用程序为所有用户强制执行业务逻辑。J2EE、Hibernate、Spring和基本的Javaservlet模型等Java框架使得创建强大的Web应用程序变得相对容易。Java技术在JavaScript和Node.js之前蓬勃发展。在Node.js获得大量关注后,开发人员开始迁移到JavaScript运行环境。这样做有两个原因:首先,开发人员欢迎在服务器和浏览器客户端上运行相同的代码。其次,由于其反应模型,Node.js服务器通常可以显着提高吞吐量。Java生态系统现在适应了竞争。一开始,一些开发人员采用了诸如GoogleWebToolkit之类的工具,它可以将Java转换为JavaScript。接下来,他们致力于使Java在服务器上运行得更快。早期的服务器Java框架有一个限制:每个传入请求都有自己的线程。这是一种组织传入和传出数据的简洁方法,但也很麻烦。创建线程需要千字节的开销,这会限制每个服务器可以处理的用户数量。Node.js使用不同的模型,允许在没有这种开销的情况下处理更多用户。最近,Java开发人员将Node.js创新引入了Java堆栈,尤其是云原生Java框架。这些框架模仿了Node.js的做法,支持轻量级功能,运行在云计算服务器上,可以快速启动和停止。它们不需要额外的库来支持在可用服务器实例上的快速部署。云原生Java框架旨在支持可独立安装和重启的微服务集群。它们通常发布在Docker或Podman等容器中,以实现最快的构建和安装。寻求云原生体验的现代Java开发人员有多种选择。理想的云原生Java框架利用在Java平台及其第三方库中投入的丰富经验,同时调整它们以在云中运行得更快、更轻。这里有7个从头开始构建的Java框架,用于云原生开发和部署。1.MicronautMicronaut的创建者希望利用Spring和Grails等经典Java框架的最佳部分,例如灵活的配置和依赖注入,但消除内存占用大和启动慢的缺点,因为这些缺点使他们less适合开发微服务。开发人员精心设计了注解,为依赖注入提供足够的信息,而不需要像旧框架那样用内存填充反射。在编译时完成更多的Micronaut配置意味着代码运行得更快、更轻。该框架旨在支持各种基于JVM的语言(目前有Java、Kotlin和Groovy),并在各种云平台上运行。预定义的配置文件简化了在所有主要云平台上部署服务器或无服务器功能,并且所有主要数据库连接都有精心编写的文档页面。Micronaut的开发人员也希望该框架能够支持良好的开发团队合作。HttpClient实现与项目捆绑在一起,以简化单元测试的编写,而无需离开Micronaut或添加更多工作。这些测试通常比动态框架所需的测试更简单、更全面。这又是由于在编译时完成的工作。Micronaut不仅用于开发支持云的应用程序。该框架足够通用,可以支持传统角色和一些桌面应用程序。它与GraalVM的紧密集成使得使用Micronaut生成原生应用程序成为可能。2.Quarkus想要使用易于理解的命令式代码和反应式代码组合的开发人员可以求助于Quarkus。Quarkus团队首先预测最常见的云原生开发用例,然后使用支持那些需要零配置的用例的示例构建框架。结果可以轻松集成到容器中并部署到Kubernetes集群中。开发团队需要确保快速启动,以便Kubernetes集群可以快速扩展。对于偶尔运行的函数来说,这是一个理想的特性,因为它们可以在调用之前保持冷。该项目的目标之一是接受和扩展Java社区中常见的许多现有标准和库。例如,JAX-RS注释定义了REST端点。配置从Eclipse微文件开始。Quarkus的开发团队也集成了50多个标准库,因此企业很有可能会在某些情况下认可设计模式。基本的Quarkus框架可用于各种服务。从Quarkus2.8开始,Quarkus的开发人员鼓励使用RESTeasyReactive模型。如果您正在开始一个新项目,这是标准选项,但您不必使用它。RESTeasyReactive提供了一种更简单、非阻塞的结构和模式。一组非阻塞线程处理所有I/O并在需要时调用代码,而不是为每个请求分配一个线程。Quarkus还包括范围广泛的部署选项。尽管它标榜为“容器优先”,但它可以在裸机上运行。此外,还有一个名为Funqy的内置配置选项,它可以简化AWSLambda、AzureFunctions、Knative和其他一些接受的函数的创建。3.SpringCloudFunctionsJava开发人员非常熟悉Spring框架,因为它已经成为许多项目的基础大约20年了。Spring的开发人员决定创建一个更适合云部署以及其他一些角色的新版本。SpringCloudFunctions中的函数旨在轻松重新部署到各种任务,例如Web服务、流处理或后台工作。SpringCloudFunctions框架延续了Spring开创的许多相同传统。此框架中的CloudFunctions支持反应式或命令式样式,以及两者的混合。支持多种选择是这个项目的一个重要目标。有适配器可以将这些功能嵌入到AWSLambda、MicrosoftAzure、ApacheOpenWhisk、GoogleCloudPlatform和其他一些常见的云计算功能环境中。还有适用于ApacheKafka、Solace和RabbitMQ等主要流框架的适配器,以及独立选项SpringCloudStream。打包和部署是高度自动化的,因此开发人员可以专注于开发功能。SpringCloudFunctions开发团队还努力应对云部署的许多常见陷阱和挑战。SpringCloudSkipper可用于跨多个云平台进行部署。SpringCloudSleuth通过跟踪数据流来帮助调试。SpringCloudSecurity管理许多用于保护应用程序的琐事,以便只有合适的人才能执行这些功能。光是子项就有几十个。该项目为通过各种平台分发业务应用程序打下了很好的基础。一旦应用程序逻辑被封装到CloudFunctionPOJO中,它就可以找到一个可以在几十个不同角色中工作的地方。4.Vert.xVert.x的创建者希望通过简化事件循环和优化与数据库的连接来创建一个非常快速的框架。Vert.x有一个像Node.js一样的事件循环,它允许在事件到达时处理多个连接。它还利用Java的线程模型来处理池中具有多个线程的事件,如果可用,这些线程可以在多个内核上运行。该结构还计划简化创建管道来处理事件流。它借用了promises和futures等结构,以避免带有分层回调的混乱代码。随着事件沿着事件总线移动,异步选项有助于生成干净、可读的代码,其中填充了简单的方法调用链。Vert.x开发团队对他们的开发愿景并不死板。他们将Vert.x视为工具包而不是框架。代码是模块化的,因此开发人员可以选择使用一些集成到适合其应用程序的体系结构中的功能。想要更多命令式结构而不是反应式结构的开发人员可以找到对Kotlin协程的支持。该项目是Eclipse生态系统的一部分。各种版本和选项提供了很大的自由度。例如,Vert.x应用程序生成器将生成具有许多潜在依赖项的Java或Kotlin代码,例如模板引擎或API支持。5.EclipseMicroProfileEclipse团队创建了MicroProfile项目,作为调整JakartaEE以运行较小的微服务组的一种方式。它消除了大型平台的一些开销,同时捆绑了许多微服务架构的标准库。这种方法对可能从较大、较旧的JavaEE或JakartaEE项目迁移代码的开发人员最具吸引力。许多配置和体系结构保持不变。在许多情况下,调整很小。但设计鼓励更简单的决策来创建更轻、更快的代码。一些开发人员将MicroProfile用作更现代的云原生框架的垫脚石。6.Dropwizard一些开发者对经过良好测试的老模块有着天然的好感,他们喜欢采用Dropwizard。Dropwizard的开发团队一直强调稳定性和成熟度等特性。他们收集了像Hibernate这样的数据库连接模块,并将它们混合在一个由表单和其他标准Web应用程序组件组成的框架中。Dropwizard还简化了依赖注入和运行时维护过程,例如配置和日志记录。Dropwizard是致力于修改和扩展现有应用程序的团队的最爱。该结构与成熟的方法兼容,因为它建立在它们之上。7.云平台入门框架所有云平台都保留了基础示例,这是开始编写简单功能的好地方。它们主要用于支持非常简单的决策,帮助开发者快速上手。例如,GoogleCloudPlatform的开发团队开源了运行在其函数即服务(FaaS)中的Java函数的基本框架。使用它构建的代码旨在与GoogleCloudPlatform的标准触发器快速集成,尽管它也可以在任何本地计算机上成功运行。微软还开源了其Java框架。该模型包括多个用于简化数据传输的例程,例如用于将JSON数据与JavaPOJO相互转换的库。如果函数触发器为调用提供了元数据,则框架可以直接处理它。这两个框架都允许开发人员通过编写具有单个功能的单个类来完成许多简单的事情。更复杂的项目可能希望将这个基本工具与其他一些框架结合起来。这些只是起点,但有时这就足够了。原标题:云原生世界的7个Java框架,作者:PeterWayner
