经验分享之会员 SaaS 系统

一、前言

2018年,这是不平凡的一年;互联网行业的中台战略、会员经济等模式如火如荼,同时也逐渐地走入我们公司每个人的视野。在南海集团的战略规划背景下,当时我所在的公司作为集团的研发中心,承担了对会员 SaaS 系统的建设。很庆幸当时我参与了这个项目,因此也提升了我对 SaaS 模式的基本认知、及技术架构的精进。借此机会,我把这段经历的主要内容分享给大家。

SaaS(Software-as-a-Service),意思为软件即服务,即通过网络提供软件服务。SaaS 平台供应商将应用软件统一部署在自己的服务器上,客户可以根据工作实际需求,通过互联网向厂商定购所需的应用软件服务,按定购的服务多少和时间长短向厂商支付费用,并通过互联网获得 Saas 平台供应商提供的服务。SaaS 是软件的开发、管理、部署都交给第三方,不需要关心技术问题,可以拿来即用。常见的产品有 Gmail、PayPal、淘宝、Shopify。

相关概念:

1、PaaS(Platform as a Service),是指平台即服务。是一种云计算服务,提供运算平台与解决方案服务;抽象掉了硬件和操作系统细节,可以无缝地扩展。开发者只需要关注自己的业务逻辑,不需要关注底层。提供的服务,例如:操作系统、数据库、中间件、动态运行库等底层软件服务。

2、IaaS(Infrastructure as a Service),即基础设施即服务。指把 IT 基础设施作为一种服务通过网络对外提供,并根据用户对资源的实际使用量或占用量进行计费的一种服务模式。提供的服务,例如:服务器、存储、网络、CDN 等基础设施。

举个例子,假如要开发一个基于微信小程序商城系统。

IaaS 模式:需要购买服务器,数据库、域名,并且开发小程序商城。

PaaS模式:微信小程序提供云开发服务,免去了服务器、存储、域名等,只需开发程序即可。

SaaS 模式:微信提供商城程序,只需开通即可。

二、会员 SaaS 系统

1、架构示意图

2、架构描述

2.1、主控端分为租户系统、平台系统。

2.2、租户系统管理该租户下的数据及子系统,例如:会员数据、积分数据等。

2.3、平台系统管理所有的租户,例如:租户的创建、初始化、服务控制等。

2.4、每个租户以系统套件的方式,部署在 K8s 集群服务中;每个组件都容器化运行。

2.5、每个租户系统套件,都被服务调度系统管理和约束;且定期做服务健康检查。

2.6、每创建一个新的租户,服务调度系统会自动构建、部署新的租户系统套件,包括:组件的部署、数据库的创建等。

2.7、每个租户的数据都是单独的数据库进行存储,定期会被同步到大数据中心仓库。

2.8、每个租户的客户端,可以直接通过子域名调用到租户系统套件服务。

2.9、子域名的配置,是通过域名泛解析的方式实现;可直接解析到指定的套件系统上。

三、租户数据隔离模式

模式一:每个租户一个数据库

每个租户配置一个独立的数据库。

优点:

1、数据隔离级别高、安全性好。

2、简化数据模型,可满足不同租户的特定需求。

3、某个租户出现故障,可快速回滚。

4、便于支持私有化部署。

缺点:

1、数据库数量多,维护成本及数据库费用成本高。

2、设计、实现的难度比较高。

模式二:租户共享数据库,隔离数据结构

多个租户共享一个数据库,每个租户一个数据表,例如:tenant_a、tenant_b。

优点:

1、逻辑数据隔离,每个数据库可支持多租户。

2、硬件成本相对较低。

缺点:

1、数据库出现故障,恢复难度大;会对其他的租户数据造成影响。

2、跨租户进行数据统计会变得复杂。

模式三:租户共享数据库,共享数据结构

多个租户共享一个数据库,且共用一个数据表,通过租户 ID tenant_id 区分。

优点:

1、硬件成本低。

2、理论支持租户数量最大、运营成本相对较低。

缺点:

1、数据隔离级别最低、安全性最低。

2、数据恢复难度最大、备份数据困难。

小结:

1、模式一,称为桶模式;模式二、模式三,称为池模式。

3、数据的安全性要求极高的业务,或属于政府监管类的系统,最好是采用模式一。

4、成本控制比较严、预算有限的业务,可采用模式二、三。

5、当时我们公司的架构师在 Info Q 的《深圳全球架构师峰会》上与嘉宾还讨论了关于数据存储模式的问题。

四、安全策略

1、系统部署方面,尽量选择有基础保障能力和安全防护能力的云平台;云平台相对于普通的 IDC 机房来说,具有高可用性、安全性及弹性扩容的优势。

2、服务器运维方面,建立运维审核机制、安全堡垒机、访问控制、防攻击策略等。

3、租户系统方面,支持双因子认证、增强密码复杂度、提升验证码破击难度等。

五、总结

1、对于 Saas 系统的客户来说,客户比较关心自己的数据能不能得到有效的保护。

2、数据存储方式的选型上,在系统的设计之初需要着重的权衡。

3、服务调度及监控系统,在 SaaS 系统中尤为重要,是系统稳定性的根本保障。

4、SaaS 系统需要具备一定的安全防护能力,来保障客户的服务、数据的安全。

5、SaaS 系统是项长期工程,需要逐步的迭代和演化。

六、结束语

人生的每一段经历,可以很简单、很平凡;但是需要有一定的有收获,无论大与小,无论好与坏;会员 SaaS 系统的建设,使用到了很多的技术栈、技术架构。因对我来说收获颇多,扩充了我的技术视野。希望这次分享,可以让大家对 SaaS 系统有一些了解。

每一次的总结,是为了下一次更好的开始;与君共勉,感谢大家聆听!

经验分享之会员 SaaS 系统的更多相关文章

  1. [经验分享]C# 操作Windows系统计划任务

    背景:我做了一个事情是要自己提前创建好很多要定时执行的任务,在我不在的时候自动执行这些程序,以保证我的工作能无人值守,那么我就需要建立系统计划任务来帮我完成这件事情,当然用脑子想想如何实现,很简单,每 ...

  2. CIO必看:跨国集团采购部报表系统的建设经验分享

    CIO必看:跨国集团采购部报表系统的建设经验分享 引言 福耀集团是国内最具规模.技术水平最高.出口量最大的汽车玻璃生产供应商,产品"FY"商标是中国汽车玻璃行业第一个"中 ...

  3. 鸿蒙系统开源学习经验分享HarmonyOS[www.allharmonyos.com]

    分享鸿蒙系统开源知识,分享学习经验,分享鸿蒙系统开发经验 www.allharmonyos.com https://gitee.com/allharmonyos https://github.com/ ...

  4. saas系统架构经验总结

    2B Saas系统最近几年都很火.很多创业公司都在尝试创建企业级别的应用 cRM, HR,销售, Desk Saas系统.很多Saas创业公司也拿了大额风投.毕竟Saas相对传统软件的优势非常明显. ...

  5. SaaS 系统架构设计经验总结

    2B SaaS系统最近几年都很火.很多创业公司都在尝试创建企业级别的应用 cRM, HR,销售, Desk SaaS系统.很多SaaS创业公司也拿了大额风投.毕竟SaaS相对传统软件的优势非常明显. ...

  6. SaaS 系统架构,Spring Boot 动态数据源实现!

    这段时候在准备从零开始做一套SaaS系统,之前的经验都是开发单数据库系统并没有接触过SaaS系统,所以接到这个任务的时候也有也些头疼,不过办法部比困难多,难得的机会. 在网上找了很多关于SaaS的资料 ...

  7. 【原创经验分享】WCF之消息队列

    最近都在鼓捣这个WCF,因为看到说WCF比WebService功能要强大许多,另外也看了一些公司的招聘信息,貌似一些中.高级的程序员招聘,都有提及到WCF这一块,所以,自己也关心关心一下,虽然目前工作 ...

  8. (转)CMOS Sensor的调试经验分享

    CMOS Sensor的调试经验分享 我这里要介绍的就是CMOS摄像头的一些调试经验. 首先,要认识CMOS摄像头的结构.我们通常拿到的是集成封装好的模组,一般由三个部分组成:镜头.感应器和图像信号处 ...

  9. thinkphp开发技巧经验分享

    thinkphp开发技巧经验分享 www.111cn.net 编辑:flyfox 来源:转载 这里我给大家总结一个朋友学习thinkphp时的一些笔记了,从变量到内置模板引擎及系统变量等等的笔记了,同 ...

  10. 线上Linux服务器运维安全策略经验分享

    线上Linux服务器运维安全策略经验分享 https://mp.weixin.qq.com/s?__biz=MjM5NTU2MTQwNA==&mid=402022683&idx=1&a ...

随机推荐

  1. 重新点亮linux 命令树————su和sudo[七]

    前言 简单整理一下su和sudo这两个命令. 正文 su 这个命令是用来切换用户的. 一般我们切换命令su,还是在原来的路径下面,但是如果想要直接回到切换用户的用户目录的话,可以使用su - user ...

  2. mysql 重新整理——索引优化explain字段介绍二 [十]

    前言 紧接上文. 正文 type type字段有如下类型: 1.all 2.index 3.rang 4.ref 5.eq_ref 6.const,system 7.null 最好到最差的顺序为: s ...

  3. 实训篇-Html-表单练习

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  4. 《C# in depth》第6章C#6.0中的更改(十四)——表达式体

    表达式体成员是一种在C# 6及以上版本中引入的语法.它允许开发人员使用Lambda表达式来简化方法或属性的定义. 在使用表达式体成员时,可以将方法或属性的实现写在一个Lambda表达式中,然后直接返回 ...

  5. 力扣442(java)-数组中重复的数据(中等)

    题目: 给你一个长度为 n 的整数数组 nums ,其中 nums 的所有整数都在范围 [1, n] 内,且每个整数出现 一次 或 两次 .请你找出所有出现 两次 的整数,并以数组形式返回. 你必须设 ...

  6. 居然之家:核心业务系统全面上云,采用PolarDB替代传统商业数据库

    ​简介: 国内家居零售龙头企业居然之家完成7大核心业务系统全面上云工作,并实现ERP等核心业务系统从传统商业数据库向阿里云PolarDB云数据库的替换,助力业务系统整体处理能力提升50%以上,弹性能力 ...

  7. Mac安装mysql5.7

    1.下载文件(访问就直接下载了) http://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.10-osx10.10-x86_64.dmg 2.打开下 ...

  8. Mybatis的逆向工程(generator)

    Tips:Mybatis generator官网 http://www.mybatis.org/generator/configreference/commentGenerator.html Myba ...

  9. SAP集成技术(三)接口管理的挑战

    接口管理不是一个新概念,在云应用出现之前,就有接口管理问题,和混合场景相比,不同应用间的集成更为常见.经典的问题包括:哪个工具是我的使用场景中的正确选择?如何操作我的集成平台?如何设计组织?以及如何保 ...

  10. Solution Set - 数学相关

    CF645F Link&Submission. 利用 \(\sum\limits_{d|n}\varphi(\frac{n}{d})=n\),只要对每个数 \(x\),求出 \(cnt_x\) ...