Salesforce 的技术架构
作者:Larry Wang
SaaS 软件有一个很重要的“多租户“(Multi-Tenancy)概念,对广大企业来说,引入SaaS产品本质上就是对互联网服务的租赁,因而多租户便必然是SaaS的天然属性之一,也是其与传统互联网应用架构设计的重要差异之一。在SaaS架构的成熟度演进过程中,其核心路线便是如何实现多租户,也就是说,SaaS成熟度的高低,很大程度上取决于如何实现多租户的支持。
多租户指得就是一个单独的软件实例可以为多个组织服务。一个支持多租户的软件需要在设计上能对它的数据和配置信息进行虚拟分区,从而使得每个使用这个软件的组织能使用到一个单独的虚拟实例,并且可以对这个虚拟实例进行定制化。但是要让一个软件支持多租户并非易事,因为不仅对它的软件架构进行相应的修改,而且需要对它的数据库结构进行特殊的设计,同时在安全和隔离性方面也要有所保障。
多租户的优点:
-
- 经济:因为通过一个软件实例被多个组织共享,从而减低了整体资源的消耗,也同时减低应用运行的成本和相应的管理开支。
- 易于更新和开发:因为所有组织都共享同一套核心代码,所以能够让软件更新和开发更简单。
- 管理方便:首先,通过使用了多租户架构能减少物理资源和软件资源,这将简化管理。其次。由于多租户软件主要由有经验的云供应商运营,所以能依赖那些非常经验的管理人员来提升效率。
当然一枚硬币总有正反面,多租户带来的也不是全都是好处,多租户也有自身的缺点:
多租户的缺点:
更复杂:由于一个软件需要做出极大地修改,才能支持多租户架构,而且这种修改,往往会增加整个软件在架构方面的复杂性。
不够安全:因为众多组织的应用和数据共享同一套软件和基础设施,如果出现机器宕机,软件出现问题或者大规模的数据被暴露等情况,将会造成更严重的后果,因为影响面更大。
定制化比较复杂:对于ERP软件,不同的行业,甚至同一行业的不同公司都有自身特殊的业务流程。一个通用的平台不可能满足所有客户的全部需求,所以定制化势在必行。在多租户架构上实现定制化也是一个难点,需要把业务逻辑和技术逻辑解耦。
一个SaaS公司的成功与否,首先要看它是否提供了一个灵活、安全、可伸缩、易开发的多租户平台。下面重点介绍一下Salesforce的多租户平台Force.com。
Salesforce 的Force.com 平台
Force.com是Salesforce在2007推出的PaaS平台,并且已经有超过47000位企业已经使用了这个平台。Force.com基于多租户的架构,其主要通过提供完善的开发环境等功能来帮助企业和第三方供应商交付健壮的,可靠的和可伸缩的在线应用。
- 强大的定制功能:在Force.com,不仅UI能够定制,而且诸如Workflow和表格等也能被定制。
- 提供完善的开发环境:首先,通过Visualforce能方便地使用”Drag & Drop”的方式来设计页面。其次,Salesforce提供基于Eclipse的IDE来快速地开发应用。最后,Salesforce还提供Sandbox来方便用户测试。
- 支持复杂的事务和流程:通过Force.com专属的APEX语言,能方便地设计和开发复杂的事务和流程。
- 优秀的整合功能:用户除了可以在AppExchange购买其所需的功能和应用,而且还可以通过Force.com的Web Service接口来和其他应用整合,比如SAP等。
- 久经考验的基础设施:Salesforce除了通过在多个大洲建自有数据中心来应对灾难的发生,还和云计算提供商AWS战略联盟,所以在Salesforce能长时间地支持众多服务的正常运行。
Force.com–应用服务器
- Metadata Cache:用于存放那些最近用到的和比较常用的Metadata来加速应用的生成。
- 大规模数据处理引擎:主要用来加速处理大量的数据读写和在线事务。
- 多租户感知的查询优化引擎:这个引擎将通过维护多租户的信息来帮助Oracle自带的基于成本的查询优化器更好地适应多租户环境。
- 运行时应用生成器:这个生成器主要根据用户的请求来动态生成应用,并且利用上面提到的查询优化引擎来提升效率。
- 全文检索引擎:在数据库对数据进行更新的同时,这个引擎会异步更新这个数据的相关索引。
为了支撑Force.com的多租户平台,Salesforce特别设计了自己独特的数据库模型,这个数据库模型其实也借鉴了前文讲的PeopleSoft的数据库设计理念:
在常见的实现中,Salesforce主要有三种常见的模型,而且区别主要在于采用不同的数据库模式,Salesforce采用了通用表:
- 私有表(图a):它是最简单的扩展模式,就是为每个租户的自定义数据创建一个新表。优点是简单。缺点是涉及到高成本的DDL操作,并且它的整合度不高。
- 扩展表(图b):总体而言,比较类似于私有表,但是一个扩展表会被多个租户共享,所以无论是共享表还是基本表都会有租户栏位。好处是比私有表更高的整合度和更少的DDL操作,但是在架构上比私有表更复杂。
- 通用表(图c): 主要通过一个通用表来存放所有自定义信息,里面有租户栏位和许许多多统一的数据栏位(比如500个)。像这种统一的数据栏位会使用非常灵活的格式让转储各种类型的数据,比如VARCHAR。由于在每一行中的数据栏位都会以一个Key一个Value形式存放所有自定义数据,导致通用表的行都会很宽,而且会出现很多空值,所以通用表这种方式也被称为”Sparse Column”。好处是极高的整合度并避免了DDL操作,但是在处理数据方面难度加大。
Force.com–共享数据库
Force.com的共享数据库有以下主要表:
- Metadata表:主要存放用户定制的对象和对象所包含的字段的结构信息,也被称为”UDD”。
- Data表:主要存储那些用户定制的对象和对象所包含的字段的数据。
- Pivot表:用来维护那些用于检索(indexing),唯一性和关系等de-normalized (去规范化)数据以优化系统的效率。
- 根据每个租户不同的租户ID(OrgID)来使用Oracle的Hash分区技术进行分区。
具体来看每个表的作用如下:
Metadata表
- Metadata表的作用是存储用户定制的对象和对象所包含的字段的结构信息,不保存具体的数据,主要有两大类:
- Object Metadata表:这个表主要存储对象的信息,其中主要字段包括对象的ID(ObjID),拥有这个对象的租户的ID(OrgID)和这个对象的名字(ObjName)。
- Field Metadata表:这个表主要存储对象附带字段的信息,其中主要字段包括字段的ID(FieldID),拥有这个字段的租户的ID(OrgID),这个字段的名字(FieldName),这个字段的数据类型(datatype)和一个布尔字段(IsIndexed)来定义这个字段是否需要被检索。
- Data表
- Data表的作用和Metadata表正好相反,它主要存储那些用户定制的对象和对象所包含的字段的数据,主要也包括两大类:
- Data表:这个表放置着上面那些对象和字段所对应的数据,核心字段有全局唯一的ID(GUID),租户ID(OrgID),对象的ID(ObjID)和存放对象名字的”Nature Name(自然名称)”,比如这行和一个会计对象有关,这行的””Nature Name”字段可能是”Account Name”,除了这些核心字段之外,这个表还有名字从Value0到Value500的501个数据列来存储数据,而且这些列都是varchar的形式来承载不同类型的数据,这种数据列也被称为”flex列”。
- Clob表:这个表主要存放那些CLOB(Character Large Object,字符大对象)数据,对象最大支持到32000个字符。
Pivot表
- Pivot表,也称为”数据透视表”,在Force.com中是以denormalized (去规范化)格式存储那些用于特殊目的的数据,比如用于检索(indexing),唯一性和关系等,主要作用是加速这些特殊数据的读取以提升系统整体的性能。主要有五种Pivot表:
- Index Pivot表:由于Data表里面数据都是以”flex列”的形式存储,所以很难在Data表的基础上对表中的数据进行检索,所以Force.com引入Index Pivot表来解决这个问题,系统在运行的时候会将需要索引的数据从Data表同步到Index Pivot表中相对应的字段来方便检索,比如这个数据的类型是日期型的,那么它将会被同步到Index Pivot表中的日期字段。
- UniqueFields Pivot表:这个表是用来帮助系统在Data表中字段实现唯一性。
- Relationships Pivot表:Force.com提供了”Relationship”这个数据类型来定义多个对象之间的关系,而Relationships Pivot表则起到方便和加速”Relationship”数据读取的作用。
- NameDenorm表:是一个简单的数据表用于存储对象的ID(ObjID)和这个对象的实例的名字,主要让一些仅需获取名字的查询调用,从而让一些简单的查询无需查询规模庞大的Data表。
- FallbackIndex表:这个表将记录所有对象的名字,来免去成本高昂的”UNION”操作,从而加速查询。
Force.com平台设计理念
- 数据驱动:由于 Salesforce 主要面向企业用户,导致其上面运行的应用,无论是 CRM ,还是报表工具,都是以数据的CRUD(增删改查)为核心,所以 Force.com 需要由数据来驱动,而且也需要为此做一定程度的优化。
- 规模经济:由于需要在低价格和灵活付费的基础上提供可定制化应用,所以需要让尽可能多用户共享同一套系统,来大幅减低基础设施和管理等资源的投入,并实现规模经济的效益。
- 安全为先:由于在一套物理设备上将承载数以万计客户的企业级应用,那么如果出现严重的程序错误或者数据方面遗失或者错乱,将会发生非常严重的后果,所以 Salesforce设计时已安全为先。
- 定制方便:虽然各个企业都会存在一部分比较通用的流程,但是每个企业都可能存在一部分私有或者独特的流程,所以Force.com需要提供方便的定制功能来帮助用户将更快捷地将企业的业务迁移到其上。
- 功能丰富:虽然用户能在 Force.com 上进行开发和定制,但是如果 Force.com 能提供更多的功能模块或者能让用户购买和整合第三方的应用将非常有效地帮助用户开发应用。
Lightning 开发平台
Lightning开发平台是Saleforce 2016年始推出的、更加友好和智能的全新用户界面。旨在帮助使用者进一步提高工作效率、更快的达成业绩指标。
- Lightning开发采用View-Controller(js)-Controller(helper)-Controller(server)-Database模式
- Lightning前端UI以及框架整体采用aura UI框架,可以更好的兼容网页端以及手机端,而且提供了很多已经封装好的标签,Lightning Design System提供了CSS的样式,同时可以使用到classic中
- Salesforce Lightning 设计系统包括创建符合 Salesforce Lightning 原则、设计语言和最佳实践的用户界面的资源。开发人员可以专注于应用程序逻辑, 而不是关注像素, 而设计人员可以专注于用户体验、交互和流。
- 为设计人员和开发人员提供了一系列资源, 包括: 语义和可访问的组件标记,跨浏览器兼容的 CSS,图标、字体和设计指南。
- Salesforce Lightning 设计系统反映了 支撑 Salesforce 产品的模式和组件。在 Salesforce 生态系统内设计应用和产品时, 这些模式和组件提供了统一的语言和一致的外观。
Lightning 平台-设计原则
- 清晰:消除歧义。使人们能够自信地看到、理解和行动。
- 效率:简化和优化工作流程。智能预测需求, 帮助人们更好、更智能、更快地工作。
- 一致性:通过将相同的解决方案应用于相同的问题来创建熟悉度并增强直觉。
- 美感:通过周到、典雅的工艺, 展示对人们时间和注意力的尊重。
前文讲过Salesforce也开发发布了自己的APEX语言,使得Salesforce的开发和定制化更加便捷。
APEX语言
- Apex是SalesForce平台上,用于开发者根据不同的需求操作数据库,实现需求的一种语言。 由于是一种语言,Apex的解释运行过程是基于SalesForce平台的,Apex类似于Java,但有自己的写法,有自己的对数据库的操作语句(DML)。
- APEX主要以两种方式执行:其一是以单独脚本的形式,按照用户的需要执行。其二是以触发器的形式,当一个特定的数据处理事件发生的之前或者之后,与这个事件绑定的APEX代码将会被执行。
- 所有APEX代码将会以Metadata的形式存储在Metadata表内。当一段APEX代码被调用的时候,APEX的翻译器(runtime interpreter)将会从Metadata Cache读取编译之后的APEX代码,而且能够同时被多个租户共享以提升效率。
Force.com上有众多的微服务,为客户和合作伙伴提供了五花八门的各种功能:
- Data Storage
- Business Logic
- Caching
- Search Indexing
- Blob&File storage
- File Conversion
- Machine Learning
- Queuing
- Event Subscription
- Feature Flags
- Blob&File storage
- Voice & Presense
- …..
Salesforce的基础架构逐渐向公有云迁移:
Salesforce也通过和公有云厂商AWS合作,加速创新和全球业务拓展:
- Salesforce和AWS有着非常紧密的合作: AWS是Salesforce首选云提供商,以及全球战略联盟
- Salesforce正在依托AWS进行重大的全球性的基础设施扩展,已经在澳大利亚和加拿大AWS上正式运行,这是Salesforce首次通过AWS云服务支持的全球基础架构扩展
- Salesforce宣布将使用AWS打造旗下的IoT Cloud。此外,Salesforce已经在利用AWS服务运行诸如Heroku、营销云社交工作室和SalesforceIQ
- 据传Salesforce正在开始逐步迁移自己的Sales Cloud 数据库到AWS
Salesforce和公有云巨头AWS的合作,也获得了云计算技术的加持,能:
- 实现技术多元化
- AWS和Salesforce的合作有助于各取所长
- 国际扩张的速度更快更便捷
- Salesforce可以从基础架构中抽身,聚焦主业
- 灵活性+高可用+高持久+高安全的保障
AWS日前宣布,Salesforce正在进行重大的全球性的基础设施扩展,并将使用AWS的核心服务。这意味着诸如销售云、服务云、应用云、社区云、分析云等Salesforce云服务将在AWS基础设施里运行。Salesforce宣布将使用AWS打造旗下的IoT Cloud。此外,CRM公司Salesforce已经在利用AWS服务运行诸如Heroku、营销云社交工作室和SalesforceIQ。Bosworth对《华尔街日报》表示,AWS的“灵活性”使之成为处理“不受控指数级增长”的不错选择,Salesforce预计物联网通信将出现这样的增长。
AWS和Salesforce之间更紧密的集成为企业提供了大量机会,可以利用客户数据做更多事情,并开发新的独特服务方式:
- AWS PrivateLink与Salesforce API集成
- AWS与Salesforce平台事件的集成
- 与Amazon Connect for Salesforce Service Cloud集成
案例参考:
https://www.salesforce.com/company/news-press/press-releases/2018/09/180925-r/