View on GitHub

modularization-examples

代码防腐实用技术

多租户和多进程不同,租户可能是按游戏大区分,按城市分,也可能是按商家分。租户是业务相关的概念。 这意味着开源社区是不能给你现成的基础设施的,所有的多租户功能都需要自研。 拆分成多租户之后,变更就可以一个一个租户来做。挂了也只会影响一个租户,不太可能引起大面积的故障。

租户整体做升级也可以避免上线顺序的问题,把租户短暂停服,全部升级完了再继续提供服务。 可以只停服一个租户,可以让很多复杂的变更很好做,比如改变数据库的表结构。

传统的测试一般都是在一个离线的环境里进行。但是对于性能压测,复杂的多进程业务,搭建独立的离线环境复制在线环境是成本很高的事情。 保持两个环境的一致性也需要非常强的纪律和日复一日的努力。 直接 Test in Production 是越来越明显的趋势。 做全链路压测的时候,经常把修改的数据隔离在“影子表”里,避免污染正式数据。这其实就是多租户,只是把压测跑在一个隔离的租户里了。 各种 QA 账号,测试订单也可以用租户的方式来实现,而不需要 case by case 的硬编码在代码,甚至引起安全隐患。

同时跨数据中心搬迁等复杂的变更场景也需要数据是能切开的。从加快 Feedback,控制变更的角度,第一天就应该考虑多租户的问题。 如果不是一开始就切分了租户,后来添加进来的成本会非常高。