【问题标题】:How to make a forward compatible (Service Fabric) microservice如何制作前向兼容(Service Fabric)微服务
【发布时间】:2020-01-27 12:12:48
【问题描述】:

根据Service Fabric rolling upgrades documentation

在升级过程中,集群可能包含新旧版本的混合。因此,这两个版本必须向前和向后兼容。

我知道如何使微服务向后兼容,以便旧客户端可以与新服务器通信。但是旧服务器如何(向前)与新客户端兼容,新客户端可以尝试调用新引入的端点?

文档如下:

如果它们不兼容,应用程序管理员负责进行多阶段升级以保持可用性

在微服务中引入新端点时,多阶段升级是实现高可用性的唯一方法吗?还是可以通过默认的滚动升级过程来实现,也许通过将呼叫从新客户端路由到新服务器?

【问题讨论】:

    标签: deployment microservices azure-service-fabric


    【解决方案1】:

    这与引入新端点无关。这是关于处理现有端点。

    假设您有一个端点 E1,它返回 2 个字段,F1 和 F2。现在,您引入了一项新功能,该功能要求 E1 返回 3 个字段 - F1、F2、F3。

    如果您正在进行滚动升级,则新旧客户端都在与旧服务器和新服务器通信。如果在特定通信中,旧客户端连接到新服务器并且客户端因看到新字段 F3 而中断,则它不向前兼容。

    因此,前向兼容性是旧客户端可以读取新客户端创建的数据的地方。

    例如在使用 Jackson 解析 JSON 时,我们可以指定 @JsonIgnoreProperties(ignoreUnknown = true) 它将忽略新属性。同样,在使用 Apache Thrift 或 Protocol Buffer 等其他数据编码格式时,我们可以在保持前向兼容性的同时添加新字段,但如果我们删除现有字段,兼容性就会中断。有了 Avro,事情就变得简单多了,因为数据可以使用用于编码数据的模式。

    Martin Klepmann 的书Designing data intensive applications 对此有详细的章节。

    【讨论】:

      猜你喜欢
      • 2016-04-07
      • 2019-04-29
      • 2020-01-23
      • 2020-10-24
      • 1970-01-01
      • 2017-06-12
      • 2017-06-09
      • 2017-01-14
      • 2019-04-16
      相关资源
      最近更新 更多