微服务架构教程:入门所需的一切
微服务架构是目前最受关注的软件架构趋势之一,它彻底改变了企业应用程序的构建方式。与过去缓慢而复杂的单体架构不同,世界各地的开发者和公司都在转向微服务架构,以简化和扩展其结构。事实上,就连亚马逊、Netflix、Spotify 和 Uber 等公司也已经完成了转型。
无论您是想入门微服务,还是仅仅对相关的讨论感到好奇,您都来对了地方。今天,我将带您了解关于微服务的一切,从实际案例到架构模式等等。我们将涵盖以下内容:
- 什么是微服务架构
- 优点和缺点
- 微服务和 Docker
- 技术栈和架构模式
- 资源指南
我们开始吧!
什么是微服务架构?
微服务一词没有统一的定义。微服务(也称为微服务架构)最简单的定义是:一种使用松耦合服务构建应用程序的架构风格。这些服务集合或模块可以独立开发、部署和维护。
与传统的复杂单体应用相比,微服务架构运行速度更快、更可靠。借助微服务架构,任何规模的组织都可以根据自身能力构建量身定制的技术栈。
使用微服务有很多切实的好处,我们稍后会详细讨论,但企业是否应该从单体架构转向微服务架构仍然存在争议。让我们来分析一下两者的区别,以了解这场争论。
单体架构 vs. 微服务架构
单体架构是构建和部署应用程序的传统方式。这种架构基于单一、不可分割的单元的概念,该单元包含服务器端、客户端和数据库。所有方面都统一起来,作为一个单一的单元和代码库进行管理。这意味着任何更新都必须修改同一代码库,因此整个技术栈都需要进行更改。随着单体应用程序规模的扩大,它们会变得非常复杂,因此整体开发周期通常会更长。
而微服务架构则将该单元拆分成多个独立的单元,每个单元都作为独立的服务运行。这意味着每个服务都有自己的逻辑和代码库。它们之间通过 API(应用程序编程接口)进行通信。
那么,你应该选择哪种架构呢?让我们来详细分析一下。
选择单体架构
-
如果你的公司团队规模较小,那么你就不必处理部署微服务架构的复杂性。
-
如果您想要更快的启动速度,单体架构所需的启动时间更短。虽然该系统后续更新可能需要更多时间,但初始启动速度更快。
选择微服务架构
- 如果您想开发更具可扩展性的应用程序,微服务架构的扩展要容易得多。您可以轻松快捷地添加新功能和模块。
- 如果您的公司规模较大或计划发展壮大,那么使用微服务架构非常适合此类公司,因为微服务架构更具可扩展性,并且随着时间的推移更容易进行定制。
微服务的优点和缺点
微服务架构之所以更适合贵公司,原因有很多。让我们先来探讨一下它最显著的优势,然后再分析一下它的一些缺点。
好处
提高可扩展性和生产力
大型团队通常需要协作完成复杂的项目。借助微服务架构,项目可以被拆分成更小、更独立的单元。这意味着各个团队可以独立处理领域逻辑,从而最大限度地减少协调工作量。此外,负责每个微服务的团队可以根据自身需求做出技术决策。
例如,只要接口功能正常,每个单元或容器的内部结构并不重要。因此,任何编程语言都可以用来编写微服务,负责的团队可以为他们的团队成员选择最合适的语言。
与原有系统集成良好
单体系统难以维护。许多遗留系统结构混乱、测试不足,或者依赖于过时的技术。幸运的是,微服务可以与遗留系统协同工作,改进代码并替换系统中的旧部分。集成简便,能够解决单体系统诸多弊端,使之成为历史。
可持续发展
微服务架构能够创建长期可维护的系统,因为其各个组件都是可替换的。这意味着可以轻松重写某个微服务而不会影响整个系统。只要妥善管理微服务之间的依赖关系,就可以轻松地进行更改,以优化团队需求和性能。
跨职能
微服务最适合分布式团队。如果您的团队遍布全球或拥有多个部门,微服务能够赋予他们必要的自由度和灵活性,让他们可以自主工作。技术决策可以快速制定,并能瞬间与其他服务集成。跨职能协作从未如此轻松。
缺点
部署需要更多努力
微服务系统的运行通常需要更多投入,因为其中包含更多可部署的单元,每个单元都需要部署和监控。接口的变更必须进行相应的调整,以确保各个微服务的独立部署仍然可行。
测试必须独立进行。
由于所有微服务必须一起测试,因此一个微服务出现问题可能会阻塞测试阶段,并阻止其他微服务的部署。此外,需要测试的接口也更多,而且接口两端的测试必须相互独立。
难以同时更改多个微服务
影响多个微服务的变更实施起来可能更加困难。在微服务系统中,变更需要多次协调部署。
微服务和 Docker
Docker 和微服务几乎是同义词。微服务必须是可独立部署、可扩展的独立单元。但是,如果您的应用程序需要创建多个微服务呢?Docker 是一种轻量级的微服务部署解决方案。您可以将微服务打包到 Docker 镜像中,并将其隔离为一个 Docker 容器。这样,您就可以构建一个独立于宿主环境的应用程序。
Docker 容器并非拥有独立的完整虚拟机,而是共享 Docker 宿主机上的操作系统内核。容器中的进程会出现在 Docker 容器运行所在操作系统的进程表中。
要在微服务中使用 Docker,您需要通过名为 Dockerfile 的文件创建 Docker 镜像Dockerfile。Dockerfile 编写起来很简单,因此软件部署也很容易。以下是一个 Java 微服务的 Dockerfile 示例。
FROM openjdk:11.0.2-jre-slim
COPY target/customer.jar .
CMD /usr/bin/java -Xmx400m -Xms400m -jar customer.jar
EXPOSE 8080
典型的微服务系统包含多个 Docker 容器。协调多个 Docker 容器组成的系统需要配置虚拟网络。容器必须能够相互发现才能进行通信。Docker Compose 环境可以通过链路连接到其他服务器,从而提供服务发现机制。
继续学习。
无需费力浏览视频或文档,即可学习微服务架构。Educative 的文字课程易于快速浏览,并提供实时编码环境,让学习变得快捷高效。
技术栈和架构模式
理解微架构的工作原理是一回事,实际构建和实现它又是另一回事。因此,我们希望重点介绍可用于构建完整微服务系统的各种技术。接下来,我们将探讨一些不同的技术栈、模式和设计,帮助您创建可执行的微服务架构。
微观和宏观架构决策
建议将架构分为微架构和宏架构。微架构涉及针对每个微服务的所有决策。宏架构涉及适用于所有微服务的全局决策。
可以将微观架构和宏观架构的概念扩展到技术决策领域。技术决策可以在宏观架构或微观架构的框架内制定。例如,让我们来看看数据库在微观和宏观层面需要做出的技术决策:
-
微架构:每个微服务都可以拥有自己的数据库实例。如果在微架构中定义数据库,那么一个数据库的崩溃只会导致一个微服务崩溃。这使得整个应用程序更加健壮。
-
宏观架构:数据库也可以作为宏观架构的一部分进行定义。多个微服务不得共享同一个数据库模式。
自包含系统
自包含系统 (SCS) 是一种微服务架构,它定义了宏架构的各个组成部分。这意味着它们并不代表整个系统。由于 SCS 是自包含的,因此它提供了实现领域逻辑某一部分所需的一切,例如日志数据和用户界面。SCS 还提供可选的 API。
例如,用于微服务支付的共享上下文(SCS)会将与该支付相关的信息存储为限界上下文。它还会实现用于显示支付历史记录的用户界面,并且客户数据会从其他共享上下文中复制过来。
可以将这些视为最佳实践的集合;服务控制体系 (SCS) 基于既定模式提供精确的规则,为构建微服务架构提供参考点。所有这些规则确保每个 SCS 都实现了特定领域,因此新增功能只会修改一个 SCS。
我们可以将SCS视为一种微服务架构,因为它能够独立部署,并将系统拆分为多个独立的Web应用程序。事实上,一个SCS甚至可以拆分为多个微服务。它们与微服务的主要区别在于以下三点:它们比微服务规模更大;它们注重松耦合;它们必须具备用户界面(UI)。
前端集成
微服务还可以与 Web 前端集成。将前端拆分成不同的模块有助于解决将其视为单体应用时产生的一些问题。模块化的前端由可独立部署的微服务组成。这可以为您的前端带来诸多好处。
例如,模块化的前端可以拥有独立的领域逻辑,领域逻辑的变更只需修改一个微服务即可实现。要将多个独立的前端合并在一起,就必须进行集成,因此需要一个集成系统。
这可以通过链接来实现,即一个前端显示一个链接,另一个前端读取并处理该链接。也可以通过重定向来实现,例如 OAuth2 处理前端集成的方式。重定向将数据传输与前端集成结合起来。
然而,也有一些例外情况,例如原生移动应用应该采用单体架构部署,或者前端开发仅由一个团队负责时。
异步微服务
同步微服务在处理请求的同时会向其他微服务发出请求并等待结果。异步通信协议发送消息,接收方对此做出反应,但不会直接返回响应。如果一个微服务在处理请求时不向其他微服务发出请求,或者发出请求但不等待结果,则可以将其定义为异步微服务。
异步微服务相比同步微服务具有诸多显著优势,并能解决分布式系统面临的许多挑战。处理微服务请求所需的逻辑不依赖于请求结果,因此它们更加独立。
同样,即使某个通信伙伴出现故障,也不会导致整个系统崩溃,从而增强了系统的整体弹性。此外,处理和交付几乎始终都能得到保证。
异步微服务的一些常见技术示例包括 Kafka(一种常用的消息传递 MOM)、REST 和 Atom 数据格式(用于额外的基础设施)。
微服务平台
微服务平台,例如 PaaS 和 Docker 调度器,支持微服务的运行和通信。这些技术支持微服务之间的通信,从而实现部署、日志分析和监控。
例如,这些平台支持HTTP和REST协议,并具备负载均衡和服务发现功能。由于微服务的实现所需的运维支持有限,因此可以快速部署并支持多个微服务。
微服务平台简化了常见问题的实现,并提供了一种解决方案。Kubernetes 和 Docker 是一些值得关注的平台,它们对于微服务的运维至关重要。PaaS 和 Cloud Foundry 也很有用,但不如 Kubernetes 和 Docker 普及。
值得注意的是,迁移到这些平台需要改变应用程序的运行和安装方式,这使得使用微服务平台成为一个耗时耗力的重大步骤。这是微服务平台的主要缺点。
总结
现在您已经对微服务架构及其各种变体有了大致了解,可以开始实践学习了。请查看下面的资源列表,了解更多关于微服务的信息。
资源
-
微服务指南:一系列文章探讨了与微服务相关的各种主题。
-
微服务时代的监控艺术:与《监控的艺术》作者的实用问答,涵盖监控策略
-
构建微服务: O'Reilly 出版的微服务书籍
-
GitHub 的微服务入门指南:面向初学者的易于浏览的代码仓库
-
AWS 微服务入门:亚马逊关于微服务概念的文档和定义
微服务架构:权威在线课程
正在寻找真正值得信赖的在线课程?我们为您提供由该领域专家之一、 Java Champions 社区创始成员Eberhard Wolff撰写的两部分微服务系列课程,涵盖您需要了解的一切。
首先要掌握微服务的基本原理,为部署和实施打下坚实的基础。
《微服务原理与概念入门》通过真实案例和迁移策略,带您了解这一激动人心趋势的所有优点和缺点。
然后,您可以继续学习《微服务架构:实践实现》,这是学习现实世界实现细节的最佳课程之一。
本课程将带你了解实际的“方案”和技术栈。你将掌握部署的方方面面,并在课程结束时成为微服务专家!
这两门课程都以埃伯哈德关于同一主题的高评价书籍为基础,因此您可以确信您将获得一流的指导。
做好充分准备,应对这一日益增长的趋势!
学习愉快!
文章来源:https://dev.to/educative/microservices-architecture-tutorial-all-you-need-to-get-started-4pd4











