热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

适用于Java开发人员的微服务:Monoglot还是Polyglot?

1.简介在本教程的前面部分中,我们已经讨论了很多有关微服务架构的好处。它本质上是一个松耦合的分布式系统,它提供了特别重要的能力,可以为工作选择合适的工具。这可能不仅意味着不同的框架

1.简介

在本教程的前面部分中,我们已经讨论了很多有关微服务架构的好处。 它本质上是一个松耦合的分布式系统,它提供了特别重要的能力,可以为工作选择合适的工具。 这可能不仅意味着不同的框架,协议或库,而且意味着完全不同的编程语言。

目录

1.简介
2.只有一个
3. JVM上的多语言
4.语言动物园
5.参考申请
5.1。 客户服务
5.2。 库存服务
5.3。 付款服务
5.4。 预约服务
5.5。 API网关
5.6。 BFF
5.7。 管理员网站门户
5.8。 客户门户网站
6。结论
7.接下来

在这一部分中,我们将讨论monoglot和multiglot 微服务 ,每种选择所带来的价值,并希望提出合理的结论以帮助您做出决策。 另外,我们将介绍我们即将开始开发的参考应用程序的体系结构。 它的主要目的是充当我们将要讨论的众多其他主题的游乐场。

2.只有一个

多年来,许多组织已经围绕一种特定的编程语言及其生态系统积累了丰富的专业知识,例如本教程的主题Java。 他们拥有熟练的开发人员,成功项目的可靠记录,对某些库和框架的深入了解,包括对他们的怪癖和特性的深刻理解。 为了采用微服务架构 ,所有这些都应该扔掉吗? 这些知识是否相关或有用?

这些问题很难回答,因为许多组织都陷入了非常古老的软件栈。 使这样的遗留系统适合微服务架构可能听起来不切实际。 但是,如果您足够幸运地押注了本教程前一部分中讨论的框架和库,那么您的位置就很好。 当然,您可能会四处寻找更好的现代选择,但是从已经知道和熟悉的事物开始是安全的选择。 坦白地说,事情会随着时间的推移而发展,您可能永远不会觉得不需要摆脱Java培训或您最喜欢的一组框架和库的需要。

保持不变的身份并在Java上完全构建微服务并没有错。 但是存在许多采用者可能陷入的陷阱:不同服务之间非常紧密的耦合,最终导致分布式整体架构的诞生。 它源于采取捷径并共享特定于Java的工件(称为JAR )的决定,而不是依赖于与语言无关的更通用的协定和模式。

即使您喜欢留下会声,也请考虑会声!

3. JVM上的多语言

除了Java外,还有许多其他本机可以在JVM上运行的语言,例如Scala , Kotlin , Clojure , Groovy , Ceylon等 。 它们中的大多数与用普通的Java编写的代码具有极好的互操作性,因此,将多语言微服务路由完全保留在JVM平台上确实很容易。 尽管如此,由于所有内容仍以JAR打包和分发,因此构建分布式整体的危险仍然非常现实。

当谈到在JVM上开发多语言应用程序时,更不用说Oracle Labs提出的最先进的技术了,该技术的名称为GraalVM 。

GraalVM 是一种通用虚拟机,用于运行以Javascript,Python 3,Ruby,R,基于JVM的语言(例如Java, Scala Kotlin 和基于LLVM的语言,例如C和C ++) 编写的应用程序 GraalVM 消除了编程语言之间的隔离,并在共享的运行时中实现了互操作性。 它可以独立运行,也可以在 OpenJDK Node.js ,Oracle数据库或MySQL 的上下文中运行 https://www.graalvm.org/

本着真正创新的精神, GraalVM为JVM平台开辟了全新的视野。 它尚未准备好用于生产(直到今天仍处于发布候选阶段),但它有可能彻底改变我们在JVM上构建应用程序的方式,尤其是多语言的应用程序。

4.语言动物园

