问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

微服务:JavaEE的拯救者还是掘墓人?

发布网友 发布时间:2023-04-22 04:15

我来回答

2个回答

热心网友 时间:2023-10-17 17:32

引言

有人说,Java确实过于臃肿,经常“小题大做”。但PHP、Node.js扩展方面短板太明显,做小应用可以,大型应用就玩不转了。另外,JavaEE领域有太多优秀框架可以解决开发效率的问题,事实上借用Spring等框架,开发的效率丝毫不亚于PHP。

互联网时代的Java开发者,很多都不是基于Servlet和EJB来开发Web应用,而且WebLogic、WebSphere也只会存在于大公司的存量系统中,互联网公司的Java都是Tomcat的世界。

那么,微服务能完全弥补JavaEE的短板吗?对于JaveEE来说,微服务扮演的,究竟是拯救者还是掘墓人的角色?

在Java问世之初,包括IBM、BEA、Oracle在内的一些巨头公司,看到了Java作为一门杰出的Web编程语言可能给他们带来的巨大商机。那么如何通过一门编程语言来赚钱呢?答案就是,使用这门语言构建复杂无比的服务器,让那些大公司支付一大笔费用来购买这些服务器。于是紧接着就出现了JavaEE规范、JSR规范,以及WebLogic、WebSphere等服务器中间件。

在这些服务器上面部署了大型的程序包,它们运行缓慢,消耗大量的内存。基于这些容器的开发和调试对开发人员来说简直就是噩梦,作为对他们的补偿,他们从雇主那里获得了丰厚的报酬。

因为耗资巨大,几乎找不到一家公司可以使用合理的费用长时间地支持Java。如果你要用Java构建一个网站,你必须支付一大笔费用来运行这些服务器,哪怕你只用到了Servlet容器。在很长一段时间里,Java被用在企业和公司里,因为只有这些大公司能够负担得起数百万美元的服务器费用,并为那些企业级开发人员支付高额的薪水。

RodJohnson在2003年发布了Spring框架,Spring提供了IoC和对POJO的支持,帮助开发人员逃脱EJB魔掌。开发效率因此得到大幅的提升,大量开发人员转向Spring,把EJB丢在一边。应用服务器开发商看到了这一点,他们在JavaEE5里提供了一些可以减轻开发人员负担的特性。可惜的是,Spring被一路追捧,人们几乎把它跟JavaEE容器混为一谈,它仍然运行在JavaEE的Servlet容器里,这些容器沿用的是十年前的设计,并没有考虑到多核CPU和NIO。

在这期间,PHP奋起直追。PHP使用更少的内存和资源,得到很多公司的支持。一些CMS平台,比如WordPress、Drupal等都是基于PHP构建的,这些平台吸引了大批PHP开发人员。不过,虽然PHP仍然是现今最流行的编程语言,但它也有自己的短板。它运行速度不是很快,而且难以横向扩展。

2009年,RyanDahl启动了Node.js项目,它支持异步非阻塞的、基于事件驱动的I/O。如果服务器的线程使用得当,Node.js可以极大地提升响应速度,单个服务器的吞吐量可以媲美一个JavaEE服务器集群。Node.js是一个很好的作品,但它也有自己的局限性。Node.js难以扩展,也难以与遗留的系统集成。

2014年,Undertow出现了,它是一个基于Java的非阻塞Web服务器。从#的测试结果来看,在一个价值8000美金的戴尔服务器上,它可以每秒钟处理几百万个请求,而谷歌需要使用一个集群才能处理一百万个同样的请求。它是轻量级的,它的核心部分只需要1M内存,它还包含了一个内嵌的服务器,这个服务器使用不到4M的堆内存。

基于UndertowCore构建的LightJavaFramework是一个微服务容器,它支持设计驱动及生成代码,并支持运行时安全和运行时验证。

JavaEE厂商

多年前,JavaEE厂商,比如Oracle和IBM,他们花费数亿美元开发应用服务器(WebLogic和WebSphere),这些服务器以数百万的价格卖给了大型组织。但现在这些服务器卖不动了,因为JBoss迅速抢占了市场份额,Oracle对JavaEE的支持正在走下坡路:

#/story/16/07/02/1639241/oracle-may-have-stopped-funding-and-developing-java-ee

随着微服务越来越多地受到关注,这些应用服务器很难有好的销量,因为这些服务器更适合用来部署单体应用。有一个包含了数百个EJB的应用,为了在WebLogic上测试一行代码改动,居然用了45分钟时间。

JavaEE客户

从客户角度来看,耗费巨资购买这些服务器是不值得的,因为JavaEE所承诺的未必都是真的。一个为WebSphere开发的应用无法部署在WebLogic上,所以你需要花更多的钱去升级服务器,因为厂商可能不再支持旧版的服务器,而这样的更新会花费你数百万美元。

