标签归档:SaaS

从 Salesforce 看 SaaS 产品开放能力的演化

在当今快速变化的软件行业中,SaaS(Software as a Service)模式因其灵活性、可扩展性和成本效益而广受欢迎。

作为这个领域的先驱之一,Salesforce 不仅仅是一个 CRM 工具,它通过不断扩展其开放能力,已经成为了一种全方位的商业解决方案平台。

通过观察 Salesforce 的发展,我们可以清晰地看到 SaaS 产品开放能力的演化路径,以及这种演化过程给技术和商业带来的机遇与挑战。

以下为 Salesforce 的开放能力的演化过程。

SalesForce 开放能力的时间线

我们先从时间线来看 SalesForce 在开放能力上所做的事情。

2000 年: API 接口

Salesforce 最初作为一款 CRM 软件服务亮相,在 2000 年代初期,它引入了 API 接口,允许第三方应用程序与 Salesforce 集成。

Salesforce 提供了基本的 API,允许用户读取和更新其 CRM 数据。

随着时间的发展,Salesforce 推出了更加强大和灵活的 API,例如 REST API、 Bulk API、Streaming API 等,这些 API 支持更大规模的数据操作和更复杂的交互。

2005 年:Salesforce AppExchange

2005 年,Salesforce 推出了 AppExchange,这是一个企业应用市场,允许第三方开发者创建和销售与 Salesforce 产品集成的应用程序。这极大地推动了 Salesforce 的开放能力和生态系统的成长。

到 2012 年,AppExchange 平台上总共的应用数量也才两千多个,但到 2013 年,就已经有超过 400 个应用加入,其中还包括诸如 Dropbox、Evernote 这些知名的从消费者市场起家的明星产品。

从 0 到一百万的下载量,耗费了 AppExchange 平台的五年时间,但是 2013 年的总下载量已经达到了两百万。

在过去的几年里,AppExchange 经历了显著的增长,不仅在应用数量上,还包括了解决方案、组件、库和咨询合作伙伴的列表。

到 2023 年,根据公开的报告和官方数据,AppExchange上的应用数量已达到数千个,涵盖了从小型企业到大型企业不同规模的业务需求。

这些应用包括各种各样的解决方案,如销售自动化、客户服务、市场营销自动化、人力资源管理、财务管理等,以及行业特定的解决方案,如医疗保健、金融服务和零售。

2007~2008年:Force.com 平台推出及开发者工具和社区

在 2007 年,Salesforce 推出了 Force.com,允许开发者使用 Salesforce 的底层架构来构建和运行应用。

Force.com 是 Salesforce 的原始云平台,它允许开发者快速构建和部署强大的企业应用。

作为一个完全托管的平台即服务(PaaS),Force.com 提供了一个无需担心底层基础设施的环境,开发者可以专注于创新和应用逻辑的实现。它把复杂性隐藏在了一个易用且功能丰富的集成开发环境(IDE)背后,通过这个环境,即使是非技术用户也能使用拖放组件和声明式编程来构建应用程序。

在架构上,Force.com 引入了多租户架构,它可以让不同的客户可以在同一个应用实例上操作,而不会互相干扰。这有效地提高了资源的利用率,同时确保了高度的可扩展性和安全性。每一个客户的数据和配置都存储为元数据,使得个性化和升级变得容易。

Force.com 的核心是其元数据驱动的框架,它允许应用以定义而不是代码的形式存在。这种方法简化了应用的构建、部署和维护过程。

平台还内置了强大的工具,如 Apex(一种类似于Java的编程语言)和Visualforce(一个创建用户界面的框架),使得开发者可以构建定制的逻辑和用户界面,进一步扩展应用的功能。

随着时间的推移,Salesforce 不断发展其平台,引入了更多的AI和自动化功能,但Force.com 的这些初始架构原则依然是支持 Salesforce 生态系统的基石。

2008 年推出了 Apex 和 Visualforce。

