来自 CC防护 2022-06-09 11:00 的文章

cdn防御_ddos高防服务器价格_免费测试

cdn防御_ddos高防服务器价格_免费测试

使用gradle revapiPalantirFollowSep 26,dns防御ddos,2019·3分钟阅读

防止Java API/ABI中断当您处理数百个Java微服务时,淘宝是如何防御ddos,来自低级库的API/ABI中断可能是痛苦的。我们已经开始使用开源的Revapi back compat checker,并编写了一个Gradle插件,我们刚刚开源。这篇博文解释了我们为什么使用Revapi,并简述了如何使用Gradle插件。

Palantir Foundry由100多个微服务组成,使用数百个开源和内部开发的库。为了确保隔离,我们避免了跨微服务依赖关系(更倾向于公开纯魔术API),但一些低级库随处可见。例如,几乎每个Java服务都使用我们的开源跟踪和HTTP客户端库。任何数量的代码共享都存在风险:破坏这些广泛使用的库的API或ABI的更改可能会在编译时(或在运行时更糟)为大量用户带来问题。

例如,在tritium中,我们的库用于处理Java服务中的度量,一个看似无害的PR将方法返回类型更改如下:

-MapsafeTags();+SortedMapsafeTags();

在项目中,甚至与库的直接使用者(因为SortedMap是一个映射)都可以很好地编译,但在运行时会导致错误,因为我们的日志库期望映射签名,而该签名在已发布的氚罐中不再存在,导致可怕的NoSuchMethodError:

java.lang.NoSuchMethodError:com.palantir.tritium.metrics.registry.MetricName.safeTags()Ljava/util/Map;在com.palantir.sls.logging.metric.scheduledtaggedmetricogreporter.metricLog(scheduledtaggedmetricogreporter.java:121)在com.palantir.sls.logging.metric.scheduledtaggedmetricogreporter.reportMetrics(scheduledtaggedmetricogreporter.java:102)

这就是所谓的应用程序二进制接口(ABI)中断,并导致了几起生产事故,多级ddos防御策略,尽管我们尽了最大努力进行补救。在一天结束时,我们没有发现这种变化的危险,这是正常代码审查的一部分。协变返回类型更改只是API或ABI中断发生的许多微妙方式之一。通过使用自动化工具(如Revapi)增加人工代码审查,如何进行ddos防御,我们可以无所畏惧地进行重构,并依靠工具在开发人员做出突破性更改时发出警告。

Revapi

Revapi是Java项目的开源API检查器,可以检测API和ABI的突破。由于我们是大量的Gradle用户,并且Revapi只提供一个Maven插件,因此我们创建了Gradle Revapi,一个零配置的Gradle插件,用于连接Revapi的配置和报告,并对照之前发布的JAR版本进行检查。它还与CircleCI很好地集成,因此故障会显示在页面顶部。

事实上,要重新讨论上述氚变化,Revapi会警告我们这是一个坏的变化(在其他预期的中断中):

这会提醒公关作者发生了不好的事情,并希望避免所有图书馆消费者的痛苦和生产中的问题!

如何使用?

Revapi Gradle插件可以标准方式添加到Gradle项目中。首先添加插件依赖项:

buildscript{/。。。依赖项{classpath'com.palantir.gradle.revapi:gradle revapi:}}

然后将其应用于发布API的每个项目:

//在我的Java项目的build.gradle中,ddos防御香港,该项目发布了一个jarapply插件:"com.palantir.revapi"