来自 应用 2022-06-09 14:00 的文章

抗ddos_防ccphp源码_无缝切换

抗ddos_防ccphp源码_无缝切换

Lilliput:小型软件补丁PlantirFollow 2019年5月14日·9分钟读取

在Palantir,我们有一个软件分发问题。虽然我们的绝大多数客户都利用了我们的托管云基础设施的优势,但在极端操作环境中的少数客户使用我们的Gotham平台而不访问互联网。为了将软件升级传输到客户网络,我们需要首先将新的平台版本发布到受保护的Internet访问站点,然后找到将文件传输到客户断开连接的网络的方法。对于这些客户来说,唯一的方法是使用物理CD或DVD,因为没有与公共互联网的网络连接。

对于Palantir和我们的客户来说,在断开连接的环境中管理复杂的软件比类似的基于云的运营成本高出几个数量级,也更麻烦。因此,我们开发了Lilliput,这是一种用于最小化升级过程中需要在不同环境之间传送的二进制文件大小的工具。Lilliput将主要发行版的平台发行量减少了98%以上,cc防御工具,将次要发行版的平台发行量减少了93%,从而减少了从多张DVD到一张CD到断开网络的传输。这篇博文讨论了Lilliput的体系结构以及我们在构建它时解决的一些问题。

术语简介:断开连接的环境是一个没有标准互联网(或其他网络)连接的网络。相反,连接的环境是具有Internet连接的网络,可能通过VPN。你现在正在一个互联环境中阅读这篇文章。

上下文

让我们从如何构建和分发Palantir Gotham的快速概述开始。

软件架构。我们的软件平台大致遵循微服务体系结构,由数百个不同的后端和前端组件组成。每个开发团队负责一小部分这样的组件。大多数后端服务都是基于Java的。每服务二进制文件在CI时间打包为包含配置和JAR的tarball,其中大部分来自我们的标准化微服务工具链。前端组件通过一个标准的WebPack工具链,也打包为tarball。Tarballs的大小从100MB到1GB不等。部署模式。大多数Palantir Gotham客户利用我们软件的专用单租户实例。一些在云环境中,一些在连接的本地网络中,dubbo防御ddos,另一些在断开连接的本地网络中。持续交付。平台的不同组件和服务可以独立安装和升级。大多数团队每周发布几次组件,所有基于云的实例在发布时都会部署兼容的新组件(取决于客户特定的升级窗口)。平台发布。由于我们的部署自动化工具无法管理断开连接的安装,因此我们每隔两周就会减少所谓的平台发布。简而言之,ddos防御方法弹性ip,平台发布是构成平台的所有组件的时间点快照。平台特别适合于断开连接的安装,传奇如何防御cc攻击,因为每次升级都可能经过手动客户端审查程序;将许多单个组件升级捆绑到平台中有助于这一过程。

这种操作模式带来了一个问题,因为我们希望为断开连接的客户提供定期补丁和更新,而不会在传输10 GB的平台二进制文件时产生多日等待时间。这些等待时间将给我们的前端部署软件工程师带来巨大的工作量,因为他们必须照看进度条和文件传输操作,以确保他们在每一步都取得成功。

为了实现快速、频繁的产品更新,我们必须促进更高效的数据传输机制,而不是简单地为每次服务更新传输整个平台的快照。这就是小人党的用武之地。我们开发Lilliput是为了通过利用两个简单的观察结果来最小化平台二进制文件的大小:

在两个平台版本之间,构成每个组件的大多数工件都不会改变。例如,Guava库的版本不会经常更改。许多组件共享相同的库。例如,大多数服务依赖番石榴,因此,我们不必为平台中的每一项服务都提供此服务。

设计

Lilliput操作分为3个不同的阶段:

拆解阶段(连接)在连接的环境中解构和分析平台二进制文件。打包阶段(连接)计算两个给定平台版本之间的增量。组装阶段(断开连接)从先前安装的平台和增量重建平台。

假设某个平台以某个版本安装在断开连接的环境中,我们可以(1)计算已安装平台和新平台版本之间的增量,(2)仅将增量(希望更小)转移到断开连接的环境中,(3)重新组装平台,以及(4)安装它。让我们更详细地了解这三个阶段。

反汇编

反汇编阶段的目标是根据其服务和前端二进制文件中包含的文件的SHA256总和,生成给定平台定义中所有文件的列表。给定平台定义作为输入,Lilliput:

收集所有相关二进制文件(即tarball)提取每个tarball的内容将每个文件重命名为其SHA256哈希为每个服务tarball创建一个树文件(见下文)

分解后的平台与磁盘上的文件一样存储。修订后的表示示例如下:

lilliput├── 内容│ ├── 0│ │ ├── 0├── 00003e6a831c54a4cbe7e3f345f3708d7d0de68e55519b9b536fab70ee8fc1f1│ │ ├── 1.│ ├── 1.│ │ ├── 0│ │ ├── 1.└── 树梢└── 2.31.2 ├── 服务-a-0.10.0├── service-b-1.91.0…