微服务和Java EE

基于微服务的架构如今无处不在。 我们对Netflix和Amazon等当今的创新者如何利用它们在成功产生更多业务方面取得更大的成功了解到很多。 但是,我们所有人都在使用Java EE应用程序服务器并编写经典系统吗? 我们都做错了吗? 我们如何使我们的技术设计适合未来?

整体式

首先,让我们研究一下那些经典系统。 或称为单片应用程序。 即使最近这些词有难闻的气味,这也是我们构建软件很长时间的方式。 它基本上描述了以下事实:我们构建单个应用程序来实现某些功能。

整体确实是指Java EE或最初设计的Java 2 Enterprise Edition的更好版本。 集中化的应用程序可以进行缩放和群集化,但不必通过构建就可以使其具有弹性。 在大多数情况下,他们在故障情况下都依赖于基础架构和操作。

传统上,Java EE应用程序遵循一些核心模式,并分为三个主要层:表示,业务和集成。 表示层打包在Web应用程序归档(WAR)中,而业务和集成逻辑则放在单独的Java归档(JAR)中。 作为一个部署单元捆绑在一起,创建了一个所谓的企业归档(EAR)。 围绕Java EE的技术和最佳实践一直足以构建设计良好的整体应用程序。 但是大多数企业级项目往往会失去对架构的关注。 这就是为什么有时精心设计的意大利面条球是可视化项目依赖关系和内部结构的最佳方法的原因。 当这种情况发生时,我们很快就遇到了一些重大缺陷。 因为即使进行很小的更改,所有东西都过于耦合和集成,这需要大量的工作(或有时需要大量的重构),并且在将返工的零件投入生产之前,还必须从头到尾仔细测试应用程序。

整个应用程序不仅仅是已编程的工件:它还包括不可计数的部署描述符和服务器配置文件,以及相关第三方环境的属性。

变更的高风险以及将新配置投入生产的复杂性导致发行量越来越少。 一个新版本每年发布一次或两次。 甚至团队结构也受到这些整体软件架构的严重影响。 数月的测试周期可能是最明显的证明。 但是除此之外,寿命超过五年的项目往往会包含大量错误和功能数据库。 而且,如果这还不够困难,那么该测试就几乎没有资格-没有验收测试,并且几乎没有任何书面业务要求或设计和可用性方面的可识别领域。

处理这类企业项目需要多个团队的共同努力,并且需要很多人来监督整个项目。 从软件设计的角度来看,最终的应用程序具有非常技术性的层次。 业务组件或域主要由现有数据库设计或过时的业务对象定义驱动。 我们的行业必须吸取这些教训,我们不仅设法控制了这些企业整体,还发明了新的范例和方法来更好地管理它们。

因此,即使“独石”一词在当今被认为是设计不良的软件的代名词,这些体系结构也有许多好处。 整体应用程序易于开发,因为IDE和其他开发工具都是围绕开发单个应用程序而设计的。 它是一个归档文件,可以与不同的团队共享,并在其中封装所有功能。 另外,围绕Java EE的行业标准使企业能够可靠地访问不仅构建而且还运行这些应用程序所需的资源。 软件供应商已经围绕Java EE建立了扎实的知识库,并且采购通常不是大问题。 迄今为止,与他们合作已有15年以上的时间,该行业终于能够以或多或少的产品化和标准化方式来制造这些应用程序。 我们知道要使用哪些构建工具,哪些流程可以在大型团队中扩展以及如何扩展这些应用程序。 自从出现Arquillian之类的工具以来,甚至集成测试也变得更加容易。 为了像Java EE这样的成熟解决方案的便利,我们仍在付出代价。 代码库可能会变得很大。 当应用程序在企业中停留更长的时间时,它们将变得越来越复杂,并且对于开发团队来说更难理解。 即使我们知道如何配置应用程序服务器,每个项目中的一两个特殊设置仍然会引起操作上的头疼。

微服务

但是我们的行业并没有停滞不前。 几年前,系统架构和设计的下一次发展才刚刚开始。 随着集中式集成组件的复杂性不断增加以及所连接应用程序的额外开销,人们开始寻找更轻便,更具弹性的产品。 最终,整个理论从大型的重量级基础架构和设计转移了。 除此以外,IT部门开始重新审视应用服务器以及冗长的协议和接口技术。