在炒作和不切实际的承诺推动的行业中,新的闪亮事物一直出现,并且开发人员渴望在生产中立即使用它们。 确实, 微服务架构使我们能够选择最佳语言或/和框架,以最有效的方式解决业务(甚至技术)问题(但当然并不要求这样做)。

与促进责任感和主人翁精神一样,让各个团队做出技术决策似乎合乎逻辑。 事实是,尽管实际上处理不同语言和框架的动物园非常昂贵。 这就是为什么如果环顾四周,您会发现大多数行业领导者都押注2-3种主要编程语言,这是在发展微服务实现时要牢记的重要观察因素。

5.参考申请

为了使我们的讨论从理论转向实践,我们将介绍我们将要开始进行的参考项目。 毫不奇怪,它将遵循微服务架构的指导原则进行构建 。 由于我们的教程是面向Java的,因此我们的大多数组件都将使用这种语言编写,但是了解全局并意识到Java不是唯一的组件非常重要。 因此,让我们卷起袖子,开始构建多语言微服务 !

我们的参考项目称为JCG Car Rentals :一个简单(但现实!)的应用程序,可为各种客户提供汽车租赁服务。 它追求以下几个目标:

  • 演示微服务架构的好处
  • 展示各种技术堆栈(语言和框架)如何相互集成以构成一个凝聚的生活平台
  • 在项目生命周期的各个方面(从开发到生产运营)介绍最佳实践,新兴技术和工具
  • 并有希望得出的结论是,开发复杂的异构分布式系统( 微服务是)确实是艰巨而富有挑战性的旅程,需要权衡取舍

JCG租车与现代大型系统相距甚远,在生产中部署了数百种微服务 。 但是,即使是像这样简单的应用程序也会带来许多问题。 让我们看一下下面的“ JCG租车”架构图。

适用于Java开发人员的微服务:Monoglot还是Polyglot?

JCG租车微服务架构

您可能会注意到,我们之前讨论过的某些原则有很多缩水。 例如,每个服务都使用自己的编程语言或/和框架,同样的情况也适用于前端。 难道不是我们之前曾被警告过的语言动物园吗? 是的,确实,我们故意削弱了一些标准,以便涵盖更多的主题和互操作性场景。 请不要采用此体系结构作为您的应用程序的蓝图,而应专注于最适合您的部分。

这样,遍历我们绘制的每个框并简要解释我们做出选择的原因将是有用的。

客户服务

客户服务的职责是管理JCG租车公司客户的个人数据。 该服务没有上游依赖性,我们将使用JAX-RS实现之一将Java作为RESTful Web API来实现(准确地说,我们将依赖Apache CXF框架)。

原因:客观地讲, JAX-RS是企业Java世界中的第一选择。 Apache CXF不仅符合JAX-RS,而且还提供许多其他附加功能,以构建成功的微服务架构 。

库存服务

库存服务将成为汽车的权威来源,以及库存中可供租赁的数量。 它还没有上游依赖性,我们的实现选择将是基于 Scala和Akka HTTP构建的RESTful Web服务 。

原因: Akka HTTP已被证明是在JVM上实现RESTful Web服务的出色框架。 尽管它具有Java DSL ,但首先使用Scala可以充分利用它。

付款服务

付款服务将处理JCG Car Rentals提供的所有客户费用。 通过在Go中构建此服务,并通过HTTP / 2使用gRPC协议与之通信,我们在这里选择了完全不同的技术堆栈。 这是纯内部服务的示例,我们可能不想在外部公开。

原因: 事实证明, gRPC是用于服务到服务通信的高效协议。 另一方面, Go非常流行,并且对gRPC具有出色的支持。

预约服务

预订服务是JCG租车 微服务架构的核心。 它专用于管理汽车预订,并取决于付款服务 , 客户服务和库存服务 。 由于它是最关键和最重要的部分,因此我们将使用Spring Boot和Spring WebFlux将其实现为RESTful Web API 。

