典型的微服务架构图
下图展示了一个典型的微服务架构。
- 负载均衡器:它将传入流量分配到多个后端服务。
- CDN(内容交付网络):CDN 是一组地理上分布的服务器,用于保存静态内容以实现更快的交付。客户端首先在 CDN 中查找内容,然后再进行后端服务。
- API 网关:处理传入请求并将它们路由到相关服务。它与身份提供者和服务发现进行对话。
- 身份提供者:负责处理用户的身份验证和授权。
- 服务注册和发现:微服务注册和发现发生在该组件中,API网关在此组件中查找相关服务进行通信。
- 管理:该组件负责监控服务。
- 微服务:微服务是在不同的领域中设计和部署的。每个域都有自己的数据库。API网关通过REST API或其他协议与微服务通信,同一域内的微服务使用RPC(远程过程调用)相互通信。
微服务的好处:
- 它们可以快速设计、部署和水平扩展。
- 每个域都可以由专门的团队独立维护。
- 业务需求可以在每个领域进行定制,从而得到更好的支持。
微服务最佳实践
当我们开发微服务时,需要遵循以下最佳实践:
- 为每个微服务使用单独的数据存储
- 使代码保持相似的成熟度
- 为每个微服务单独构建
- 为每个微服务分配单一职责
- 部署到容器中
- 设计无状态服务
- 采用领域驱动设计
- 设计微前端
- 编排微服务
微服务通常使用哪些技术堆栈
下面您将看到一张显示微服务技术堆栈的图表,包括开发阶段和生产阶段。
𝐏𝐫𝐞-𝐏𝐫𝐨𝐝𝐮𝐜𝐭𝐢𝐨𝐧
- 定义 API - 这在前端和后端之间建立了契约。为此,我们可以使用 Postman 或 OpenAPI。
- 开发 - Node.js 或 React 在前端开发中很流行,而 java/python/go 在后端开发中很流行。另外,我们需要根据API定义更改API网关中的配置。
- 持续集成 - JUnit 和 Jenkins 用于自动化测试。代码打包成 Docker 镜像并部署为微服务。
𝐏𝐫𝐨𝐝𝐮𝐜𝐭𝐢𝐨𝐧
- NGinx 是负载均衡器的常见选择。Cloudflare 提供 CDN(内容分发网络)。
- API网关-我们可以使用spring boot作为网关,并使用Eureka/Zookeeper进行服务发现。
- 微服务部署在云上。我们可以选择 AWS、Microsoft Azure 或 Google GCP。缓存和全文搜索 - Redis 是缓存键值对的常见选择。Elasticsearch 用于全文搜索。
- 通信 - 为了使服务能够相互通信,我们可以使用 Kafka 或 RPC 基础设施中的消息传递。
- 持久性 - 我们可以使用 MySQL 或 PostgreSQL 作为关系数据库,使用 Amazon S3 作为对象存储。如有必要,我们还可以使用 Cassandra 进行宽列存储。
- 管理和监控 - 为了管理如此多的微服务,常见的运维工具包括 Prometheus、Elastic Stack 和 Kubernetes。