【网易云商】构建高效 SaaS 系统的技术要点与最佳实践

news2024/11/17 13:53:28

SaaS 是什么

定义

相信大家都对云服务中的  IaaS、PaaS、SaaS 早就有所耳闻,现在更是衍生出了 aPaaS、iPaaS、DaaS 等等的类似概念。对于 SaaS 也有各种各样的定义,本文给出的定义是:

SaaS 是一种基于互联网提供服务和软件的交付模式,所有网络基础设施及软件、硬件运作平台的所有前期实施、后期维护都由 SaaS 平台完成,用户只需要租赁软件服务并通过互联网接入使用。SaaS 模型依赖敏捷性和运营效率,作为推动增长、覆盖和创新的业务战略的支柱。业内大家通常会以 Salesforce 作为 SaaS 的标杆。

价值

目前市场上越来越多的企业和组织采用 SaaS 服务来替代原来传统的软件采购部署方式,其原因可以主要总结为以下几个方面。

 

另外,相比于传统软件,SaaS 的盈利模式也决定了客户的成功对于 SaaS 厂商来说极其重要,只有客户成功了,才会有续费, SaaS 项目才有办法继续下去。当然 SaaS 系统相比传统软件也会有一些缺点,如独立性、可控性、个性化等。

基础架构

SaaS 系统通常是一个普通的分布式系统,因此它一定具有分布式系统的所有组成要素,如服务发现、负载均衡、序列化协议、传输协议、授权认证、网络安全等等。

入口

客户最直接接触的通常是 SaaS 系统的客户端,客户端的形式可以根据业务的需求决定,常见的有浏览器网页、移动端 APP、小程序、智能设备等。

客户端到服务器的入口通常是一个通用域名或者是每个租户的独立子域名。如互客的入口是 huke.163.com,网易七鱼的入口是 xxx.qiyukf.com。域名的背后就一定需要 DNS 的存在,需要配置出合理的 DNS 解析,通常传统的基于 UDP 的 DNS 服务容易受到中间人攻击,存在被劫持的风险,另外也存在被运营商封禁等情况,因此 SaaS 系统通常通过搭建自己的 HTTPDNS 来规避风险。

有了域名作为入口之后,下一步就是客户端和服务器之间的通信协议,对于少数简单的 SaaS 系统来说只要通过域名和 HTTP 协议就可以完成所有服务,但大部分 SaaS 系统都会存在双向通信的需求,因此还需要维护长连接通道,常用的如原生 TCP 协议,或 Websocket 协议。另外如果业务中有媒体流传输的需求,还会用到 UDP、RTP 协议等。当然,目前市场上对于各种场景和需求都有对应的成熟解决方案,因此 SaaS 系统通常不会去从 0 开始解决所有问题,如长链接和媒体流我们可以集成网易云信的服务来解决。

接入层

接入层通常是各种路由协议以及多层代理组成,如运营商和 AS 之间通常用 BGP 协议或者三线,机房内部通常会有接入的三层交换机,四层代理等等。网易七鱼目前的接入方案如下图所示,而对于规模较小的业务,为了灵活性和性价比,通常会在交换机和 Nginx 之间加入四层代理 nlb。这一层基本都是由集团的 SA 同学负责搭建和运维。

 

业务层

这里我们不去讨论业务上的各种设计模式和分层,因此把接入层之后、数据层之前的所有服务和设施统称为业务层。通常业务层是一个 SaaS 系统研发中投入资源最大的,线上问题如性能瓶颈、稳定性、安全漏洞等大部分都来自于业务层,因此该层也是开发和线上运维的重点。

在业务层目前 SaaS 系统最常用的还是微服务的架构,不同于 IaaS 或 PaaS,SaaS 业务的一个重要特征是其业务复杂度很高、业务链路很长,而微服务的架构刚好可以很好地应对这种情况。当然在业务刚开始的时候,我们可以用简单的单体应用来快速实现原型验证,等业务发展起来后再开始逐步微服务拆分。