由于在基于SOA和ESB的项目中大多数服务实现都被证明是不切实际的,因此技术设计又回到了更方便的工件和服务上。 微服务代替了智能路由和转换,而是使用简单路由并将逻辑封装在端点本身中。 即使名称暗示了定义的大小,也没有一个。 微服务是关于具有单一业务目的的。 对于企业设置而言,更麻烦的是,微服务最有效的运行时不一定是功能完善的应用程序服务器。 它可能只是一个servlet引擎,或者JVM已经足够作为执行环境。 随着运行时变体的不断增长和编程语言选择的多样化,这种发展变成了另一场操作的噩梦。 而且,即使今天的开发人员在定义微服务以及如何将此设计应用于现有应用程序时也有些失落。

微服务被设计为小型,无状态,相互依赖且完全包含的应用程序。 理想地能够将它们部署到任何地方,因为部署包含所有必需的部分。

微服务被设计得很小。 但是定义“小”是主观的。 可以使用某些估算技术,例如代码行,功能点,用例。 但是通常,“小”与大小无关。
在《构建微服务》一书中,作者Sam Newman建议了几种定义微服务大小的技术,它们是:

  • 足够小,可以由小型敏捷开发团队拥有,
  • 在一到两个敏捷的冲刺(通常两到四个星期)内可重写
  • 复杂性不需要进一步划分服务

无状态应用程序使用仅包含在其中的信息来处理每个请求。 微服务必须是无状态的,并且必须在不记住来自外部系统的先前通信的情况下为请求提供服务。

微服务必须独立处理请求,它可以与生态系统内的其他微服务协作。 例如,在与其他微服务交互后生成唯一报告的微服务是一个相互依赖的系统。 在这种情况下,仅向报告的微服务提供必要数据的其他微服务可能是独立的服务。 一个完整的堆栈应用程序可以单独部署。 它拥有自己的服务器,网络和托管环境。 业务逻辑,数据模型和服务接口(API / UI)必须是整个系统的一部分。 微服务必须是全栈应用程序。

为什么是我?

“我已经经历了足够的工作,下一个Java EE版本已经在开发中。 我们甚至都没有使用最新的Java EE7。有很多生产力功能即将出现:我不在乎是否只要它能完成工作并且我们就可以处理,就建造一个整体。 我确实了解这些想法。 我和您可能都一样喜欢Java EE,并且很感兴趣地发现为什么微服务最近得到了发展。 这两个问题的答案可能不是一个简单的答案:但是让我们尝试:

考虑到我们行业中的所有问题以及仍然存在大量项目失败的情况,完全可以理解增长和消除问题的需求。 新的炒作和改良的方法论的很大一部分是人类的成长意愿。

而且,我们行业通常希望比上次做得更好,而不是“永远不要触摸运行中的系统”。
因此,首先要回答问题的第二部分:“您可能想研究一下,因为不做任何事情都不是解决方案。”

作为开发人员,架构师或质量保证工程师,我们基本上都注册了实时学习。 我现在只能为自己说话,但这就是为什么我如此喜欢这份工作的很大一部分。 问题的第一部分不是那么容易回答。

创新和持续改进是企业和企业级项目的驱动力。 如果没有创新,将存在过时且昂贵的基础架构组件(例如主机系统),其生存期比其运行的软件设计的寿命更长。 如果不对状态进行持续验证,将存在隐式或显式的供应商锁定。 老化的中间件将获得扩展支持,只有少数供应商仍将能够提供专门知识来开发它。 落后于最新标准的平台堆栈试图引入快速而肮脏的解决方案,最终导致技术债务。 微服务领域最杰出,发展最快的项目是开源项目。 Netflix OSS,Spring,Camel,Fabric8等是突出的例子。 通过如今的PaaS产品,使用多源全栈应用程序变得容易得多,这些产品也得到了Docker和Kubernetes等开源项目的支持。 在我们瞬息万变的世界中,法律上导致软件更改或简单错误修复的交货时间正在缩短。 很少有企业能够在长达一个月的生产周期内工作,并且对软件产生业务实际价值的需求更加明显。 这不仅适用于完全由软件驱动的公司,例如Uber,NetFlix,Amazon等。

