微服务和Service Mesh核心组件

云原生

云原生 定义中包括 微服务、容器、服务网格、不可变基础设施 和 声明式 API 等代表技术,构建云原生应用就主要靠这些关键技术

云原生 更侧重应用程序的运行环境,它是以 k8s 和容器为基础的云环境;而微服务架构则对应于应用程序的软件架构。

微服务优势

  1. 敏捷开发 : 微服务可以让服务更敏捷地开发上线,这符合现在互联网业务快速迭代的特征。
  2. 技术自由 : 不需要局限在同一种语言
  3. 弹性扩缩容 : 微服务可以灵活地应对服务的扩缩容问题
  4. 组织匹配 : 微服务架构可以非常好地与组织架构相匹配

Service Mesh核心组件

  1. 服务注册中心:服务间通信的基础组件。服务通过注册自身节点,让调用方服务发现被调方服务节点,以达到服务间点对点通信的目的。
  2. 配置中心:用于服务的基础配置更新,以达到代码和配置分离的目的。减少服务的发布次数,配置发布可以更快更及时地变更服务。
  3. API 网关:通过统一的网关层,收敛服务的统一鉴权层、链路 ID 生成等基础服务,并聚合后端服务为客户端提供 RESTful 接口。另外 API 网关也负责南北向流量(外网入口流量)的流量治理。
  4. 服务治理:通过限流、熔断等基础组件,杜绝微服务架构出现雪崩的隐患。
  5. 链路追踪:通过 trace 将整个微服务链路清晰地绘制出来,并进行精准的故障排查,极大地降低了故障排查的难度。
  6. 监控告警:通过 PrometheusGrafana 这样的基础组件,绘制服务状态监控大盘,针对资源、服务、业务各项指标,做精准的监控报警。


可观测性是通过系统输出信息到外部,以检测系统内部的运行状态

主要包括 链路追踪、监控指标、日志

k8s中的 可观测性

1. LOG 日志

使用 EFK 收集日志并分析

2. 监控指标

使用 Prometheus

3. 链路追踪

Istio 也无法做到无侵入的接入 Trace

虽然网格代理 Envoy 能够自动识别 Trace 中的 header,在请求 upstream 的时候自动生成 span 并携带发送,但是如果要将整个链路追踪信息串在一起,还需要代码中额外携带一些链路追踪信息才能完成。

Istio 规定需要携带以下 header

1
2
3
4
5
6
7
x-request-id
x-b3-traceid
x-b3-spanid
x-b3-parentspanid
x-b3-sampled
x-b3-flags
x-ot-span-context

然后根据相关信息,通过 Jaeger 的类库等工具,进行 trace 分析