原因: Spring Boot和更一般的Spring Platform绝对主导着Java生态系统。 它建立在Spring Framework成熟的基础之上,提供卓越的生产力,智能配置功能以及与大多数流行的库和框架的无缝集成。 首先, Spring WebFlux (相对于传统的Spring Web MVC )的选择可能并不那么明显,但是希望本教程的下一部分将对此进行阐明。

API网关

自早期以来, API网关就确保了其在微服务架构中的牢固地位。 事实证明,将所有(或大部分)服务公开提供给公众是很容易的,但不是一个好主意。 在本教程的后面,我们将详细讨论API网关 ,但仅着重介绍它们有助于解决的一些关键问题:

  • 可发现性 :使用者不需要知道上游依赖项所在的位置(例如主机和端口)
  • 分区 :消费者不需要知道应用程序的确切组成部分,因为体系结构可能随时间而变化
  • 统一协议 :消费者不必担心每种服务所使用的各种不同协议
  • 客户 友好度 :不同的客户可能需要以不同的方式塑造数据

我们在这里的选择将随着时间而变化。 我们将从Netflix的基于Java的网关服务Zuul开始,然后慢慢从那里开始。

原因: Netflix大规模运行微服务 。 Zuul (或更确切地说, Zuul 2 )融合了网关服务应如何运作的宝贵经验。

BFF

不久前, 后端的后端 (或简称BFF )作为通用API网关的替代方法出现在人们的视野中。 简而言之,每个前端都是唯一的。 从某种意义上说,很明显,移动前端的需求与成熟的台式机完全不同。 为了解决这种差异, BFF的基本承诺是为一个特定的前端(即前端的后端)提供出色的支持。

有很多框架可以帮助我们开发高效的BFF,但是可以说GraphQL提供的可能性使后者成为构建BFF的特别有吸引力的基础。 谁能比Apollo平台做得更好。

原因: Apollo平台是GraphQL生态系统的最前沿 。 与我们之前看过的JVM替代品相比,它明显更先进,功能更丰富。

管理员网站门户

管理员Web门户是JCG租车平台的后台 。 它将展示执行某些管理功能的能力,包括客户支持所需的功能。 由于这是一个内部组件,因此我们将使用Play Framework在Scala中构建它。

理由:经常在后台应用落于后端开发人员手中。 由Scala支持的Play框架对于他们来说确实是一种高产的选择。

客户门户网站

客户门户网站是JCG Car Rentals应用程序的公共入口点。 这是我们希望人们搜索交易并进行预订的地方,所有这些都由少量的微服务提供 。 将使用Javascript和Vue.js进行开发。

原因:这是现代单页Web应用程序( SPA )的典型前端堆栈。 由于Vue.js简单易用,因此提供了对Vue.js (而不是React或Angular )的偏好。

6。结论

在本节中,我们讨论了微服务架构在***选择技术方面提供的机会。 我们已经讨论了monoglot与polyglot 微服务的优缺点,以及您应该注意的一些陷阱。

7.接下来

在本教程的下一部分中,我们将讨论不同的编程范例,这些范例通常用于构建微服务和现代分布式系统。

翻译自: https://www.javacodegeeks.com/2018/10/microservices-java-developers-monoglot-polyglot.html