Apex 是 Salesforce 的后端编程语言,专为云计算环境设计。它允许开发者编写执行流程控制、事务控制以及数据库操作的代码。作为一种强类型、面向对象的语言,Apex 使得在 Salesforce 平台上编程变得强大而灵活,提供了类似于 Java 的语法,但同时添加了一些销售力特定的功能和简化。Apex 代码可以用来创建自定义业务逻辑(如触发器和类),它被托管和执行在 Salesforce 的服务器上,提供了与 Salesforce API 的高度集成。

Apex 在 Salesforce 生态中起到了重要的作用,尤其是在处理复杂的业务逻辑、数据校验、记录操作前后的自动化任务以及构建复杂的 Web 服务时。它使得 Salesforce 变得更加强大和灵活,允许企业根据具体需求定制其 CRM 解决方案。

Visualforce 是 Salesforce 的一种标记语言,用于构建定制的用户界面组件。它允许开发者创建具有专业外观和感觉的页面,这些页面可以显示和操作 Salesforce 数据以及其他逻辑。Visualforce 的标记语言让开发者能够定义用户界面的布局和样式,同时它提供了一套丰富的标准组件,比如表单、按钮和列表视图,这些都可以直接嵌入到Visualforce页面中。

Visualforce 为 Salesforce 开发者提供了极度灵活性,以定制个性化的用户体验。它广泛应用于创建复杂交互的企业级应用,无论是在内部员工的应用程序中还是在面向客户的社区和门户中。通过 Visualforce,企业能够构建完全符合品牌要求和业务流程的自定义用户界面。

2010年代:移动应用扩展

随着智能手机的普及,Salesforce 在 2010 年开始推出了移动应用开发工具,允许开发者创建可在移动设备上使用的应用程序。

在 2013 年,Salesforce 发布了 Salesforce1 平台。

Salesforce1 平台是 Salesforce 专为移动设备设计的应用,它让用户能够随时随地通过智能手机或平板电脑访问 Salesforce 的核心功能。该平台提供了全面的 CRM 功能,包括数据查看和管理、报告和仪表板、工作流和审批以及任务和日历管理,使移动工作比以往任何时候都更加高效和连贯。

此外,Salesforce1 平台支持高度的自定义,允许企业根据自己的业务需求定制应用和页面,同时通过集成 Chatter(一种企业社交网络工具) 功能促进团队成员之间的沟通和协作。用户还可以安装来自 AppExchange 市场的第三方应用程序,进一步扩展移动应用的功能。

安全性方面,Salesforce1 平台提供了企业级的数据保护,确保在移动环境中的数据安全。平台设计考虑了跨设备兼容性,并且支持在无网络连接的情况下离线访问数据,连网后则自动同步更改,确保工作的连续性和数据的实时性。

Salesforce1 平台标志着 Salesforce 对移动策略的重视,以及为开发者提供构建移动优先解决方案的工具。

2014年:Lightning 平台的诞生

Salesforce Lightning 首次亮相是在 2014 年的 Salesforce Dreamforce 大会上,但它的大范围推广是在 2015 年左右。

随着 Lightning 的推广,Force.com 更名为 Salesforce Lightning Platform。这个平台包括了原有的 Force.com 功能,并且增加了一些新的工具和功能,如 Lightning App Builder、Lightning Component Framework 等。

Lightning 平台的诞生是为了满足现代化企业软件在用户体验和开发效率上的新要求。它是对 Salesforce 经典用户界面的彻底革新,引入了更直观、响应式的设计和更强大的移动功能,旨在改善最终用户的日常使用体验。

随着技术的发展,Salesforce 看到了简化应用开发流程的必要性,因此在 Lightning 平台中集成了声明式的开发工具,如 Lightning App Builder,这些工具使得应用的构建和部署变得更加迅速和容易,即使是非技术用户也能够轻松上手。

为了提高开发的灵活性和可维护性,Lightning 平台采用了基于组件的开发模型,允许开发者创建可重用和易于维护的应用组件。这种模式强调了模块化和复用性,加快了开发速度,并且提高了应用的质量和扩展性。

