Service Mesh 的一些基础概念#
说好了,这书名叫《xyz内幕》,为何还要说基础概念? 好吧,为了:
内容体系完整性
统一后面用到的术语
服务调用关系概念#
Upstream & Downstream#
从 Envoy 的角度看:
upstream
: 流量方向中的角色:[downstream] –> envoy –> [upstream]。这里我避免用中文词上游/下游
,因为概念上没有统一,也容易和英文误解。downstream
: 流量方向中的角色:[downstream] –> envoy –> [upstream]
警告
需要注意的是,upstream 与 downstream 是个相对于观察者的概念。
如场景: service A
⤜调用➙ service B
⤜调用➙ service C
:
如果站在
service C
上,我们在把service B
叫 downstream;如果站在
service A
上,我们把service B
叫 upstream。
Upstream Cluster & Downstream Cluster#
Upstream Cluster
/ Downstream Cluster
主要是 Envoy 中的概念。
一般来说,一个 Upstream
/ Downstream
指代一个具体的主机(Host)。而 Upstream Cluster
/ Downstream Cluster
是指运行同一服务的,同构的的一群主机。在 k8s 环境下,一般就是对应同一 k8s Deployment
的所有 POD 了。
Inbound & Outbound#
从 K8s 的 pod 的角度看:
图:Inbound与Outbound概念 用 Draw.io 打开#
有3个服务,自下而上地调用。
client
fortio-server:8080
fortio-server-l2:8080
其实调用关系就是:
client ➔ fortio-server:8080 ➔ fortio-server-l2:8080
上图这样排版也是想直接反映 upstream 和 downstream 字面义。图中需要解释的,或者只有 inbound / outbound 这两个术语。首先,什么是 bound
。
bound
: 字面意为边界。有人译为站(名词)
。而在现实的 k8s + istio 环境中,可以理解为 pod / serviceinbound
: 有人译为入站
。而在现实的 k8s + istio 环境中,可以理解为流量从 pod 外部进入 pod。即服务的被调用流量outbound
: 有人译为出站
。而在现实的 k8s + istio 环境中,可以理解为流量从 pod 内部输出到 pod 外部。
需要注意的是,对于同一个调用请求。他可以是调用者 service 的 outbound,同时也是被调用者的 inbound。如上图。