微服务架构中服务的编排

简介: 微服务架构中服务的编排

单体系统拆分成一堆微服务,服务治理和部署运维时会遇到很多挑战和问题,服务编排就是指如何把这些服务组织到一起,解决这些问题。


可以类比积木搭城堡。积木就是你的一大堆微服务、依赖的各个组件,城堡就是指整个微服务系统。搭城堡不是简单的把一堆积木哗啦啦倒一起,要考虑每个位置放什么积木,同样,微服务的编排也要考虑非常多的事情。


编排(Orchestration)这个词有点抽象,我们用一个实例来说明微服务编排到底指哪些事情: 假如现在准备用Kubernetes来编排一套微服务系统,要考虑哪些事情呢?

  • 服务依赖的基础组件,比如数据库、缓存服务,这些组件如何部署,如何访问?
  • 服务的配置,比如数据库账号、密钥等,这些放到哪里?
  • 不同服务和组件之间的隔离策略如何配置,混合部署还是独占,混布策略是什么?
  • 不同服务之间是否有依赖关系,如何处理?
  • 服务之间通信,如何发现彼此,网络上如何隔离?
  • 每个服务需要部署多少实例,资源配额分别是多少,负载均衡策略是什么?
  • 需要自动扩缩容的服务,自动伸缩的策略如何配置?
  • 服务如何暴露到外界,访问入口如何配置?
  • 每个服务在健康时才能放行流量,服务健康检查要如何配置?
  • 可观测性四连:日志、监控、告警、链路追踪,相关的基础设施组件怎么部署,服务如何接入?
  • 每个服务在启动时和关闭时,是否需要执行额外的脚本,来做一些初始化或优雅退出的工作?
  • 金丝雀发布如何实现,流量灰度的策略是什么?


这些全部都是编排相关的问题。要解决这些问题,需要创建Kubernetes抽象出来的资源(Deployment,ConfigMap,Persistent Volume,Volume,Secret,Service,Ingress,HPA,PVC,NetworkPolicy ...),以及一些内部细节(Pod Spec, Affinity,LifeCycle Hook、Probe ...),配合一些在Kubernetes生态下的组件(Prometheus Operator,istio,Jaeger,EFK ...)共同解决。


一边想这些问题,一边写Kubernetes Yaml、Kubernetes CRD Yaml,就是在做服务编排(如果不用Kubernetes,用Docker compose、Docker Swarm做编排也可以,但Kubernetes已经是事实标准,本文不讨论非Kubernetes的情况)。


Kubernetes中的微服务的容器化编排,狭义上可以认为就是给各个服务写好Deployment、Service、Ingress这几个资源定义的Yaml,就可以按照这些编排文件部署出来了。


然而,微服务的运维挑战,更多的在于服务治理、可观测性,以及基础设施组件如何管理。在做编排时要考虑的事情非常多,这些事情反映到声明式编排文件上会非常复杂。我个人理解的服务编排,是包括这些所有相关的事情的,不仅是狭义上的写几个简单的Yaml,那样是没法满足大规模系统的产线要求的。


延伸一下,既然编排一套微服务系统如此复杂,有没有简化的办法呢?


