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