于是一些聪明人不禁要问,为什么我们要把应用部署在这些庞然大物上?为什么我们要把应用打包成一个ear包或war包,而不是jar包?为什么我们不能把大型的应用拆分成更小的块,让它们可以独立部署和扩展?

微服务

微服务是这些问题的解药。Wikipedia把微服务定义为“??一种软件架构风格,复杂的应用由一些独立的进程组成,这些进程使用与语言无关的API进行交互。这些进程服务规模很小,高度离散,聚焦在一个很小的任务上,使用模块化方式来构建系统”。

微服务架构让构建应用变得更加容易,而且应用被拆分成单独的服务,这些服务可以被任意组合。每个服务可以被独立部署,也可以被组合成一个应用。这些服务还可能会被其他应用依赖。它加快了服务的开发速度,因为只要定义好接口,服务可以并行开发。

微服务具备弹性和伸缩性。微服务不只依赖单个服务器和部署,它们可以被发布到多个机器上,或者多个数据中心及其它任何可用的区域。如果一个服务失效,可以启动另外一个。因为整个应用被分解成了微服务(小型服务),可以很容易地对其中某些热门的服务进行横向扩展。

如果你曾经使用过COM、DCOM、CORBA、EJB、OSGi、J2EE、SOAP和SOA等,那么你就会知道服务和组件并不是什么新生事物。企业在使用组件方面存在的一个最大问题是他们依赖大型的硬件服务器,并在同一个服务器上运行很多应用。我们有EJB、WAR包和EAR包,以及各种组件包,因为服务器资源太过昂贵,要尽可能地物尽其用。

不过从最近几年的发展情况来看,之前的方式有些落伍。操作系统服务器一直在变化,虚拟资源可以被当成组件发布,比如EC2、OpenStack、Vagrant和Docker。世界变了。微服务架构看到了这种趋势,硬件、云技术、多核CPU和虚拟技术也在发展,所以我们要改变以前的开发方式。

在开始新项目的时候不要再使用EAR包或WAR包了。现在我们可以在Docker里运行JVM,Docker只不过是一个进程,但它可以表现得像一个操作系统一样。Docker运行在云端的操作系统上,而云端的操作系统运行在虚拟机里,虚拟机运行在Linux服务器上。这些服务器不是归谁所有,而是被很多互不相识的人共享。如果出现流量高峰怎么办?很简单,使用更多的服务器实例。这就是为什么要把Java微服务运行在一个单独的进程里,而不是JavaEE容器或servlet容器。

微服务一般会提供基于HTTP/JSON的API端点。这样可以很容易地与其他服务(开源或闭源的)集成,只要这些服务提供了HTTP/JSON接口。服务可以通过更有意义的方式被消费、被组合。EC2、S3及其他来自Amazon(或其他公司)的服务就是最好的例子。基础设施会成为应用程序的一部分,而且它们是可编程的。

使用微服务架构的应用程序应该是模块化、可编程和可组合的。微服务之间可以相互替换。应用程序的局部可以被重写或改进,而不会影响到整个应用。如果所有的组件都提供了可编程的API,那么微服务之间的交互就会变得更简单(永远不要相信那些不能通过curl访问的微服务)。

随着微服务逐渐流行起来,很多厂商开始尝试把他们的JavaEEWeb服务转成微服务,这样他们就可以继续卖他们的过时产品,APIGateway就是这些厂商中的一个。

JasonBloomberg是Intellyx的*,他在一篇文章里指出了传统Web服务和微服务的区别,并对把传统Web服务转成微服务的趋势提出了质疑:

#/dangers-microservices-washing-get-value-strip-away-hype

微服务不是企业服务总线里的Web服务,也不是传统的面向服务架构,尽管它沿袭了SOA的一些基本概念。从根本上来说,微服务跟SOA是不一样的,因为整个环境已经发生了彻底的转变。

微服务架构的环境是没有边界的:端到端,基于云的应用程序运行在完全虚拟和容器化的基础设施上。容器把应用程序和服务组件化,DevOps为IT基础设施提供框架,帮助自动化开发、部署和管理环境。

虽然容器对微服务来说不是必需的,不过微服务可以很容易地运行在容器里。况且,把非微服务的代码部署在容器里不是一个明智的选择。

Docker和其他容器技术在某种程度上已经被视为微服务的最好伴侣。容器是运行微服务的最小资源子集。Docker简化了微服务的开发,让集成测试变得更简单。

容器有助于微服务开发,但不是必需的。Docker也可以被用来部署单体应用。微服务与容器可以很好地相融并进,不过微服务包含的东西远比容器多!

结论

