百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

K8S下Istio就是检验微服务稳定性的混沌工程开源工具

bigegpt 2024-08-14 14:49 2 浏览

在K8S上部署的微服务,经常会依赖不受你控制的其他微服务。当两者之间的HTTP交互出现延迟或错误后,你的微服务能否按预期正常工作?应该做一个故障注入实验来检验一下。如果在K8S上使用了Istio,那么恭喜你,你已经拥有了简单易用的混沌工程开源工具。

官网

https://github.com/istio/istio

一句话介绍

虽然Istio主要作为K8S服务网格,用于连接、保护、控制和观察服务,但在其流量管理功能中也支持故障注入。

关键特性

Istio 可以将HTTP延迟或 HTTP 错误注入任何虚拟服务之间的网络流量中。 实验以 Kubernetes manifest形式定义。可以使用现有的 Istio 功能(例如虚拟服务和路由规则)来选择故障注入目标。 还可以使用运行状况检查和 Envoy 统计数据来监控故障注入对系统的影响。

故障注入实验利用了 Istio 在网络中的地位来执行实验,而无需添加任何额外的混沌工程工具或功能。

适用平台

K8S

适用场景

如果已经使用了 Istio,那么这可以直接用它在集群上运行混沌实验,而无需部署或学习其他工具。 否则,仅仅为了这两种故障注入功能就部署 Istio ,就不值了。

优势

故障注入功能原生内置于 Istio 中。 无需额外设置。

实验以简单的 Kubernetes manifest形式表现。

劣势

只有HTTP延迟或 HTTP 错误这两种实验类型。

如果没有使用 Istio,仅仅为了这个故障注入功能而使用它就不值得了。

实验无法在主机上安排和执行,无法深入定制,也无法在 Istio 之外使用。

案例

