什么是微服务架构?
微服务架构(通常简称为微服务)是指开发应用所用的一种架构形式。 通过微服务,可将大型应用分解成多个独立的组件,其中每个组件都有各自的责任领域。在处理一个用户请求时,基于微服务的应用可能会调用许多内部微服务来共同生成其响应。
容器是微服务架构的绝佳示例,因为它们可让您专注于开发服务,而无需担心依赖项。现代云原生应用通常使用容器构建为微服务。
性。
微服务架构的重要特征
- 整个应用程序被拆分成相互独立但包含多个内部模块的子进程。
- 与模块化的单体应用(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 决定将微服务架构应用于构建各自大型复杂的应用程序,以充分利用微服务的特有优势。然而,能够充分做到微服务架构并发挥其优势的,仅仅是科技巨头中的一小部分而已。 但是,是否迁移到微服务应取决于项目以及团队结构。这对整个公司来说都是非常重要的,因此在使用微服务之前,应该认真进行讨论和评估。