【云驻共创】DTT技术直播系列 NO.1 SaaS云原生应用典型架构
在 SaaS 应用开发专题中会带大家了解 SaaS 云原生的典型架构,之后会为大家提供 SaaS 应用系统设计的课程,包括多租户的创建、多组路由的设计、数据存储方案等等。在长期的技术支持、实践过程中,了解到对于一些中小企业要完成 SaaS 化的改造或者是技术架构的升级,经常会遇到多租路由的问题,对于这一痛点问题,华为开发者技术服务团队开发了一个多租路由插件,希望能够帮助企业快速的完成 SaaS 化改造或者架构升级,并将相应代码开源到码云上,也欢迎广大开发者参与贡献。
后续会给大家详细的介绍实现原理和方式等等,介绍完以上技术内容之后,也会邀请一些优秀的技术架构团队来到华为 DTT 直播间,给大家分享他们是如何进行 SaaS 落地实践。
另外,华为的开发者技术服务团队,为广大的开发者精心准备了课程资料,包括示例代码和开发文档,在示例代码里面会提供 SaaS 化的一个项目,作为大家的技术支持和参考。在开发者文档中会提供详细的方案,包括多租户的创建和多租户的设计方案,以及数据存储方案,他会配合示例代码共同支持快速的完成云上的原生的 SaaS 架构的构建。
一、 为什么要 SaaS 化?SaaS 过程中,通常遇到哪些问题?
企业要完成转型升级匹配实现产业的数字化,达到降本增效的目的,而 SaaS 化的这种资源共享模式,可以让多个企业共享资源池,提给多个企业使用,提高资源利用率,达到降本增效的目的。
接下来,我们看一下独享资源模式和共享多租户模式。
独享资源模式称之为别墅模式。
共享多租户模式称之为公寓模式。
在独享资源的别墅模式下,企业会独享资源空间,可以向他的乙方提出大量的定制化需求,也可以不受其他租户的干扰。
在共享多租户的公寓模式下,很多的企业或用户住在一栋楼里面,他们共享资源空间。
对于企业和个人更倾向于别墅模式,很多中小企业可能遇到资金问题囊中羞涩,他要生存来下,就可能会选择这种共享租户的模式,而这个是绝大多数企业的选择方向。
我们如何去创建这种共享多租户模式,以及可能遇到哪些问题?
在长期的SaaS应用上云技术实践中,总结了七类问题:
- 租户权限管理问题
- 一个企业的租户下面会有不同的组织、团队或者成员,他们会有不同的权限,以及权限的控制策略。
- 在租户与租户之间也有些访问控制策略,避免租户之间的越权,或出现干扰性问题。
- 基础设施的选择问题
- 可以选择IDC 机房、公有云或者混合模式。具体基础设施的选择要根据客户的诉求需要而确定。有些大客户自建数据中心,要求把系统部署到他的数据中心里面。有些中小企业,更关注成本,会选择共享租户的模式。在公有云上面,大企业也可以把自己的系统部署到云上。
- 系统架构设计问题
- 怎么样保证系统安全、可靠。某一个租户的突然峰值流量我们应该怎么处理,我们需要通过比较合理的架构保证弹性的业务请求。
- 租户间干扰问题
- 在 SaaS 的模型下,资源都是共享的。如果没有选择一个合适的技术方案就很难避免租户与租户之间的干扰问题。
- 数据存储架构设计问题
- 选择什么存储类型,是块存储、文件存储,还是对象存储?
- 选择什么数据库,是关系型数据库,还是非关系型数据库?关系型数据库的话,是考虑主从数据库,还是集成数据库?
- 还要考虑不同数据存储之间的流转问题,怎么样做数据的聚合才能够更好的支持分析系统以及 AI 训练平台的搭建?
- 用户定制化问题
- 如何处理这些用户定制化问题(比如,域名、页面风格、功能模块)?
- 多租户计费策略问题
- 一般采用固定的收费策略,租户 A 和租户 B 资源使用量和并发量可能有区别,但他们的计费,比如包月、包年的费用上还是一样的,显然这不是一种合理的方式。如何采用更精细粒度的计费模式?比如,根据后端资源用量,或根据前端并发的请求量设计多租户的计费模型。其实这是一个非常复杂的问题。
二、 SaaS 多租架构全景视图
在了解全景视图之前,首先,我们看一下独立部署架构模式视图。从图中可以看到,不同用户会交付不同的版本,不同的版本有不同的特性,其中包括运维系统、运营系统,他们都需要独立的建设。
在企业早期为了保证方案的竞争力,能够快速的响应客户的诉求,我们可以去通过这种方式来做交付。但随着企业用户的增长,比如,到了上千家、上万家,如果还是采用这种模式交付的话,就会对整个企业未来的成长将会产生消极的影响,在这个时候我们需要向一个新的技术架构演进—— SaaS 化的架构。
首先,看一下 SaaS 架构基础功能的组件:
- 登录认证统一授权模块。通过统一授权识别租户的请求。
- 租户路由模块。通过租户路由识别用户请求的动态路由,准确路由到对应租户下面的资源池,上下文的背景信息中唯一的识别信息就是 TenantID,会在请求中通过请求头携带TenantID 信息。
接下来,介绍配套的 SaaS 运营与运维系统的一个平台。这个平台也是相较独立部署的优势。在运营平台的构建过程中,我们会搭建分析系统做数据聚合。在这种多租户模式下,数据聚合就能够比较容易的把各个业务模块的业务数据、日志数据还有前端的埋点数据聚合到数据湖的存储空间里,并在其上做分析,包括大数据的分析或者 AI 模型的构建。支持智能决策和智能分析的应用,能够提升各租户的用户体验。
最后,建立好运营分析系统之后,也可以考虑建立一套运维系统,他至少包含三个点:
- 租户健康指标的采集。定义一些数据模型来采集租户里面的一些数据,目的是为了监测租户的健康状态。
- 遇到异常会有一些告警策略。告警是通过日志相关的服务能力定位哪个租户出了问题,租户下面哪个业务模块出了问题。
- 对于更深层次问题的定位,比如堆栈的层级,需要借助链路追踪来识别,是当前模块出了问题,还是上下文模块出了问题导致的。
独立部署架构需要独立配置、独立部署、独立运维、独立运营。企业发展前期可以采取这种模式形成竞争力,但企业成长到一定阶段后,还采用这种交付模式,会对企业的发展产生瓶颈。这时我们就要往 SaaS 多租户架构的方向发展。SaaS 多租户架构会提供统一登录鉴权机制、统一运营运维、资源共享。
三、 SaaS 多租模式的类型
我们以 SaaS 多租户模式的三层应用架构为例,我们需要了解在什么业务场景下,选择什么样的模式,来匹配我们的业务场景。这里大概有三种模式:
- 独享资源模式
- 共享资源池租户模式
- 混合租户模式
3.1. 独享资源模式
他主要面向一些大的企业,他们对安全性要求比较高,希望在自己的机房或者云上有一个独享的资源空间来部署,通常这样的企业不差钱。
3.2. 共享资源池租户模式
3.2.1. 全共享资源池模式
全共享的模式包括应用层、web 层还有数据层统一的集中部署,通过逻辑隔离策略进行隔离。通常匹配一些业务场景比较稳定,企业访问的请求比较平稳的情况,他们比较适合选择这种全共享的模式。
3.2.2 数据层共享模式
数据层共享模式的业务层采用独立部署的模式。这样的话,通常会在数据层采用像关系型数据库的表级别隔离或 schema 的隔离。在 k8s 中,应用层可以通过 namespace 或者集群的方式进行隔离。在网络层面通过 VPC 的方式进行隔离。比较适合,对计算资源和内存消耗比较大的业务场景,像大数据的 SaaS 化分析平台,还有 AI 的 SaaS 化平台。
3.2.3. 租户应用环境共享模式
租户应用环境共享模式,在应用层完全共享,在数据层通过数据库实例进行隔离,保证在每一个租户都有一个稳定的、可靠的数据库请求的能力,能够处理一些高并发的请求。比较适合,OA 的SaaS 化系统,CRM 的 SaaS 化系统。
3.5. 混合租户模式
通常是企业发展到一定阶段,既有一些大客户资源,也有一些中小企业资源,比较合适采用这种混合租户模式。这种模式能够充分采用独享资源模式和数据层共享模式的优势。在这种模式下,需要建立统一的运营、运维中心,做一些网络的打通,通过 API 的方式把一些非关键的核心数据统一上报到运维平台或运营平台,做统一的运营运维分析,做统一的版本管理。
3.6. 不同模式的对比
下图为三种模式的使用场景以及优缺点:
四、 云上典型的 SaaS 技术架构
4.1. 微服务开发框架
一般会选择一个微服务的框架来做技术实现,比如 SpringBoot 、SpringCloud 和 SpringCloud Huawei 都支持搭建这样一个应用。如果对这些微服务框架不是特别熟的话,也可以直接采用华为的微服务引擎来实现服务注册、发现和治理的能力,也可以采用现在比较流行的服务网格,还可以结合华为 CCE 和 Istio 实现服务的流量治理。
4.2. 应用部署集群
当完成微服务的开发,接着就要考虑部署架构。推荐使用 k8s 的集群模式。对应华为的云服务产品是华为云容器引擎 CCE。他的优势是能够对接多种存储类型(比如,块存储,对象存储,文件存储)。通过 k8s 开放 的 CSI 接口能集成云上不同的存储资源。我们可以在自己的应用系统里面做好合适的数据类型的分类,能够在降低数据成本的同时保证系统的访问性能。提供了两层的弹性伸缩策略,pod 层级的实例数量伸缩,node 层级的资源池合适的扩容。还可以提供不同层级的隔离,k8s 通过 policy 实现了内部资源的隔离性。
4.3. 数据库、中间件
数据库和中间件在 SaaS 化系统里面,不推荐使用单机的模式,至少要有主备的能力,如果需要进一步提升性能,可以采用集群模式。比如,华为云的 Redis 提供了多版本的能力(Proxy 集群,Classic 集群),华为云的消息队列服务提供了多种集群(Kafka,RabbitMQ),华为云的数据库提供了关系型数据库的主从模式,非关系型数据的集群模式。通过云上的能力能够快速的帮我们搭建一个高可靠的中间件和数据库。
4.4. 运维监控系统
在运维监控这一部分,比如日志的搭建可以采用 ELK,应用运维系统的搭建可以采用 Prometheus 加 Grafana 的开源方案,应用系统性能的监控可以采用 Zipkin、Skywalking的开源组件搭建。华为云上也提供了全栈的技术能力支持开发构建一体化的运维监控系统。我们可以通过运维监控系统获取一些信息,方便定位问题,了解应用系统中哪些模块出了问题。如果需要更深度的监控信息,我们需要使用 APM 的监控,形成完整的调用链追踪。当发生问题时,我们可以快速定位是当前模块出了问题,还是上下游出了问题引起当前模块出现问题。
4.5. 数据分析运营平台
搭建分析运行平台,采集业务数据和日志数据构建分析模型提升租户中用户的体验,也可以通过外部工具采集一些公共的数据,构建一个混合的通道,支持市场部获取一些资源。在分析平台需要做数据的汇聚,需要一个统一的数据湖存储分析平台。华为云提供了对象存储的服务,他不仅支持结构化的存储,还支持非结构化的存储,而且他还提供高带宽的访问能力。
4.6. 搭建一个 CI/CD流水线
通过 Jenkins 搭建一个 CI/CD 的流水线,集成代码检查和一些外部漏洞扫描的能力,保证代码质量,通过流水线快速把代码打包成容器镜像,将镜像提交到容器镜像仓库,就可以在模块中使用镜像进行快速的升级和迭代。
对于一个 SaaS 系统不可能是一个封闭的系统,他一定需要通过 API 或 SDK 的方式对外提供服务,或者集成一些第三方服务再间接提供服务。我们可以通过 Kong 搭建一个网关,实现对外提供 API 服务,引导第三方系统集成我们的 SaaS 化应用平台。
4.7. 云上安全
我们还需要关注安全问题,对于一个 SaaS 化企业而言,安全就是生命线,有可能所提供的 SaaS 服务是企业全部业务,一旦出现安全事故,对于企业持续运营以及拓展客户都会带来一些阻碍,甚至是致命的。华为云也提供了相应的服务,包括外部防火墙、数据安全、探测感知的安全能力,这些都支持构建 SaaS 安全的解决方案。现在对于一个企业要购买 SaaS 化解决方案时,他会要求供应商提供一些资质,确保所购买的服务安全可靠。
整体架构图如下:
五、 华为云为开发者 SaaS 应用架构提供支持
5.1. SaaS 应用开发技术支持套件
SaaS 应用开发指南,SaaS 开发实例代码,SaaS 开发插件以及配套的培训课程等。
5.2. 商业渠道支持
开发完成的 SaaS 应用,可上架至华为云应用商店,实现商业变现。
5.3. 现在咨询
可以进行解决方案、云上开发 bug 等问题咨询,提供 SLA 机制保证。
5.4. 云资源支持
加入华为云 SaaS 星光计划,申请华为云资源支持。
六、 总结
- 从技术面讲,SaaS 化的核心是实现资源共享,通过共享模式实现成本的降低。
- SaaS 多租模式由于共享特点,需要更加关注用户体验,在技术方案选择上要求更高。
- SaaS 应用构建应重视运维、运营以及敏捷性。
- 充分利用云上分布式、弹性伸缩等能力的特点,将极大降低构建 SaaS 的难度。
- 华为云为企业 SaaS 应用构建提供“技术-资源-商业-咨询答疑”全生命周期服务。
本次重点解决了 SaaS 应用上云技术实践中,七类问题的三个:
- 基础设施选择问题
- 系统架构设计问题
- 数据存储架构设计问题
其余没有彻底解决的问题,将会在后续的课程中逐一解决。
本文参与华为云社区【内容共创】活动第18期。
https://bbs.huaweicloud.cn/blogs/364560
任务25:DTT技术直播系列 NO.1 SaaS云原生应用典型架构
- 点赞
- 收藏
- 关注作者
评论(0)