服务网格GRPC协议多种编程语言实践-4.GRPC协议示例的网格实践

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器镜像服务 ACR,镜像仓库100个 不限时长
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
简介: 上一篇容器实践的结果是,4个client容器可以访问到服务`grpc-server-svc.grpc-best.svc.cluster.local`,且该服务按负载均衡路由到4个版本的server容器。本篇将以此为基础,进行2个流量管理的实践。

上一篇容器实践的结果是,4个client容器可以访问到服务grpc-server-svc.grpc-best.svc.cluster.local,且该服务按负载均衡路由到4个版本的server容器。本篇将以此为基础,进行2个流量管理的实践。

1 按版本切流

按版本切流是使用ServiceMesh的常见场景。这里以100%流量路由到Java版本服务作为示例(拓扑如下图所示),演示基于GRPC服务的按版本流量管理。

grpc_mesh_v1_100.png

DestinationRule

首先我们进入服务网格(ASM)实例,定义GRPC服务的DestinationRule,将如下内容复制到页面。

apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  namespace: grpc-best
  name: grpc-server-dr
spec:
  host: grpc-server-svc
  subsets:
    - name: v1
      labels:
        version: v1
    - name: v2
      labels:
        version: v2
    - name: v3
      labels:
        version: v3
    - name: v4
      labels:
        version: v4

保存后结果示意如下。

image-20200928174411300

VirtualService

接下来我们定义一个VirtualService实现100%流量路由到Java版本服务。新建VirtualService,将如下内容复制保存。

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  namespace: grpc-best
  name: grpc-server-vs
spec:
  hosts:
    - "*"
  gateways:
    - grpc-gateway
  http:
    - match:
        - port: 9996
      route:
        - destination:
            host: grpc-server-svc
            subset: v1
          weight: 100

验证

执行如下脚本进行验证。

for i in {1..100}; do
  docker exec -e GRPC_SERVER="${INGRESS_IP}" -it "$client_node_container" node mesh_client.js >> mesh_result
done
sort mesh_result | grep -v "^[[:space:]]*$"| uniq -c | sort -nrk1

预期结果如下。

 100 TalkOneAnswerMore:JAVA
 100 TalkMoreAnswerOne:JAVA
 100 TalkBidirectional:JAVA
 100 Talk:JAVA

2 按GRPC API切流

相比按版本进行流量管理,按GRPC API进行切流是更细粒度的切流方式。我们有4个GRPC的API、4个版本的服务,这里演示一种极端的情况,每一种API路由到指定的一个版本的服务上(拓扑如下图所示)。

grpc_mesh_api_100.png

VirtualService

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  namespace: grpc-best
  name: grpc-server-vs
spec:
  hosts:
    - "*"
  gateways:
    - grpc-gateway
  http:
    - match:
        - port: 9996
        - uri:
            exact: /org.feuyeux.grpc.LandingService/talk
      route:
        - destination:
            host: grpc-server-svc
            subset: v1
          weight: 100
    - match:
        - port: 9996
        - uri:
            exact: /org.feuyeux.grpc.LandingService/talkOneAnswerMore
      route:
        - destination:
            host: grpc-server-svc
            subset: v2
          weight: 100
    - match:
        - port: 9996
        - uri:
            exact: /org.feuyeux.grpc.LandingService/talkMoreAnswerOne
      route:
        - destination:
            host: grpc-server-svc
            subset: v3
          weight: 100
    - match:
        - port: 9996
        - uri:
            exact: /org.feuyeux.grpc.LandingService/talkBidirectional
      route:
        - destination:
            host: grpc-server-svc
            subset: v4
          weight: 100

验证

执行如下脚本进行验证。

for i in {1..100}; do
  docker exec -e GRPC_SERVER="${INGRESS_IP}" -it "$client_node_container" node mesh_client.js >> mesh_result
done
sort mesh_result | grep -v "^[[:space:]]*$"| uniq -c | sort -nrk1

预期结果如下。

 100 TalkOneAnswerMore:GOLANG
 100 TalkMoreAnswerOne:NODEJS
 100 TalkBidirectional:PYTHON
 100 Talk:JAVA
