什么是saas模式?
SaaS到底是什么服务呢?SaaS是专门为网络交付设计的软件模型,用户通过互联网络便可进行托管于部署。一般SaaS软件费用是全包类型费用,这个价格资费包含了软件许可费及后期维护升级费用。
SaaS能为企业搭建信息化平台,在这个虚拟网络平台上,网络基础软硬建设、服务的前期实施及后期的维护等可完成,从此企业无需再配置软硬件设施,通过互联网平台便可享受SaaS服务。
企业可按照实际需要向SaaS索取服务,SaaS的服务方式非常灵活。如果企业有个性SaaS服务要求,这个服务模式可为企业提供私人定制服务。SaaS是中小企业实施信息化技术的合适途径,任何规模与性质的企业都可通过SaaS获利。
SaaS是一个非常重要的软件产业,这种软件服务的品质与可信度一直受到大家认可。互联网与软件技术是SaaS服务的基础,SaaS通过浏览器或WebServices程序体用服务,这个服务模式具备互联网使用特性。
互联网是SaaS的服务载体,线上服务合同签订、服务资费方式确定及服务品质等都是要注意的问题。任何时间与地点都可通过互联网支付费用,SaaS服务有可配置和高性能优势,企业可根据信息化需求选择。
多租户是SaaS服务的一大优势,一套专业的服务软件能为不同客户提升信息化服务。SaaS服务支持不同租户数据与配置分割,这样确保信息化服务品质,又可确保不同企业数据的安全级别。
1 概述
笔者从2014年开始接触SaaS(Software as a Service),即多租户(或多承租)软件应用平台;并一直从事相关领域的架构设计及研发工作。机缘巧合,在笔者本科毕业设计时完成了一个基于SaaS的高效财务管理平台的课题研究,从中收获颇多。最早接触SaaS时,国内相关资源匮乏,唯一有的参照资料是《互联网时代的软件革命:SaaS架构设计》(叶伟等著)一书。最后课题的实现是基于OSGI(Open Service Gateway Initiative)Java动态模块化系统规范来实现的。
时至今日,五年的时间过去了,软件开发的技术发生了巨大的改变,笔者所实现SaaS平台的技术栈也更新了好几波,真是印证了那就话:“山重水尽疑无路,柳暗花明又一村”。基于之前走过的许多弯路和踩过的坑,以及近段时间有许多网友问我如何使用Spring Boot实现多租户系统,决定写一篇文章聊一聊关于SaaS的硬核技术。
说起SaaS,它只是一种软件架构,并没有多少神秘的东西,也不是什么很难的系统,我个人的感觉,SaaS平台的难度在于商业上的运营,而非技术上的实现。就技术上来说,SaaS是这样一种架构模式:它让多个不同环境的用户使用同一套应用程序,且保证用户之间的数据相互隔离。现在想想看,这也有点共享经济的味道在里面。
笔者在这里就不再深入聊SaaS软件成熟度模型和数据隔离方案对比的事情了。今天要聊的是使用Spring Boot快速构建独立数据库/共享数据库独立Schema的多租户系统。我将提供一个SaaS系统最核心的技术实现,而其他的部分有兴趣的朋友可以在此基础上自行扩展。
2 尝试了解多租户的应用场景
假设我们需要开发一个应用程序,并且希望将同一个应用程序销售给N家客户使用。在常规情况下,我们需要为此创建N个Web服务器(Tomcat),N个数据库(DB),并为N个客户部署相同的应用程序N次。现在,如果我们的应用程序进行了升级或者做了其他任何的改动,那么我们就需要更新N个应用程序同时还需要维护N台服务器。接下来,如果业务开始增长,客户由原来的N个变成了现在的N+M个,我们将面临N个应用程序和M个应用程序版本维护,设备维护以及成本控制的问题。运维几乎要哭死在机房了…
为了解决上述的问题,我们可以开发多租户应用程序,我们可以根据当前用户是谁,从而选择对应的数据库。例如,当请求来自A公司的用户时,应用程序就连接A公司的数据库,当请求来自B公司的用户时,自动将数据库切换到B公司数据库,以此类推。从理论上将没有什么问题,但我们如果考虑将现有的应用程序改造成SaaS模式,我们将遇到第一个问题:如果识别请求来自哪一个租户?如何自动切换数据源?
3 维护、识别和路由租户数据源
我们可以提供一个独立的库来存放租户信息,如数据库名称、链接地址、用户名、密码等,这可以统一的解决租户信息维护的问题。租户的识别和路由有很多种方法可以解决,下面列举几个常用的方式:
解决了上述问题后,我们再来看看如何获取客户端传入的租户信息,以及在我们的业务代码中如何使用租户信息(最关键的是DataSources的问题)。
我们都知道,在启动Spring Boot应用程序之前,就需要为其提供有关数据源的配置信息(有使用到数据库的情况下),按照一开始的需求,有N个客户需要使用我们的应用程序,我们就需要提前配置好N个数据源(多数据源),如果N<50,我认为我还能忍受,如果更多,这样显然是无法接受的。为了解决这一问题,我们需要借助Hibernate 5提供的动态数据源特性,让我们的应用程序具备动态配置客户端数据源的能力。简单来说,当用户请求系统资源时,我们将用户提供的租户信息(tenantId)存放在ThreadLoacal中,紧接着获取TheadLocal中的租户信息,并根据此信息查询单独的租户库,获取当前租户的数据配置信息,然后借助Hibernate动态配置数据源的能力,为当前请求设置数据源,最后之前用户的请求。这样我们就只需要在应用程序中维护一份数据源配置信息(租户数据库配置库),其余的数据源动态查询配置。接下来,我们将快速的演示这一功能。
4 项目构建
我们将使用Spring Boot 215版本来实现这一演示项目,首先你需要在Maven配置文件中加入如下的一些配置:
然后提供一个可用的配置文件,并加入如下的内容:
接下来,我们需要关闭Spring Boot自动配置数据源的功能,在项目主类上添加如下的设置:
最后,让我们看看整个项目的结构:
5 实现租户数据源查询模块
我们将定义一个实体类存放租户数据源信息,它包含了租户名,数据库连接地址,用户名和密码等信息,其代码如下:
持久层我们将继承JpaRepository接口,快速实现对数据源的CURD操作,同时提供了一个通过租户名查找租户数据源的接口,其代码如下:
业务层提供通过租户名获取租户数据源信息的服务(其余的服务各位可自行添加):
接下来是配置自定义的数据源,其源码如下:
在改配置类中,我们主要提供包扫描路径,实体管理工程,事务管理器和数据源配置参数的配置。
6 实现租户业务模块
在此小节中,租户业务模块我们仅提供一个用户登录的场景来演示SaaS的功能。其实体层、业务层和持久化层根普通的Spring Boot Web项目没有什么区别,你甚至感觉不到它是一个SaaS应用程序的代码。
首先,创建一个用户实体User,其源码如下:
业务层提供了一个根据用户名检索用户信息的服务,它将调用持久层的方法根据用户名对租户的用户表进行检索,如果找到满足条件的用户记录,则返回用户信息,如果没有找到,则返回null;持久层和业务层的源码分别如下:
7 配置拦截器
我们需要提供一个租户信息的拦截器,用以获取租户标识符,其源代码和配置拦截器的源代码如下:
8 维护租户标识信息
在这里,我们使用ThreadLocal来存放租户标识信息,为动态设置数据源提供数据支持,该类提供了设置租户标识、获取租户标识以及清除租户标识三个静态方法。其源码如下:
9 动态数据源切换
要实现动态数据源切换,我们需要借助两个类来完成,CurrentTenantIdentifierResolver和AbstractDataSourceBasedMultiTenantConnectionProviderImpl。从它们的命名上就可以看出,一个负责解析租户标识,一个负责提供租户标识对应的租户数据源信息。
首先,我们需要实现CurrentTenantIdentifierResolver接口中的resolveCurrentTenantIdentifier()和validateExistingCurrentSessions()方法,完成租户标识的解析功能。实现类的源码如下:
有了租户标识符解析类之后,我们需要扩展租户数据源提供类,实现从数据库动态查询租户数据源信息,其源码如下:
最后,我们还需要提供租户业务模块数据源配置,这是整个项目核心的地方,其代码如下:
10 应用测试
最后,我们通过一个简单的登录案例来测试本次课程中的SaaS应用程序,为此,需要提供一个Controller用于处理用户登录逻辑。在本案例中,没有严格的对用户密码进行加密,而是使用明文进行比对,也没有提供任何的权限认证框架,知识单纯的验证SaaS的基本特性是否具备。登录控制器代码如下:
在启动项目之前,我们需要为主数据源创建对应的数据库和数据表,用于存放租户数据源信息,同时还需要提供一个租户业务模块数据库和数据表,用来存放租户业务数据。一切准备就绪后,启动项目,在浏览器中输入:http://localhost:8080/loginhtml
在登录窗口中输入对应的租户名,用户名和密码,测试是否能够正常到达主页。可以多增加几个租户和用户,测试用户是否正常切换到对应的租户下。
总结
云计算的服务模式分为软件即服务(SaaS)、平台即服务(PaaS)、基础设施即服务(IaaS)3种形式。
(1)SaaS:这一模式主要为客户提供应用软件类的服务。有关供应商将其应用软件全部共享
在其“云端”服务器上,在互联网作用下,使用户享受其服务,并依据需求进行订购,费用计算以时间、数量为主,用户只要通过Web浏览器就可以获取服务。SaaS与PaaS的区别在于,使用SaaS的不是软件开发人员,而是软件的终端用户。
(2)IaaS:在互联网的作用下,供应商将不同服务器集群后所形成的“云端”等基础设施来为客户提供“云”服务,其服务种类包括服务的虚拟化及资源存储等。该服务类型属于硬件托管式,用户对供应商提供的硬件服务采取租用或购买使用的方式。
(3)PaaS:这种方式以为用户提供开发软件平台及相关研发环境为主,通过其提供的开发平台,客户能自行研发各种程序,并借助互联网得以使用。PaaS模式与SaaS模式具有相同之处,不同之处在于PaaS是开发软件的平台,而SaaS是应用软件的平台。
在典型云计算模式应用中,用户通过终端接入网络,向“云”端提出请求服务,“云”端接受请求后配置相关资源,通过网络为终端提供相关“云”服务。云计算是随着微端处理器、分布式存储、宽带20技术、虚拟化技术和自动化管理技术的发展应运而生。云计算的实现取决于“云”端的数据存储能力和分布式计算能力,即云计算可以看成存储“云”和计算“云”的综合形态。
(温馨提示:本文非软文推广,可放心食用)一、市场分析直播电商兴起,让越来越多的商家加入到直播电商大军,也给SaaS产品创业带来机遇,从直播产业来划分,直播SaaS产品分为企业直播和带货直播,企业直播场景比较宽泛,包括但不限于:企业培训、会展、线上营销、教培等,代表企业有:微吼、小鹅通、微赞直播;而带货直播是在电商平台上进行商品销售,这一块的服务商更多的是MCN机构、代运营公司,SaaS企业相对较少,代表企业有:魔筷科技、遥望网络等。从电商SaaS产品划分,有综合类SaaS、仓储物流SaaS、营销客户管理SaaS、直播电商SaaS等,代表企业有光云科技、万里牛、旺店通等。本文所阐述的是直播电商SaaS赛道,无论是从直播、还是电商行业来说都是更加垂直的领域。在2022年双十一各家电商平台销售增速都不再强势的时候,直播电商相比来说有着不错的成绩,而这一领域最早的SaaS产品是数据决策类,即像蝉妈妈、飞瓜这种,它们解决的是商品选品和达人采购的问题(看谁卖哪个品卖爆了我也去卖,看哪个达人带货好找他带货),还有直播间的数据复盘,对于数据复盘,其实像抖音官方后台就非常完善,为什么还是有SaaS产品在做呢?其实,数据决策类产品的设计逻辑之一是把官方的数据拿过来,加工的更加符合用户的使用需求。随着直播电商行业的飞速发展,行业越来越规范,行业中新的需求场景也在涌现,这时出现了更多的直播代运营公司、MCN机构、直播产业基地等,他们的入场,也让直播SaaS产品有了更丰厚的生长土壤。二、产品分析产品名称产品/公司定位核心用户商业模式竞争态势微吼企业级直播平台及运营服务商年会/会展、企业培训、私域运营的企业用户、教培行业用户提供SaaS产品以解决直播需求,提供开放生态/pass以满足定制化开发,提供直播现场指导/代拍等增值服务,对于疫情当下,切入企业线上运营需求,以SaaS产品为基础,加上完善的售后运营服务全行业全场景覆盖,有技术沉淀且并具有一定先发优势微赞企业微信营销工具、直播服务商品牌直播营销、企业直播、连锁门店用户除了基于直播pass+SaaS平台服务外,微赞基于微信生态的流量与社交优势解决企业营销,为产品服务拓展了更丰富立体的打法微赞通过接入企微/微信,实现数据同步,流量互通,结合微赞平台搭建各种服务;微赞平台本身也提供各种直播营销玩法,除企业直播SaaS服务外,对流量运营及营销布局,在私域时代更切合用户需求维妥科技电商直播数智化工具及服务平台MCN机构、直播代运营、店铺自播商家用户SaaS产品+运营服务,这种运营服务是合作模式的,也就是宇宙猫通过产品吸引用户,再通过合作商去解决SaaS产品无法解决的问题旗下产品宇宙猫切入的是相对于企业直播来说更加垂直的应用场景-直播电商运营,提供SaaS产品的同时,也有代运营服务,在数据决策方面受飞瓜等平台竞争,在直播团队管理方面受企业形态影响(小客户付费意愿低,大客户需要更加智能化的解决方案)星麦云商企业内容科技服务商短视频、直播电商零售商家、私域运营品牌以SaaS产品矩阵来实现垂直领域内服务覆盖星麦云旗下包含企业内容营销辅助、直播SaaS、品牌账号矩阵管理等产品,跑通了短视频平台,尤其抖音生态下,商家流量营销、内容生产等场景下的电商模式据艾瑞咨询《2022年中国企业直播行业发展趋势研究报告》,微吼和微赞是处于企业直播这一领域头部梯队的,而维妥科技和星麦云相对于他们来说,规模更小,但所在赛道没有前者竞争更激烈,但如果不能切入大中型客户,且具备一定产品/技术优势打造智能化解决方案,仅靠降本增效对于付费意愿不强的小商家来说,产品可替代性较高,企业将无法在规模和盈利上有较好的预期(靠投资活着,仅个人观点,欢迎指正)三、产品设计一般来说,进行一场直播带货,整个流程涉及到:内容策划、商品选品、直播投流、直播间搭建、场控、播后复盘等,每个流程节点都能衍生出许多需求场景。而且,往往一场直播,需要多个角色来共同协作,还要考虑到团队管理相关问题。下面我将结合这个流程图和过往产品设计经历进行相关描述:工作台模块:对于MCN机构或者商家自播来说,想要对一天的直播数据做一个快速预览,应该从哪几个数据维度呢?应该是:“直播、看播、成交”,即我今天播了多少场、有多少人看,成交了多少。注意,这里的开播场次,官方定义为:开播时长大于25min的直播间为有效开播场次。那么,聪明的你就要问了,是不是我播的越久越好呢?这个也不一定,还真的有不少商家觉得播的越久越好,因此诞生了机器人播、无人值守24h播等业务形态。正常来说,一天直播2~6个小时,且分时段来播是比较合适的,打造好直播策略,肯定比企图通过时长来提升效益靠谱得多。而“观看人数”、“成交”属于看播-转化数据,对于看播转化数据,官方有一个专业的数据指标叫:“千次看播成交(GPM)”,这个词的意思是我官方给你这个直播间平均推送1000流量,你能成交转化多少,是衡量一个直播间质量的指标,介于工作台模块是所有直播的数据概览,这个数据指标可以放到具体的直播间复盘数据里去。数据看盘模块:对于这个模块,官方巨量百应以及像飞瓜这样的产品,都做了很细致的参考,像官方有个很不错的点就是对于各项数据都提出了整改建议(虽然这些建议我感觉都是术语没太大用哈哈,但是产品设计方向是对的,你不能弄一堆数据全让商家自己复盘)不要在意这些细节数据看盘模块我们重点分析,在直播电商中,数据复盘的维度。如何通过数据来看一场直播的质量呢?我们先来看官方给出的指标是:⑴“直播时长”可以拆解为:“有效场次”、“有效天数”、“有效时长”⑵"单小时流量"可以拆解为:“流量效果”、“流量因子”、“短视频引流”、“粉丝流量”⑶“千人看播成交额(GPM)”可以拆解为:“商品效果”和“商品结构”直播成交公式再来看头部数据分析产品飞瓜的指标,分为:“综合指标”、“留存分析”、“流量结构”、“互动指标”、“观众画像”维妥科技-宇宙猫:总体来说,划分的维度是大差不差的,从流量关系上是“流量-互动-转化”这3个维度的数据,从交易逻辑上是“主播-商品-粉丝”这3个维度的数据。一场直播下来,商家要看到的是我花了多少钱,带来了多少流量,这些流量给我带来了多少收益。细分来说,例如直播间的流量构成,有多少是付费流量,有多少是自然流量,这些流量是从哪些渠道过来的(下次直播的时候,你花钱做了投放,一场直播下来,场均uv价值是多少,如果不符合你的预期,是不是投放的人群不对(在互动数据较好的情况下)因此,数据复盘模块也是数据间的交叉验证,直播成交GMV=变量元素(ABC),如果A数据好的情况下,是不是B、C数据有问题。当然,数据间的影响也是有的,比如你直播间互动数据都不好,那么成交数据肯定也不会好。万能成交公式就是正确的废话,你这个数据好了,那个数据好了,整体数据就好了。所以这也是我前面提到的,官方的诊断建议是正确的废话。而直播SaaS产品数据决策模块要做是“带你看看别人怎么做直播”。它要做的事就是一个数据交叉验证的事情,同样一场直播,你和A商家投放成本差不多,最后结果却不一样,我把A商家的数据拿来给你看看,发现是哪个环节出了问题。这也将是第二章将提到的“直播场次对比”、“直播监测”等模块的设计逻辑。未完待续
0条评论