微服务部署是微服务非常重要的环节,下面详解4种常见的微服务部署案例@mikechen
微服务多实例部署
微服务多实例部署:是微服务架构中最基础、最常见的部署模式,通过为每个微服务部署多个运行实例。
如下图所示:
比如:在一台服务器上,部署了用户服务 (User Service) 的两个实例。
实例1:
server: port: 8081 spring: application: name: user-service
实例2:
server: port: 8082 spring: application: name: user-service
每个微服务实例必须监听不同的网络端口,以避免端口冲突。
然而,需要注意单台服务器的资源限制、和潜在的单点故障风险。
比如:单台服务器的 CPU、内存和网络资源是有限的,运行过多的实例可能会导致资源竞争,反而降低性能。
对于生产环境中的关键微服务,建议考虑跨多台服务器的分布式部署。
微服务容器化部署
微服务容器化部署:是一种将每个微服务、及其所有依赖项,打包到独立容器中的部署方法。
如下图所示:
可以使用Docker(最流行的容器化平台),用于构建、打包、分发和运行容器。
Docker 将微服务及其运行环境(JDK、依赖库等),打包成镜像。
docker build -t user-service:1.0 .
无论部署在哪台服务器上,都能保持行为一致。
docker run -d -p 8080:8080 --name user-service user-service:1.0
大大减少了“开发能跑、测试能跑、线上跑不了”的问题。
真正做到,一次构建,到处运行(Build once, run anywhere)。
微服务Serverless部署
微服务 Serverless 部署:是一种将服务部署、和运行责任交给云平台的现代架构方式。
微服务 Serverless 部署带来了与传统容器化部署不同的价值,它进一步抽象了基础设施管理,让开发者更专注于业务逻辑。
Serverless 平台,比如: AWS Lambda…等等,负责底层的基础设施管理。
开发者无需关心这些运维细节,可以将更多精力投入到业务代码的编写。
Serverless 部署,通常根据实际的请求量自动弹性伸缩,无需预先配置或管理实例。
只为实际执行的计算资源付费,闲置时不产生费用,可以显著降低成本,尤其对于流量波动较大的服务。
微服务容器编排部署
除此之外,还可以结合容器化、与自动化编排,比如:K8S等来部署。
如下图所示:
用户请求 │ ┌─▼──────┐ │ Ingress│ ⇽⇽ Nginx 入口控制器 └─┬──────┘ │ ┌─▼────────────┐ │ Service (ClusterIP)│ ⇽⇽ 微服务的内部服务发现 └─┬────────────┘ │ ┌─▼────────────┐ │ Pod(多个副本)│ ⇽⇽ 每个 Pod 运行 1 个微服务实例 └──────────────┘
Kubernetes 可以自动化微服务的部署、更新和回滚过程,大大简化了发布流程。
Kubernetes 可以在各种环境中部署,包括公有云、私有云和混合云。
Kubernetes 解决了大规模微服务部署、和管理中的诸多挑战。