如何制作前向兼容(Service Fabric)微服务

时间:2019-09-27 07:38:21

标签: deployment microservices azure-service-fabric

根据Service Fabric rolling upgrades documentation

  

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

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

文档随附:

  

如果它们不兼容,则应用程序管理员负责分阶段升级以维护可用性

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

1 个答案:

答案 0 :(得分:0)

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

假设您有一个端点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对此进行了详细介绍。