流量通过接入层后,一般为了系统的灵活性,会通过 Nginx 的 upstream 来转发请求到网关,由网关统一分发到对应的业务服务,而业务服务又可以拆分为许多独立的微服务相互调用。这也就带来了 SaaS 系统中的大部分常见问题,如:

  • 谁可以使用什么服务?(租户管理)

  • 服务在哪里?(服务发现)

  • 请求应该由哪个服务节点处理?(负载均衡)

  • 信息怎么传输?(传输协议)

  • 如何避免一个租户影响另一个租户?(资源隔离)

  • 输入和输出如何表示?(序列化协议)

  • 网络出现分区、超时或者服务出错了怎么办?(熔断、降级、服务治理)

  • 服务权限如何管理?(认证授权)

  • 如何保证通信安全?(网络安全)

  • 重要程度和依赖关系怎么样?(服务分级)

  • 如何保证不同机器的服务状态一致?(分布式数据一致性)

等等...这些全都需要研发人员投入大量的精力,每个点展开细说都是一个很大的话题。基于业务和技术的考虑,通常还需要引入消息队列、缓存、配置中心、定时任务等组件。

数据层

所有业务逻辑,最后一定都会在数据存储上得到体现。在一个 SaaS 系统中,最常用的存储依然是关系型数据库,如我们的 DDB、另外常用 HBase、TiDB 等作为冷数据存储,ES、MongoDB 等作为对应功能的数据存储。因此 SaaS 系统中多个数据存储之间的一致性是一个需要重视的地方。

对象存储方面,我们集团内有 Nos,市面上的云厂商也都有相应的服务,不需要自己构建。不论客户存储的对象还是系统中的某些资源,为了提高客户的访问速度,我们都需要有 CDN 的存在。

SaaS 业务中还有一个常见的需求就是 BI,这要求系统具有数据分析能力,OLAP 数据库也是必不可少的,网易云商采用的是 ClickHouse。

在某些特定的业务场景,也许还需要用到 TSDB,录入智能设备的传感器读数,用户的活动轨迹,系统的状态变化等。

数据层还有一个非常重要,但经常被忽视的话题就是数据合规。特别是对于 SaaS 业务,因为面向的客户都是企业和组织,因此数据的安全合规是非常重要的。例如网易云商有专门的中间件用于数据库的敏感数据加密。

 

运维能力

到目前为止,一个 SaaS 系统基本已经搭建成型可以提供服务了。但是我们对系统的状态还一无所知,因此还要构建足够强大的运维能力。其中包括了可观测性、计量计费、快速恢复、故障演练、系统治理各个方面。以可观测性为例,我们需要采集系统中的各种数据并通过大量技术手段来观测系统的状态,如系统资源、业务指标、健康状态、链路追踪、业务埋点、报警管理、错误统计、流量水位、趋势分析、变更管理等。针对 SaaS 业务的特点,还需要特别对系统进行租户维度的监控和管理。

 

部署模式

SaaS 系统根据隔离程度的不一样可以分为三种部署模式,每种部署模式都会涉及到架构的调整适配,都有各自的优缺点。

共享模式

指 SaaS 系统中的所有资源,如业务服务、数据存储等全部是共享的,这要是绝大分部 SaaS 系统一开始采用的模式,这种模式系统的优势是灵活性高,资源利用率高,采用集中化管理,开发运维更简单。缺点是租户间容易相互影响,合规性也容易被一些特定行业客户挑战,还有很难为不同租户提供差异化服务。

专属模式

指 SaaS 系统中几乎所有资源都是租户独占的,这种部署模式的优势是每个租户有完全隔离的环境,租户之间不会有影响,可以针对不同租户提供个性化的服务。但是缺点也很明显,这种部署模式的资源利用率低、成本高、运维难度高、管理复杂。通常会被用于一些特定行业或者特殊需求的客户场景。

 

混合模式

指 SaaS 系统中有部分资源是所有租户共享的,还有部分资源是租户独占的,这种模式是现在大型 SaaS 系统常见的部署模式,可以兼顾上面种模式的优缺点,针对不同的客户提供不同的解决方案。

 

未来发展

