CN114265760A - 基于eBPF的微服务请求故障注入方法和装置 - Google Patents

基于eBPF的微服务请求故障注入方法和装置 Download PDF

Info

Publication number
CN114265760A
CN114265760A CN202111668664.1A CN202111668664A CN114265760A CN 114265760 A CN114265760 A CN 114265760A CN 202111668664 A CN202111668664 A CN 202111668664A CN 114265760 A CN114265760 A CN 114265760A
Authority
CN
China
Prior art keywords
socket
fault
fault injection
port information
service
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202111668664.1A
Other languages
English (en)
Inventor
陈鹏飞
杨婉琪
郑子彬
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Sun Yat Sen University
Original Assignee
Sun Yat Sen University
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Sun Yat Sen University filed Critical Sun Yat Sen University
Priority to CN202111668664.1A priority Critical patent/CN114265760A/zh
Publication of CN114265760A publication Critical patent/CN114265760A/zh
Pending legal-status Critical Current

Links

Images

Landscapes

  • Maintenance And Management Of Digital Transmission (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本发明公开了基于eBPF的微服务请求故障注入方法和装置,该方法包括如下步骤:监测客户端与服务端建立套接字的过程;捕获套接字并获取所述套接字的端口信息;依据套接字的端口信息判断所述套接字是否为需要被监听及故障注入的对象;依据判断结果将所述套接字作为值更新至SOCKHASH中,并以对应的端口信息作为键值建立索引;当所述SOCKHASH中的套接字调用sendfile()函数或sendmsg()函数时,根据预先指定的故障注入模式在套接字层面进行故障注入;本发明能够精准注入故障以模拟现实故障,且故障注入的实现不影响其他服务性能,实现影响面可控,进而保障系统的可靠性。

Description

基于eBPF的微服务请求故障注入方法和装置
技术领域
本发明涉及故障注入技术领域,尤其涉及基于eBPF的微服务请求故障注入方法和装置。
背景技术
现实中,各类故障随时都会发生,很多故障无法避免,如机器突然断电等,这些故障会造成巨大的损失,因此我们需要提升系统对于故障的容忍度及提高程序的健壮性。为了更方便验证系统的可靠性及对故障的容忍度,在系统或应用测试阶段,我们通过向系统或应用人为地注入故障,检测系统或应用面对异常时的处理情况。我们可以根据检测的情况调整和完善系统或应用,以减少系统或应用在正式使用时出现的异常问题。
微服务中的发生的故障有:服务重启、服务实例被终止、通信故障等等。而在微服务场景下,通信故障的故障注入的难点在于:利用容器技术实现微服务架构,服务之间通过虚拟服务地址在虚拟网络中进行通信,分布式环境下,跨主机通信的服务的服务地址与实际网卡之间存在映射关系,由容器网络接口(CNI)组件维护这个映射关系。对微服务架构下的服务通信注入故障,能过够观察微服务在网络高延时、丢包、建立连接错误等等故障场景的行为,完善服务的容错功能,提高服务在网络通信发生故障时的稳定性,对提升应用微服务的健壮性有重大意义。
现有的网络故障注入工具,在服务通信过程注入故障时难以获得该映射关系,以及对数据包的源目的地址的解析不够深入,无法获取或更改特定的需要被注入故障的服务的数据包内容,这使得微服务场景下的通信故障难以实现。
发明内容
本发明的目的是提供基于eBPF的微服务请求故障注入方法和装置,能够精准注入故障以模拟现实故障,且故障注入的实现不影响其他服务性能,实现影响面可控,进而保障系统的可靠性。
为了实现上有目的,本发明公开了一种基于eBPF的微服务请求故障注入方法,其包括如下步骤:
S1、监测客户端与服务端建立套接字的过程;
S2、捕获套接字并获取所述套接字的端口信息;
S3、依据套接字的端口信息判断所述套接字是否为需要被监听及故障注入的对象;
S4、依据判断结果将所述套接字作为值更新至SOCKHASH中,并以对应的端口信息作为键值建立索引;
S5、当所述SOCKHASH中的套接字调用sendfile()函数或sendmsg()函数时,根据预先指定的故障注入模式在套接字层面进行故障注入。
与现有技术相比,本发明通过在监测客户端与服务端建立套接字的过程中捕获套接字并获取所述套接字的端口信息,通过套接字的端口信息判断所述套接字是否为需要被监听及故障注入的对象,并依据判断结果将所述套接字作为值更新至SOCKHASH中,并以对应的端口信息作为键值建立索引,从而能够在当所述SOCKHASH中的套接字调用sendfile()函数或sendmsg()函数时,根据预先指定的故障注入模式在套接字层面快速进行故障注入,一方面,该故障注入过程不必修改应用代码,无需引入代理,网络传输路径无需更改,对用户透明,且适于在服务层面进行更细粒度的故障注入,在对特定服务进行故障注入的同时,对其他服务的服务性能不产生影响,且能够完成错误码注入的故障注入功能;另一方面,采用eBPF技术能够相比于引入代理的方法,减少了数据包需要经过代理的传输路径的延长,对服务时延影响小,且在内核中直接进行故障注入,更加高效。
较佳地,所述故障注入模式包括延时故障模式、丢包故障模式和错误码返回故障模式。
较佳地,以延时故障模式在套接字层面进行故障注入,包括如下步骤:
在套接字发送数据过程中,通过自定义的bpf_sys_sleep辅助函数控制套接字发送动作延迟预设时间后再进行数据发送。
较佳地,以丢包故障模式在套接字层面进行故障注入,包括如下步骤:
在客户端发送请求数据包时,对在套接字层面直接对符合要求的数据包进行丢弃。
较佳地,以错误码返回故障模式在套接字层面进行故障注入,包括如下步骤:
在客户端发送请求数据包时,对在套接字层面对缓冲区内的响应包原始数据的HTTP响应码进行修改,以将正常的HTTP响应码修改为404错误响应码。
具体地,以字节为单位对在套接字层面对缓冲区内的响应包原始数据的HTTP响应码进行修改。
较佳地,所述套接字的端口信息包括套接字的源地址端口信息或目的地址端口信息。
较佳地,所述依据套接字的端口信息判断所述套接字是否为需要被监听及故障注入的对象,具体包括:
若所述套接字的目的地址端口信息为需要被注入故障的服务地址,或源地址端口信息为需要被注入故障的服务地址,则判定所述套接字为需要被监听及故障注入的对象。
较佳地,所述根据预先指定的故障注入模式在套接字层面进行故障注入,具体包括:
若所述套接字的目的地址端口信息为需要被注入故障的服务地址,则以延时故障模式或丢包故障模式在套接字层面进行故障注入;
若所述套接字的源地址端口信息为需要被注入故障的服务地址,则以错误码返回模式在套接字层面进行故障注入。
相应地,本发明还公开了一种基于eBPF的微服务请求故障注入装置,其包括:
监测模块,被配置为监测客户端与服务端建立套接字的过程;
捕获模块,被配置为捕获套接字并获取所述套接字的端口信息;
判断模块,被配置为依据套接字的端口信息判断所述套接字是否为需要被监听及故障注入的对象;
第一执行模块,被配置为依据判断结果将所述套接字作为值更新至SOCKHASH中,并以对应的端口信息作为键值建立索引;
第二执行模块,被配置为当所述SOCKHASH中的套接字调用sendfile()函数或sendmsg()函数时,根据预先指定的故障注入模式在套接字层面进行故障注入。
附图说明
图1是本发明的基于eBPF的微服务请求故障注入方法的流程框图;
图2是本发明的服务未注入延时故障时服务正常响应时的服务响应时间和请求传输时间示例图;
图3是本发明的服务注入延时故障后的服务响应时间和请求传输时间示例图;
图4是本发明的服务未注入丢包故障时服务正常响应时的服务响应时间和请求传输时间示例图;
图5是本发明的服务注入丢包故障后的服务响应时间和请求传输时间示例图;
图6是本发明的服务未注入错误码返回故障时Detail服务正常响应时的服务响应内容示例图;
图7是本发明的服务注入错误码返回故障后的Detail服务的服务响应内容示例图;
图8是本发明的服务未注入错误码返回故障时Ratings服务正常响应时的服务响应内容示例图;
图9是本发明的服务注入错误码返回故障后的Ratings服务的服务响应内容示例图;
图10是本发明的基于eBPF的微服务请求故障注入装置的结构框图。
具体实施方式
为详细说明本发明的技术内容、构造特征、所实现目的及效果,以下结合实施方式并配合附图详予说明。
请参阅图1所示,本实施例的基于eBPF的微服务请求故障注入方法,适于使用eBPF技术在linux内核空间对HTTP服务请求响应实现故障注入,本实施例所使用eBPF技术为在linux内核空间中,网络数据包处理过程的套接字层面挂载特定的eBPF程序。
请参阅图1-图9所示,该基于eBPF的微服务请求故障注入方法包括如下步骤:
S1、监测客户端与服务端建立套接字的过程。
这里的HTTP服务请求响应过程具体如下:
客户端请求服务端的服务时,双方通过TCP网络协议三次握手过程建立套接字连接;
客户端调用sendfile()函数或sendmsg()函数向服务端发送请求数据包;
客户端将请求数据包的内容拷贝到套接字的缓冲区,而后数据包通过TCP/IP协议栈的数据包封装,从客户端的网卡通过物理网络或者虚拟网络转发到服务端的网卡;
请求数据包被服务端接收后,通过服务端的TCP/IP协议栈对数据包进行解封装,获取请求数据包的内容,拷贝到服务端套接字的缓冲区中,而后被服务端应用接收并处理请求;
服务端发送响应数据包时,同样也是通过sendfile()函数或sendmsg()函数进行发送,具体与请求包的发送和接收过程类似。
S2、捕获套接字并获取所述套接字的端口信息。
具体地,所述套接字的端口信息包括套接字的源地址端口信息或目的地址端口信息。
本实施例中,通过自定义的SOCK_OPS程序来关注及捕获客户端与服务端建立套接字时的过程。
S3、依据套接字的端口信息判断所述套接字是否为需要被监听及故障注入的对象。
较佳者,若所述套接字的目的地址端口信息为需要被注入故障的服务地址,或源地址端口信息为需要被注入故障的服务地址,则判定所述套接字为需要被监听及故障注入的对象。
S4、依据判断结果将所述套接字作为值更新至SOCKHASH中,并以对应的端口信息作为键值建立索引。
可以理解的是,当所述套接字为需要被监听及故障注入的对象,SOCK_OPS程序会将该套接字作为值更新到SOCKHASH中,以对应的目的地址端口或源地址端口作为键值进行索引;当所述套接字并非为需要被监听及故障注入的对象时,则跳过步骤S4和步骤S5。
S5、当所述SOCKHASH中的套接字调用sendfile()函数或sendmsg()函数时,根据预先指定的故障注入模式在套接字层面进行故障注入。
若所述套接字的目的地址端口信息为需要被注入故障的服务地址,则以延时故障模式或丢包故障模式在套接字层面进行故障注入;
若所述套接字的源地址端口信息为需要被注入故障的服务地址,则以错误码返回模式在套接字层面进行故障注入。
需要说明的是,本实施例的故障注入通过自定义的SK_MSG程序实现。
较佳地,所述故障注入模式包括延时故障模式、丢包故障模式和错误码返回故障模式。
较佳地,以延时故障模式在套接字层面进行故障注入,包括如下步骤:
在套接字发送数据过程中,通过自定义的bpf_sys_sleep辅助函数控制套接字发送动作延迟预设时间后再进行数据发送,从而通过bpf_sys_sleep辅助函数控制套接字发送动作睡眠一段时间后,再继续发送,以此实现延时的目的。
较佳地,以丢包故障模式在套接字层面进行故障注入,包括如下步骤:
在客户端发送请求数据包时,对在套接字层面直接对符合要求的数据包进行丢弃,从而无法正常发送请求数据包,因此不会接受到服务端的响应数据包,具体体现为服务端对客户端的请求不响应,连接错误。
较佳地,以错误码返回故障模式在套接字层面进行故障注入,包括如下步骤:
在客户端发送请求数据包时,对在套接字层面对缓冲区内的响应包原始数据的HTTP响应码进行修改,以将正常的HTTP响应码修改为404错误响应码,具体体现为服务器查找不到响应内容,响应失败。
具体地,以字节为单位对在套接字层面对缓冲区内的响应包原始数据的HTTP响应码进行修改,以确保故障注入的精度。
请参阅图2-图9所示,下面展示各个故障注入模式下的故障注入的结果:
①延时故障模式:通过向服务发送请求,观察1s延时的故障注入前后的请求时延变化,能够看到,服务响应时间(Response time)确实延时了1s,最短和最长的请求传输时间(Longest transaction和Shortest transaction)也增加了1s,此次故障注入的结果表明确实能够对特定服务注入延时故障。图2示出了服务正常响应时的服务响应时间和请求传输时间示例图,图3示出了服务注入延时故障后的服务响应时间和请求传输时间示例图。
②丢包故障模式:通过向服务发送请求,观察丢包的故障注入前后的请求时延变化,能够看到,服务在正常运行情况下能够响应,注入丢包的故障后,服务响应失败(Permission denied),发生错误,也就能够模拟服务无法访问的故障场景。图4示出了服务正常响应时的服务响应时间和请求传输时间示例图,图5示出了服务注入丢包故障后的服务响应时间和请求传输时间示例图。
③丢包故障模式:在此故障场景中,我们修改服务的响应码,将正常的响应码修改为故障响应码,模拟服务能够访问,但响应错误的场景。
(1)我们对Detail服务进行错误码注入:将返回的正常响应码修改为404。能够看到,如图6所示,在正常情况下,Detail服务能够返回书籍的详细信息。如图7所示,注入错误码返回故障后,Detail信息无法被获取;
(2)我们对Ratings服务进行错误码注入:将返回的正常响应码修改为404。能够看到,如图8所示,在正常情况下,Ratings服务能够返回书籍的星级评价内容。如图9所示,注入错误码返回故障后,Ratings信息无法被获取及展示。
请参阅图10所示,相应地,本发明还公开了一种基于eBPF的微服务请求故障注入装置,其包括:
监测模块10,被配置为监测客户端与服务端建立套接字的过程;
捕获模块20,被配置为捕获套接字并获取所述套接字的端口信息;
判断模块30,被配置为依据套接字的端口信息判断所述套接字是否为需要被监听及故障注入的对象;
第一执行模块40,被配置为依据判断结果将所述套接字作为值更新至SOCKHASH中,并以对应的端口信息作为键值建立索引;
第二执行模块50,被配置为当所述SOCKHASH中的套接字调用sendfile()函数或sendmsg()函数时,根据预先指定的故障注入模式在套接字层面进行故障注入。
结合图1-图10,本发明通过在监测客户端与服务端建立套接字的过程中捕获套接字并获取所述套接字的端口信息,通过套接字的端口信息判断所述套接字是否为需要被监听及故障注入的对象,并依据判断结果将所述套接字作为值更新至SOCKHASH中,并以对应的端口信息作为键值建立索引,从而能够在当所述SOCKHASH中的套接字调用sendfile()函数或sendmsg()函数时,根据预先指定的故障注入模式在套接字层面快速进行故障注入,一方面,该故障注入过程不必修改应用代码,无需引入代理,网络传输路径无需更改,对用户透明,且适于在服务层面进行更细粒度的故障注入,在对特定服务进行故障注入的同时,对其他服务的服务性能不产生影响,且能够完成错误码注入的故障注入功能;另一方面,采用eBPF技术能够相比于引入代理的方法,减少了数据包需要经过代理的传输路径的延长,对服务时延影响小,且在内核中直接进行故障注入,更加高效。
以上所揭露的仅为本发明的优选实施例而已,当然不能以此来限定本发明之权利范围,因此依本发明申请专利范围所作的等同变化,仍属本发明所涵盖的范围。

Claims (10)

1.一种基于eBPF的微服务请求故障注入方法,其特征在于,包括如下步骤:
监测客户端与服务端建立套接字的过程;
捕获套接字并获取所述套接字的端口信息;
依据套接字的端口信息判断所述套接字是否为需要被监听及故障注入的对象;
依据判断结果将所述套接字作为值更新至SOCKHASH中,并以对应的端口信息作为键值建立索引;
当所述SOCKHASH中的套接字调用sendfile()函数或sendmsg()函数时,根据预先指定的故障注入模式在套接字层面进行故障注入。
2.如权利要求1所述的基于eBPF的微服务请求故障注入方法,其特征在于,所述故障注入模式包括延时故障模式、丢包故障模式和错误码返回故障模式。
3.如权利要求2所述的基于eBPF的微服务请求故障注入方法,其特征在于,以延时故障模式在套接字层面进行故障注入,包括如下步骤:
在套接字发送数据过程中,通过自定义的bpf_sys_sleep辅助函数控制套接字发送动作延迟预设时间后再进行数据发送。
4.如权利要求2所述的基于eBPF的微服务请求故障注入方法,其特征在于,以丢包故障模式在套接字层面进行故障注入,包括如下步骤:
在客户端发送请求数据包时,对在套接字层面直接对符合要求的数据包进行丢弃。
5.如权利要求2所述的基于eBPF的微服务请求故障注入方法,其特征在于,以错误码返回故障模式在套接字层面进行故障注入,包括如下步骤:
在客户端发送请求数据包时,对在套接字层面对缓冲区内的响应包原始数据的HTTP响应码进行修改,以将正常的HTTP响应码修改为404错误响应码。
6.如权利要求5所述的基于eBPF的微服务请求故障注入方法,其特征在于,以字节为单位对在套接字层面对缓冲区内的响应包原始数据的HTTP响应码进行修改。
7.如权利要求2所述的基于eBPF的微服务请求故障注入方法,其特征在于,所述套接字的端口信息包括套接字的源地址端口信息或目的地址端口信息。
8.如权利要求7所述的基于eBPF的微服务请求故障注入方法,其特征在于,所述依据套接字的端口信息判断所述套接字是否为需要被监听及故障注入的对象,具体包括:
若所述套接字的目的地址端口信息为需要被注入故障的服务地址,或源地址端口信息为需要被注入故障的服务地址,则判定所述套接字为需要被监听及故障注入的对象。
9.如权利要求7所述的基于eBPF的微服务请求故障注入方法,其特征在于,所述根据预先指定的故障注入模式在套接字层面进行故障注入,具体包括:
若所述套接字的目的地址端口信息为需要被注入故障的服务地址,则以延时故障模式或丢包故障模式在套接字层面进行故障注入;
若所述套接字的源地址端口信息为需要被注入故障的服务地址,则以错误码返回模式在套接字层面进行故障注入。
10.一种基于eBPF的微服务请求故障注入装置,其特征在于,包括:
监测模块,被配置为监测客户端与服务端建立套接字的过程;
捕获模块,被配置为捕获套接字并获取所述套接字的端口信息;
判断模块,被配置为依据套接字的端口信息判断所述套接字是否为需要被监听及故障注入的对象;
第一执行模块,被配置为依据判断结果将所述套接字作为值更新至SOCKHASH中,并以对应的端口信息作为键值建立索引;
第二执行模块,被配置为当所述SOCKHASH中的套接字调用sendfile()函数或sendmsg()函数时,根据预先指定的故障注入模式在套接字层面进行故障注入。
CN202111668664.1A 2021-12-30 2021-12-30 基于eBPF的微服务请求故障注入方法和装置 Pending CN114265760A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202111668664.1A CN114265760A (zh) 2021-12-30 2021-12-30 基于eBPF的微服务请求故障注入方法和装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202111668664.1A CN114265760A (zh) 2021-12-30 2021-12-30 基于eBPF的微服务请求故障注入方法和装置

Publications (1)

Publication Number Publication Date
CN114265760A true CN114265760A (zh) 2022-04-01

Family

ID=80832104

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202111668664.1A Pending CN114265760A (zh) 2021-12-30 2021-12-30 基于eBPF的微服务请求故障注入方法和装置

Country Status (1)

Country Link
CN (1) CN114265760A (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114844813A (zh) * 2022-04-29 2022-08-02 广州文远知行科技有限公司 一种基于通信异常注入的测试方法、装置及相关设备
CN115190178A (zh) * 2022-08-10 2022-10-14 苏州创意云网络科技有限公司 一种微服务分流方法、装置和设备

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114844813A (zh) * 2022-04-29 2022-08-02 广州文远知行科技有限公司 一种基于通信异常注入的测试方法、装置及相关设备
CN115190178A (zh) * 2022-08-10 2022-10-14 苏州创意云网络科技有限公司 一种微服务分流方法、装置和设备
CN115190178B (zh) * 2022-08-10 2024-03-08 苏州创意云网络科技有限公司 一种微服务分流方法、装置和设备

Similar Documents

Publication Publication Date Title
CN114265760A (zh) 基于eBPF的微服务请求故障注入方法和装置
US8095983B2 (en) Platform for analyzing the security of communication protocols and channels
WO2021088254A1 (zh) 一种用户态网络文件系统双栈访问方法、装置及设备
US9497100B2 (en) Methods, systems, and computer readable media for providing fuzz testing functionality
CN108664395B (zh) 应用程序测试方法、装置、设备及存储介质
US20100095370A1 (en) Selective packet capturing method and apparatus using kernel probe
CN109347700B (zh) 一种测试方法、装置、电子设备和存储介质
CN109257254B (zh) 网络连通性检查方法、装置、计算机设备以及存储介质
WO2017092348A1 (zh) 一种键值对数据库中的客户端配置更新方法、设备及系统
CN111953770B (zh) 一种路由转发方法、装置、路由设备及可读存储介质
CN110781083B (zh) 一种h5客户端代码设置多环境测试方法和系统
CN113419812B (zh) 一种虚拟化环境下端口转发测试方法、装置、设备及介质
CN109714367B (zh) 基于互联网的设备接入系统及方法
CN112751716B (zh) 一种控制文件服务器响应的测试方法、系统以及电子设备
JP3929186B2 (ja) クライアント/サーバシステム
CN108667692B (zh) 一种分布式缓存设备负载均衡的性能测试方法及系统
CN114157607A (zh) 媒体流传输方法和系统
CN112699034B (zh) 虚拟登录用户构建方法、装置、设备及存储介质
WO2013189398A2 (zh) 应用数据推送方法、装置及系统
TW201417548A (zh) 確保用戶端連接雲端可靠性的方法和用戶端
WO2023159956A1 (zh) 一种裸金属服务器检查及部署方法、装置、设备、介质
CN106911508A (zh) Dns配置的恢复方法和装置
EP1654653B1 (en) Active storage area network discovery system and method
CN115174245A (zh) 一种基于DoIP协议检测的测试方法及系统
CN114328216A (zh) 一种漏洞挖掘的方法和装置

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination