ramostear.comramostear.com 谭朝红的技术分享博客

格言 编程是一门技术,也是一门艺术 !

实现SaaS(软件及服务)架构所面临的三大技术挑战

实现SaaS(软件及服务)架构所面临的三大技术挑战

​ 在当下的世界中,软件应用无处不在,随处都可见电子产品的身影,一个没有任何电子产品的生活是什么样子让人很难想象。而支撑起这些电子产品的是无数个应用程序和其背后所隐藏的实现技术。

​ 无论你需要做什么,都可以找到大量的应用程序供你选择。软件的本质工作是简化复杂的业务流程,让生活更简单,更有趣。然而,在享受软件带来便捷的同时,也伴随着一定的副作用,比如你需要安装大量的应用软件,且需要为这些应用软件支付一大笔费用,同时还需要关心软件升级维护的问题。为了最大程度的降低使用软件所带来的副作用,SaaS(软件及服务)应势而生。

​ 在开始探讨本文的主题之前,先花一分钟了解什么是SaaS应用程序以及使用SaaS软件的优势。

1. 什么是SaaS应用软件?

​ SaaS是Software as a Service(软件即服务)的缩写,它是云计算的主要体现形式之一,其他的还有诸如平台即服务(PaaS),基础设施即服务(IaaS)以及数据即服务(DaaS)等。简而言之,SaaS是一种软件交付模式,旨在以“即用即付”服务的方式为客户提供软件服务,客户不需要安装软件便可获得应用程序提供的所有功能。

​ SaaS是一种基于云计算的软件交付系统,客户只需要通过浏览器便可轻松订阅应用程序所提供的功能。这种“按需使用”或“软件+服务”的软件交付系统,被广泛应用于各大中小企业,组织中,以帮助他们降低软件的使用成本。当下,SaaS软件正被用于各种行业的业务领域中,例如:客户关系管理软件(CRM),企业资源规划软件(ERP),信息管理软件(MIS),人力资源管理软件(HRM),地理信息管理软件(GIS)以及学习管理软件(SIS)等等。

2. 使用SaaS应用软件的优势

​ SaaS软件交付模式的概念最早于20世纪60年代被提出,到20世纪90年代,随着互联网技术的不断发展,SaaS的发展速度也随之加快,许多软件提供商开始通过互联网托管和提供软件服务,而SaaS(软件即服务)这个术语也是在这一时期确定下来的。使用SaaS软件在以下几个方面可以获得较大优势:

  • 1 在软件使用早期,可以大幅度降低硬件,带宽,安装和运营成本。
  • 2 可以以更小的人员和资金的开销,准确的预测业务数据,更快的完成软件的升级和维护工作。
  • 3 与传统软件相比,用户通过互联网获的软件服务,从而降低了管理软件所带来的安全风险。
  • 4 快速部署,快速接入。由于不需要自行安装和部署软件,只需要向服务提供商注册信息,并为订阅的服务付费,便可获得软件服务。从而减少了获得软件的等待时间。
  • 5 跨平台操作。借助互联网,客户可以在任何时间,任何地点,通过浏览器便可接入服务。

​ 任何有价值的东西,在其出现之前都会历经各种困难与挑战,没有什么事物是一蹴而就的。接下来,将介绍构建一个SaaS软件在系统测试,数据安全和升级维护三个方面面临的巨大挑战。

3.实现SaaS软件挑战一#测试

​ 任何有价值的软件在交付之前,都需要进行大量的测试。这和我们买衣服一样,在确定付款前,都需要在试衣间试穿各种样式的衣服。SaaS软件的测试与传统的软件测试基本相同,通过执行各种逻辑验证,确保作为服务提供的软件在质量上是否符合客户的需求。SaaS软件的测试通常会包含数据安全测试,业务逻辑测试,数据集成测试,接口兼容测试,可伸缩测试和高并发测试。但SaaS软件的测试也有有别于传统软件测试的地方。

​ 与传统软件开发相比,SaaS软件的测试在测试周期和实施等方面都面临着诸多的挑战。尽管实现SaaS软件的技术框架会有所不同,但在测试环节都将面临一些常见的技术挑战。

