过渡过程非常顺利,我们已经开始受益于这种新的技术和组织结构的优势。但是,现在我们面临的主要问题是如何管理这些微服务之间“状态”的依赖关系。
举个例子:其中一个微服务处理用户和注册。该服务(我们称之为X)负责维护身份信息,因此是用户“id”的主要提供者。其余的微服务都对此有很强的依赖性。例如,一些负责用户资料收集(A)、用户权限(B)、用户组(C)等事项的服务依赖于这些用户ID,因此需要在这些服务之间维护一些数据同步(即,服务A不应具有未在服务X中注册的userId信息)。我们目前通过使用RabbitMQ通知状态更改(例如,新注册)来维护此同步。
正如你所想象的那样,有许多“Xs”:许多“主”服务和更复杂的它们之间的依赖关系。
当管理不同的开发/测试环境时,主要问题出现了。每个团队(因此,每个服务)都需要通过几个环境才能使代码在线:持续集成、团队集成、验收测试和生产环境等。
显然,我们需要所有服务在所有这些环境中工作,以检查系统作为一个整体是否正常运行。这意味着为了测试依赖服务(A、B、C等),我们不仅必须依赖于服务X,还必须依赖于其状态。因此,我们需要以某种方式维护系统完整性并存储全局且一致的状态。我们目前的方法是从现场环境获取所有数据库的快照,对其进行一些转换以缩小和保护数据隐私,并在特定环境中测试之前将其传播到所有环境。这显然是一个巨大的开销,无论是组织上还是在计算资源上:我们有十个持续集成环境、十个集成环境和一个验收测试环境,所有这些环境都需要经常用来刷新与现场共享数据和最新版本的代码。
我们正在努力寻找更好的方法来减轻这种痛苦。目前,我们正在评估两个选项:
1. 对于所有这些服务使用类似Docker容器的方法 2. 每个服务都有两个版本(一个用于该服务的开发,另一个作为沙箱由其他团队用于开发和集成测试) 没有这些解决方案能够缓解服务之间共享数据的问题。 我们想知道其他公司/开发人员如何解决这个问题,因为我们认为这在微服务架构中肯定很普遍。
你们是怎么做的?你们也有这个问题吗?有什么建议吗?
非常感谢!