前言
阅读本篇文章的读者所需要具备的背景知识:BS架构、分布式、微服务、云计算。云计算就是 X as a Service,是以 Web Service 提供各种数字化能力的模式,包括 IT 基础设施、中间件、数据分析、企业运营软件等,极为考验服务商的调度能力与生态构建能力。在云计算的发展过程中,市面上涌现了很多成熟的云原生技术,例如容器、微服务、DevOps、服务网格、声明式API。
SaaS概念
1 SaaS是什么
软件即服务(SaaS)是一种基于云的软件模型,可通过浏览器将应用程序交付给最终用户。SaaS 供应商托管服务和应用程序,供客户按需访问。使用 SaaS 产品/服务时,您无需考虑服务的维护和底层基础设施的管理,只需要考虑如何使用软件即可。SaaS 应用程序的一个常见示例是基于 Web 的电子邮件,您可以在其中发送和接收电子邮件,而无需管理电子邮件产品的功能添加或维护运行电子邮件程序的服务器和操作系统。
SaaS 与IaaS、PaaS并列云计算三驾马车,云计算提供的核心价值是低成本、快速交付、智能弹性、可靠性易用,使用云计算服务时用户按需(订阅、使用)付费,而不是一次性购买所有功能。
IaaS聚焦在帮助客户解决网络、机器、存储等底层资源使用问题,封装资源入口提供易用的接口。PaaS的客户群体有软件供应商、开发、软件使用者,提供平台可以运行软件供应商的应用并且提供研发的开发环境,为软件使用者提供多种多样化的应用以满足他们的业务需求。SaaS它通过浏览器将应用交付给用户,消除了企业购买、构建、维护基础设施与应用的压力,企业无需关心应用如何实现,无需运维应用,无需安装应用,即可享受最新的技术以及不断完善更新的功能,降低中小企业信息化的门槛与风险。
SaaS 与IaaS、PaaS差异如图所示,
2 SaaS给客户所带来的价值:
- SaaS收费模式降低客户资金风险
- 按需订购,选择自由
- 灵活启用暂停
- 不需增加额外的IT人员
- 不需要维护基础设施,运维应用,或者安装应用
- 由产品自身保证数据备份、安全
- 使客户聚焦在自有核心业务上
- 产品改进更新速度快,客户无需付出额外成本可以享受最新的技术
- 市场产品丰富选择多
- 7x24小时可用性
- 除了产品外提供的业务解决方案服务
SaaS化过程
过去企业需要信息化时怎么做的?
当企业需要某个软件应用实施信息化的时候,有些企业会组建自己的IT团队进行全套基础设施以及应用研发,或者购买市场上已有的应用进行安装部署,企业需要一次性支付软件所有费用以及后期运维费用,如果应用需要升级的时候供应商会安排人上门服务进行升级部署。在这个阶段,企业需要自己搭建IT设施以及保证运维工作。
现在企业需要信息化时怎么做的?
从云服务发展起来以来,企业可以选择订阅市场上适合自己业务发展的SaaS应用,按需或者使用付费。一般情况下单个应用很难满足企业信息化运营,企业会订阅多个应用组合。目前大部分SaaS应用都与其生态内应用做了数据连通,或者提供API接口方便企业自己二次开发。如果企业在当前市场上没有找到满足自己业务场景的应用,从节省IT设施成本角度出发企业会采用基于IaaS、PaaS等设施快速构建自己的应用。一般情况下,如果企业和云供应商厂商合作,云供应商会基于行业生态提供适配当前企业的云服务解决方案,节省企业解决问题的时间并且以专业角度切实的帮助企业解决问题。
下面我们将采用QA方式谈论如何使项目SaaS化,在这里我们不讨论项目该不该SaaS化,这取决于各个公司的战略,我们只讨论项目需要SaaS化时如何去实现这个目标。
Q: SaaS目的是什么?
SaaS化的目的是使客户不必关注实现细节可直接随时随地使用应用。
Q: 如何做到随时随地可使用?
这就要聊到BS模式,BS模式随着web技术的发展而兴起,在这种架构下,用户工作界面是通过浏览器实现的,极少事务是在前端绝大部分事务放置后端,由后端服务处理事务流程、数据、记录用户状态。这种架构是一种轻前端重后端的实现模式,这种模式下用户无需安装应用降低了用户成本,当服务升级时用户是无感知的,用户可以随时享受最新的技术以及不断完善改进的创新解决方案。
Q: BS模式是如何实现的?
BS模式中主要由前端服务于后端服务协同工作完成,前端服务聚焦在产品交互体验、视觉呈现、信息结构化呈现,后端服务主要工作是实现业务流程、存储数据存储、记录用户状态、并发处理、数据处理、数据分发、数据推送、提供与前端服务可交互的接口、保障可用性、数据完备性等。随着web技术发展越发成熟,前端项目有一套完整的开发框架工具灵活支持产品多样化呈现,目前大多解决方案采用前后端分离方式实现,后端采用微服务架构实现。让我们从用户的一条请求开始,看看这个请求是如何转化为当前数据展现在用户眼前的,为了简化流程描述这里暂时先不考虑登录鉴权问题。
- 用户打开某网页,浏览器发出了一条带有域名地址的请求
- 用户自己电脑会先尝试解析该域名获取具体的IP地址,如果用户电脑暂无该域名的映射地址会请求就近的域名解析服务以获取IP地址。
- 一般情况下,大多公司会采用Nginx反向代理服务,那么该IP就会对应Nginx服务地址,Nginx收到该请求时会判断当前路径指向的资源服务是哪个,如果当前用户只是打开某网页则对应前端资源服务,如果是后端接口则对应后端服务的网关。
- 网关解析当前接口对应哪个微服务,一般情况下从用户侧发起的请求会直接映射到web服务,网关发起对web服务的请求
- 当请求到web服务时,web服务依据当时实现的逻辑进行处理直到该请求处理完毕返回数据;web服务处理请求时,不同的业务会调用不同的业务服务,不同的业务服务之间是可以互相调用的,具体调用链路视业务流程决定。
- Web服务处理请求结束将数据返回给网关,网关返回给Nginx,Nginx将数据最终返回给用户。
Q: 为什么后端采用微服务模式实现?
在项目不够大的时候,所有业务逻辑处理都实现在一个包里。后来项目慢慢扩展维护起来越来越困难,业务实现逻辑之间耦合严重,修改一处可能会影响整个服务的可用性,项目逐渐失控。微服务的出现解决了不同业务实现互相影响的问题以及项目的扩展问题,但是它同时也引入了新的问题即分布式环境下复杂的服务关系,发布时候需要协调部署多个服务控制好先后次序。微服务是一种云原生技术,是一种将单体应用以一组小服务方式实现的方法,它就是将一个大型应用拆分为不同的小应用,每个小应用拥有自己的独立进程互相配合又不影响双方,从而组合一个大型应用系统,也达到了解耦的效果。那么微服务架构下应该该如何划分边界,我给出的建议是先依据业务领域边界划分,注意刚开始不需要划分的太过细致这样反而会阻碍项目迭代的进度。如果在后期发展时发现当前的应用依旧庞大到很难维护,则可以再次根据领域边界进行划分,这是一步步迭代过程中完成的,不要指望一次就能够划分好所有应用,毕竟业务是在动态发展的。
以上所聊到的这些概念你是否会觉得有些跑题了呢,他们与SaaS又什么关系呢?不要着急,后面接着会聊到他们之间的关系。
Q: 以上说的这些与SaaS有什么关系?
当我们观察某个SaaS产品的解决方案时,你会发现它提供了非常多的功能来解决用户的问题。以SCRM产品为例,包含的功能有系统设置、字段定义、客户管理、线索管理、订单管理、商品管理、营销工具、客户触达等。这些功能足够复杂且有明显的领域边界,每一个大功能下也有很多细分功能。 SaaS产品要提供良好的用户体验并且保障可用性,并不断的完善改进它,否则该产品就会失去订阅用户。SaaS服务是基于BS模式提供服务的,并且随着产品的改进会不断扩展新的功能以完善产品能力,这要求项目的可扩展性必须足够灵活否则很难跟上产品的规划。SaaS服务的不间断7X24服务要求服务时刻保持可用性,意味着服务必须拥有弹性扩容缩容能力以支持用户的实时请求保障可用性。目前云原生技术领域微服务架构足够成熟,有众多经过市场验证的开源框架帮助研发实现,并且微服务架构提供了服务弹性扩展的必要要求。
SaaS化项目可能存在问题
SaaS产品一般提供通用的业务能力,例如CRM、ERP、协同办公、视频会议、呼叫|智能客服、安全、数据分析、AI、企业直播、电子签名等;或者针对某垂直行业的通用解决能力,例如电商、医疗、餐饮、物流、酒旅、游戏、工业、政务等。重点是能不能够提供通用能力解决市场上大部分客户的问题,这是产品和定制项目的区别,云计算服务盈利通过扩大规模降低边际成本以获取或者提高利润。若产品不能够解决大部分客户的问题,由于盈利问题该产品将很难在市场上存活下去。
2B市场里通用解决方案是理想状况,事实上,国内数字信息化起步较晚,业务信息化并无标准的统一流程,大多情况下各家企业有各自独特的处理流程,总会出现或多或少的特例需求。如果这些特例需求能不能够满足直接决定客户是否复购,与此同时产品若不能够持续提供创新解决方案以至于无法跟上市场将会被淘汰,如何平衡通用解决方案与特例需求是一个巨大的挑战。目前已有的实践是采用低代码平台解决定制化需求部分,缺点是低代码平台对于业务配置操作门槛较高,若无专业人员指导业务人员无法掌握配置操作。低代码平台虽然可配置动态的流程,但是其底层实现还是依赖一些模板,对于完全定制化的东西其实还是有阉割部分的,优势在于足够灵活可以解决部分定制化场景降低定制化成本。