我们需要构建具有灵活性和弹性的系统,而不仅仅是效率和健壮性。 今天,我们需要利用已有的资源开始构建它们。

我真的想确保您以正确的方式阅读此声明:我并不是说,从今天开始,一切都是微服务。

  • 但是我们应该意识到他们可以提供帮助并能够提供帮助的领域
  • 在有意义的情况下,将现有应用程序更改为新方法。
  • 我们希望能够成为那些询问该主题的人的优秀顾问

而且Java EE不会很快推出。 它将得到补充,多语言世界将在各个地方发展,但是我们不会很快摆脱它。 这是个好消息。

通过从developers.redhat.com下载我的免费电子书,了解有关如何将Java EE应用程序转变为微服务的更多信息。 确保重新观看有关“ Java EE微服务体系结构 ”的O'Reilly网络广播,并关注我的blog.eisele.net,了解有关WildFly Swarm ,Docker和带有OpenShift的 Kubernetes的更多技术信息。

翻译自: https://www.javacodegeeks.com/2015/12/microservices-java-ee.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/355939.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

pcie组raid linux,PCIe 4.0有多强大?组RAID 0阵列之后惊呆了

技嘉在6月16日21:00正式上市了全系列B550系列主板,B550系列主板属于AMD中端系列芯片组,能原生支持PCIe 4.0技术,而这次技嘉B550 AORUS MASTER主板更是不得了,提供了3个支持PCIe 4.0技术的M.2接口,你还可以组RAID 0阵列…

oracle中 trunc(),round(),ceil(),floor的使用

原文: http://www.2cto.com/database/201310/248336.html 1.round函数(四舍五入) 描述 : 传回一个数值,该数值是按照指定的小数位元数进行四舍五入运算的结果参数: number : 欲处理之数值 decimal_places : 四舍五入 , 小数取几位 ( 预设为 0…

Java中的指针

Java中是否有指针? 简短的答案是“不,没有”,这对于许多开发人员来说似乎是显而易见的。 但是,为什么对其他人却不那么明显呢? http://stackoverflow.com/questions/1750106/how-can-i-use-pointers-in-java http://…

Android实践 -- 监听应用程序的安装、卸载

监听应用程序的安装、卸载 在AndroidManifest.xml中注册一个静态广播,监听安装的广播android.intent.action.PACKAGE_ADDED 监听程序卸载的广播android.intent.action.PACKAGE_REMOVED ,在广播中一定要加上 <data android:scheme"package" /> 不然就监听不到 &…

符合c语言常量12abc,《C语言》试题abc合2006上.doc

