只是为了好玩,我正在使用微服务架构设计一些 Web 应用程序。我正在尝试确定进行配置管理的最佳方法,并且我担心我的配置方法可能存在一些巨大的缺陷和/或存在更好的东西。
为了解决这个问题,假设我有一个用 c++ 编写的身份验证服务、一个用 rust 编写的身份服务、一个用 haskell 编写的分析服务、一些用 scala 编写的中间层和一个用 javascript 编写的前端。还会有相应的身份数据库、身份验证数据库、分析数据库(可能是用于会话的 redis 缓存)等……我正在使用 docker swarm 部署所有这些应用程序。
每当部署这些应用程序之一时,它必须发现所有其他应用程序。由于我使用 docker swarm,只要所有节点共享必要的覆盖网络,发现就不是问题。
但是,每个应用程序仍然需要上游服务 host_addr、可能是端口、某些 DB 或密封服务的凭据等......
我知道 dockersecrets
可以让应用程序从容器中读取配置,但是我需要为每个服务用每种语言编写一些配置解析器。这看起来很乱。
我宁愿拥有一个configuration service
,它保存有关如何配置所有其他服务的知识。因此,每个应用程序都会以一些 RPC 调用开始,该调用旨在在运行时获取应用程序的配置。就像是
int main() {
AppConfig cfg = configClient.getConfiguration("APP_NAME");
// do application things... and pass around cfg
return 0;
}
AppConfig 将在 IDL 中定义,因此该类将立即可用并且与语言无关。
这似乎是一个很好的解决方案,但也许我真的错过了这里的重点。即使在规模上,数以万计的节点也可以通过一些配置服务轻松地提供服务,因此我认为不会出现任何扩展问题。同样,这只是一个爱好项目,但我喜欢考虑“假设”场景:)
微服务架构中如何处理配置方案?这看起来是一种合理的方法吗?Facebook、Google、LinkedIn、AWS 等主要参与者是做什么的?