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

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

编排(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中,有兴趣可以了解一下。微服务架构中服务的编排

微服务架构中服务的编排相关推荐

  1. 微服务架构中服务集成的主要技术

    在微服务架构中,服务之间势必需要集成,而这种集成关系远比简单的API调用要复杂.在本文中,我们将系统分析服务集成的方式以及在微服务架构中的表现形式.关于服务之间的集成存在一些通用的模式,我们也将在梳理 ...

  2. 微服务架构中服务注册与发现

    想象一下,如果你在写代码调用一个有REST API或Thrift API的服务,你的代码需要知道一个服务实例的网络地址(IP地址和端口).运行在物理硬件上的传统应用中,服务实例的网络地址是相对静态的, ...

  3. python服务发现与注册_(转)微服务架构中服务注册与发现

    https://blog.csdn.net/u011537073/article/details/69663858 想象一下,如果你在写代码调用一个有REST API或Thrift API的服务,你的 ...

  4. 微服务架构中职能团队的划分

    传统单体架构将系统分成具有不同职责的层次,对应的项目管理也倾向于将大的团队分成不同的职能团队,主要包括:用户交互UI团队.后台业务逻辑处理团队与数据存取ORM团队.DBA团队等.每个团队只对自己分层的 ...

  5. 【微服务架构】在微服务架构中最小化设计时间耦合

    理查森:我是克里斯·理查森.欢迎来到我关于在微服务架构中最小化设计时耦合的演讲.在这次演讲中,我将回答三个问题.什么是设计时耦合?这会造成什么问题?我们如何设计松散耦合的服务?这些年来我做了一些事情. ...

  6. 微服务架构中10个常用的设计模式

    从软件开发早期(1960 年代)开始,应对大型软件系统中的复杂性一直是一项令人生畏的任务.多年来为了应对软件系统的复杂性,软件工程师和架构师们做了许多尝试:David Parnas 的模块化和封装 ( ...

  7. 如何在微服务架构中实现安全性?

    点击上方"方志朋",选择"置顶公众号" 技术文章第一时间送达! 作者 | Chris Richardson 网络安全已成为每个企业都面临的关键问题.几乎每天都有 ...

  8. 在微服务架构中做机器学习,真的太难了

    2020-05-29 14:42:56 我曾经参与过很多由深度学习技术驱动的项目,最糟糕的情况就是被迫处理面向微服务的架构,我不是呼吁大家停止使用微服务,但想在面向微服务的架构中推动机器学习项目,很大 ...

  9. 微服务架构中熔断器_基于 Golang 语言的微服务熔断器

    背景 从单体服务拆分到微服务过程中,原来模块间交互逐渐抽离成远程调用,可能http,rpc,tcp,,,等等,那么这些模块在调用中一定存在某种依赖关系. 这时一旦下游某个服务超时或者down,请求量还 ...

最新文章

  1. Echarts读取本地json文件渲染轨迹,亲测ok
  2. 零基础入门学习Python(2)
  3. 宁‘内卷‘,勿‘躺平‘
  4. 一些关于mathematica的tips
  5. python基础3(来自廖雪峰的官方网站)
  6. Koa(1)之——koa入门
  7. python文件管理包_Python标准库04 文件管理 (部分os包,shutil包)
  8. PAT-BASIC-1003-我要通过!
  9. 何晓飞首次披露飞步自动驾驶方案:无人货运起步,自研AI芯片
  10. Arcgis Licensemanager 不能启动的原因之一(转载)
  11. java程序员电脑内存配置_学习JAVA对电脑配置有要求吗
  12. 条码软件如何修改条码标签的字体格式
  13. 深海迷航坐标传送代码_深海迷航全资源坐标一览 美丽水世界坐标位置介绍
  14. matlab非齐次线性方程组的解,MATLAB求解非齐次线性方程组
  15. 浅谈OLAP系统核心技术点
  16. Java 1072 开学寄语
  17. java——》Supplie
  18. 究竟什么才是云计算 云计算的优势都有哪些
  19. COOX基础培训之二次开发(二)
  20. IM——直播互动场景

热门文章

  1. 构建云生态,深化云应用 —— 第九届中国云计算大会启幕
  2. 深化应用ERP迫在眉睫 整合优化是王道
  3. 英伟达TX2烧录系统_99美元AI计算机:英伟达推出嵌入式电脑Jetson Nano
  4. avd不能加载解决办法
  5. PS学习记录-图像【像素】与【分辨率】的说明
  6. 怎么设置每天都提醒的日程
  7. 生成树协议STP PVST
  8. 计算机蓝屏故障一般在什么情况会发生,电脑蓝屏的原因有什么
  9. 迭代法求解抢劫犯问题
  10. cooki与session区别