【網易云商】構建高效 SaaS 系統的技術要點與最佳實踐

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.pswp.cn/news/168227.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/168227.shtml
英文地址,請注明出處:http://en.pswp.cn/news/168227.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

水果編曲軟件FL Studio21.2下載安裝教程

簡稱FL,全稱:Fruity Loops Studio,因此國人習慣叫它"水果"。目前最新版本(包括測試版本)是FL Studio21.2,它讓你的計算機就像是全功能的錄音室,大混音盤,非常先進的制作工具,讓你的音…

工業以太網交換機未來發展中的幾個趨勢

隨著工業自動化不斷發展和智能制造的推進,工業以太網交換機在未來的應用中將面臨更多的發展機遇和挑戰。在工業以太網交換機的未來發展中,有幾個方面將成為趨勢。 網絡虛擬化 隨著工業自動化系統規模的不斷擴展,網絡虛擬化將成為未來的發展方…

總結1065

今日共計學習11h47m,今日圖書館冷清了不少,在最后關頭,越學心里越沒譜。做22年的真題做到懷疑人生,真題每年難度不一,可以出的很難,也可以出得相對簡單。出的難的,計算量大肯定是其中一部分。今…

四、防火墻-NAT Server

學習防火墻之前,對路由交換應要有一定的認識 NAT Server1.1.基本原理1.2.多出口場景下的NAT Server1.3.源進源出 —————————————————————————————————————————————————— NAT Server 一般對用戶提供一些可訪問的…

Python開發運維:Django 4.2.7 使用Celery 5.3.5 完成異步和定時任務

目錄 一、實驗 1.Django使用Celery完成異步和定時任務 二、實驗 1. 如何查看Django版本 一、實驗 1.Django使用Celery完成異步和定時任務 (1)安裝Django (2)新建Django項目 (3)初始框架 (4)urls.py引用視圖views from django.contrib import admin from django.urls imp…

python之UDP網絡應用程序開發

文章目錄 版權聲明UDP網絡應用程序開發UDP初識UDP知識要點socket類的使用UDP發送數據開發流程分析UDP服務客戶端通信栗子UDP廣播發送 版權聲明 本博客的內容基于我個人學習黑馬程序員課程的學習筆記整理而成。我特此聲明,所有版權屬于黑馬程序員或相關權利人所有。…

CodeWhisperer 體驗總結

CodeWhisperer 體驗總結 | CodeWhisperer 是一款亞馬遜新推出的通用代碼生成器 可以實時進行代碼數據的提供 還可以定義安全問題 CodeWhisperer 對個人用戶是免費使用 企業用戶需要訂閱使用 亞馬遜云科技開發者社區為開發者們提供全球的開發技術資源。這里有技術文檔、開發案例…

Linux:配置Ubuntu系統的鏡像軟件下載地址

一、原理介紹 好處:從國內服務器下載APT軟件,速度快。 二、配置 我這里配置的是清華大學的鏡像服務器地址 https://mirrors.tuna.tsinghua.edu.cn/ 1、備份文件 sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak2、清空sources.list ec…

廣告機/商業顯示屏_基于MT8788安卓主板方案

安卓主板在廣告機領域扮演著重要的角色。無論是在商場、車站、酒店、電梯、機場還是高鐵站,LED廣告機廣泛應用,并通過不同方式進行播放和管理。 廣告機/商業顯示屏_基于MT8788安卓主板方案 基于MT8788安卓主板方案的廣告機采用了聯發科MT8788八核芯片方案…

國標直流充電槍9孔分別啥意思?

DC:直流電源正 DC-:直流電源負 PE:接地(搭鐵)S:通訊CAN-H S-:通訊CAN-L CC1:充電連接確認 CC2:充電連接確認 A:12V A-:12V- 以上就是國標直流充電…

線上ES集群參數配置引起的業務異常案例分析

本文介紹了一次排查Elasticsearch node_concurrent_recoveries 引發的性能問題的過程。 一、故障描述 1.1 故障現象 1. 業務反饋 業務部分讀請求拋出請求超時的錯誤。 2. 故障定位信息獲取 故障開始時間 19:30左右開始 故障拋出異常日志 錯誤日志拋出timeout錯誤。 故障之前…

BTC 復興:Ordinals 帶來創新活力,BitVM 與 BitStream 相繼問世

除了備受矚目的 ETF,今年 Bitcoin 生態迎來全新的發展活力和機遇。Ordinals 協議的橫空出世,以此為基礎誕生的 BRC20 協議給整個比特幣生態帶去了一波新的能量,迎來銘文熱度高漲。而諸如 BitVM、BitStream 等新技術甫一問世,便引發…

openssl+ RSA + linux 簽名校驗開發實例(C++)

文章目錄 一、RSA簽名校驗二、RSA簽名校驗開發實例 一、RSA簽名校驗 RSA簽名校驗是一種用于驗證數字簽名的過程,它確保簽名是由擁有相應私鑰的合法實體創建的。以下是RSA簽名校驗的理論知識點: RSA密鑰對: RSA簽名使用一對公鑰和私鑰。公鑰用…

RPCS3(PlayStation 3游戲模擬器)漢化教程

RPCS3 RPCS3 是一款PlayStation 3 模擬器,可讓 Windows、Linux 或 BSD 系統的用戶運行索尼 PlayStation 3 游戲。 安裝教程 包含 Windows/Linux版本 詳細安裝漢化教程請查看文章 RPCS3(PS3模擬器)安裝及漢化教程 1.首先下載最新版 RPCS3模…

classifier-free-guidance 擴散模型引導生成

淺談擴散模型的有分類器引導和無分類器引導 - 知乎這篇文章主要比較一下擴散模型的引導生成的三種做法的區別。它們分別是用顯式分類器引導生成的做法,用隱式無分類器引導的做法和用CLIP計算跨模態間的損失來引導生成的做法。 Classifier-Guidance: Diffusion Mode……

瀏覽器是什么

瀏覽器是什么 本文簡要介紹瀏覽器的功能和組成。 瀏覽器(Web Browser)是一種用于訪問和瀏覽互聯網上的網頁和資源的軟件應用程序。它是用戶與互聯網交互的主要工具之一。 瀏覽器通過使用網絡協議(如HTTP、HTTPS等)與遠程服務器通…

從0開始學習JavaScript--JavaScript數據類型與數據結構

JavaScript作為一門動態、弱類型的腳本語言,擁有豐富的數據類型和數據結構,這些構建了語言的基礎,為開發者提供了靈活性和表達力。本文將深入探討JavaScript中的各種數據類型,包括基本數據類型和復雜數據類型,并介紹常…

nginx知識梳理及配置詳解

軟件開發全文檔獲取:點我獲取 nginx安裝 #nginx安裝 yum -y install gcc pcre-devel openssl-devel #依賴包 useradd -s /sbin/nologin nginx ./configure --prefix/usr/local/nginx #指定安裝目錄 --usernginx #指定用戶 --with-http_ss…

【數據庫篇】關系模式的表示——(1)問題的提出

1、關系模式的表示 R:表示關系的名字比如:sc選課表,student學生表。 U:表示一個關系模式的所有屬性,比如student表:U(sno,sname,sage,ssex)。 …

LedControl 庫說明文檔

LedControl 庫最初是為基于 8 位 AVR 處理器的 Arduino 板編寫的。但由于該代碼不使用處理器的任何復雜的內部功能,因此具有高度可移植性,并且應該在任何支持 和 功能的 Arduino(類似)板上pinMode()運行digitalWrite() 。 單個 M…