跨10个相互连接的ruby/rails/capistrano/rabbitMQ服务管理发布版本

跨10个相互连接的ruby/rails/capistrano/rabbitMQ服务管理发布版本,ruby,web-services,version-control,architecture,service,Ruby,Web Services,Version Control,Architecture,Service,因此,我们正在构建一个由大约10项服务组成的相当核心的应用程序——我们应该如何最好地管理应用程序版本之间的依赖关系 我们决定将事物分成服务,每个服务负责一个小的逻辑任务(单词分析器只分析单词,单词服务允许其他服务获取关于单词和特殊单词的信息,分类器使用来自世界分析器的数据进行分类) 独立的应用程序都有定义良好的接口,但有时这些接口会发生变化(例如,需要一个新的字段) 当它们改变时,我们需要跟踪这样一个事实,即现在存在依赖性:Analyzer的0.2版现在需要word service的0.6版 其

因此,我们正在构建一个由大约10项服务组成的相当核心的应用程序——我们应该如何最好地管理应用程序版本之间的依赖关系

我们决定将事物分成服务,每个服务负责一个小的逻辑任务(单词分析器只分析单词,单词服务允许其他服务获取关于单词和特殊单词的信息,分类器使用来自世界分析器的数据进行分类)

独立的应用程序都有定义良好的接口,但有时这些接口会发生变化(例如,需要一个新的字段)

当它们改变时,我们需要跟踪这样一个事实,即现在存在依赖性:Analyzer的0.2版现在需要word service的0.6版

其他人是如何做到这一点的?什么有效,什么是屁股痛?
我们希望能够快速、经常地发布。我们已经让jenkins辛苦地运行了所有的规范。

版本化您的协议并向后兼容。分析仪的V0.2必须与新版本0.6的文字服务一起使用,与现有已部署的V0.5的文字服务一起使用。解除部署将始终是几个重叠版本的舞蹈。顺便说一句,接口永远不会改变。发布接口的新版本,并且客户端和实现者必须能够区分正在使用的版本。您的服务必须优雅地降级到与之交互的协议的所有部署版本。如果可以确定不再部署版本,则可以在不再部署版本后将其退役。如果服务/协议被公开,您应该保持向后兼容性一段时间

这是一本很好的读物