gRPC 和模式进化保证?
gRPC and schema evolution guarantees?
我正在使用 gRPC 进行评估。关于与 'schema evolution' 的兼容性问题,我确实发现了 gRPC 为数据序列化交换的协议缓冲区的格式,只要 protobuf 格式的数据的不同演变可以保持兼容,只要模式的演变允许它。
但这并没有告诉我 gRPC client/server 的两次迭代是否能够交换一个在模式中没有改变的命令,而不管模式的其余部分是否发生了变化?
gRPC 是否保证客户端或服务器代码的旧生成版本将始终能够launch/answer架构文件中未更改的命令,以及对话者上任何更新的架构生成的代码一边,不管架构的其余部分如何? (假设没有其他像非向后兼容的 gRPC 版本更改这样的重大更改)
gRPC 对方法具有兼容性,只要:
- 原始包、服务名、方法名不变
- 原始请求和响应消息仍然兼容
- 请求和响应消息的基数(一元与流)保持不变
可以随意添加新的服务和方法,不会影响现有方法的兼容性。这并没有得到太多讨论,因为这些限制大多是人们所期望的。
实际上在更改基数方面有一些回旋余地,因为一元编码与在线流式传输相同,但通常最好假设您不能更改基数并添加新方法。
此主题在 Modifying gRPC Services over Time 演讲中讨论(提供 PDF 幻灯片和 Youtube 链接)。我会注意到这些幻灯片并不打算单独使用。
我正在使用 gRPC 进行评估。关于与 'schema evolution' 的兼容性问题,我确实发现了 gRPC 为数据序列化交换的协议缓冲区的格式,只要 protobuf 格式的数据的不同演变可以保持兼容,只要模式的演变允许它。
但这并没有告诉我 gRPC client/server 的两次迭代是否能够交换一个在模式中没有改变的命令,而不管模式的其余部分是否发生了变化?
gRPC 是否保证客户端或服务器代码的旧生成版本将始终能够launch/answer架构文件中未更改的命令,以及对话者上任何更新的架构生成的代码一边,不管架构的其余部分如何? (假设没有其他像非向后兼容的 gRPC 版本更改这样的重大更改)
gRPC 对方法具有兼容性,只要:
- 原始包、服务名、方法名不变
- 原始请求和响应消息仍然兼容
- 请求和响应消息的基数(一元与流)保持不变
可以随意添加新的服务和方法,不会影响现有方法的兼容性。这并没有得到太多讨论,因为这些限制大多是人们所期望的。
实际上在更改基数方面有一些回旋余地,因为一元编码与在线流式传输相同,但通常最好假设您不能更改基数并添加新方法。
此主题在 Modifying gRPC Services over Time 演讲中讨论(提供 PDF 幻灯片和 Youtube 链接)。我会注意到这些幻灯片并不打算单独使用。