上面简要介绍了搭建一个 SaaS 系统的主要过程,尽管 SaaS 的设计初衷是快速为特定业务场景提供垂直解决方案,但企业对跨业务跨部门的需求也越来越强烈,例如营销服务一体化、私域运营等场景。因此,业界无论在业务还是技术方面都还在不断地探索之中,例如对于 SaaS 的成本控制,合规性,可扩展性,针对不同租户的差异化服务等等,都是 SaaS 厂商经常面临的难题。有人在探索部署方式的优化,有人在探索产品的设计方案,有人在探索低代码的模式,还有人在探索生态合作的方案。无论如何,大家的的努力都是在为了客户的成功,回到我们的起点,只有客户成功了,SaaS 才有存在下去的价值。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1250391.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

自动化部署 扩容openGauss —— Ansible for openGauss

前言 大家好,今天我们为大家推荐一套基于Ansible开发的,自动化部署及扩容openGauss的脚本工具:Ansible for openGauss(以下简称 AFO)。 通过AFO,我们只需简单修改一些配置文件,即可快速部署多种…

elasticsearch 索引库操作和文档操作

文章目录 索引库操作mapping映射属性索引库的CRUD(创建,读取,更新,删除)创建索引库和映射基本语法:示例: 查询索引库修改索引库删除索引库 文档操作新增文档查询文档删除文档修改文档全量修改增…

2023年亚太杯数学建模C题新能源汽车成品文章(思路模型代码成品)