Lightning 平台的推出不仅增强了 Salesforce 作为企业级应用开发平台的能力,而且通过提供一个一致且功能丰富的开发生态系统,它激励了创新,为企业提供了一个强大的平台来构建、部署和管理他们的业务应用,同时推动了 Salesforce 生态系统的整体进步。

2015年以后:整合和创新

  • Salesforce App Cloud的形成:在 2015 年,Salesforce 将 Force.com 合并入Salesforce App Cloud,这是一个更广泛的 PaaS 解决方案,包括 Force.com、Heroku 等服务。
  • 整合 Heroku:Salesforce 进一步整合了 Heroku,这是一个支持多种编程语言的云平台即服务(PaaS),使得开发者能够使用他们选择的语言和框架来构建应用,并且轻松地将这些应用与 Salesforce 数据和流程集成。
  • Einstein AI平台的推出: 在 2016 年 Salesforce 推出了 Einstein AI,一个内建于 Salesforce 平台中的人工智能层。Einstein AI 提供 API 和服务,允许开发者和管理员为他们的应用添加智能功能,使得企业应用能够更智能地服务于最终用户。
  • Salesforce DX:在 2017年,Salesforce 推出了Salesforce DX,提供了新的工具和特性,以支持现代化的开发实践,如版本控制、持续集成和交付。
  • MuleSoft 的整合:在 2018 年,Salesforce 收购了 MuleSoft,一家提供 API 管理和企业集成软件的公司。MuleSoft 的技术被整合到 Salesforce Integration Cloud,进一步加强了 Salesforce 在企业集成和 API 管理方面的能力。 Salesforce 通过收购 MuleSoft,进一步加强了其在数据集成和 API 管理领域的能力,为 Lightning Platform 提供了后端集成支持。
  • Salesforce Evergreen: Salesforce Evergreen 提供了无服务器函数和全面的数据服务,进一步加强了 Salesforce 平台的后端开发能力。
  • Hyperforce: 在 2020 年,Salesforce 还推出了 Hyperforce,这是一种重新架构的 Salesforce Platform,使其能够在公共云基础设施上运行,提高了灵活性和全球扩展能力。

SaaS、PaaS、IaaS 三层的开放逻辑

从 SaaS(Software as a Service)、PaaS(Platform as a Service)和 IaaS(Infrastructure as a Service)的角度来看 Salesforce 的开放能力演化:

SaaS层 – 软件即服务

SaaS 是 Salesforce 的核心层面,它以提供 CRM 服务开始,随后扩展到了全客户体验的管理。Salesforce 的 SaaS 解决方案包括销售云、服务云、市场营销云、商务云等,所有这些都是构建在 Salesforce 的 PaaS 之上的。

在 SaaS 层面,Salesforce 的开放能力体现在它提供的各种云服务可以通过 API 与其他系统集成,以及它的 AppExchange 生态系统,后者允许第三方开发者构建和销售自己的应用程序,这些应用程序可以无缝集成到 Salesforce 平台中。

PaaS层 – 平台即服务

在 PaaS 层面,Salesforce 的开放能力尤其显著。Salesforce 原生的 PaaS 解决方案,如 Force.com(后来发展为 Salesforce Lightning Platform)和 Salesforce App Cloud,为开发者提供了创建、测试、部署和管理应用程序的平台。这些平台支持了 Salesforce 强大的 API、开发框架、集成工具、数据服务以及安全性和合规性功能。

Force.com 最初提供了开发者工具和服务,允许构建在 Salesforce 数据上的自定义应用程序。随后,Salesforce 引入了 Heroku,这是一个更为开放的 PaaS,支持多种编程语言,为开发者提供了更大的灵活性,并且使得 Salesforce 的 PaaS 层能够支持更广泛的应用场景和开发需求。

IaaS层 – 基础设施即服务

在 IaaS 层面,Salesforce 本身并不直接提供传统意义上的基础设施服务,如服务器、存储或网络资源,这些通常由传统的 IaaS 提供商如 Amazon AWS、Microsoft Azure 或 Google Cloud 提供。

