SaaS 产品交付新探索 | 架构师实践日

云计算产品的部署和安全交付一直是企业讨论的热点话题,而 SaaS 产品托管的数据更是与企业的运营息息相关,其部署的便利性和安全性备受企业重视。5月7日下午在七牛云主办的「架构师实践日」沙龙上,七牛云首席布道师何李石给大家带来了题为「SaaS 产品交付新探索」的分享。他从架构和运维的角度出发,探索了一种全新的使用容器和微服务架构的新一代 SaaS 产品开发和部署方式。以下是对他演讲内容的整理。


书记











何李石


《Go 语言程序设计》译者

七牛云早期工程师、技术专家、布道师



5 年以上互联网从业/创业经验,互联网产品基础架构解决方案专家。热爱技术,专注于服务端分布式系统开发,为开发者和互联网产品企业打造更好的企业云服务产品。




我们知道,公司使用的软件要么自己生产,要么购买商业软件或者方案,如 SAP 公司提供的 ERP 软件。购买商业性软件部署在本地有很多优点,例如它是可以高度定制的,并且由于部署在内网能够保证其安全性相对高,支持单点登入方便集成现有系统,单机或单租户部署的方式使得其不受其它客户的影响,而企业也可以自己拥有其数据。同时,在首次部署之后其开销相对透明,成本稳定而相对可控。


但是这种部署方式也有其缺点,由于是本地单机或者单区域部署,无法有效的做到故障容灾,并且其扩展性也较差。同时,由于固定部署在公司内部,一般不会轻易去升级或者更新,不方便修复最新问题或者获得最新特性。在销售方式方面,对于软件开发商来说,由于其做单方式太传统,也就无法形成互联网化的规模效应,并且在后期维护上人力成本相对高。


传统软件开发和销售模式上存在这些固有的优点和缺点,而互联网的出现和普及则给这种方式带来了新的转变,那就是为商业软件公司提供了一种新的基于互联网的产品开发和部署方式,这种方式将原有的软件功能作为一种服务售卖给企业,也即 SaaS – Software as a Service。这种软件售卖方式的最大特点包含两点:


1. 按需订阅,方便插拔;


2. 基于互联网随时随地接入。如果把这种服务的功能比喻成水电煤,那么其提供的基于互联网的产品界面就像供接入电的插座,按需接入按需使用,必要时还可提供自动化的切换功能(标准化的 API),如图 1 所示。




1


▲图 1


和传统的软件开发部署方式相比,这种方式具有明显的优缺点, 如图 2 所示。从表格中我们可以看出,上面讲到的关于传统软件的优点,几乎都是 SaaS 产品的缺点,而 SaaS 产品的优点也正是传统软件的缺点,因此对于一款企业级产品来说,这两种方式是互补的。


2


▲图 2


典型的 SaaS 产品如 Salesforce 主要用于企业进行销售管理,Zendesk 则用于企业客户服务,它们提供持续在线的企业服务,并且只有接入互联网才能使用。当然有些 SaaS 也提供私有部署的方式,如 Atlasssian Confluence。


3

▲图 3


GitHub 也是一款典型的 SaaS 产品,主要为企业或者个人提供代码托管和协作的功能。作为一款企业级产品,Github 也提供了两种售卖方式,一种是在线接入的公有模式,另一种也是私有部署的方式,如图 3 所示。


Atlasssian Confluence 和 Github 为什么会提供两种不同的售卖方式呢?原因在于,虽然基于互联网的 SaaS 产品是目前大多数公司或者个人的主流使用方式,但在一些定制化或者安全要求比较高的公司或者部门却不一定能够行得通。因此,在基于互联网的 SaaS 产品出现之后,企业级产品的售卖和部署方式往往会在公有和私有之间摇摆。


但是对于 Github 企业级版本来说,私有化部署还是不可避免地存在两个问题:一是 Bug 或者新 feature 出现的时候不能及时更新;二是可能需要驻场开发和运维,代价较为昂贵,对于早期创业公司来说这样尤其不可接受。企业的商业模式决定了其产品开发方式和进度,同时也决定了其维护客户的方式和成本,进而影响其组织架构。Github 早期只有在线版本,团队以快速迭代开发的方式快速地满足了用户需求,扁平化的组织架构和轻松愉悦的工作方式一直是业界标杆。但在后期出现私有部署方式之后,团队便在商业模式、组织架构和管理方式上出现了分歧,有人主张坚持走基于在线产品的小而美路线,有人坚持主张走面向大客户销售私有部署版本的方式,最终导致部分创始人出走,管理团队出现分裂。