《C语言》试题abc合2006上《c语言》试题(A)一、单项选择题(每小题2分&#xff0c;共20分)以下选项中正确的整型常量是 BA)12. B) -20 C) 1,000 D) 4 5 62.以下选项中不合法的用户标识符是 AA)abc.c B)file C)Main D)PRINT3&#xff0e;可在C 程序中用作用户标识符的标识符是 BA…

redis学习之——redis.conf配置(基本)文件学习

# Redis configuration file example# Note on units: when memory size is needed, it is possible to specify //1 配置大小单位,开头定义了一些基本的度量单位&#xff0c;只支持bytes&#xff0c;不支持bit …

如何把c语言程序的数据导出到文档,急求如何将下列C语言程序数据存储到文件中?...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼求如何改动才能将下列程序的存储输入或输出数据(或两者一起)到指定的文件(或运行时直接创立一个文件)如Arrangement中。#include int n0;int rest[7][7]; //全局声明,以供全局调用int main(){void perm(int list[],int ,int );int …

weblogic最大线程_处理Weblogic卡住的线程

weblogic最大线程定义或什么是缠线&#xff1f; 如果线程 在设定 的时间 内连续工作&#xff08;非空闲&#xff09;&#xff0c;则WebLogic Server会将其诊断为阻塞 。 您可以通过更改在诊断出线程被阻塞之前的时间长度&#xff08; Stuck Thread Max Time &#xff09;&#…

步进电机的正反向旋转c语言编程,实现步进电机自动正反转程序怎么写

本文收集整理关于实现步进电机自动正反转程序怎么写的相关议题&#xff0c;使用内容导航快速到达。内容导航&#xff1a;Q1&#xff1a;用c语言程序实现步进电机的正反转加减速的编程内容&#xff1a;1、本程序用于测试4相步进电机常规驱动2、需要用跳帽或者杜邦线把信号输出端…

常用容器(Collection)实现类总结(四)——HashSet

HashSet简略说明: 此类实现 Set 接口&#xff0c;由哈希表&#xff08;实际上是一个 HashMap 实例&#xff09;支持。它不保证 set 的迭代顺序&#xff1b;特别是它不保证该顺序恒久不变。此类允许使用 null 元素。 (This class implements the Set interface, backed by a has…

Mockito验证

本文是我们名为“ 用Mockito进行测试 ”的学院课程的一部分。 在本课程中&#xff0c;您将深入了解Mockito的魔力。 您将了解有关“模拟”&#xff0c;“间谍”和“部分模拟”的信息&#xff0c;以及它们相应的Stubbing行为。 您还将看到使用测试双打和对象匹配器进行验证的过…

js页面传值(注意中文)

页面a&#xff08;传送&#xff09;&#xff1a; var myUrlhttp://www.xxx?myParaencodeURI(中文参数);页面b&#xff08;接收&#xff0c;注意中文&#xff09;: //var myPara request("myPara"); function request(paras){// var url location.href;var urldeco…

stax 和jaxb 关系_XML解组基准:JAXB,STAx,Woodstox

stax 和jaxb 关系介绍 上周末&#xff0c;我开始考虑如何以一种资源友好的方式处理大量XML数据。我要解决的主要问题是如何以块的形式处理大型XML文件&#xff0c;同时提供上游/下游系统&#xff0c;需要处理一些数据。 当然&#xff0c;我已经使用JAXB技术已有几年了。 使用J…

C语言switch怎么算,超级新手,用switch写了个计算器程序,求指导

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼我也写过一个。。。。看样子大家都喜欢用 switch()来写计算机。。。。百度排版是渣渣&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;# includeintmain(void){ doublea, b, c;//a: 被X数&#xff0c; b: X数&#x…

vim编辑器初级(七)

:syntax on  打开语法高亮 :syntax off  关闭语法高亮 vim有两套语法颜色方案&#xff0c;分别用于背景亮和背景暗时&#xff0c;当vim启动时它会尝试辨别背景并选择合适的颜色方案&#xff0c;但vim辨别背景时可能出错 :set background?  查看background选项的值为多少…

如何编写Java代理

对于vmlens &#xff08;轻量级Java竞争条件捕获器&#xff09;&#xff0c;我们使用Java代理来跟踪字段访问。 这是我们学习的实现此类代理的经验教训。 开始 使用“ static public static void premain&#xff08;String args&#xff0c;Instrumentation inst&#xff09;…

48道C语言上机题参考答案,二级C语言上机题库参考答案(已修改).doc

二级C语言上机题库参考答案(已修改).doc下载提示(请认真阅读)1.请仔细阅读文档&#xff0c;确保文档完整性&#xff0c;对于不预览、不比对内容而直接下载带来的问题本站不予受理。2.下载的文档&#xff0c;不会出现我们的网址水印。3、该文档所得收入(下载内容预览)归上传者、…

Python练习-从小就背不下来的99乘法表

心血来潮,灵机一动,反正就是无聊的做了一个很简单的小玩意: for i in range(1,10):#让i 1-9 循环9次print("\n")#每循环一次进行一次换行for j in range(1,10):#让j 1-9 循环9次print(j, "x",i , "", i * j," ",end"")#输出…

快速排序 数组 函数 c语言,书上快速排序程序中子函数是怎样更改数组的?理论上不可实现啊...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼return不可能返回数组&#xff0c;于是子hanshu1quicksort最后没有用return&#xff0c;但是没有return又怎么可以更改a[N]&#xff1f;主函数中的quicksort(a, 0, N - 1);将a[N]复制后传递给形参a&#xff0c;quicksort(a, 0, N -…

(原创)SpringBoot入门

本文章是SpringBoot入门的介绍在这里 我会尽量写一些细节性的东西,我用的是IDEA2016 Tomcat7 JDK1.8 Maven3.3.9 IDEA Tomcat JDK Maven的安装我就不详细了, 这里我会提到Maven的安装和如何使用阿里云的镜像,因为官网的JAR下载真的是...比乌龟还慢 先从Maven的配置开始,到官…