vlambda博客
学习文章列表

云原生-什么是微服务?什么是微服务架构?

什么是微服务架构?

微服务架构(通常简称为微服务)是指开发应用所用的一种架构形式。通过微服务,可将大型应用分解成多个独立的组件,其中每个组件都有各自的责任领域。在处理一个用户请求时,基于微服务的应用可能会调用许多内部微服务来共同生成其响应。

容器是微服务架构的绝佳示例,因为它们可让您专注于开发服务,而无需担心依赖项。现代云原生应用通常使用容器构建为微服务。

性。


微服务架构的重要特征

  • 整个应用程序被拆分成相互独立但包含多个内部模块的子进程。

  • 与模块化的单体应用(Modular Monoliths)或 SOA 相反,微服务应用程序根据业务范围或领域垂直拆分。

  • 微服务边界是外部的,微服务之间通过网络调用(RPC 或消息)相互通信。

  • 微服务是独立的进程,它们可以独立部署。

  • 它们以轻量级的方式进行通信,不需要任何智能通信通道。

微服务架构的优点

  • 更好的开发规模。

  • 更快的开发速度。

  • 支持迭代开发或现代化增量开发。

  • 充分利用现代软件开发生态系统的优势(云、容器、 DevOps、Serverless)。

  • 支持水平缩放和细粒度缩放。

  • 小体量,降低了开发人员的认知复杂性。

微服务架构的缺点

  • 更高数量级的活动组件(服务、数据库、进程、容器、框架)。

  • 复杂性从代码转移到基础设施。

  • RPC 调用和网络通信的大量增加。

  • 整个系统的安全性管理更具有挑战性。

  • 整个系统的设计变得更加困难。

  • 引入了分布式系统的复杂性。

构建微服务架构

可以在许多不同的框架中构建微服务。下面几个是目前较受欢迎的:

  • Spring Boot with Spring Cloud —基于 Java Spring Cloud 的全栈微服务框架,扩展功能丰富。

  • Vert.x —运行于 JVM 之上的一个工具,支持选择不同语言并提供简单的 API 接口。

  • Akka —一款 Actor 模型框架,非常适合响应式微服务。

  • Quarkus —用于构建模块化微服务应用程序的 Kurbernetes Native Java 框架

  • Falcon —一个专注于质量控制并针对微服务进行了优化的 Python 框架。

  • Molecular —一款支持事件驱动的 Node.js 微服务框架。

如何部署微服务

  • 下面是几种选择。也可以选择其中的几个合并使用进行微服务部署。

  • 云上部署,拥有非常好的扩展能力,可以为不同地区的用户提供相应服务

  • 容器部署,可以大大缩短产品上线时间,同时可以轻松扩展应用并快速解决问题

  • PaaS(Platform-as-a-Service,平台即服务)部署,从云提供商租用开发工具,基础架构和操作系统

  • Serverless 部署,应对弹性的高峰流量场景时考虑使用该部署方式

  • 构建自己的 IT 基础设施,如果有足够的资源,可以考虑使用该方式部署。

如何对微服务进行监控

  • 有很多监控工具供你挑选使用,下面是我的一些推荐:

  • Datadog该工具常用于业务监控、日志追踪分析以及异常告警。在异常检测及性能监控方面非常高效。

  • Dynatrace一款由 AI 驱动的平台,可用于监控动态混合云环境。

  • NewRelic一款用于云环境的集中监控及报告的监控工具。

  • Splunk一款用于日志分析的轻便工具。

  • AppDynamix一款实时监控应用程序和服务器性能的工具。

  • — 一个开源的性能监控及网络监控工具。

如何自动化CI/CD过程

  • 从完整的云基础架构设置到使用 Kubernetes 在云中交付应用程序和服务,Microtica涵盖整个软件交付自动化过程。Microtica 针对开发人员在云中开发、测试和代码部署的方式制定了相应标准。这让他们的工作在未来的项目中得以复用。

如何进行测试

  • 下面是我们使用的一些方法:

  • 使用Mocha+Chai进行单元集成测试

  • 使用Postman进行 API 自动化测试。我们为每个公共 API 定义了一个测试用例,在每天凌晨时执行它们,并立即获得测试报告。如果出现问题时,我们会立即修复问题并将变更部署到生产环境。

何时使用微服务?

  • 项目未来会有很多新功能

  • 项目经常发布新功能

  • 项目有多个子域名及子服务

  • 公司业务正在计划扩张

  • 项目有一个大型团队可以同时处理不同的微服务

  • 拥有敏捷的、跨职能的团队并且正在进行大型的项目协作

  • 但是,在开始使用微服务架构前,请务必仔细考虑下面几个问题:

  • 项目需要多少存储空间?如果项目依赖本地存储,则将无法灵活地进行服务扩展。应用也将无法处理大量工作负载。

  • 应用程序是事件驱动吗?如果是这样,那么程序应该能实现异步处理,因为你的应用程序将跨多台机器进行部署扩展。

  • 需要灵活的消息传输机制。微服务项目中有多个事件源,并且都必须对其进行处理。因此,需要一个强大的消息传递模型。

  • 由于微服务将使用其 API 进行通信,因此创建 API 通信模式是必不可少的。

  • 微服务需要一个更加安全的模型,该模型允许一个微服务仅能访问其所需的资源,而不会使其他微服务受到安全威胁。微服务在软件体系架构方面进行了重大的革命。在构建微服务应用时,应认真考虑各种情况。Netflix、Amazon、Uber 和 Spotify 决定将微服务架构应用于构建各自大型复杂的应用程序,以充分利用微服务的特有优势。然而,能够充分做到微服务架构并发挥其优势的,仅仅是科技巨头中的一小部分而已。但是,是否迁移到微服务应取决于项目以及团队结构。这对整个公司来说都是非常重要的,因此在使用微服务之前,应该认真进行讨论和评估。