标签归档:SaaS

连接 SaaS 产品的未来:Salesforce API的演变之路

前面我们聊了 Saleforce 关于开放能力的演化,今天我们聚焦聊一下 SaaS 产品 API 的开放。

因为 Salesforce 在 API 开放接口方面的发展历史反映了其作为一个 SaaS 平台不断演进的过程,以适应不同的集成需求和技术标准。

以下是 Salesforce API 的发展历史的概述,以及每种API解决的问题和它们的价值:

Salesforce API 发展历史

Salesforce Web Services API (早期的SOAP API)

Salesforce 最初的 API 是基于 SOAP(Simple Object Access Protocol)的 Web Services  API。

这个 API 自 Salesforce 平台在 2000 年代初推出之初就存在,它允许开发者通过网络进行远程调用,与 Salesforce 的数据进行交互。

SOAP API 允许企业和开发者在各种编程环境中利用 Salesforce 数据,为客户提供定制化的解决方案。

它使得 Salesforce 不仅是一个 CRM 产品,同时也是一个可以集成到企业 IT 环境中的平台。

尽管功能强大,但 SOAP 协议相对复杂,对网络带宽和处理能力有较高要求。

Salesforce REST API

随着 Web 2.0 概念的普及,RESTful 架构开始流行。它基于 HTTP 标准协议,使得 API 更简单、更易于使用,并且更加高效。

这种架构风格通过使用 GET、POST、PUT、DELETE 等 HTTP 方法来操作网络资源,简化了 Web 服务的实现。

在这样的背景下,Salesforce 在 2010 年左右,随着 Winter ’11 发布,推出了自己的 REST API,提供了一个更加轻量级和灵活的接口。

REST API 满足日益增长的轻量级集成需求,使得移动应用程序和现代 Web 应用程序可以更容易地与 Salesforce 平台集成。

Bulk API

随着企业对 CRM 系统的依赖程度日益增加,Salesforce 客户发现自己需要处理的数据量也在不断上升。这就带来了一个问题:如何高效地在 Salesforce 平台上进行大批量数据的导入、导出和更新

尽管 Salesforce 提供了标准的 API,如 REST API,但这些 API 在设计时更侧重于在线实时交互和小批量数据处理。因此,它们在处理大量数据时可能会受到性能瓶颈和 API 调用次数限制的影响。

为了解决这些限制,Salesforce 引入了 Bulk API。

Bulk API 是一种基于 REST 原则的 API。

Bulk API 的设计意义在于它能允许开发者和管理员高效、快速地在 Salesforce 平台上导入、导出和更新大量数据。这种专为大规模数据处理量身定制的 API,解决了传统 API 在性能和调用次数上的限制,提升了数据管理的可行性和灵活性。

Bulk API 通过其异步执行的特点,优化了对系统资源的利用。它可以在服务器资源空闲的情况下处理请求,避免了同步处理可能导致的资源瓶颈,从而加速了数据处理操作,并提高了整体性能。

Bulk API 的使用极大地提高了开发者和管理员在数据迁移和大规模数据更新时的生产力。通过减少手动操作和等待时间,Bulk API 使得数据管理工作更加高效,从而节省时间和成本。

Streaming API

随着企业转向更加动态的业务操作,对实时数据同步的需求日益增长。企业需要一种机制来实时监控和响应数据的变更,以提高业务的响应速度和决策质量。

在实时数据同步的早期实现中,开发者通常使用轮询(polling)方法定期检查数据变化。这种方法不仅效率低,还会对系统产生不必要的负载,特别是当数据量大、变更频繁时。

为了解决轮询的问题,推送(push)技术逐渐兴起。与轮询不同,推送技术能够在数据发生变化时立即通知监听者,这样可以大大减少不必要的数据检查和网络负载。

Salesforce 顺应这一趋势,在 2011 年左右引入了 Streaming API,它是一种基于推送技术的服务,允许客户端订阅一个主题,当该主题下的记录发生变化时,Salesforce 会实时推送更新。