然而,Salesforce 的 Hyperforce 重新架构使得 Salesforce 平台能够在这些公共云基础设施上运行,从而在全球范围内提供服务。这种架构变革提升了 Salesforce 的开放能力,因为它允许 Salesforce 利用现有的全球 IaaS 提供商的规模和服务,以更加灵活和可扩展的方式运行其平台。

开放能力在 SaaS、PaaS、IaaS 的体现重点

Salesforce 的开放能力在不同层次上体现了不同的重点:

  • 在 SaaS 层次上,开放能力体现在提供了可扩展的、集成的业务应用程序上,这些应用程序可以通过强大的 API 和生态系统与外部服务和应用程序进行互操作。
  • 在 PaaS 层次上,开放能力体现在提供了一个功能丰富的开发环境和集成的服务上,允许开发者和企业快速构建、部署和管理业务应用程序。
  • 在 IaaS 层次上,开放能力体现在平台的可移植性和在多个云基础设施上的可用性上。

通过不断增强各层的开放能力,Salesforce 成功地将自身定位为一个全面的企业软件解决方案提供商,不仅满足了企业的 CRM 需求,也支持了更广泛的业务流程自动化和客户体验管理。

小结

Salesforce 在开放能力上构建了一个强大的生态系统,通过 AppExchange 为第三方开发者提供了一个平台,能够集成和销售他们的应用,从而增强了 Salesforce 的服务能力并提高了用户粘性。同时,Salesforce 的多租户架构和对 PaaS 的强调,使得它成为企业可以快速定制和扩展应用的强大平台,进一步通过低代码和专业编码的工具使得它能够服务于不同技能水平的开发者。

Salesforce 持续集成先进技术,如 AI 和数据分析,进一步增强了平台的智能化和自动化能力,提升了用户决策和业务效率。它的移动策略和对用户体验的不断改进,确保了 Salesforce 的解决方案在任何设备上都易于访问和使用,改善了用户满意度。

在其所有开放能力发展中,Salesforce 始终将安全性和合规性作为核心考量,确保了客户数据的安全并遵守各种数据保护法规。通过对基础设施的创新,如 Hyperforce,Salesforce 提供了高度的灵活性和全球扩展能力,同时保持了平台的可适应性,以响应市场和客户需求的不断发展。

关于复杂系统的思考:从语雀服务中断想到的

在 10 月 23 日,语雀服务出现了一次重大故障,中断时间超过 7 小时。具体来说,这次故障的起因是在执行系统升级操作期间,新的运维升级工具出现了 bug,导致华东地区生产环境的存储服务器被误下线。由于存储系统使用的机器类别过于陈旧,无法直接将其上线,这导致了恢复过程时间延长。尽管语雀的工程师们立刻进行了恢复工作,但由于数据量大,恢复方案有限,恢复过程耗时 4 小时,数据检验耗时耗时 2 小时。这次故障给用户带来了严重的影响,也让我们重新审视关于本次故障带来的思考。

我将整个复盘报告输入给到 chatGPT,其给我的回复如下:

从语雀的这次事故中,我们可以学到以下几个关键的教训:

  1. 重视运维工具的测试和质量保证:在这次事故中,新的运维升级工具的 bug 是导致故障的主要原因。这说明,即使是运维工具,也需要进行足够的测试和质量保证。在实际使用之前,应该在相似的环境中进行充分的测试,确保其稳定性和安全性。
  2. 灾备和恢复系统的重要性:即使有了数据备份,恢复仍然可能需要花费大量时间,这会导致服务中断时间过长。因此,除了定期备份数据外,还需要建立有效的灾备和恢复系统,以便在灾难发生时,能够快速恢复服务。
  3. 灾难恢复演练的必要性:定期的灾难恢复演练可以帮助我们在真实的灾难发生时,更快地恢复服务。通过演练,我们可以发现并解决恢复过程中可能存在的问题,提高恢复的效率。
  4. 高可用架构的重要性:高可用架构可以保证在部分系统组件发生故障时,整个系统仍能继续运行。在这次事故中,由于存储系统的故障,导致了整个服务的中断。如果有高可用架构,即使某个组件发生故障,也可以通过其他的组件提供服务,从而减少服务中断的可能性。
  5. 灾难通信的重要性:在灾难发生后,应该及时向用户通报情况,说明故障的原因,修复的进度,以及预计的恢复时间。这样可以增加用户的信任度,减少用户的不安。在这次事故中,语雀做了很好的灾难通信,及时向用户报告了故障的详情,以及修复的进度。
  6. 持续改进和学习的重要性:每次故障都是一次学习的机会。通过分析故障的原因,我们可以找出问题,改进系统,避免类似的故障再次发生。在这次事故中,语雀提出了一系列的改进措施,这表明他们有持续改进和学习的意识。

