导读
巧房SaaS系统,作为业界领先的一站式房产中介解决方案,提供全面的运营管理支持,以适应多样化和复杂的业务需求。该系统为员工提供了一个集成平台,用于执行一系列关键作业,包括房客跟进、客户带看、房源实勘、交易订单管理、营销房源发布、业绩查询、行程量数据统计、财务结算等。
-
数据库架构模式 -
租户数据库管理 -
多分区服务设计
-
开库系统的设计
数据库架构模式
SaaS产品平台,本质上是多租户订阅使用的服务模式,因此在技术架构实现层面,需要对不同租户的数据库存储进行隔离和划分。那具体怎么设计,既能确保数据安全性、隔离性和高效访问,又能符合未来更多客户、更多海量数据增长,同时易于对数据进行管理?我们将几种架构比较下:
架构 | 隔离方式 |
粒度 |
优点 |
不足 |
---|---|---|---|---|
多实例多租户 |
独立应用实例和数据库实例 |
粗 |
数据隔离性好,技术实现相对简单,数据迁移方便 |
成本高、资源利用率低,数据库管理维护复杂、系统升级迭代对库表维护复杂 |
单实例多租户 |
共享数据库,独立表 |
中 |
数据隔离性较好,资源利用率高 |
数据管理复杂,系统升级迭代对库表维护复杂 |
共享数据库,共享表 |
细 |
资源利用率高,管理和维护相对简单 |
数据隔离性较差,安全性要求高,数据量大时会容易产生慢查询 |
表1. 数据库架构模式
巧房SaaS从一开始就采用多实例多租户模式,多个或者一个(特殊)公司共用一个数据库实例(Database Instance)、每个公司独立数据库(Database),同时在数据迁移至58私有云时又在一司一库的基础上扩展成一司多库,最终采用模式如下:
图2. 巧房SaaS数据库模式
究其原因,有以下几点
-
房产数据相对于其他场景数据,对数据的隔离性、安全性要求高; -
单司或单表数据规模都比较大,如单个公司的跟进表发展到后来有达亿及规模的情况,采用分库分表访问方式应对未来数据的增长维护难度也特别大; -
鉴于中介房产司的受市场政策影响比较大,不停的会有公司退出或者进入,对退租公司的数据会根据策略进行备份和清理,以释放资源供新租户使用,同时也节省了成本,多实例模式对数据的备份和清理更简单高效; -
事实上也得益于这种模式,巧房SaaS数据库在从阿里云迁移58私有云过程中能采取按司迁移、在线迁移、逐步验证的策略,将迁移过程对客户的影响降到最低。
租户数据库管理
这里说的管理是针对SaaS所有公司数据库的统一管理,对于多实例多租户模式,数据库的操作管理是一大难题,尤其是在版本升级中一次需要对数以万计的公司库表进行批量变更操作。主要从以下三个方面来介绍:
数据库操作
数据库清理
数据库监控
4.1 数据库操作
通用能力 | 公司库专用能力 |
---|---|
|
|
表3. 系统基础能力列举
4.2 数据库清理
包含两部分:备份表清理和过期公司库清理,主要目的是保障集群稳定、释放空间、节省成本。
4.2.1 备份表清理
主要针对DMS工单产生的备份表以及定期关键表的备份进行清理,这部分表的量不小,我们设定一套数据库集群上放2000个公司库,备份表保存1个月,每个公司库单条业务线的表在300张左右,正常这个集群上业务表数量在60w左右,结果有一天某个集群备份失败告警了,原因是备份时该集群的表数量超100w,备份表居然是正常表的2/3还多,后面不得不缩短备份表保存周期。
其实产生这么多备份表并不奇怪,大部分是一些元数据表备份,比如某次版本升级的一条DMS工单需要对某张配置表的10条属性值分别做修改,对应了10条操作SQL,就会产生10张备份表,对应到2000个库就是2w张备份表,周期内修改次数多,备份表量就暴涨了,因此针对这类表必须有清理机制。
巧房针对备份表清理采用的手段是:先扫描、后重命名、最后删除的策略。
扫描阶段:备份表大都是DMS系统自动备份生成的,表名有规律包含备份日期,根据配置的保存周期,将周期之前备份表收集保存起来。
重命名阶段:这部分其实就是将扫描出来的表名加上后缀“_x”,但这个操作是调用集团CDB平台的接口完成的,因为所有的数据库都托管集团CDB平台上。
删除阶段:将重命名后带后缀“_x”的表进行删除,也通过调用集团CDB平台的接口完成。
图4. 巧房备份表清理流程
4.2.2 过期库清理
图5. 长期未续租公司数据库清理流程
图6. 体验库清理流程
软删除:该阶段将公司状态置为逻辑删除状态,禁止公司登录访问,该状态会同步到Saas系统的所有服务上;
-
重命名: 将公司数据库重命名,该阶段如果客户续租可以快速将公司上线(主要针对非体验库),另外还能发现一些不规范服务并及时加以改造,因为整个SaaS经十年多的发展系统中不乏一些很老的服务的调度任务没有通过正确途径同步公司下线状态而继续在访问数据库,这也是重命名阶段存在的意义; -
硬删除: 将重命名后的库直接删除,将公司状态置为硬删除状态,此操作对体验库是不可恢复的。
4.3 数据库监控
SaaS系统上有上万家公司,意味着几万个数据库、上百个数据库集群,如何进行统一监控和信息管理也是一大挑战。集团的数据库管理平台CDB只支持在集群维度的管理,这在数据库本身管理上没有任何问题,但针对SaaS系统来说缺乏一个全局视图,因此我们基于CDB的开放能力上搭建了一套专用于SaaS公司数据库的监控系统,提供针对SaaS数据库的统一的视图,目前系统具备的一些基本能力和框架如下图:
图7. 巧房SaaS数据库系统架构图
-
集群负载监控视图
图8. 集群负载监控视图
-
系统部分功能界面
图9. 系统部分功能界面
多分区服务设计
巧房SaaS的线下环境跟正常软件开发环境使用定义基本一致,线上环境有所不同,分为BETA、灰度、全量三套环境,我们习惯称之为分区,各个分区会分配独立的服务分组(也可以理解成不同的集群)、归属公司, 同时也分配了三套不同的域名,三个分区的服务版本在平时版本保持一致,只是服务版本升级过程中会存在不一致的情况,其采用技术架构如下图:
图10. 巧房SaaS技术架构图
-
BETA分区:服务发布正式环境之前的验证环境,软件版本在正式发布生产之前,会打包服务正式版本发布到该分区,随之还需将当次版本对应的库表变更发布到该分区对应的公司库上,这样能在该分区验证时发现并修正服务版本及库表数据变更脚本存在的问题。 -
正式环境分区:包含灰度分区、全量分区, 灰度分区只包含一些体量小的公司,其他公司都分布在全量分区,下面重点说下灰度分区的由来。
开库系统设计
5.1 公司定制模板化
图11. 新公司系统开通流程
5.2 公司选库策略
-
评估集群资源利用率难:集群当前负载水平只是在短时间内的状态,会随集群上的公司续租/退租、业务发展、系统使用情况等的变化而改变; -
集群资源利用率不均衡:新建集群资源刚开始肯定是最空闲的,最早创建的集群很可能是最忙的;
-
怎么评估集群资源的占用:我们使用的是集群上的所有公司库的对应公司的购买端口总数来评估。类比使用云上ECS一样,平台是根据购买的资源规格计费,同时分配给你对应的配额,至于你购买后使用情况他其实不需要关注。同理,我们也是按端口数来评估给公司创建的数据库的资源占用情况; -
最低N个里面随机一个而非最低一个:假设总是在最低的那套集群上去建库,可以想象这会发展成跟最早采用的方式一样,新集群总是很空闲,运行的都是新建的公司库,如果是N个就会在这N个之间均衡。
具体的选库流程比上面描述的要复杂,选库参考的维度除端口数还包含集群类型、状态、总端口数阈值、公司数阈值等。
图12. 选库流程
总结与展望
本文探讨了巧房SaaS系统在房产中介业务中的针对租户数据治理一些实践和创新,展望未来,巧房SaaS系统将继续优化和升级,以适应不断变化的市场需求。通过技术创新,巧房SaaS系统将为房产中介业务提供更加智能化、自动化的服务,帮助房产中介公司更高效地管理业务,提供更加精准和便捷的服务。我们期待业内同行的批判指正和互相交流切磋,共同推动房产中介行业的数字化转型和升级。
本文分享自微信公众号 - 58技术(architects_58)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。