Streaming API 对 Salesforce 生态具有重要意义,因为它支持实时响应数据变更,减少了资源消耗,并通过实时数据更新提高了用户体验。此外,它促进了事件驱动架构的发展,使得系统更加模块化、易于扩展和维护。

随着时间的推移,Salesforce 不断扩展 Streaming API 的功能,引入了平台事件、推送主题等特性,增强了其处理复杂事件的能力,满足了企业对多样化事件处理和实时数据集成的需求。

同时,它实现了业务流程自动化,如及时的库存更新和客户通知,同时支持了将 Salesforce 数据实时集成到外部系统中,提升了整个组织的信息共享速度。

Metadata API 和 Tooling API

Salesforce Metadata API 的出现是为了满足开发者和管理员对于更高效、可编程方式来管理 Salesforce 配置的需求。在 Salesforce 平台日益成熟和客户需求变得更加复杂的背景下,手动通过用户界面进行配置管理变得不切实际,尤其是在需要在多个环境之间迁移和同步大量配置信息的情况下。Metadata API 提供了一个可以通过代码自动化管理(检索、部署、更新)Salesforce 配置的途径,这对于加快开发过程、提高准确性和配置的可管理性至关重要。

Metadata API 在 Salesforce 配置和部署自动化方面发挥了巨大作用。它使得配置可以像代码一样进行版本控制和回滚,支持了持续集成和持续部署(CI/CD)流程,从而实现了敏捷开发和 DevOps 实践。此外, API 支持大规模部署和管理,特别适合于大型企业和多环境配置。它还使得开发者能够编写脚本来自动化常见的维护任务,比如备份配置和监控组织中的变更。

Tooling API 是 Salesforce 在 2013 年为了进一步提升开发者体验而推出的。随着开发者社区的成长,对于更细粒度控制、更灵活的开发工具和更快的迭代周期的需求增加了。Tooling API 应运而生,旨在为开发者提供一种能够更加便捷地访问 Salesforce 开发工具的编程方法。通过 Tooling API,开发者能够访问 Salesforce 内部使用的开发工具,从而进行更加高效的代码编译、测试和调试。

Tooling API 允许开发者以编程方式执行他们在 Salesforce 开发环境中常做的操作,如查询、修改、部署源代码和元数据。它提供了更快速的交互,特别是对于源代码编辑、调试和测试非常有帮助。Tooling API 也支持开发者创建更丰富的开发工具和 IDE 插件,从而提高了生产力和协作效率。此外,它使得开发者能够构建更加复杂和强大的自动化脚本和应用程序来与 Salesforce 环境交互。

Metadata API 和 Tooling API 都为 Salesforce 的配置和开发提供了自动化和程序化的能力,但它们的关注点和优化点略有不同。Metadata API 更侧重于整体的配置管理和部署,强调元数据的大规模处理。而 Tooling API 则专注于提升开发体验,优化细粒度操作,如源代码的编辑、部署和调试。

共同地,这两个 API 为Salesforce 生态系统内的自动化、集成和开发提供了全面的支持,极大地提升了开发者和管理员的工作效率。

随着 Salesforce 平台的不断扩展,这些 API 继续得到改进,并有新的 API 加入,以保持与新技术的同步和满足不断变化的业务需求。每个 API 的发布都围绕着提升开发者和最终用户的体验,增强 Salesforce 平台的功能以及其与其他系统的集成能力。

SaaS 产品 API 的作用分类

通过 Salesforce 的 API,我们大致可以将 SaaS 产品 API 的作用分为以下三类:

数据 API

数据 API 管理着 SaaS 产品的核心资产——数据。它们提供了一种方式,可以查询(阅读)、更新(编辑)、删除(移除)或者创建(新增)数据。

通过数据 API,SaaS 产品不仅打破了数据孤岛,还提供了一个强大的接口,使得企业能够流畅地访问、管理和操作存储在云中的关键数据。这些 API 将企业内部的各种系统连接起来,实现了前所未有的数据整合和自动化水平。

