开发一个SAAS系统如何搭建技术架构?
首发

开发一个SAAS系统如何搭建技术架构?

优质
请用语音读文章

热门回答:

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

最近一年。有幸架构一个Crm saas 系统。上线了几个月来。各方面都比满意。整个系统创建过程。踩了很多坑。收获也比较多。总结一下Saas系统架构一些特点:

1.分层设计

saas系统分层大概是:

租户识别>应用层>数据访问层>缓存层>数据库

业务代码都是写在应用层。

租户识别可以用spring拦截器实现。然后使用ThreadLocal传递给后端

数据库和缓存层对应用层应该是透明的。程序员在写代码的时候。只关心业务逻辑。不应该担心多租户的问题。

2.数据隔离要透明

saas系统说起来很简单。任何系统似乎加个tenant_id(租户id)就变成saas系统了。比如原来的用户登录是:

select username,password from users where email=’abc@qq.com’

改成

select username,password from users where email=’abc@qq.com’ and tenant_id =1;

  

对于复杂业务的saas系统。这样做法非常危险。而且开发效率很低。你想想如果那个程序员写sql时候忘了加 “ and tenant_id =1” . 结果不堪设想。

比较好做法是在数据库访问层对SQL进行改写。

TenantContext.exec(\”select username,password from users where email=’abc@qq.com’ \”);

在连接池根据TenatnContext改写Sql.

这样做好处是。一来程序猿最多把系统搞down了。也不至于信息串了互相泄露。二来将来做分表分库也很方便。上层应用不用修改。

3. 租户识别方案

比较好做法是通过url识别租户。系统是给租户生成一个随机的三级域名。比如 abc.crm.baidu.com. 如果客户想使用自己的域名。可以在cname到我们生成的三级域名。并在管理系统里面做绑定。

这样一个租户可以有两个域名。访问saas,一个随机生成的三级域名。另外一个租户自己的域名.代码里面可以根据过来的域名。判断是那个租户然后初始化TenantContext.

如果不想通过域名来做。也可以通过登录名来判断。这种方式要涉及到租户切换问题。

4. 智能DNS

以后补充。

5. 租户管理系统(计费。订购。定制。充值。催缴)

Saas系统是必须考虑计费系统和租户控制系统。这个系统需要都是独立设计。比如那个租户购买了那些模块。一个月多少钱。租户可以创建最多的用户数。计费到期邮件提醒等功能。

计费方式一般有两种。周期性计费。类似月租方案。和使用量计费,用多少付多少。 周期性计费比较简单。也可以两者结合起来。

6. 定制化开发

SAAS的优势在于一套系统多人使用。似乎和定制化开发有冲突。比如A客户想要A功能。B客户不想要。但定制化开发是无法避免的。比如CRM系统这样复杂的系统。不可能一套系统满足所有公司的要求。定制化开发尽可能分系统。分模块去做。然后通过控制台中配置不同租户订购不同模块。那些模块可以在前端页面上显示。不同的子系统需要分开部署。前端可通过nginx根据url分发。比如 abc.crm.baidu.com/bi/xxx/xx这个地址。就分发到BI子系统。不要尝试OSGI去搞模块化。这个是个大坑。

还有开发和产品。现有需求一定要分析清楚。不要一上线发现后患无穷。新功能尽量做的独立可以配置。

7. 灰度升级

SAAS付费企业客户对系统问题都特别敏感。 为了减少升级可能出现问题的影响范围。一般都采用灰度升级策略。如果使用了url来区分不同租户。灰度升级配置就会很方便。可以配置nginx 来根据域名做分发。比如租户A(aaa.com)到实例1(版本1.0)。租户B(bbb.com)到实例2(版本). 当需要域名配置非常多的时候。nginx配置文档会乱。这块时候可以考虑使用nignx_lua来写一些扩展模块。

8. 容量估计

其他观点:

我们衡量一个SaaS系统的好坏通常通过SaaS成熟度模型来进行评价:

1、SaaS成熟度模型

• Level1:定制开发的SaaS应用

– 多次开发模式

• Level2:可配置的多租户SaaS应用

– 一次开发多次部署模式

• Level3:单实例支持多租户的SaaS应用架构

– 一次开发一次部署模式

• Level4:支持可伸缩性的多租户SaaS应用架构

如果要搭建满足Level4的SAAS系统。除了要满足可配置和多租户的需求之外。关键的技术架构还是分布式架构:

目前常用的分布式架构主要有SOA和微服务。而SOA太重。推荐使用微服务来构建SAAS应用。有关微服务的介绍请参考我的一篇文章:《研发三要素之术篇-微服务》:https://www.toutiao.com/i6675844031181750788/

其他观点:

我目前就在搞saas 软件。说实话和传统软件技术架构区别不大。整体上需要实现多租户。可配置。7*24高可用这个目标!数据架构层面要实现数据隔离。可以具体百度下隔离方式!系统分层方面主要包括租户域。租户管理域。运营中心管理域这三个。另外其他就是做好统一权限认证中心。统一资源管理中心就行啦。其他就是传统的微服务架构。网关。注册中心。配置中心。我是搞Java的。建议使用springcloud 技术栈。前后端分离开发!

用手机编辑的。其实如果讲的话。真的可以从整体到局部涉及很多东西。但是大致方向都是以上所诉!好的saas 软件真的在于产品设计。市场定位!技术只是产品的转诉!有兴趣的朋友可以联系我。

以上就是由优质生活领域创作者 生活常识网 整理编辑的,如果觉得有帮助欢迎收藏转发~

分享到 :
相关推荐

想定制一套西服,选择什么价位的好呢?

请用语音读文章热门回答:定制一套西服到底多少钱?今天我们可以来算一算:定制首[&he...

玩游戏真的能让人开心吗?我玩游戏怎么不开心?

请用语音读文章热门回答:哈哈哈。这个不知道哇。莫非你没有玩过人家才心情不好的吗?[&...

你有过被窃的经历吗?丢失了什么东西?你能一眼认出小偷吗?

请用语音读文章热门回答:谢邀。你这是三连问哪!如果有火眼金睛又怎么会丢东西![吐[&...

快过年了,我们这里准备在大年三十那天做卤腊肉。你们那里有没有这样的习俗啊?

请用语音读文章热门回答:过年每个地方。只要在华夏大地。都会有备年货的习惯。至于准[&...

发表评论

您的电子邮箱地址不会被公开。

评论(2)

  • 长空夕醉 永久VIP 2022年10月3日 00:09:21

    租户,系统,架构,域名,都是,模块,灰度,自己的,客户,数据

  • 心太野╮ 永久VIP 2022年10月3日 00:09:21

    没想到大家都对开发一个SAAS系统如何搭建技术架构?感兴趣,不过这这篇解答确实也是太好了

  • 意中人 永久VIP 2022年10月3日 00:09:21

    Saas系统最近几年都很火。很多创业公司都在尝试创建企业级别的应用 cRM, HR,销售, Desk Saas系统。很多