【问题标题】: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 对此有详细的章节。