基于Istio的灰度平台实践

640?wx_fmt=jpeg

Istio目前是Service Mesh最受欢迎的实现方式,流量管理是Istio一个非常核心的功能。本文主要介绍在Kubernetes平台上面基于Istio的流量管理做灰度发布、灰度测试的实践以及遇到的各种坑。


Service Mesh是什么?

640?wx_fmt=png


服务网格(Service Mesh)是致力于解决服务间通讯的基础设施层。它负责在现代云原生应用程序的复杂服务拓扑来可靠地传递请求。实际上,Service Mesh 通常是通过一组轻量级网络代理(Sidecar proxy),与应用程序代码部署在一起来实现,而无需感知应用程序本身。
可能一句话很难理解Service Mesh到底是什么。我们通过两个抽象的场景来看Service Mesh是怎么发展的。
第一个是服务通讯的发展,当我们有一个需求是两个服务之间进行通讯。
640?wx_fmt=png
最原始应该就是通过网线互联这种最简单的方式。
随着计算机变得越来越便宜和越来越流行,连接数量和通过它们的数据量急剧增加。随着人们越来越依赖网络系统,工程师需要确保他们构建的软件符合用户所需的服务质量,出现了网络层。如图1。
此时就对我们的程序提出了挑战,比如说流量控制。
想象一种场景,计算机A以给定的速率向计算机B发送字节,但不能保证B将以一致且足够快的速度处理接收的字节。例如,B可能忙于并行运行其他任务,或者数据包可能无序到达,而B被阻止等待应该首先到达的数据包。这意味着不仅A不具备B的预期性能,而且还可能使事情变得更糟,因为它可能会使B超载,现在必须将所有这些传入的数据包排队等待处理。
当出现这种问题时,最简单的就是在业务里面实现流量控制的逻辑。如图2。
技术飞速发展,很快TCP/IP出现,将流控制和许多其他问题纳入网络堆栈本身。这意味着该段代码仍然存在,但它已从您的应用程序提取到您的操作系统提供的底层网络层。
我们发现,随着技术的发展,公共的东西越来越下沉。
第二个场景,是微服务时代的一个场景,微服务时代给我们带来了很多机遇和新的挑战。
新的机遇比如说我们可以让服务的职责更单一,发布更迅速。
挑战就像是我们图1中的问题,服务发现和熔断。
640?wx_fmt=png
最开始遇到这样的问题,开始的方式依旧是在我们的代码中,编写对应的逻辑来做。如图1。
随着技术发展,有了专门的库来把公共的东西抽象出来,我们只需要做一个依赖。如图2。
与我们在网络堆栈中看到的类似,非常希望将大规模分布式服务所需的功能提取到底层平台中。
人们使用更高级别的协议(如HTTP)编写非常复杂的应用程序和服务,甚至不考虑TCP如何控制其网络上的数据包。这种情况是我们对微服务所需要的,其中从事服务工作的工程师可以专注于他们的业务逻辑,避免浪费时间编写自己的服务基础架构代码或管理整个机队的库和框架。如图3。
而这样的实现方式比较困难,于是后续有一个新的方式。Sidecar,它是重新启动一个进程,来拦截所有的流量。于是有了图4这种部署方式。
当我们有很多服务部署的时候,就看到的整体部署图就变成了很多sidecar之间的通讯。那么又一个新的挑战,
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值