K8s云原生

Service Mesh 基础讲解(面向 Java 开发人员)

2025-08-19  本文已影响0人  _浅墨_

1. 为什么需要 Service Mesh?

假设你写了一个 Spring Boot 微服务系统,有用户服务、订单服务、支付服务。最开始服务之间直接用 HTTP/Feign 调用,没啥问题。

但系统一旦复杂,问题就来了:

这就是 Service Mesh 的用武之地 —— 把服务间通信的复杂治理逻辑抽出来,交给一个独立层来处理,应用代码专心写业务。


2. 核心思想

传统微服务治理
👉 应用里集成 Netflix OSS、Hystrix、Ribbon、Feign 等库来处理熔断、限流、路由。

Service Mesh 治理
👉 把这些逻辑放到 Sidecar 代理(如 Envoy) 里,应用只管业务逻辑,网络治理由 Service Mesh 负责。

类比一下:


3. 核心组件(以 Istio 为例)


4. 开发人员需要理解的关键点

(1)零侵入

你写的 Java 微服务代码里 不需要改一行 Feign/RestTemplate,流量自动走 Envoy 代理。

(2)可观测性

(3)流量治理

你能用 YAML 配置 做到:


5. 实操示例(Istio on K8s)

假设你有两个版本的订单服务:

Step 1: 安装 Istio 并开启 Sidecar 注入

istioctl install --set profile=demo -y
kubectl label namespace default istio-injection=enabled

Step 2: 部署服务

apiVersion: apps/v1
kind: Deployment
metadata:
  name: order-v1
spec:
  replicas: 2
  template:
    spec:
      containers:
        - name: order
          image: myrepo/order:v1
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: order-v2
spec:
  replicas: 1
  template:
    spec:
      containers:
        - name: order
          image: myrepo/order:v2

Step 3: 定义虚拟服务(灰度发布)

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: order
spec:
  hosts:
    - order
  http:
    - route:
        - destination:
            host: order
            subset: v1
          weight: 90
        - destination:
            host: order
            subset: v2
          weight: 10

👉 这个配置表示:90% 的流量走 order-v1,10% 的流量走 order-v2,不用改一行 Java 代码。


6. Java 开发人员能获得什么?


7. 总结一句话

Service Mesh 就像微服务的“透明网络代理层”,帮你处理流量治理,让 Java 代码更纯粹地专注业务逻辑。


架构对比图

Service Mesh 架构对比图
上一篇 下一篇

猜你喜欢

热点阅读