3.1. 安全性测试

​ SaaS软件可以为使用者带来巨大的好处,但仍然有很多用户在质疑SaaS应用软件的数据安全。基于云计算应用的数据安全一直以来都是一个居高不下的热点话题。因此,针对SaaS软件的安全性测试必须慎重对待,需要有专门的测试策略和工具。

​ 与其他任何的云计算平台一样,在云计算环境下维护数据的安全性和完整性具有很大的风险与挑战,和传统的软件相比,SaaS应用软件的安全性测试更为复杂。在SaaS应用软件测试中,需要模拟多个租户下,不同安全级别的隐私要求,权限分配粒度,资源隔离等级和用户行为模式。传统的测试手段很难测试并发现SaaS软件中存在的安全漏洞,软件测试场景也很难完全发现漏洞并消除这些安全威胁。

3.2. 可伸缩和高可用测试

​ 可伸缩(也称可扩展)性是SaaS软件服务提供商重要的商业模型指标之一,要求SaaS应用软件可以根据客户量的大小进行水平方向的伸缩。简单来说,SaaS平台可以根据当前用户量的多少,动态地增加或者减少运行实例的数量;而高可用(性能)是客户衡量SaaS软件好坏的一个重要指标。

​ 如何成功的测试SaaS软件的可伸缩和高可用性,需要有专门的测试策略,才能组织出可用的测试场景,并且需要比传统软件测试更多的测试样本数据和测试标准。这些数据和标准需要仔细的考虑SaaS软件的应用场景,才可能被量化和设计。另外,还需要考虑如何在不同租户类型,不同的用户数量组合,不同使用环境(移动端,PC端)的复杂条件下,对系统的性能,峰值和负载能力进行测试。

3.3. 集成和开放API接口测试

​ SaaS应用软件在一定程度上需要集成第三方的业务系统,同时还有可能需要开放一定的API接口,以支持从其他平台集成或迁移数据。在何种情况下,保护数据的安全性和完整性将给测试带来巨大的压力。在SaaS应用软件的集成测试和API测试中,需要对入站和出站数据进行验证,以及对所有API的功能,安全性,性能以及文档的完整性进行测试。即便是这样,你也很难提前组织起所有的测试场景,而且这个过程非常的耗时。也许第一版的API还没有测试完,新版本的API已经添加到测试列表。实现SaaS软件是一个不断迭代的过程,因此很难在短时间内一次测试就涵盖所有的API。

4. 实现SaaS软件挑战二#数据安全

​ 对于SaaS软件而言,更为复杂和艰难的工作是如何保障SaaS平台中用户数据的安全。不管是大型企业还是小公司,他们对于数据的安全性要求都是一样严苛的。例如常见的CRM系统,HR系统,ERP系统和财务管理系统等,它们都存储了大量高度敏感的用户信息,如果SaaS软件的数据安全无法得到保障,不仅是客户的数据会遭受破坏,服务提供商的信誉也会收到严重的影响,甚至会伴随着相关法律的处理。因此,相比于传统的软件,SaaS软件的安全性要求更高,系统结构更为复杂,实现难度也更大。

​ 构建一个SaaS平台,在满足高性能和可伸缩的条件下,还需要着力保障用户数据的高度安全,这主要体现在以下三个方面:

  • 1 多租户数据隔离:多租户架构是SaaS软件的一个重要评定标准,如何对各个租户的数据进行识别,分割和存储需要在效费比,安全性和性能上取得一个平衡。
  • 2 数据备份与恢复:由于各租户订阅服务的组合不同,使用软件的时间段也不尽相同,对不同租户的数据进行备份和恢复的难度也相当大。另外,在操作其中一个租户数据时,需要保障其他所有租户的数据不会受到影响。在发生系统故障时,还需要及时恢复租户数据,面对庞大的数据量,数据恢复的复杂度和难度都比单体应用高很多。
  • 3 数据入站和出站校验:SaaS软件允许用户在任何地点通过浏览器获取服务,这就要求SaaS软件在数据传输,用户输入,系统输出等环节有着更高的安全性要求。相比于单体架构的应用程序,需要更高级别的安全传输加密/解密手段,更细粒度的用户认证和鉴权措施。另外,对用户的日志的收集,追踪和审计工作比单体软件更难。

