自从 2006 年 Amazon 推出自家的云端运算服务 AWS 开始,云端运算彻底改变了传统伺服器架构的使用方法。由每一次都要购买或租借一台伺服器主机,变成想用多少伺服器资源都可以即时得到,并采纳按照实际使用时间来计算收费的资源订阅 (Subscription) 模式,大大提升架构系统的灵活度和资源分配效率。这种伺服器架构上的革命,造就了 Software as a Service (SaaS) 的兴起。
云端运算经历了十余年的发展,随着各大科技巨头如 Microsoft Azure、Google Cloud 纷纷加入战团,今时今日云端运算服务已经发展得非常成熟。云端运算能提供到一些普通伺服器不容易做到的功能,如专门处理大数据的资料库 (Big data Database),以及针对地域问题的灾难恢复 (Disaster recovery)。这些服务提供极高的弹性,方便了不少软件开发商去开发新的软件,而订阅收费模式亦大大降低了初创企业入场的门槛。
由于云端运算采取了定制收费,软件的收费模式亦跟随着由一次性 (one-off) 收费趋向以定制收费的形式来供客户选择。这个显然是整个软件业界的发展方向,例如 Microsoft 和 Adobe, 都将旗下历史悠久的 Microsoft Office 和 Adobe Photo 分别转为 Office 365 和 Creative Cloud 这种定制式收费软件。 新的定制模式的娱乐服务如 Netflix / Disney+ / Apple TV + 也不断兴起,而Google 最近发佈的 Stadia 更是企图用定制收费的模式,来衝击整个游戏业界。
虽然说软件定制是一个大趋势,但如何去建立一个成功的系统,就需要相当多软件工程上的学问。和对普罗大象的软件不同,企业对软件的要求会更加严格,因为整个服务会影响到他们自身的日常商业运作,所以在建立这种系统时,需要注意的项目就比平时更多。今后我会在这里和大家由以下的方向出发,去探讨怎样去建立一个稳健的软件定制服务。
那么,让我首先讲解一下系统架构所需要留意的事项。
系统架构 (System architecture)
建立软件系统的第一步是设计好适合的系统架构,根据不同的商业需求 (Business Requirement) 所设计出的系统架构也会不同。但归纳起来,定制服务的系统架构的可以分为两大类:单一租户模式 (Single tenancy) 和多租户模式 (Multi-tenancy)
单一租户模式 是为各个客户设立一套独立的软件系统,他们会有独立的数据库、服务器、文件存储空间等等。
安全且稳定: 绝大部分企业都会重视资料的安全和保密。单一租户模式的好处在于每个客户都有完全独立的系统,不会有用户之间资料发生衝突的情况发生,也不会因为其他客户的使用量增加而影响到自身的系统。单一租户对于企业来説会是一个极具说服力的方案。
有弹性及易于管理:所有数据库备份、系统还塬的工作,或者其他的定制服务,单一租户模式都能够提供给予客户。系统也能够根据客户的要求更改域名,或者安装在客户指定的云端服务上面。而因为每个服务器都是独立运作的,用户可以选择在不影响业务的时间带,来进行系统更新。
单一租户模式是一个直观的方案,和传统的系统分别其实不大,只是将系统由传统的数据中心转移到云端服务之上,而云端服务的成本也就转化为系统的定制收费。
和单一租户模式不同,多租户模式是以共用系统资源为主,多个用户会同时使用同一套系统。
经济实惠:在商业角度来看,价钱是相当重要的考虑因素,多租户模式就能通过分享各个用户的用量,来分摊成本。这就能将现有的资源得到充分利用,以避免服务器资源上的浪费。按照不同服务的性质而有差别,但采取多租户模式的话,往往就能够将伺服器的成本降至一成以下。
迅速提供服务:定制服务讲求的是能否迅速提供服务,使客户在短时间内就开始使用是重中之重。 单一住户模式可能需要数天的设立时间,并对系统进行整合测试 (Integration test)、负载测试 (Load test)等等的测试,才能确保实际运行稳定。而多租户模式则是在已经运行中的系统中,添加新的租户 (Tenant) 给予客户。添加用户往往只要数分钟便完成,而且系统的稳健程度就得到确保。
容易监察、维护及更新:完善系统的监察亦是确保服务质素的重要一环。在多租户模式下,开发者只需要监测一组伺服器的状态,便可知道所有客户是否能正常使用系统。而当要修正系统时,只要将修正配置到一组伺服器上就能解决问题,不需要针对个别客户进行修正。
用户回馈和产品发展:多租户模式往往可以使得产品有更高速的成长速度。每当新功能完成并配置到系统上,所有租户也能即时受惠。而功能亦能啓发用户提出新的需求,开发者能根据这衆多的用户回馈去分析和开发新的功能。
虽然多租户模式下的系统是分享了各种资源并降低成本,但要注意的是用户的资料是必须做好区分。例如可以使用同一个数据库伺服器,但每个客户的数据库必须分开。文件存储亦是同等状况,每个客户储存文件的文件夹必须分开。即使在资源共享的情况下,数据的安全和保密还是最重要的考虑。
两种都各有优点,但实际要建立一个系统的时候,到底应该如何取捨呢?恕我直言,我是倾向支持开发多租户模式,塬因是多租户模式本身是可以作为单一租户模式来使用。
不同的客户对系统会有不同的要求。如果有客户提出必须有一个完全独立的系统时,你可以为一个客户另外设立一组伺服器。这组伺服器只是为了服务这客户而设,并限制只有该客户才能使用这个环境,不会添加新的租客。这样多住户模式就能简单地变成单一租户模式来使用,各取优点。
总结
现在多租户模式的应用是大势所趋,Slack、Office 365 ,这些软件都是采用这种系统架构。这样才可以控制成本,以维持市场上的竞争力。
多租户模式似乎有绝对的优势,但实际上做出一个稳健的多租户模式系统并不容易,对开发者的系统架构能力也有很高的要求。而系统有任何问题也会影响到全部的客户。例如系统如不采取一个有效的方法,去将用户的流量分流到不同的数据库的话,极有可能会令到系统本身出现混乱,往后亦难以作出维护。