但是从复杂系统的角度来看这个事件:复杂系统的性质使得它们在面临故障时,能够以我们意料之外的方式表现出来。尽管我们可能已经在设计和实施阶段做了很多工作来确保系统的稳定性,但是在实际运行中,仍然会出现我们没有预见到的问题。

高尔在讨论复杂系统时提到:「具备故障防备能力的系统出故障的原因恰恰就是故障防备能力的失灵」。这是因为在设计防备系统时,我们往往会基于我们对系统的理解来设计,但是实际上,系统的行为可能会超出我们的理解范围。当系统的行为超出我们的预期时,我们的防备措施就可能会失效。

这与这次语雀服务故障的情况非常相似。尽管语雀设计了一套备份恢复机制,但是在实际的故障中,由于对系统的理解不足,这套机制并没有发挥出应有的效果,反而延长了恢复时间。

在许多情况下,一些复杂系统的故障并不是单一的、孤立的事件,而是由一系列的因素相互作用、相互影响的结果。这通常包括了系统设计、运维策略、人为错误等多个方面。

具备故障防备能力的系统,其设计和运营目标是提供连续、稳定的服务,即使在面临内部错误或外部攻击等影响时也能持续运行。这种系统通常包含冗余的组件、自动故障切换机制、灾难恢复策略等措施,以保证系统的正常运行。

然而,这些故障防备能力本身可能成为系统故障的源头,原因可能有以下几点:

  1. 复杂性故障防备能力会增加系统的复杂性,复杂性本身就可能带来故障。例如,冗余的组件需要保持同步,如果同步机制出现问题,可能导致数据不一致,进而产生故障。

  2. 人为错误故障防备能力的维护和操作需要人工参与,人为操作错误可能导致防备能力失灵。如语雀故障案例中,运维工具的 bug 就是人为因素导致的。

  3. 预期和实际的差距:故障防备能力的设计和实施都是基于对可能故障的预期,但实际发生的故障可能超出了预期,导致防备能力无法应对。

面对一个每天都在演化的复杂系统,我们应该做些什么呢?

面对复杂,我们第一个能想到的原则应该就是 KISS 原则了。

「KISS」 原则是 「Keep It Simple, Stupid」 的缩写,这是一种广泛应用于工程、设计和决策过程中的设计原则。其最主要的理念就是保持事物的简单性。

KISS 原则主张:

  • 避免不必要的复杂性
  • 优先选择简单、清晰和直观的解决方案
  • 不要添加不必要的特性或功能
  • 简单的设计更易于维护、理解和修改

这个原则并不是说所有的事物都必须以最简单的方式来完成,而是鼓励我们在设计和决策过程中,优先考虑最简单和最直接的方法,除非有充分的理由去选择更复杂的方案。

简单性是一个非常重要的设计目标,因为它可以降低错误的可能性,提高系统的可靠性,减少维护的难度,提高效率,以及其他许多好处。

