转载地址:
https://www.cnblogs.com/heiming/p/5990681.html
SaaS架构经验总结
2B Saas系统最近几年都很火。很多创业公司都在尝试创建企业级别的应用 CRM, HR,销售, Desk Saas系统。很多Saas创业公司也拿了大额风投。毕竟Saas相对传统软件的优势非常明显。
最近一年,有幸架构一个Crm saas 系统,上线了几个月来,各方面都比满意。整个系统创建过程,踩了很多坑,收获也比较多。总结一下Saas系统架构一些特点:
saas系统分层大概是:
租户识别>应用层>数据访问层>缓存层>数据库
业务代码都是写在应用层。
租户识别可以用
spring
拦截器实现,然后使用
ThreadLocal
传递给后端
数据库和缓存层对应用层应该是透明的。程序员在写代码的时候,只关心业务逻辑,不应该担心多租户的问题。
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了,也不至于信息串了互相泄露。二来将来做分表分库也很方便,上层应用不用修改。
比较好做法是通过url识别租户。系统是给租户生成一个随机的三级域名,比如 abc.crm.baidu.com. 如果客户想使用自己的域名,可以在cname到我们生成的三级域名,并在管理系统里面做绑定。
这样一个租户可以有两个域名,访问saas,一个随机生成的三级域名,另外一个租户自己的域名.代码里面可以根据过来的域名,判断是那个租户然后初始化TenantContext.
如果不想通过域名来做,也可以通过登录名来判断。这种方式要涉及到租户切换问题。
以后补充。
Saas系统是必须考虑计费系统和租户控制系统。这个系统需要都是独立设计。比如那个租户购买了那些模块,一个月多少钱。租户可以创建最多的用户数。计费到期邮件提醒等功能。
计费方式一般有两种,周期性计费,类似月租方案,和使用量计费,用多少付多少。 周期性计费比较简单。也可以两者结合起来。
SAAS的优势在于一套系统多人使用,似乎和定制化开发有冲突。比如A客户想要A功能,B客户不想要。但定制化开发是无法避免的,比如CRM系统这样复杂的系统,不可能一套系统满足所有公司的要求。定制化开发尽可能分系统,分模块去做。然后通过控制台中配置不同租户订购不同模块,那些模块可以在前端页面上显示。不同的子系统需要分开部署。前端可通过nginx根据url分发,比如 abc.crm.baidu.com/bi/xxx/xx这个地址,就分发到BI子系统。不要尝试OSGI去搞模块化,这个是个大坑。
还有开发和产品,现有需求一定要分析清楚,不要一上线发现后患无穷。新功能尽量做的独立可以配置。
SAAS付费企业客户对系统问题都特别敏感。 为了减少升级可能出现问题的影响范围,一般都采用灰度升级策略(灰度升级)。如果使用了url来区分不同租户,灰度升级配置就会很方便。可以配置nginx 来根据域名做分发,比如租户A(aaa.com)到实例1(版本1.0),租户B(bbb.com)到实例2(版本). 当需要域名配置非常多的时候,nginx配置文档会乱。这块时候可以考虑使用nignx_lua来写一些扩展模块。
暂时先写这么多了。有时间再补充。
云计算的三种服务模式:IaaS,PaaS和SaaS
转载地址:https://www.cnblogs.com/heiming/p/5990681.htmlSaaS架构经验总结2B Saas系统最近几年都很火。很多创业公司都在尝试创建企业级别的应用 CRM, HR,销售, Desk Saas系统。很多Saas创业公司也拿了大额风投。毕竟Saas相对传统软件的优势非常明显。最近一年,有幸架构一个Crm saas 系统,上线了几个月来,各方面都比满...
2B Saas系统最近几年都很火。很多创业公司都在尝试创建企业级别的应用cRM, HR,销售, Desk Saas系统。很多Saas创业公司也拿了大额风投。毕竟Saas相对传统软件的优势非常明显。
最近一年,有幸
架构一个Crm saas 系统,上线了几个月来,各方面都比满意。整个系统创建过程,踩了很多坑,收获也比较多。总结一下Saas系统
架构一些特点:
1.分层设计
一、SaaS基础概念
SaaS 是 Software-as-a-Service(软件即服务)的简称,是一种区别于传统软件购买和安装的、互联网化的“按需租用”软件交付模式,也是一种面向软件应用的云服务模式。(SaaS可以理解为服务器、数据库、网络、代码等都放在云上)
举个例:现在公司需要一套管理软件系统,老板交给你负责。
那么你可以有三种解决方案:
自己开发一套
买一套回来安装
租一个线上系统
SaaS产品大概分为几类
业务垂直型
专门针对某个特定的业务环节,例如人事、财税、项目协同等等;
sass系统设计架构是指可扩展样式表语言(SASS)的软件系统的设计和结构。SASS是一种CSS预处理器,可以使CSS更易于编写和维护。SASS系统设计架构的目标是提供一个可靠、可扩展和高效的SASS编译器和工具集。
SASS系统设计架构通常包括以下组件:SASS编译器、SASS解释器、SASS解析器、SASS语法分析器、SASS代码生成器、SASS模块库和SASS插件接口。这些组件共同协作,实现了SASS的高效编译和处理。
SASS系统设计架构的核心原则是可扩展性和可维护性。它应该能够轻松地扩展功能和集成插件,同时也应该易于维护和调试。为了实现这些原则,SASS系统设计架构通常采用模块化和分层的架构,以便组件之间的解耦和复用。
总之,SASS系统设计架构是一种高效、可扩展和可维护的软件系统设计,能够实现SASS的编译和处理,并提供了丰富的功能和插件接口。
以往万一:
postgresql查询某个字段属于哪个表
A默苍离: