GH GambleHub

反金字塔模型

建筑中的"反金字塔模型"是什么

反向金字塔模型是一种系统和协议的设计方法,其中最重要,最起码所需的信息/功能首先被传递并得到保证,并且以渐进和可选的方式添加不太关键的零件。该术语借鉴了新闻学的想法(最重要的是-首先),但适应了工程任务:关键路径在任何条件下都有效,其他一切都是"丰富层"。

直观画面:上面的狭窄顶点是"最低保修合同"(MGC),下方是扩展、优化和系统在有资源/兼容性时应用的丰富功能。


在哪里应用它

网络协议和API:REST/gRPC/GraphQL,webhooks,事件经纪人。
流媒体:WebSocket,SSE,Kafka/NATS,RTC。
服务体系结构:关键路径与副作用(审核、分析、缓存预热)。
Mobile/Web客户端:首先是UI的"骨架"和关键数据,然后是媒体和指南的懒惰装载。
支付和风险链:授权/保留-优先级;反亲缘关系/分析-异步,带有截止线。
可观察性:始终是最低水平的逻辑/度量;trace/profilation-通过采样。


模型原理

1.最低保修合同(MGC)

一组没有脚本的字段和操作是没有意义的。它是稳定的,向后兼容的,并且首先通过。

2.渐进式丰富

其他字段/功能可作为可选的扩展(capabilities/feature flags/Negotation)提供。

3.无故障退化

当拥塞或部分不可用时,系统会丢弃可选图层,同时保持MGC的运行状态。

4.明确优先级和SLA

每个层都有自己的SLO(潜在性、可用性)、队列和服务类(QoS)。

5.方案的加性演变

新字段被添加为nullable/optional,不会破坏客户;刚性变化-仅通过新版本。

6.各层的可观察性

度量和日志按临界值标记:"core.","enh.","batch.",以查看系统在负载下牺牲的内容。


与"经典"层金字塔的比较

古典建筑(底层是基础,上层是UI)强调依赖性。
反金字塔强调传递的重要性和顺序:首先是"核心",然后是"nice-to-have"。


按模型设计协议

1) REST/HTTP

MGC:最小资源/终端和必填字段。

扩展:
  • 内容不激活("Accept","Prefer"),
  • 参数'?include='/'?fields='用于选择性细节,
  • 引用"重"附件(pre-signed URL)而不是inline。
  • 退化:在taymout中,给予MGC而没有嵌套收藏;206 Partial Content for Big Top。
  • 转化:加法场不改变旧合同;主要版本仅用于中断更改。

2) gRPC

proto:具有安全标签编号的新"可选"字段;不要再使用已删除的标签。
Server side deadlines和per-method QoS(优先级以上的关键RPC)。
Streaming:第一条消息是标题/总数,然后是chankami的详细信息。

3)事件轮胎(Kafka/NATS)

事件核心:"event_type"、"id"、"occurred_at"(最小业务字段)。
丰富:带到outbox/CDC和个别主题"-enriched"。
首先汇总,然后是细节:消费者可以通过内核完成业务流程,然后异步赶上零件。


与反金字塔完美结合的模式

Critical Path First:将同步"强制性"与异步副作用分开。
Write-ahead/Outbox:记录事件的事实,其余的是背景交付。
Lazy&Incremental Fetch:分离,游标,"If-Modified-Since"/ETag。
Capabilities Discovery:服务器/客户端明确报告支持哪些扩展。
Backpressure&Budgets:截止日期,每层CPU/IO限制;取消负荷下的次要任务。
SLO-Scoped Caching:缓存"内核"更具攻击性,富集更短/更薄。


实施算法

1.脚本映射:写出用户旅程并突出显示"价值时刻"。
2.定义MGC:实现价值的最小字段/操作。
3.分为:"core"、"extended"、"analytics/batch"。
4.为每个图层设置SLO/SLA和QoS。
5.设计降解:在N% 的故障/p95生长下丢弃什么?
6.方案的演变:版本策略,additive-first。
7.可观察性:度量/logs/trace中的图层标签,"核心"上的差异。
8.测试:溷沌工程和断层喷射。
9.启动和反馈:包括ficheflags扩展和金丝雀滚动。


按层划分的度量和SLO

Core:p95/p99潜伏期,成功的关键操作比例,降解时的容错性。
扩展:丰富响应的百分比,平均赶上时间。
Batch/Analytics:实时脱落,每个窗口处理的事件比例。
业务指标:过载vs.时转换为"价值点"是正常的。


反模式

"一切都是核心":扩展成为强制性的,降解变得不可能。
MGC的突破性变化,没有新的主要版本。
隐性脆性:关键路径依赖于外部"次要"依赖性(例如,同步反同步调用)。
隐式扩展:客户不知道可以打开/关闭什么。
缺乏观察能力:系统"默默"降级,你看不到在哪里。


示例

A.用户配置文件(REST)

MGC: `id`, `display_name`, `avatar_url`, `tier`.

扩展:"badges[]","social_links[]","recent_activity[]"通过"?include='。
退化:在定时时给出MGC和预制资源链接(HATEOAS/URL)。

B.付款授权

MGC:授权结果(proved/declined),"transaction_id","amount","currency"。

扩展: 3 DS遥测,风险调查,地理,合作伙伴归属-异步通过事件"付费"。authorized`.

退化:在分析失败的情况下,付款正在进行,审计/评分正在赶上。

B.流媒体报价

MGC:最新价格的"快照"。
扩展:杯子深度,合并指示器-狙击后流。
退化:在负载下,扩展更新频率下降,但快门稳定。


转化与演化

附加第一:新字段"optional/nullable",旧字段仍然存在。
语义版本:内核的"v1";v1。x'-扩展;'v2'-当MGC发生变化时。
代码中的合同:JSON Schema/Protobuf+CI验证"不打破"诽谤。


安全性和合规性

MGC已签名/身份验证:最小字段集具有加密完整性。
Least Privilege:通过单独的漏洞获得浓缩。
PII/赠品:扩展外卖,钥匙共享和TTL。


可观察性和调试

前缀度量: 'core。request.duration`, `enh.attach.load_time`, `batch.lag`.

采样:100%用于核心错误的日志;对扩展进行采样。
Feature flags telemetry:可以看到哪些客户端启用了哪些扩展。


实施支票(简短)

  • 由MGC定义和记录。
  • 通过capabilities/flags宣布扩展。
  • 按图层配置SLO/QoS/队列。
  • 退化通过溷沌测试进行测试。
  • 方案的演变只是加法的,没有"断裂"。
  • 度量/traces/logs按层划分。
  • 客户关于启用扩展的文档。

FAQ

反金字塔是否取代分层体系结构?

没有。这是一个正交原则:如何在熟悉的层之上传递和优先考虑功能。

什么时候不适用?
在部分交付毫无意义的离线数据包中(具有原子性的密码交换机),或者当所有字段都同样关键时。

与"graceful degradation"有何不同?
反金字塔最初设计了最低限度的足够合同及其优先事项,而不是"事后"试图挽救已经超载的系统。


结果

反金字塔模型有助于建筑和协议在任何负载下保持有用:最重要的是,首先是肯定的;其余的-如果可能的话。这增加了关键路径的可用性,加快了眼镜输出,并简化了演化而不会发生故障。

Contact

联系我们

如需任何咨询或支持,请随时联系我们。我们随时准备提供帮助!

开始集成

Email — 必填。Telegram 或 WhatsApp — 可选

您的姓名 可选
Email 可选
主题 可选
消息内容 可选
Telegram 可选
@
如果填写 Telegram,我们也会在 Telegram 回复您。
WhatsApp 可选
格式:+国家代码 + 号码(例如:+86XXXXXXXXX)。

点击按钮即表示您同意数据处理。