我的好朋友,知乎用户陈计节(https://www.zhihu.com/people/jijiechen)贡献了以下案例。

“我们曾经在一个页面上发现,如果用户点击太快,当某一两个 API 还没有加载完成的时候,用户就已经提交了表单。此时就有可能造成提交的数据不完整。复现这个问题时,我们把浏览器网速改为 3g 模式,就可以显著提升复现率。之后确认了问题,开发同学修复后,为了让测试同学能够复现并验证修复的有效性,我们就提供了 一个 istio delay 规则,在服务端给特定 API 增加延时。”

开源许可证

Apache-2.0 license

Github点赞数

33.5k

最近发布日期与版本

2023.07: Istio 1.18.2

所属项目

CNCF云原生计算基金会项目

参考资料

Istio故障注入官方文档:https://istio.io/latest/docs/tasks/traffic-management/fault-injection/

Istio故障注入实例:https://istiobyexample.dev/fault-injection/


本文参考了Gremlin公司的文章Comparing Chaos Engineering tools https://www.gremlin.com/community/tutorials/chaos-engineering-tools-comparison/#istio

在K8S下检验微服务稳定性,还有什么好用的开源工具?你还希望我聊有关混沌工程的其他什么新话题?欢迎在评论区留言。我会仔细阅读每一条留言。期待听到你的声音。

如果觉得本文对你有帮助,欢迎*点赞*,【点击在读,】并*转发*给其他志同道合的小伙伴。

企业生意好,系统运行稳。你所阅读的文章,来自“吾真本说混沌工程”知乎专栏。

相关推荐

为3D手游打造, Visual Studio Unity扩展下载

IT之家(www.ithome.com):为3D手游打造,VisualStudioUnity扩展下载7月30日消息,微软正式发布升级版VisualStudioToolsforUnity扩...

由ArcMap属性字段自增引出字段计算器使用Python的技巧

1.前言前些日子有人问我ArcMap中要让某个字段的值实现自增有什么方法?我首先想到像SQLServer中对于数值型字段可以设置自增。所以我打开ArcCatalog查看发现只提供默认值,没办法只能看...

微软首次回答 HoloLens 相关问题,终于爆料了

fengo2015/04/2115:11注:本文作者张静是NVIDIAGPU架构师,微信公众号“黑客与画家”(HackerAndPainter),知乎专栏地址。欢迎各位童鞋与他交流探讨。...

C#指针的应用(c#指针类型)

C#在有限的范围内支持指针。C#的指针只不过是一个持有另一类型内存地址的变量。但是在C#中,指针只能被声明为持有值类型和数组的内存地址。与引用类型不同,指针类型不被默认的垃圾收集机制所跟踪。出于同...

C# 堆栈(Stack)(c# 堆栈中定位调用messagebox 的地方)

C#集合在C#中,堆栈(Stack)是一种后进先出(LIFO,LastInFirstOut)的数据结构。堆栈(Stack)适用于存储和按顺序处理数据,其中最新添加的元素会最先被移除。堆...

欢迎回来:Fortran意外重回流行编程语言20强榜单

TIOBE指数是用来确定一种编程语言受欢迎程度的指标之一。它并不表明哪种编程语言是最好的,也不表明哪种编程语言写的代码行数最多,而是利用在谷歌、维基百科、必应、亚马逊、YouTube等各种引擎和网站上...

C#+NET MAUI实现跨平台/终端(linux,win,ios等)解决方案

简介.NETMulti-platformAppUI(.NETMAUI)是一个跨平台的框架,用于使用C#和XAML创建移动和桌面应用程序。使用.NETMAUI,您可以用一套代码库开发可以在A...

C#代码安全红线:SQL注入防护终极方案,让你的系统固若金汤

在数字化时代,应用系统的安全性至关重要。而SQL注入攻击,长期盘踞在OWASP(OpenWebApplicationSecurityProject)漏洞榜单的前列,成为众多基于数据库的应用系统...

C# (一)状态机模式(状态机代码实现)

最近空闲,炒炒隔夜饭,以前这些模式在自己项目种应用过不少,但一直没有像别人那样写一个系列,最近年纪大了,很多东西都忘记了,特别AI的兴起,更少写代码了,反正没什么事情,自己在重写一遍吧。创建型模式(5...

C# 中 Predicate 详解(c#中的replace)

Predicate泛型委托:表示定义一组条件并确定指定对象是否符合这些条件的方法。此委托由Array和List类的几种方法使用,用于在集合中搜索元素。Predicate<T>...

C#中$的用法?(c#中&&什么意思)

文章来自AI问答。在C#中,$符号用于字符串插值(StringInterpolation)。字符串插值是C#6.0引入的一种特性,它允许你在字符串中直接嵌入表达式,而不需要使用string.For...

C#并行编程:Parallel类(c# 并行处理)

在Parallel类中提供了三个静态方法作为结构化并行的基本形式:Parallel.Invoke方法:并行执行一组委托。Parallel.For方法:执行与C#for循环等价的并行方法。Parall...

颠覆认知!用Span重构foreach循环竟让数据处理快如闪电

在C#编程的世界里,数据处理效率始终是开发者们关注的焦点。随着项目规模的扩大和数据量的激增,哪怕是细微的性能提升,都可能对整个应用的响应速度和用户体验产生深远影响。近年来,C#引入的Span<T...

Unity3D手游开发实践《腾讯桌球》客户端开发经验总结

本次分享总结,起源于腾讯桌球项目,但是不仅仅限于项目本身。虽然基于Unity3D,很多东西同样适用于Cocos。本文从以下10大点进行阐述:1.架构设计2.原生插件/平台交互3.版本与补丁4.用脚本,...

.NET 7 AOT 的使用以及 .NET 与 Go 互相调用

目录背景C#部分环境要求创建一个控制台项目体验AOT编译C#调用库函数减少体积C#导出函数C#调用C#生成的AOTGolang部分安装GCCGolang导出函数.NETC#...