微服务与Java EE

时至今日,基于微服务的架构已经随处可见了。我们见识到了Netflix与Amazon等创新者是如何通过微服务来取得业务上的成功。不过,对于那些使用Java EE服务器,编写传统系统的开发者来说应该何去何从呢?我们一直所做的都是错误的么?我们该如何让技术设计能够适应于未来?

单体架构

首先,我们来看一下这些传统系统,或者说是单体应用。虽然单体这个词现在看起来颇有一种坏味道之感,但这确实是我们长久以来构建软件的方式。基本上,它指的是这样一个事实,即我们构建一个个应用来实现某些功能。单体指的就是Java EE或是一开始的Java 2 Enterprise Edition设计的目标。集中式应用可以进行伸缩与集群,但其设计却不一定具有弹性。在大多数时候,其失败场景都要依赖于底层基础设施与运维。

传统上,Java EE应用遵循着一些核心模式,并且会分成3个主要的层次:展现、业务与集成。展现层会被打包到Web Application Archives(WARs)中,业务与集成逻辑则会被划分到单独的Java Archives(JARs)中。他们会被打包作为一个部署单元,即所谓的Enterprise Archive(EAR)。

围绕着Java EE的技术与最佳实践足以构建出设计良好的单体应用。不过,大多数企业级项目都不太关注架构。这也说明了为何有时设计良好的意大利面条是项目依赖与内部结构可视化的最佳方式。当这发生时,我们很快就会体会到一些严重的缺陷。由于一切都是耦合并且集成到一起的,因此即便进行一些非常小的变更也需要大量的工作(有时还需要重构),然后才能将修改过的部分放到产品中;同时,我们还需要从始至终非常小心地对应用进行测试。整个应用不仅仅只是一些程序化的构件:它还包含了很多部署描述符以及服务端配置文件,此外还有第三方环境的属性等。

开发这些企业项目需要多个团队联手,需要很多人从更高的视角来审查整个项目。业务组件与领域大多数都是由既有的数据库设计或是业务对象定义所驱动的。

变更的高风险与将新配置引入到生产中的复杂性会导致发布频率变得越来越低。新的发布可能一年才有那么几次。甚至团队结构都会受到单体软件架构的严重影响。长久的测试周期就是最直观的证据。

微服务

时代在不断发展,下一代系统架构与设计在几年前出现了。随着集中式集成组件日益增长的复杂性以及应用之间连接的成本越来越高,人们开始寻求更加轻量级、更加富有弹性的解决方案,逐步开始放弃大型、重量级基础设施与设计。与之相伴的是IT部门开始重新审视应用服务器以及冗长的协议和接口技术。

对于那些基于SOA与ESB的项目来说,其服务实现回归到了更加敏捷的构件与服务中来。相对于智能路由与转换来说,微服务使用了简单路由,并且将逻辑封装到了端点本身当中。

微服务是围绕单业务目标而展开的。虽然企业系统的设置让人感到非常烦恼,但对于微服务来说,最有效的运行时却并不一定是功能完善的应用服务器。它可能只是个Servlet引擎,JVM已经足以作为一个执行环境了。

运行时千变万化,编程语言的选择也是数量庞大的,因此这种开发模式很可能会成为另一种运维梦魇。甚至连开发者都可能会在定义微服务以及如何将这种设计应用到既有应用中迷失方向。微服务的设计目标是要形成小型、无状态、独立且自包含的应用。在理想情况下,可以将其部署到任何地方,因为部署本身已经包含了所有必要的组件。

微服务要足够小。不过,“小型”的定义是很主观的。可以使用一些估算方法如代码行数、功能点、用例等。不过一般来说,“小型”与尺寸之间并没有什么必然的联系。在Building Microservices一书中,作者Sam Newman就微服务尺寸的定义给出了一些技术:

足够小,可以由一个小型的敏捷开发团队所拥有

可以在一两个敏捷Sprint(一般来说是2到4周)中完成重写

其复杂度不需要对服务做进一步拆分

无状态应用在处理每个请求时只会使用请求所包含的信息。微服务必须要是无状态的,在处理请求时无需记住与外部系统之前通信的信息。微服务必须要能独立处理请求,它可以与生态系统当中的其他微服务协作来进行处理。比如说,在与其他微服务交互后生成报表的微服务就是个相互依赖的系统。在这种场景中,只向报表微服务提供必要数据的微服务可能是个独立服务。全栈应用本身是可以部署的。它拥有自己的服务器、网络、托管环境。业务逻辑、数据模型与服务接口(API / UI)必须是整个系统的一部分。微服务必须是个全栈应用。

创新与持续不断的改进是企业与企业级项目背后的助推器。如果没有创新,那些过时与昂贵的基础设施组件可能要比在他们上面运行的软件的生命周期还要长。老旧的中间件可能会超期服役,结果是只有少数供应商才知道如何开发它。落后于最新标准的平台栈可能会引入临时应急的解决方案,最终则会产生技术债务。将项目快速迁移到微服务的就是那些开源项目了。

Netflix OSS、Spring、Camel、Fabric8等都是很好的例子。借助于当下的PaaS,我们可以更加轻松地操纵多语言构成的全栈应用,而PasS一般来说也是由诸如Docker和Kubernetes等开源项目所维护的。在这个快节奏的时代中,从开发到上线以及修复Bug的时间被大大缩短了。几乎没有多少企业还能够容忍几个月的产品周期,他们需要软件为业务创造更多的价值。对于那些完全由软件驱动的公司如Uber、NetFlix、Amazon等来说更是如此。我们需要针对灵活性与弹性来构建系统,而不仅仅是效率和健壮性。Java EE并不会消亡,它会得到补充和完善。

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

推荐阅读更多精彩内容