应用开发的风格这几年一直在变化,而微服务变得越来越流行。大公司把大型应用拆分成可以单独部署的小型应用,这些小型应用被部署在云端的容器里。开源微服务框架LightJava为这些运行在容器里的微服务提供了很多特性,它支持设计驱动,开发者只需要把注意力专注在业务逻辑上,剩下的事情可以由框架和DevOps流程来处理。

那么问题来了,你怎么看?

热心网友 时间:2023-10-17 17:33

EE(Enterprise Edition)架构是一种常见的企业级软件架构,它强调模块化、可扩展性和可维护性,使得大型软件系统更容易开发和维护。随着云计算技术的不断发展,EE架构也不断地适应和演化,以适应新的云计算时代的需求。

在云计算时代,EE架构的发展趋势可以从以下几个方面来考虑:

    微服务化

    随着云计算技术的不断发展,越来越多的企业开始采用微服务架构来构建其软件系统。EE架构也不例外,越来越多的企业开始将其大型软件系统拆分成多个小型服务,以便于开发和维护。这种微服务架构可以使得企业更容易构建和部署自己的软件系统,并且可以更快地响应市场需求。

    容器化

    随着容器技术的不断发展,越来越多的企业开始采用容器化技术来构建和部署其软件系统。EE架构也可以使用容器化技术,将其软件系统打包成容器镜像,以便于在不同的环境中部署和运行。

    云原生化

    云原生是指一种以云计算为基础的软件架构,它将微服务、容器化、自动化等技术融合在一起,以便于构建和部署云原生应用程序。EE架构也可以采用云原生化技术,将其软件系统构建为云原生应用程序,以便于更好地适应云计算时代的需求。

    数据驱动的架构设计

    数据驱动的架构设计是指在软件系统设计时,考虑到数据的特性和数据的价值,以便于更好地利用数据来支持业务需求。EE架构也可以采用数据驱动的架构设计,将其软件系统构建为数据驱动的架构,以便于更好地利用数据来支持业务需求。

    总之,EE架构在云计算时代的发展趋势是微服务化、容器化、云原生化和数据驱动的架构设计。通过采用这些新的技术和方法,EE架构可以更好地适应新的云计算时代的需求,为企业提供更好的软件开发和维护体验。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
才疏学浅的才浅是 才疏学浅的意思是 连接网络打印机的方法与步骤在XP系统中如何连接网络打印机 打印机怎么连接xp电脑xp系统怎么添加网络上已经共享的打印机 xp电脑怎么连办公室的打印机xp系统如何添加网络打印机 为什么微信公众号历史消息为何无消息 丧钟为谁而鸣:生死边缘的沉思录作品简介 为什么新房子也有蟑螂 苹果6怎么取消接通电话是扬声器 ...相当于小长方形的4分之一 大长方体和小长方体面 抖音好物分享不做视频直接选品到橱窗行不行 吉林省事业单位14年以前的养老金怎么处理 无穷的解释边际对吗? 事业单位职工补缴养老保险 灵山香荔的果树特征 珠幌的诗句珠幌的诗句是什么 麟省的诗句麟省的诗句是什么 麟绂的诗句麟绂的诗句是什么 麒麟的诗句麒麟的诗句是什么 荔支香的结构荔支香的结构是什么 为何偏偏喜欢你心雯? 你我如龄光执名,又如孟章监兵的意思 小说,男生喜欢咖喱饭,书名好像跟“偏偏喜欢你差不多”,男生名字里有个夜,现代的,有大神知道吗?? 监兵的解释 鼻子毛孔粗大怎么办 毛孔堵塞疏通小窍门 牛年生的宝宝叫什么名字 男孩取名借鉴成语 2021牛宝宝名字 宝宝名字根据成语取名 失眠是种病 面墙的单词面墙的单词是什么 干蛊的网络解释干蛊的网络解释是什么 昌平北大青鸟分享微服务架构的软件运行可能存在哪些问题 提高足球水平的方法介绍怎样提高足球水平 android fragmentstatepageradapter和fragmentpageradapter的区别 谁可以发个excel格式的工资表给我,要横版的,谢谢 民痡的解释 民讹的意思民讹的意思是什么 民艰的意思民艰的意思是什么 民谚的意思 民谚的意思是什么 民粹的意思是指什么 花轿的国语词典花轿的国语词典是什么 小轿的国语词典小轿的国语词典是什么 轿子的意思轿子的意思是什么 兜轿的国语词典兜轿的国语词典是什么 肩舆的国语词典肩舆的国语词典是什么 八抬轿的国语词典八抬轿的国语词典是什么 轿子的词语轿子的词语是什么 轿子的结构轿子的结构是什么 悦美知白胡椒粉是哪产的 粉荔枝的解释粉荔枝的解释是什么 粉荔fěnlì什么意思近义词和反义词是什么英文翻译是什么