推荐阅读
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • Oracle优化新常态的五大禁止及其性能隐患
    本文介绍了Oracle优化新常态中的五大禁止措施,包括禁止外键、禁止视图、禁止触发器、禁止存储过程和禁止JOB,并分析了这些禁止措施可能带来的性能隐患。文章还讨论了这些禁止措施在C/S架构和B/S架构中的不同应用情况,并提出了解决方案。 ... [详细]
  • MySQL中的MVVC多版本并发控制机制的应用及实现
    本文介绍了MySQL中MVCC的应用及实现机制。MVCC是一种提高并发性能的技术,通过对事务内读取的内存进行处理,避免写操作堵塞读操作的并发问题。与其他数据库系统的MVCC实现机制不尽相同,MySQL的MVCC是在undolog中实现的。通过undolog可以找回数据的历史版本,提供给用户读取或在回滚时覆盖数据页上的数据。MySQL的大多数事务型存储引擎都实现了MVCC,但各自的实现机制有所不同。 ... [详细]
  • 本文介绍了一个项目风险管理论文示例,该论文以某公司的人力资源管理系统建设项目为例,详细介绍了该项目的背景、投资、工期、推广应用以及解决的业务难题。该系统具备多个系统功能模块,采用Java语言开发,基于J2EE架构,使用Oracle数据库和Weblogic中间件,服务器采用DELL塔式商用服务器,并采用双机热备和光纤存储。该系统的实施能够提升信息共享和协同作业范围,解决数据统计工作量大、容易出错等问题,同时还能提高业务办公质量和进行成本控制。 ... [详细]
  • DAO设计模式(九)_1.设计分层初步 ... [详细]
  • 本文详细介绍了MysqlDump和mysqldump进行全库备份的相关知识,包括备份命令的使用方法、my.cnf配置文件的设置、binlog日志的位置指定、增量恢复的方式以及适用于innodb引擎和myisam引擎的备份方法。对于需要进行数据库备份的用户来说,本文提供了一些有价值的参考内容。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 本文介绍了高校天文共享平台的开发过程中的思考和规划。该平台旨在为高校学生提供天象预报、科普知识、观测活动、图片分享等功能。文章分析了项目的技术栈选择、网站前端布局、业务流程、数据库结构等方面,并总结了项目存在的问题,如前后端未分离、代码混乱等。作者表示希望通过记录和规划,能够理清思路,进一步完善该平台。 ... [详细]
  • MySQL数据库锁机制及其应用(数据库锁的概念)
    本文介绍了MySQL数据库锁机制及其应用。数据库锁是计算机协调多个进程或线程并发访问某一资源的机制,在数据库中,数据是一种供许多用户共享的资源,如何保证数据并发访问的一致性和有效性是数据库必须解决的问题。MySQL的锁机制相对简单,不同的存储引擎支持不同的锁机制,主要包括表级锁、行级锁和页面锁。本文详细介绍了MySQL表级锁的锁模式和特点,以及行级锁和页面锁的特点和应用场景。同时还讨论了锁冲突对数据库并发访问性能的影响。 ... [详细]
  • 前言:原本纠结于Web 模板,选了Handlebars。后来发现页面都是弱逻辑的,不支持复杂逻辑表达式。几乎要放弃之际,想起了Javascript中eval函数。虽然eval函 ... [详细]
  • JavaScript和Python是用于构建各种应用程序的两种有影响力的编程语言。尽管JavaScript多年来一直是占主导地位的编程语言,但Python的迅猛发展有 ... [详细]
  • 使用Node.js进行数据库操作和身份认证的方法:Session和JWT
    文章目录数据库和身份认证Node操作mysql配置mysql模块操作mysql数据库Web开发模式服务端渲染前后端分离如何选择身份认证Session认证机制Session工作原理E ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • 本文介绍了在Oracle数据库中创建序列时如何选择cache或nocache参数。cache参数可以提高序列的存取速度,但可能会导致序列丢失;nocache参数可以避免序列丢失,但在高并发访问时可能导致性能问题。文章详细解释了两者的区别和使用场景。 ... [详细]
  • Java自带的观察者模式及实现方法详解
    本文介绍了Java自带的观察者模式,包括Observer和Observable对象的定义和使用方法。通过添加观察者和设置内部标志位,当被观察者中的事件发生变化时,通知观察者对象并执行相应的操作。实现观察者模式非常简单,只需继承Observable类和实现Observer接口即可。详情请参考Java官方api文档。 ... [详细]
author-avatar
拍友2502916683
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有