在过去的二十年间,我们目睹了中美关系的长足发展带来了在技术领域非常多元的交流。其中典型的代表,就是微软和苹果在中国的市场发展。李永乐老师的视频中曾经指出:两个国家在贸易的过程中,一定是对国家双方都有利益的。

在这样的思想的指导下,我们始终认为构建的应用,也应该是越来越“全球化”的。所谓全球化,指的也正是在应用能够全球布局,全球服务。而面向这种全球布局的应用,我们完全可以在已有的基础设施、服务和运维经验的基础上,来大幅度的降低我们的维护成本。因为我们始终只需要一份专业的运维团队来维持全球的数据和服务。

我们曾经在思考一个问题的时候,也随着技术的背景发展,我们思考“分布式”的方式也逐渐改变。其中,最典型的代表就是在思考CAP定理时,我们更多的考虑的是实现分区容忍性和可用性,而弱化最终一致性。这类使用场景,在例如Email、微信等通信App的构建上时非常典型。也就是说,我们可以考虑中美两个大型数据分区之间可能的数据不同,但是我们会考虑数据“迟早”会是通的。而在数据通的时刻,则为两个分区的数据作最终一致性的同步。

其中,非常典型的例子,包括微软的CosmosDb数据库。CosmosDb数据库是一个典型的分布式数据库。它的理想就是能够在全球实现一个非常通用的数据终结点,而这个数据终结点在任意一个分区中,都能够安全、稳定、快速、低延迟的访问。微软也在这个方向上作了相当多的推进。过去很多传统的应用,都不再是在本地,像插入一张光盘那样在服务器上安装,而是在云服务提供商的网站上点点鼠标,在全球范围的客户,就可以享受到具体的软件服务了。我们国内也涌现了非常多的优秀的地理分区可用的应用,包括TiDB、微信等。

我们都认为这种理想会持续发展,让互联网像是一个南极一般,不被任何组织和机构形成障碍。数据的访问也会越来越容易。

但是,这种理想,或许仅仅持续于过去的二十年内了。

伴随2020年的大量新闻时政事件,我们更多看到的是在不同地理位置上,人与人之间的一种不信任。这种不信任最初只是源于政客的甩锅和指责,但是它很快就会形成并且带动诸多社会团体,来形成人与人之间的对立。我们曾经认为,在市场竞争的体制下,企业的互联网的数据像是完全“自由”的可以进行服务和数据的转移。

我曾经写过一篇博客,详细讨论了软件订阅制的可行性,但是,在今天的情境下,这种讨论应该被推翻。软件定制行业为何应当发展软件订阅制? - Anduin Xue (aiursoft.com),例如TikTok曾经差一点就在美国范围被禁止或被完全从原有的运营团队中割裂。我们曾经在构建分布式应用时,考虑过:不同国家的用户,往往需要访问离他近的服务器即可。而离他近的服务器和其它的数据分区之间再进行数据同步;而不同国家和地区的服务器,为了适配不同国家和地区的法律,则可以调节部署的参数使其功能不同。

有人可能会指出,中国早在数年前就已经立法,包括了网站的备案,注册的身份证绑定和数据不得离境。从我作为工程团队成员来说,我们面向中国大陆市场时,往往并不需要考虑一种叫做“空气墙”的东西。所谓“空气墙”(AirGap),不同于任何传统的防火墙,而是一种完全在物理层面的隔离。空气墙的两端彻底没有任何软硬件能够将两个网络沟通。也就是说,在空气墙不存在的情况下,CAP定理的P,仍然是可以保证最终一致性的数据分区。数据会sooner or later的通过网络进行同步。

在这种情境下,将国际的数据流入中国,或将国际的服务面向中国可能并非难事。但是2020年之后我们遇到的问题将截然不同。我们遇到的,也并非是特定的某一种空气墙,而是一种客户趋势:客户逐渐不再信任任何和互联网耦合的服务。客户不信任你的数据中心,尤其是不信任不在他境内的数据中心。客户的要求是:在考虑到空气墙存在的情况下,你的服务仍然能够完整提供。

这是一种本质性的区别。空气墙造成的是数据的彻底隔离。考虑一个只使用局域网的公司,当你面向它构建应用时,很多过去的方法将彻底不再可用。客户不信任云,不信任订阅,甚至不信任互联网。他期待的是一种在没有任何依赖的情况下仍然能够继续稳定服务。

所以,从大国的对抗的结果中,直接损失的,并非是某一个协议或某一个算法,而是客户的信任。当客户失去了对网络的信任时,我们构建软件的思路也即将发生变化。我们可以称这种变化为“软件工程的逆全球化”。

在逆全球化的趋势下,我们不能无条件的将整个地球视为一个可以进行数据最终一致性的分区。考虑到许多国家的军队、机关、科研等都逐步面向私有网络和空气墙的模式,我们在尝试面向这些客户时,也必须考虑在完全本地的部署情况下应用的维护与运行。而如果在可以预见的未来内,可能国家与国家之间的网络进行“建墙”、互相攻击或隔离会变成非常常见的操作。甚至,可能在未来,我在中国访问美国的数据,还可能会需要办理护照、签证等,来证明我的数据占有权利。

重新回到我们在开头中讨论过的CAP定理问题,对于全球来说,可能将会是由空气墙分隔的多个数据分区,但是对于每个分区内,或多组分区内,我们仍然可以继续构建分布式系统。也就是说,我们过去面对分布式应用构建的努力完全没有白费,数据随时可能会跨越分区。就像如今,有非常多的人把视频在Youtube和Biliblili之间互相搬运一样,数据并非是绝对的隔离。但是,我们仍然要考虑的是,我们的应用要容忍AirGap。

容忍AirGap,看似简单的一个话题,实际上可能会带来非常彻底的变革。我们的软件已经是面向云的,是SaaS的,那再面向AirGap,将变得非常有难度。客户不信任云,我们可以一口气将私有云打包提供给客户;客户不信任第三方公司,我们可以专门为客户合作成一个他信任的公司,专门为他运营;甚至,客户不信任我们的人,我们甚至可以考虑将一整个系统,连带一整套有完整维护、更新、管理经验的组织结构一起交给他。这可能会产生截然不同,甚至是如今无法想象的合作模式:未来销售软件,销售的不再是光盘,不再是程序,而是销售的人,销售的组织结构。

当然,站在2021年的视角来看,这种逆全球化的操作还非常疯狂,但是现实往往正是这样,即使是在微软,我们也面对的东西,正是越来越多的独立部署,使用私有的云,私有的数据,甚至私有的组织结构,来维护着那仍然面向全球销售的产品。