​ 保护存储在SaaS平台中的数据安全,需要仔细的分析平台中每一个业务流程,细化权限下放的粒度,严格把控访问接入设置以及数据的存储规则。即便如此,由于SaaS系统通常需要面对比单体架构软件更为庞大的数据量,且业务流程更为复杂,更新周期相对较短,因此如何确保存储在SaaS平台中的数据不易被破坏或者泄露是一个永久存在的工作。

5.实现SaaS软件挑战三#升级维护

​ SaaS应用软件免去了客户使用软件时的安装,维护,升级等工作,但这些繁杂的工作并未因为SaaS而消亡,而是转移到了SaaS软件服务商的手中,且工作变得更为复杂和艰难。

​ SaaS软件需要全天候为客户提供可用的服务,因为你完全不知道客户会在什么时候登入系统开展工作。这就要求SaaS服务提供商在升级和维护软件的工程中不能影响当前用户使用软件。简单来说,SaaS软件的升级维护不能采取“冷启动”的方式来完成,需要采用“热部署”的方式,让客户基本上感觉不到升级工作正在进行。反观传统软件上线或更新过程,往往会出现各种问题:不一致的运行环境,过多的人为干预系统的构建和部署,代码改动引起不可控的质量,向下不兼容,服务中断,更长的更新时间,数据丢失等问题。

​ 对于SaaS系统,系统的升级维护工作不能暂停当前客户正在执行的业务,避免业务数据丢失,因此需要一种全新的软件发布机制,通过可视化,自动化的操作,实现持续,无缝,零重启的软件交付过程。在升级维护时,SaaS软件主要面临以下几个挑战:

  • 1 版本可回退:如果新上线的功能模块遇到重大问题,可以回退到之前的版本而不影响用户的正常业务。
  • 2 系统向下兼容:新版本的系统需要尽可能的向下兼容旧系统的数据。在最坏的情况下,当升级过程发生时,用户正在使用旧版本提交数据,如果适配旧版本提交的数据,需要慎重考虑。
  • 3 灰度发布:灰度发布包含两个方面:前后端灰度发布和移动端的灰度发布。
  • 4 零重启:零重启要求在不终止服务的情况下完成系统的升级工作,这就要求SaaS平台具备热部署的特性,确保SaaS平台能够保持7x24小时的持续服务能力。

​ SaaS软件易于使用是相对于软件使用者而言的,对于SaaS软件的提供者来说,软件的复杂性,安全性和可用性都面临者全新的技术难题,克服这些问题并不容易。作为SaaS软件的实现者,不能看着油漆是干燥的,就想当然的坐上去,在油漆真正干燥前,一切都是脆弱的,需要耗费大量的时间去处理诸多问题,才能让用户放心的坐上去。

​ 市场对于SaaS软件的需求逐年递增,各种类型的SaaS软件产品也层出不穷,但真正成功的SaaS软件却凤毛麟角。究其原因,主要还是SaaS化的软件并不是简单的将传统软件改造成多租户架构那么简单,用户对于易用性,集成性,安全性,灵活性和定制性的要求越来越高,作为SaaS软件的实现者和提供者,需要付出比对待传统软件更多的精力,更严苛的要求,更谨慎的考虑,才能正确认识到实现SaaS软件将要面临的技术难题与挑战。

​ 基于云计算的SaaS软件交互模式,其多租户,多平台环境,高并发等特点给SaaS软件的实现带来了诸多的技术难点,作为SaaS软件的缔造者和提供者,需要全面和谨慎的考虑和处理这些技术问题,方可缩短软件承诺与用户期望之间的差距。提前识别并跟踪不断变化的需求与技术走向,谨慎的考虑架构与实现之间存在的问题,才能在打磨出一款有商业价值的SaaS产品。

(转载本站文章请注明作者和出处:谭朝红-ramostear.com,未经允许请勿做任何商业用途)

发表评论