我们如果应用了以下的一些建议,应该可以往 KISS 原则靠近一些:

  1. 明确需求:首先明确我们试图解决的问题是什么。这有助于避免在设计和实现过程中添加不必要的功能或复杂性。

  2. 简化设计:在设计过程中,始终问自己是否可以把事情做得更简单。避免过度设计,只实现真正需要的功能。

  3. 模块化:把大问题分解成小问题,每个小问题都可以用简单的方式解决。这样,每个模块都保持简单,而整个系统则由这些简单模块组成。

  4. 避免不必要的优化:过早的优化可能会增加复杂性。除非确定优化会带来显著的好处,否则最好先实现功能,然后再考虑优化。

  5. 使用已有的解决方案:如果有已经存在的工具或库可以满足我们的需求,那就使用它,而不是从头开始创建。这样可以降低复杂性,同时节省时间。

  6. 代码和设计的清晰性:代码应该易于理解,设计应该直观。这不仅提高了可维护性,也让其他团队成员更容易理解你的工作。

  7. 定期回顾和重构:随着时间的推移和需求的变化,我们可能需要调整或简化现有的设计。定期回顾我们的代码和设计可以帮助我们找出可以简化的地方。

作为一个技术管理者应该作些什么呢?我认为最应该做的是拒绝那些让系统变得复杂的不合理需求,守好技术实现的大门。

面对复杂系统,我们需要对系统有深入的理解,尽可能地简化系统,避免不必要的复杂性。通过模块化设计,将复杂系统分解为相对独立的部分,每个部分都可以单独理解和测试。并且设计出健壮的错误处理和恢复机制,同时也需要进行持续的监控和回顾。只有这样,才能提升系统的稳定性,减少服务中断的可能性。

聊聊隔离:SaaS 业务技术架构中的核心要点

对于一个 SaaS 来说,隔离是一个非常重要的技术架构策略。当隔离的策略和业务不匹配的时候,往往可能会引发一些线上事故/问题,影响性能等等。

隔离的意义在于创建独立、安全的运行环境,以保护数据的私密性、保证服务的稳定性,并防止资源的竞争和滥用,从而为每个客户提供高质量且可靠的服务。

隔离的本质

隔离的本质在于实现独立性和安全性,通过这两者,为每个客户提供一个能够有效,安全使用共享资源的环境。

  1. 独立性: 隔离确保每个租户都有其自己的资源(如CPU时间、内存空间、磁盘空间等),数据,运行环境和网络通信,且这些都是互不干扰的。这使得每个租户都能在其自己的独立环境中运行,无需担心受到其他租户的影响。

  2. 安全性: 隔离也保护每个租户的数据,防止其数据被其他租户访问或修改。此外,隔离还能限制每个租户的操作权限,使其只能执行一些安全的操作,以防止其执行可能影响其他租户或整个系统安全的操作。

但是现实中我们往往做不到完全的独立性和安全性,需要根据实际的业务情况确定架构,从而有了不同层面的隔离策略。我们在实际工作中,对于隔离策略能感受到的最直接的影响是:一个良好的隔离策略可以在一定程度上改善服务的稳定性,减少因为某些不可预知的突发事件导致的线上问题影响范围。

隔离是一件系统工程,我们从其应用层面和基于租户的落地策略来看这个事情。

隔离策略的应用层面

隔离策略可以应用在多个层面,并且从落地的位置来看,可以分为以下几个层:

  1. 硬件层隔离:这是最底层的隔离,包括 CPU、内存、硬盘等硬件资源的隔离。例如,虚拟化技术可以在同一硬件平台上创建多个虚拟机,每个虚拟机都有自己独立的 CPU、内存和硬盘等硬件资源。每个租户的数据和应用都在独立的物理设备上运行,这为最高级别的安全性和隔离性提供了保障。然而,这种隔离方式成本高昂,且扩展性差。

  2. 操作系统层隔离:这是针对操作系统的隔离,包括进程隔离、文件系统隔离、网络隔离等。例如,容器技术如 Docker 和 Kubernetes 可以在操作系统层面提供隔离,每个容器都有自己独立的进程空间、文件系统和网络接口。这种隔离方式使用操作系统级别的技术(例如容器或虚拟机)来隔离不同租户的应用和数据。这提供了良好的隔离性和灵活性,但可能会对性能产生影响。

  3. 应用层隔离:这种隔离方式在应用层面实现租户隔离,通常通过在应用中实现特定的逻辑来区分不同的租户。这种方法灵活性高,但需要更多的开发工作,并可能复杂化应用的设计和维护。例如我们常常引入应用概念,针对不同的接入的应用控制用户请求频率或用户上传大小等。

  4. 数据库层隔离:这是针对数据存储的隔离,其为每个租户提供独立的数据库或数据库模式。这可以有效地隔离数据,但可能会对数据库性能和管理产生影响。因为数据库是应用程序使用的一种重要资源并且经常会成为业务的瓶颈,我们这里将数据库层隔离作为一个独立的层来区分。

  5. 网络层隔离:这是针对网络通信的隔离,包括 IP 隔离、端口隔离、流量隔离等。例如,虚拟私有网络(VPN)和网络命名空间等技术可以实现网络层面的隔离。使用网络技术来隔离不同租户的流量,可以有效地防止数据在传输过程中的泄露,以及应对流量突发导致的稳定性等问题。

