写点什么

eBay 如何提高通知平台的可靠性

  • 2023-01-17
    北京
  • 本文字数:856 字

    阅读完需:约 3 分钟

eBay如何提高通知平台的可靠性

eBay 工程师一直在使用故障注入技术来提高通知平台的可靠性,并探索其弱点。虽然故障注入是一种常见的行业实践,但 eBay 尝试了一种利用插装将故障注入引入到应用程序层的新方法。

 

该平台负责向第三方应用程序推送平台通知,以提供商品价格、商品库存状态、支付状态等方面的最新变化。它是一个高度分布式和大规模的系统,有许多外部依赖,包括分布式存储、消息队列、推送通知端点等。

 

eBay 工程师 Wei Chen 表示,通常情况下,故障注入是在基础设施层进行的,例如,通过服务器断开连接或超时,或使给定资源暂时不可用,引入 HTTP 错误,从而导致网络故障。这种方法代价高昂,并且对系统的其他部分有许多影响,因此很难单独探索故障的影响。

 

但这并不是唯一可行的方法。相反,可以在应用程序层创建故障,例如,在 HTTP 客户端库中添加特定的延迟以模拟超时。

 

我们对依赖服务的客户端库的类文件进行了插装,以引入我们定义的不同类型的故障。当我们的服务通过插装 API 与底层资源通信时,将会引发引入故障。由于更改了代码,这些故障并没有真正发生在我们的依赖服务中,其效果是模拟的,使我们能够在没有风险的情况下进行实验。

 

三是 eBay 实现的强制调用方法显示错误行为的基本工具:阻塞或中断方法逻辑,例如抛出异常;更改方法的状态,例如更改 response.getStatusCode() 的返回值;以及替换方法参数的值,包括修改发送给方法的参数值。

 

为了实现上述三种类型的插装,我们创建了一个 Java 代理。在代理中,我们实现了一个 classloader ,它将插装应用程序代码中使用方法的代码。我们还创建了一个注解来指示将插装哪个方法,并将插装逻辑放在注解的方法中。

 

此外,eBay 工程师还实现了一个配置管理系统,以动态更改故障注入在运行时的行为。特别是,对于 eBay 应用程序支持的每个端点,工程师可以更改一些参数来测试特定的行为。

 

据 Chen 介绍,eBay 是业界首个使用代码插装在应用程序层实施故障注入的组织。如果你对这种方法感兴趣,请不要错过原文中提供的完整说明。

 

原文链接:

https://www.infoq.com/news/2022/12/eBay-fault-injection-instrument/

2023-01-17 09:415969

评论

发布
暂无评论
发现更多内容

架构实战营模块6课后作业:小程序电商业务微服务

胡颖

架构实战营

redo Log 的持久化过程

卢卡多多

Redo Log 11月日更

如何设计高性能高可用存储架构

天天向上

架构实战营

【死磕Java并发】-----Java内存模型之从JMM角度分析DCL

chenssy

11月日更 死磕 Java 死磕 Java 并发

Prometheus Exporter (二)Windows Exporter

耳东@Erdong

Prometheus exporter 11月日更 Windows Exporter

在线等比数列项数生成器

入门小站

工具

阿里云 EventBridge 事件驱动架构实践

阿里巴巴云原生

阿里云 云原生 事件驱动 事件驱动架构 EventBridge

Serverless 下的微服务实践

阿里巴巴云原生

阿里云 Serverless 微服务 云原生 SAE

18 K8S之存储卷简述

穿过生命散发芬芳

k8s 11月日更

前缀和后缀运算符有什么区别?

devpoint

JavaScript 11月日更 前缀运算符 后缀

架构实战 - 模块四

唐敏

「架构实战营」

[ Kitex 源码解析] 函数式编程

baiyutang

golang 微服务 Go 语言 11月日更

虚拟办公、虚拟展会、虚拟偶像,RTE+XR 还能做什么?

声网

人工智能 vr Metaverse

元宇宙、区块链和潘家园

脑极体

不用找了,这本书帮你完全搞定Spring Cloud Alibaba

胡弦(关注公众号架构随笔录)

分布式架构 spring cloud alibaba

完善Django的MVT框架开发,记得添加路由哦~

老表

Python django web开发 11月日更 博客系统

Android C++系列:Linux文件系统(一)

轻口味

c++ android jni 11月日更

用户任务三步法:教你读懂用户

石云升

11月日更 产品创新

“零信任”的世界,让女性更安全

脑极体

又谈mysql,面试官问表结构设计要注意啥?

微客鸟窝

MySQL 11月日更

Python中的控制流:break和continue

Peter

Python 控制流

一份数据的6种Plotly画法

Peter

数据分析 可视化

Electron常见问题 48 - Electron 获取本机 MAC 地址

liuzhen007

11月日更

☕【Java技术指南】「技术盲区」看看线程池是如何回收和维持运作线程的核心技术体系

洛神灬殇

Java 线程池 11月日更

Python Qt GUI设计:QMainWindow、QWidget和QDialog窗口类(基础篇—10)

不脱发的程序猿

PyQt GUI设计 QMainWindow QWidget QDialog

今日谈:BoltDB数据库,一款纯Go实现的KV数据库

Regan Yue

Go 语言 11月日更

网络安全之浏览器端的威胁要塞防御

喀拉峻

网络安全 安全 信息安全

linux总结10大危险命令

入门小站

Linux

[Pulsar] Delayed message原理

Zike Yang

Apache Pulsar 11月日更

.NET Core 中对象池(Object Pool)的使用

喵叔

11月日更

测试左移实践介绍

刘冉

TDD 自动化测试 测试驱动开发 测试左移 ATTD

eBay如何提高通知平台的可靠性_安全_Sergio De Simone_InfoQ精选文章