Medium将他们现有的系统迁移到基于React.js和GraphQL的新架构。正如Medium工程师Sasha T. Solomon解释的那样,他们努力的两大目标是在不妨碍新功能开发的前提下,让用户逐渐转向使用新系统。
在对现有使用旧技术的代码库进行迁移时,需要做出一些艰难的决定。除了成本之外,他们必须考虑需要多长时间才能让用户感受到新系统的好处,而通常他们都希望不用等到整个迁移结束才能看到这一结果。此外,他们希望服务在整个过程中保持稳定,并且可以继续演化,如通过修复错误或实现新功能。
正如Solomon解释的那样,在他们的平台历经五年的开发之后,Medium确实已经走到了这一步,
Medium工程团队设计了一条服务迁移路径,旨在让用户尽快开始使用新系统,同时不妨碍现有系统的演化。
迁移的第一步是用React.js重写Medium的客户端应用程序,并使用GraphQL作为现有API的接口层。Medium使用Apollo Client作为GraphQL客户端框架。
在这个阶段,旧系统和新系统共存,每个系统服务于一组不同的页面。这种方法的好处是不需要完全重写服务器端,也不会影响旧系统新功能的开发。Medium团队采取的一项关键决策是使用protocol buffers将传统API描述为可与GraphQL交互的schema。
根据Solomon所述,第二阶段迁移即将开始,服务器端代码将被重构为服务,为GraphQL层提供数据,GraphQL层将使用Sangria作为服务器端框架。
预计GraphQL的使用将带来一个巨大的优势,因为它的更加细化的结构直接映射到更模块化和更简单的服务,这反过来提升了它们的性能。新服务将通过gRPC与GraphQL服务发生交互,新服务可以与旧服务完全独立开发,旧服务仍然为旧API提供支持。
领取专属 10元无门槛券
私享最新 技术干货