以上这些不同层面的隔离策略通常会结合使用,以提供全方位的隔离保护。

基于租户的隔离策略

在设计一个基于租户的隔离策略时,有几种常见的模式可以考虑。这些模式可以根据应用程序的需求和复杂性,以及所需的数据安全性等级来选择。以下是几种基于租户的隔离策略:

  1. 单租户隔离:在这种模式中,每个租户都有自己的独立环境,包括服务器、数据库和其他基础设施。这种模式提供最高级别的隔离,但成本和复杂性也最高。

  2. 数据库级别隔离:每个租户都有自己的数据库,但可能共享相同的服务器或其它基础设施。这种模式的隔离性略低于单租户隔离,但成本和复杂性也相应减少。

  3. 模式级别隔离:在同一数据库中,每个租户都有自己的模式(schema)。这种模式的隔离性比数据库级别隔离低,但在设施和管理成本上进一步节省。

  4. 表级别隔离:每个租户在同一个数据库和模式中有自己的表。这种模式的隔离性比模式级别隔离低,但在大多数情况下,它仍然能提供足够的数据安全性。

  5. 行级别隔离:在这种模式中,所有租户的数据都存储在同一数据库、模式和表中,但每行数据都标有租户ID,以标示数据所属的租户。这种模式的隔离性最低,但在管理、扩展性和成本效益方面可能最优。

选择哪种模式取决于我们的特定需求和约束。例如,如果需要最高级别的安全和隔离,可能会选择单租户隔离。然而,如果应用程序需要处理大量租户并且希望保持较低的成本,行级别隔离可能会是更好的选择。

实际落地时可能是多种方式的混合体,比如有些业务是数据库级别隔离,有些是行级别,同时针对超大客户会单租户隔离。

需要考虑什么

在我们考虑隔离策略时,不是凭感觉,需要考虑多种因素来确定最佳策略,这些因素需要我们从实际的业务场景和需求,以及公司实际的情况出发,谨慎评估后再做决策。

以下是一些可能需要考虑的关键因素:

  1. 安全性:安全性是最重要的因素之一。根据实际的业务和数据类型,我们可能需要一个强大的隔离策略来保护敏感信息。例如,医疗和金融行业通常需要高级别的安全性和隔离。

  2. 性能:隔离策略可能会影响系统的性能。例如,如果每个租户都有自己的数据库,那么数据库操作可能会比所有租户共享一个数据库的情况慢。

  3. 成本:不同的隔离策略可能会导致不同的成本。例如,基于硬件的租户级隔离通常要比其他策略更昂贵,因为每个租户都需要自己的物理资源。

  4. 可扩展性:隔离策略应支持系统的扩展性。例如,如果预计租户数量会迅速增长,那么我们可能需要一个可以轻松添加新租户的隔离策略,比如应用层隔离策略。

  5. 复杂性:一些隔离策略可能会增加系统的复杂性。例如,如果每个租户都有自己的服务器和数据库,那么对于运维同学来说,管理和维护这些设备工作量可能会很大,并且需要有一个完善的系统来应对这个复杂性。

  6. 合规性:在某些行业或地区,我们可能需要遵守特定的隐私和数据保护法规,这可能会影响我们选择哪种隔离策略。

  7. 业务需求:隔离策略应符合实际的业务需求。例如,如果业务模型需要租户之间共享某些数据,那么我们可能需要一个支持这种共享的隔离策略。

