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

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

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

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

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

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

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

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

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

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

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

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

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

  6. Java开发人员的微服务:Monoglot还是Polyglot?

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

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

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

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

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

  9. 适用于Java开发人员的Elasticsearch:简介

    本文是我们学院课程的一部分,该课程的标题为Java开发人员的Elasticsearch教程 . 在本课程中,我们提供了一系列教程,以便您可以开发自己的基于Elasticsearch的应用程序. 我们涵 ...

最新文章

  1. 平台允许同时在线人数 显示_糖豆人:终极淘汰赛 热度持续飙升 Steam同时在线人数排名前四...
  2. VOC2007基本信息
  3. Vue 里的$如何理解
  4. Nginx server_name通配符匹配配置
  5. 让窗体获得焦点,一定会有您用到的时候
  6. onCreate源码分析
  7. Python3中异常处理和try/except,try/finally的用法
  8. 信息系统项目管理师备考指南
  9. python高段编程_25个有用的 Python 代码段
  10. Office WORD如何在图片上添加文字
  11. Bean生命周期(面试版)
  12. 【业务安全01】业务安全基础及测试流程
  13. [精简]托福核心词汇66
  14. 【ctfshow】- web189
  15. bat 命令如何启动远程PC上的一个程序?
  16. tdd测试_变异测试是TDD的发展
  17. matlab实现证件照换底+美肤的功能
  18. 双向链表增删改查C语言代码,C语言中双向链表的增删改查输出源文件代码
  19. 顺丰菜鸟之争落幕:今日12时起恢复数据传输
  20. Tmall_Fore_home

热门文章

  1. 如何把一本书扫描入库?
  2. 如何在 UE4 中设置光线追踪功能
  3. LIGGGHTS笔记1——集群Centos安装编译,CFDEM耦合OpenFOAM
  4. Word必备实用技巧11-15,每一条都令人相见恨晚
  5. iOS 检查手机的3D Touch是否可用
  6. 视频教程-YOLOv4目标检测实战:人脸口罩佩戴检测-计算机视觉
  7. 中班计算机计划总结怎么写,幼儿园电脑员年度工作总结
  8. 基于javaweb+mysql的在线购物商城shop系统(仅前台购物)
  9. 2017中国云计算行业年度盘点:黑马崛起,强者恒强
  10. 计算机网络安全 之 信息加密与PKI