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

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租车”架构图。

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租车服务应用程序的公共入口点。 这是我们希望人们搜索交易并进行预订的地方,所有这些都由少量的微服务提供 。 将使用JavaScript和Vue.js进行开发。

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

6。结论

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

7.接下来

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

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

Java开发人员的微服务:Monoglot还是Polyglot?相关推荐

  1. 适用于Java开发人员的微服务:管理安全性和机密

    关于麦洛 麦洛是 Java 开发者和技术爱好者. 对 Java 相关技术特别感兴趣,包括 javaee. Spring系列. 微服务等 作者:Andrey Redko 原文:Microservices ...

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

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

  3. Java开发人员的微服务:微服务通信

    1.简介 微服务架构本质上是进入分布式系统工程的旅程. 随着越来越多的微服务正在开发和部署,它们很有可能必须以某种方式彼此对话. 这些通信方式不仅会因传输方式和协议而异,而且也会以同步或异步方式发生变 ...

  4. java 扫描文件测试_适用于Java开发人员的微服务:安全测试和扫描

    java 扫描文件测试 1.简介 本教程的这一部分专门讨论安全性测试,将围绕被证明在软件开发领域(包括微服务 )中无价的测试策略进行总结. 尽管软件项目中的安全方面每天都变得越来越重要,但是令人惊讶的 ...

  5. java 服务编排_适用于Java开发人员的微服务:部署和编排

    java 服务编排 在这篇文章中,我们拥有一个全面的文章微服务针对Java开发:部署和协调. 1.简介 如今,越来越多的组织依靠云计算和托管服务产品来托管其服务. 这种策略有很多好处,但是您仍然必须为 ...

  6. 适用于Java开发人员的微服务:持续集成和持续交付

    1.简介 如果我们回顾与微服务体系结构相关的众多挑战,确保每个微服务都能够与每个对等方说正确的语言可能是最困难的挑战之一. 我们最近谈论了很多关于测试的话题,但是总是有机会让bug潜入.也许是合同的最 ...

  7. java服务负载均衡_适用于Java开发人员的微服务:配置,服务发现和负载平衡

    java服务负载均衡 1.配置,服务发现和负载平衡–简介 我们正在缓慢但稳定地朝着准备好将微服务部署到生产中的方向发展. 在本教程的这一部分中,我们将讨论三个主要主题:配置,服务发现和负载平衡. 我们 ...

  8. Java开发必读--初识微服务一定要阅读这篇文章

    原文转自一线互联网资深架构师,微服务布道师小马哥的原创文章,始发与小马哥公众号. 微服务是什么? 微服务是一种细粒度(Fine-Grain)的SOA 或许在座的高朋了解过其概念.个人认为,与其说微服务 ...

  9. 怎么掌握Java开发技能 常用微服务框架有哪些

    怎么掌握Java开发技能?常用微服务框架有哪些?随着程序规模的扩大以及复杂性增大,越来越多的Java程序员选择使用微服务进行项目设计研发.微服务的出现有助于开发人员用更低的成本和更少的错误来开发程序, ...

最新文章

  1. Apache漏洞修复
  2. 告别2019,展望2020:让我们看一看这十年中深度学习的经典瞬间
  3. 【ccf-csp201512-5】矩阵
  4. SharePoint 2007 SDK 有了1.1版本
  5. HDU 2393 Higher Math
  6. Android Binder 分析——原理
  7. yarn界面杀死application
  8. 二维码扫描和应用跳转
  9. 研究生做毕设,用到深度学习,没有GPU该怎么办
  10. 利用 SQL Monitor 查看语句运行状态步骤
  11. php 32位v11库下载,LibFredo6 (多国语言编译库) v11.6a (原版)
  12. 70个python毕设项目_这10个Python项目很有趣!
  13. python去噪函数_Python | 简单的扩音,音频去噪,静音剪切
  14. java扫描条形码接口_javaweb条形码产生、打印、扫描
  15. s3c2440的时钟体系
  16. 数据流图(DFD)概念及画法
  17. 毫秒数转换为时间计时天数
  18. jq 修改元素css伪类样式
  19. 运维危险操作之windows server打开或关闭windows功能
  20. speedoffice(Word)怎么修改字体颜色呢

热门文章

  1. 题解系列009 | 洛谷题解 CF488A 【Giga Tower】
  2. 低版本的Hadoop实现 Apriori 算法Java代码
  3. 3DEXPERIENCE MODSIM产品前期概念结构快速开发方案(上) | 达索系统百世慧®
  4. HAOI2014 贴海报 浮水法
  5. 复杂网络代码_低代码的兴起,程序员要拒绝还是拥抱
  6. 安装mysql初始化失败原因_MySQL安装出错历险记 之 Framework初始化失败
  7. 《Java Concurrency in Practice》中文版笔记
  8. 2021北邮自考c++实践题及答案
  9. 整理了几个范文网,写计划、心得、总结等统统用得上
  10. Vue+koa2开发一款全栈小程序(服务端环境搭建和项目初始化)