数据 API 的真正价值在于它们所带来的无缝集成能力。企业可以利用这些 API 从 SaaS 平台中提取所需数据,并将其推送到其他应用中,如 CRM、ERP 或自定义的内部系统。这种集成为业务流程打开了新的可能,从简单的数据同步到复杂的多系统协作,都能通过编程方式高效实现。

此外,数据 API 为数据的实时访问和分析铺平了道路,使得企业能够根据最新的信息做出快速决策。随着大数据和人工智能技术的不断进步,数据 API 成为了企业获取洞察力、优化运营和增强客户体验的重要工具。

功能 API

功能 API 使开发者能够利用 SaaS 产品的内置功能,其本质上是功能的复用和开放,如流程自动化、任务管理和用户界面定制等。这类 API 可以使开发者无需从头开始构建复杂的系统功能,而是可以直接集成和扩展现有的强大功能。

功能 API 是 SaaS 平台的实用魔杖,它们让开发者能够将 SaaS 产品的强大功能轻易嵌入到他们的应用程序中。这些 API 如同构建块,帮助开发者在不重复发明轮子的情况下,快速构建复杂的功能。它们消除了许多通用任务的复杂性,从而加速了新应用的开发和现有应用的迭代。

在竞争激烈的市场中,功能 API 的灵活性成为了 SaaS 产品的一个重要竞争优势。它们使得 SaaS 解决方案可以轻松集成到业务流程中,为用户提供了无缝、定制化的工作流程。因此,功能 API 是创新和效率的催化剂,为企业提供了迅速适应变化和市场需求的能力。

开发 API

开发 API 设计用来增强开发者与 SaaS 产品之间的交互,让他们能够更深入地定制和扩展产品功能。这些 API 提供了工具和接口,以便开发者可以构建自定义的应用程序、集成其他服务、自动化开发流程,以及管理和监控 SaaS 产品的实例。

开发 API 是企业技术创新的关键驱动力。 它们让开发者能够利用 SaaS 产品提供的强大引擎,定制符合企业特定业务需求的解决方案。通过使用开发 API,企业可以扩展产品的功能,增加新的服务和能力,同时保持产品的核心稳定和安全。

开发 API 还允许企业通过编程方式控制产品的部署、配置和管理。这意味着企业可以自动化常规任务,提高效率,减少人为错误,同时确保一致性和合规性。

开发 API 还促进了开发社区的形成,开发者可以共享他们的扩展和集成,进一步丰富了 SaaS 产品的生态系统。这种协作和共享的文化不仅加速了创新,还为企业带来了解决问题的新思路。

总的来说,开发 API 提供了定制化和扩展性, 这对于企业在不断变化的技术环境中保持竞争力至关重要。

这三种分类覆盖了一个 SaaS 产品从数据管理到功能集成,再到开发和定制的全方位服务,为企业提供了丰富的工具来构建、扩展和优化其业务流程和客户体验。

小结

在 SaaS 领域,开放 API 的战略价值在于它能够加速产品的市场渗透,通过允许第三方创新来增加产品的吸引力和竞争力。

开放 API 也是一种商业模式,它可以将 SaaS 产品从单一的解决方案转变为一个平台,促进合作伙伴和开发者在此基础上构建自己的产品和服务。这样的平台策略可以极大地增加 SaaS 产品的市场影响力,通过网络效应增强产品的价值。

此外,通过 API 提供的数据和功能,SaaS 提供商可以开发新的收入来源,例如数据分析服务、额外的集成功能或定制应用。

在一个以客户为中心的商业环境中,API 的开放性和互操作性是构建强大生态系统的关键。通过 API,企业可以构建一个围绕客户需求设计的平台,从而更好地服务客户并提供更加个性化的体验。API 战略的成功实施,可以成为企业获得竞争优势、加速创新和实现可持续增长的重要驱动力。

API 不仅仅是技术上的桥梁,它们代表了一种业务战略,使得企业能够快速适应市场变化,创新其产品和服务。 API 使企业能够以更加敏捷和成本效益的方式进行扩张,实现全新的商业模式,比如将服务转变为可通过 API 访问的微服务。API 经济正在改变企业与合作伙伴、供应商和客户的互动方式,为创造新的收入流打开了大门。

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

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

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