在选择隔离策略时,我们可能需要权衡这些因素,并可能需要妥协。例如,我们可能需要在性能和安全性之间做出选择,或者在成本和可扩展性之间做出选择等等。

因此我们在考虑这些因素,在权衡不同的因素来确定适合我们的隔离策略时,可以参考一下下面的一些做步骤,非标准做法,但是建议至少在执行的时候都需要做到位:

  1. 确定业务需求:明确业务需求是我们一件事情的出发点,了解业务需求,了解业务模板等等。如业务模型是否允许数据共享?租户数量可能会怎样变化?需要处理哪种类型的数据?回答这些问题可以帮助我们确定需要哪种级别的隔离。

  2. 理解合规需求:合规是一个特殊的业务需求,单独拿出来说下:在某些行业,如医疗、金融和教育,可能存在严格的数据保护和隐私法规。确保我们了解并遵守这些规定,否则会对业务产生严重问题。

  3. 评估成本和资源:了解预算和可用资源是实施隔离策略的前置条件。例如,如果预算有限,可能需要选择一种成本效益高的策略,如基于数据库的隔离或行级别隔离。

  4. 考虑性能:选择的隔离策略应尽可能地最小化对性能的影响。需要对不同策略可能带来的性能影响进行评估。

  5. 预计增长:如果预计租户数量会迅速增长,那么需要选择一个可以轻松扩展的策略。例如,如果选择基于硬件的隔离,就可能需要考虑如何快速地为新租户提供硬件资源。

  6. 测试不同的策略:在确定策略之前,可能需要进行一些测试。这可以帮助我们理解不同策略在实际应用中的表现如何。当然如果之前已经做过类似的方案或者有成熟的逻辑,也可以不用测试。

  7. 获取专业建议:如果可能,获取 IT 顾问或合规顾问的建议可能是有帮助的,他们可能能提供关于如何权衡各种因素的专业建议。

请记住,选择隔离策略并非一次性决定,在业务发展过程中,我们可能需要根据业务的变化和技术的发展进行回顾和调整。

什么时候要特别注意隔离

最后我们聊一下在什么时候要特别注意隔离策略。

虽然隔离策略始终是一个重要的考虑因素,但是出现以下的一些情况或场景的时候时需要特别注意,因为这个时候可能因为隔离策略失效而导致一些问题或事故的产生,此时我们需要基于现况重新回顾隔离策略的有效性和合理性。

  1. 租户数量快速增加:随着租户数量的快速增加,可能会出现一些租户的行为影响到其他租户的情况。在这种情况下,我们需要确保隔离策略能够防止「坏邻居」问题。
  2. 租户的量级变化或者资源使用差异变大:如果租户之间在资源使用上存在很大的差异,或者某些租户的资源发生量级的变化,那么我们可能需要更严格的隔离策略,以防止资源使用高的租户影响到其他租户。
  3. 新业务或新模块上线:如果新业务与现有业务有很大的不同,可能需要新的隔离环境。这可以帮助防止新业务的问题影响到现有的业务,并提供一个更加灵活的环境来进行新业务的开发和测试。
  4. 新的合规性要求/性能要求…… 这个算是业务属性发生了变化,需要考虑新的合规性或性能要求能得到满足

其实上面的这些注意事项如果在出现的时候再考虑就已经晚了,正确的做法是在做隔离策略的时候就已经考虑好了这些点,并且有监控机制能快速发现这些问题或现象,直接执行准备好的预案或策略。

小结

隔离策略是一个复杂的主题,需要根据你的具体业务需求和约束进行定制。在确定隔离策略时,你应该考虑多种因素,包括性能、安全性、可扩展性、成本和复杂性等。

对 SaaS 企业来说,选择和实施正确的隔离策略是非常重要的。它不仅可以帮助企业提供更好的服务,还可以帮助企业满足合规要求,保护数据安全,提高客户满意度。