目前广泛使用的是Helm和Kustomize,通过把一些动态参数抽离和模板渲染,比直接写原生Yaml舒服很多,减少了重复性工作。另外,阿里云和微软云一起搞了个OAM[1],来简化编排过程、分离不同角色的关注点,用OAM定义的CRD可以让编排过程更加简单,其运行时CrossPlane[2]项目也已经在CNCF中,有兴趣可以了解一下。微服务架构中服务的编排

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
10月前
|
人工智能 运维 安全
配置驱动的动态 Agent 架构网络:实现高效编排、动态更新与智能治理
本文所阐述的配置驱动智能 Agent 架构,其核心价值在于为 Agent 开发领域提供了一套通用的、可落地的标准化范式。
5206 116
|
消息中间件 负载均衡 中间件
⚡ 构建真正的高性能即时通讯服务:基于 Netty 集群的架构设计与实现
本文介绍了如何基于 Netty 构建分布式即时通讯集群。随着用户量增长,单体架构面临性能瓶颈,文章对比了三种集群方案:Nginx 负载均衡、注册中心服务发现与基于 ZooKeeper 的消息路由架构。最终选择第三种方案,通过 ZooKeeper 实现服务注册发现与消息路由,并结合 RabbitMQ 支持跨服务器消息广播。文中还详细讲解了 ZooKeeper 搭建、Netty 集群改造、动态端口分配、服务注册、负载均衡及消息广播的实现,构建了一个高可用、可水平扩展的即时通讯系统。
1214 0
|
10月前
|
人工智能 安全 数据可视化
配置驱动的动态Agent架构网络:实现高效编排、动态更新与智能治理
本文系统性地提出并阐述了一种配置驱动的独立运行时Agent架构,旨在解决当前低代码/平台化Agent方案在企业级落地时面临困难,为Agent开发领域提供了一套通用的、可落地的标准化范式。
746 18
配置驱动的动态Agent架构网络:实现高效编排、动态更新与智能治理
|
9月前
|
Cloud Native Serverless API
微服务架构实战指南:从单体应用到云原生的蜕变之路
🌟蒋星熠Jaxonic,代码为舟的星际旅人。深耕微服务架构,擅以DDD拆分服务、构建高可用通信与治理体系。分享从单体到云原生的实战经验,探索技术演进的无限可能。
微服务架构实战指南:从单体应用到云原生的蜕变之路
|
9月前
|
机器学习/深度学习 人工智能 缓存
面向边缘通用智能的多大语言模型系统:架构、信任与编排——论文阅读
本文提出面向边缘通用智能的多大语言模型(Multi-LLM)系统,通过协同架构、信任机制与动态编排,突破传统边缘AI的局限。融合合作、竞争与集成三种范式,结合模型压缩、分布式推理与上下文优化技术,实现高效、可靠、低延迟的边缘智能,推动复杂场景下的泛化与自主决策能力。
811 3
面向边缘通用智能的多大语言模型系统:架构、信任与编排——论文阅读
|
人工智能 监控 数据可视化
企业级LLMOps落地指南:蜂巢架构×可视化编排实战
本文将基础的单应用扩展成多应用,并实现工作流组件,包括:多应用模块设计、工作流模块设计、LangGraph实现图应用、前端Vue-Flow组件使用、工作流转LLM工具设计思路、关联工作流登技巧。
584 3
企业级LLMOps落地指南:蜂巢架构×可视化编排实战
|
文字识别 运维 监控
架构解密|一步步打造高可用的 JOCR OCR 识别服务
本文深入解析了JOCR OCR识别服务的高可用架构设计,涵盖从用户上传、智能调度、核心识别到容错监控的完整链路,助力打造高性能、低成本的工业级OCR服务。
496 0
架构解密|一步步打造高可用的 JOCR OCR 识别服务
|
缓存 Cloud Native Java
Java 面试微服务架构与云原生技术实操内容及核心考点梳理 Java 面试
本内容涵盖Java面试核心技术实操,包括微服务架构(Spring Cloud Alibaba)、响应式编程(WebFlux)、容器化(Docker+K8s)、函数式编程、多级缓存、分库分表、链路追踪(Skywalking)等大厂高频考点,助你系统提升面试能力。
1608 0
|
消息中间件 人工智能 监控
文生图架构设计原来如此简单之分布式服务
想象一下,当成千上万的用户同时要求AI画图,如何公平高效地处理这些请求?文生图/图生图大模型的架构设计看似复杂,实则遵循简单而有效的原则:合理排队、分工明确、防患未然。
602 14
文生图架构设计原来如此简单之分布式服务