一、翻译 新能源汽车是指采用先进的技术原理、新技术和新结构,以非常规车用燃料(非常规车用燃料是指汽油和柴油以外的燃料(非常规车用燃料是指汽油和柴油以外的燃料),并集成了汽车动力控制和驱动等先进技术的汽车。新能源汽车包括…

新版PY系列离线烧录器,支持PY002A/002B/003/030/071等MCU各封装,不同 FLASH 大小型号

PY系列离线烧录器,目前支持PY32F002A/002B/002/003/030/071/072/040/403/303 各封装、不同 FLASH 大小型号。PY离线烧录器需要搭配上位机软件使用,上位机软件可以在芯岭技术官网上下载,还包括了离线烧录器的使用说明。PY离线烧录器使用MINI U…

激光雷达报告:单月上车提前突破5万台关口!车企真实搭载「去伪存真」

高工智能汽车研究院监测数据显示,截至2023年9月,激光雷达已经连续2个月交付破5万台关口。 这也意味着,这一交付关口早于预期被突破。回溯来看,2023年6月,高工智能汽车研究院在第十四届智驾开发者大会上释放预测&#…

AIDL 如何分片传输大量 Parcelable 数据列表

本文针对 AIDL 跨进程传输大量 Parcelable 数据所产生的问题总结出一套分片传输的解决方案,并分析了一下其实现的原理。 1. 概述 大家在通过 AIDL 实现跨进程数据传输的时候,可能会遇到数据量过大导致异常的情况,通常抛出的异常如下&#xf…

【从浅识到熟知Linux】基本指令之基本权限

🎈归属专栏:从浅学到熟知Linux 🚗个人主页:Jammingpro 🐟每日一句:用博客整理整理之前学过的知识,是个不错的选择。 文章前言:本文介绍Linux中的基本权限及相关指令用法并给出示例和…

【web】Fastapi自动生成接口文档(Swagger、ReDoc )

简介 FastAPI是流行的Python web框架,适用于开发高吞吐量API和微服务(直接支持异步编程) FastAPI的优势之一:通过提供高级抽象和自动数据模型转换,简化请求数据的处理(用户不需要手动处理原始请求数据&am…

第96步 深度学习图像目标检测:FCOS建模

基于WIN10的64位系统演示 一、写在前面 本期开始,我们继续学习深度学习图像目标检测系列,FCOS(Fully Convolutional One-Stage Object Detection)模型。 二、FCOS简介 FCOS(Fully Convolutional One-Stage Object D…

通过ros系统中websocket中发送sensor_msgs::Image数据给web端显示(三)

通过ros系统中websocket中发送sensor_msgs::Image数据给web端显示(三) 不使用base64编码方式传递 #include <ros/ros.h> #include <signal.h> #include <sensor_msgs/Image.h> #include <message_filters/subscriber.h> #include <message_filter…

C#,《小白学程序》第九课:堆栈(Stack),先进后出的数据型式

1 文本格式 /// <summary> /// 《小白学程序》第九课&#xff1a;堆栈&#xff08;Stack&#xff09; /// 堆栈与队列是相似的数据形态&#xff1b;特点是&#xff1a;先进后出&#xff1b; /// 比如&#xff1a;狭窄的电梯&#xff0c;先进去的人只能最后出来&#xff1…

Springboot 南阳旅游平台-计算机毕设 附源码 31829

Springboot 南阳旅游平台 目 录 摘要 1 绪论 1.1 研究背景 1.2 研究意义 1.3 论文结构与章节安排 2 南阳旅游平台系统分析 2.1 可行性分析 2.1.1 技术可行性分析 2.1.2 经济可行性分析 2.1.3 法律可行性分析 2.2 系统功能分析 2.2.1 功能性分析 2.2.2 非功能性分析…

【matlab程序】matlab利用工具包nctool读取grib2、nc、opendaf、hdf5、hdf4等格式数据

【matlab程序】matlab利用工具包nctool读取grib2、nc、opendaf、hdf5、hdf4等格式数据 引用&#xff1a; B. Schlining, R. Signell, A. Crosby, nctoolbox (2009), Github repository, https://github.com/nctoolbox/nctoolbox Brief summary: nctoolbox is a Matlab toolbox…

远程安全访问JumpServer:使用cpolar内网穿透搭建固定公网地址

文章目录 前言1. 安装Jump server2. 本地访问jump server3. 安装 cpolar内网穿透软件4. 配置Jump server公网访问地址5. 公网远程访问Jump server6. 固定Jump server公网地址 前言 JumpServer 是广受欢迎的开源堡垒机&#xff0c;是符合 4A 规范的专业运维安全审计系统。JumpS…

C语言--每日选择题--Day24

第一题 1. 在C语言中&#xff0c;非法的八进制是&#xff08; &#xff09; A&#xff1a;018 B&#xff1a;016 C&#xff1a;017 D&#xff1a;0257 答案及解析 A 八进制是0&#xff5e;7的数字&#xff0c;所以A错误 第二题 2. fun((exp1,exp2),(exp3,exp4,exp5))有几…

Python---函数的参数类型----位置参数(不能顺序乱)、关键词参数(键值对形式,顺序可乱)

位置参数 理论上&#xff0c;在函数定义时&#xff0c;可以为其定义多个参数。但是在函数调用时&#xff0c;也应该传递多个参数&#xff0c;正常情况&#xff0c;要一一对应。 相关链接&#xff1a;Python---函数的作用&#xff0c;定义&#xff0c;使用步骤&#xff08;调用…

第99步 深度学习图像目标检测:SSDlite建模

基于WIN10的64位系统演示 一、写在前面 本期&#xff0c;我们继续学习深度学习图像目标检测系列&#xff0c;SSD&#xff08;Single Shot MultiBox Detector&#xff09;模型的后续版本&#xff0c;SSDlite模型。 二、SSDlite简介 SSDLite 是 SSD 模型的一个变种&#xff0c…

逸学java【初级菜鸟篇】10.I/O(输入/输出)

hi&#xff0c;我是逸尘&#xff0c;一起学java吧 目标&#xff08;任务驱动&#xff09; 1.请重点的掌握I/O的。 场景&#xff1a;最近你在企业也想搞一个短视频又想搞一个存储的云盘&#xff0c;你一听回想到自己对于这些存储的基础还不是很清楚&#xff0c;于是回家开始了…

linux shell操作 - 05 IO 模型

文章目录 流IO模型阻塞IO非阻塞IOIO多路复用异步IO网络IO模型 流 可以进行IO&#xff08;input输入、output输出&#xff09;操作的内核对象&#xff1b;如文件、管道、socket…流的入口是fd (file descriptor)&#xff1b; IO模型 阻塞IO&#xff0c; 一直等待&#xff0c;…

基于Vue+SpringBoot的数字化社区网格管理系统

项目编号&#xff1a; S 042 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S042&#xff0c;文末获取源码。} 项目编号&#xff1a;S042&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 源码 & 项目录屏 二、功能模块三、开发背景四、系统展示五…