然而,随着虚拟化技术的发展,这种可定制化并且安全性较高的私有部署方式与在线 SaaS 软件并非不能共存。基于虚拟机的交付方式可以在远程进行,远程团队在本地定制开发、部署好之后,将软件系统打包成一个虚拟机镜像文件,将其分发给客户方之后即可按预设的方式启动。这样既可获得灵活交付的便利性,也可获得私有部署的高安全性和定制开发的多样性。


但是基于虚拟机镜像文件交付软件的方式存在以下问题:


1. 每次都需要交付一个功能完全、即开即用的镜像文件太笨重。


2. 只能交付单机高可用的服务,难以做到服务的分布式部署。


3. 一个产品的所有服务都在一个虚拟机里面完成,维护的心智负担太高,出现故障的时候无法有效隔离。


容器技术的出现则给轻量级虚拟化技术的应用带来了一种新的变革。和虚拟机不同的是,容器是一种进程级别的虚拟化技术,能够快速启动和快速销毁。同时,它不需要虚拟化物理资源,而是直接和宿主机共享物理资源,在 Linux 内核层面隔离各自对物理资源的使用但不和宿主机共享运行时环境,因此既可做到极低的虚拟化成本,又可以做到较高的隔离性和安全性,如图 4 所示。


4

▲图 4


然而,仅将以虚拟机部署的方式换成以容器部署的方式并不能带来多大的改变,因为它们部署的载体最终都是镜像,基于容器云的 PaaS 平台才是我们最终青睐的部署平台。作为一个独立的第三方平台,它可以构建一个可以运行通用业务应用的基础架构,但是不需要业务应用开发的能力。


在开发层面,我们可以将原来混合开发混合部署的单体架构应用微服务化,这样做有几点好处:


1. 组件职责单一化,便于组件的敏捷开发和灵活维护。


2. 能够快速垂直扩容缩容,做到服务的高可用高并发。


3. 基于平台的服务治理能力,可以非常方便的进行横向扩展,快速适应业务需求的变更。


从运维层面讲,基于容器的 Immutable 镜像发布方式,可以简化环境的配置,实现跨主机甚至跨机房的高可用部署;基于微服务架构的自由组合和平台的服务治理能力,可以对应用服务做到自动化的测试、部署、监控和回滚。


这样,对于 SaaS 开发商来说,在运维层面不需要考虑如何做好系统甚至应用服务的运维,只需保证和线上一样的本地环境可持续运行即可;在研发层面将功能组件微服务化,团队成员只需专注于单个服务的研发和自动化运维,而平台可以提供天然的高可用部署方式。


对于 SaaS使用方也就是企业主来说,最重要的是做数据的拥有者,而非服务或者软件的拥有者,这样应用服务无需自己开发自己构建,应用平台也无需自己搭建。从研发层面讲,取消和研发团队的长期雇佣制关系,将定制需求短期外包给更专业的团队,或者和 SaaS 提供方签订维护协议,可以有效的节省企业运作成本和复杂度。作为服务的使用者,而非服务软件或平台的构建者,企业最终价值体现不在于基于平台进行二次开发,而在于基于平台数据的开发,也即基于数据的挖掘和关系连接。


5

▲图 5


这样,我们不仅进入了一个基于容器虚拟化来开发和部署企业级软件的时代,更进入了一个 IT 架构演变成方便微服务开发部署的云计算平台的时代,如图 5 所示。


在灵活的微服务架构下,这种演变带来的价值在于,它正在用一种标准化的方式(容器),解决非标准化产品(SaaS / APP)的部署、升级和扩容缩容等问题,它既可拥有旧时代 SaaS 所具备的灵活方便性,也可以在相对可控的成本范围内做到业务需求可定制、数据可控等目的,如图 6 所示。


6

▲图 6


获取架构师实践日第七期视频回放链接,请在七牛公众号后台回复关键词:71





架构师尾图


「七牛架构师实践日」——这里只谈架构


七牛架构师实践日是由七牛云发起的线下技术沙龙活动,联合业内资深技术大牛以及各大巨头公司和创业品牌的优秀架构师,致力于为业内开发者、架构师和决策者提供最前沿、最有深度的技术交流平台,帮助大家知悉技术动态,学习经验成果。


七牛架构师实践日第九期【微服务架构最佳实践】将于 6 月 18 日与大家在 深圳 见面,目前活动正在火热报名中,点击这里了解更多信息,期待你的参与。