目录
相关文章
|
1月前
|
Cloud Native 测试技术 开发者
阿里云服务网格ASM多集群实践(二):高效按需的应用多环境部署与全链路灰度发布
介绍服务网格ASM提出的一种多集群部署下的多环境部署与全链路灰度发布解决方案。
|
3月前
|
监控 负载均衡 数据安全/隐私保护
探索微服务架构下的服务网格(Service Mesh)实践
【5月更文挑战第6天】 在现代软件工程的复杂多变的开发环境中,微服务架构已成为构建、部署和扩展应用的一种流行方式。随着微服务架构的普及,服务网格(Service Mesh)作为一种新兴技术范式,旨在提供一种透明且高效的方式来管理微服务间的通讯。本文将深入探讨服务网格的核心概念、它在微服务架构中的作用以及如何在实际项目中落地实施服务网格。通过剖析服务网格的关键组件及其与现有系统的协同工作方式,我们揭示了服务网格提高系统可观察性、安全性和可操作性的内在机制。此外,文章还将分享一些实践中的挑战和应对策略,为开发者和企业决策者提供实用的参考。
|
3月前
|
运维 监控 负载均衡
探索微服务架构下的服务网格(Service Mesh)实践之路
【4月更文挑战第30天】 在现代云计算的大背景下,微服务架构以其灵活性和可扩展性成为众多企业转型的首选。然而,随着服务的激增和网络交互的复杂化,传统的服务通信模式已无法满足需求,服务网格(Service Mesh)应运而生。本文通过分析服务网格的核心组件、运作机制以及在企业中的实际应用案例,探讨了服务网格在微服务架构中的关键作用及其带来的变革,同时提出了实施过程中面临的挑战和解决策略。
|
3月前
|
运维 监控 Cloud Native
云原生架构下的服务网格演进与实践
【5月更文挑战第23天】 随着云计算技术的不断成熟,云原生架构已成为推动企业数字化转型的关键动力。本文将深入探讨服务网格在云原生环境中的重要性,分析其在微服务管理、流量控制和安全性方面的创新应用。通过对服务网格的技术和实践案例的剖析,揭示其如何优化云原生应用的部署、运行和管理,为企业构建更加动态、可靠和高效的分布式系统提供策略指导。
|
3月前
|
运维 监控 负载均衡
探索微服务架构下的服务网格(Service Mesh)实践
【4月更文挑战第28天】 在现代云原生应用的后端开发领域,微服务架构已成为一种广泛采用的设计模式。随着分布式系统的复杂性增加,服务之间的通信变得愈加关键。本文将深入探讨服务网格这一创新技术,它旨在提供一种透明且高效的方式来管理、监控和保护微服务间的交互。我们将从服务网格的基本概念出发,分析其在实际应用中的优势与挑战,并通过一个案例研究来展示如何在现有的后端系统中集成服务网格。
|
3月前
|
Kubernetes Cloud Native 测试技术
使用ASM流量泳道的全链路灰度发布实践
服务网格ASM实现全链路灰度发布:通过流量泳道隔离不同版本环境,配置虚拟服务实现灰度比例控制。从创建泳道、打标签、部署新版本到灰度切流、最终上线及下线旧版。
|
10月前
|
监控 安全 Cloud Native
构建无缝的服务网格体验:分享在生产环境中构建和管理服务网格的最佳实践
构建无缝的服务网格体验:分享在生产环境中构建和管理服务网格的最佳实践
40 0
|
12月前
|
运维 Kubernetes Cloud Native
服务网格实施周期缩短 50%,丽迅物流基于阿里云 ACK 和 ASM 的云原生应用管理实践
通过本文介绍丽迅物流关于基于阿里云服务网格 ASM 如何加速企业业务云原生化进程的实践经验。
|
人工智能 自然语言处理 运维
站酷基于服务网格 ASM 的生产实践
随着站酷业务服务的持续改造,将持续基于阿里云服务网格 ASM 产品,获得更加丰富便捷的企业级特性,助力降本增效。
172 0
站酷基于服务网格 ASM 的生产实践
|
Prometheus 监控 Kubernetes
使用ASM网格拓扑观测多集群的流量控制与容灾场景
作为业内首个全托管Istio兼容的阿里云服务网格产品ASM,一开始从架构上就保持了与社区、业界趋势的一致性,控制平面的组件托管在阿里云侧,与数据面侧的用户集群独立。ASM产品是基于社区Istio定制实现的,在托管的控制面侧提供了用于支撑精细化的流量管理和安全管理的组件能力。通过托管模式,解耦了Istio组件与所管理的K8s集群的生命周期管理,使得架构更加灵活,提升了系统的可伸缩性。从2022年4月