天天看點

雲計算的三種模式IaaS/PaaS/SaaS/BaaS對比:SaaS架構設計分析

作者:周陸軍

SaaS——軟體即服務(Software as a Service)的出現改變了傳統使用軟體轉變為使用服務。

SaaS與傳統軟體的最大差別是,前者按年付費租用服務,後者一次買斷。這貌似隻是“報價方式”的差別,實際上這是一個根本性的變化,這帶來的是對服務模式、銷售模式、公司價值等多元度的根本影響。

傳統軟體實施失敗率高或上線後用地不爽,相當于沉沒成本。從軟體公司來看,銷售在簽訂合同時其業績任務就已經達成,是以銷售、甚至售前支援顧問大都會以“拿下單子”為目的,遇到競争激勵時即使過度承諾、給實施部門挖些坑也在所不惜。而後續年份隻有10~15%的維護費,利益不多,好收就順手收一下,不好收也不值得費力再進行重度投入。而SaaS的按年付費徹底改變了這個局面。對軟體公司來說,銷售難度和銷售周期都縮短,一個SaaS産品的Sales是能做到一年上百萬的銷售收入的。而對SaaS公司來說,第二年開始的續費成本非常低,客戶成功部門拿走20~40%的費用,剩下60~80%都是毛利。

是以在雲計算的三種模式IaaS/PaaS/SaaS,SaaS面對的使用者最多,如同C端,應用程式的任何更新或者修複漏洞操作都是由軟體提供商負責實施和處理的,由于租戶是通過網際網路擷取軟體服務,是以租戶端無需下載下傳任何的更新包或者修複更新檔,是一種開箱即擷取最新軟體産品的服務方式。

什麼是SaaS

從宏觀的角度來看,SaaS是一種軟體應用程式傳遞方式,軟體提供商集中化托管一個或多個軟體應用程式,并通過網際網路向租戶體用這些軟體應用程式。從分類上看,SaaS(軟體即服務)也是雲計算重要的一部分。

雲計算的三種模式IaaS/PaaS/SaaS/BaaS對比:SaaS架構設計分析
雲計算的三種模式IaaS/PaaS/SaaS/BaaS對比:SaaS架構設計分析

雲計算的三個分層,基礎設施(infrastructure)在最下端,平台(platform)在中間,軟體(software)在頂端,分别是分别是

  • Infrastructure-as-a-Service(IaaS-基礎設施即服務):IaaS公司會提供場外伺服器,存儲和網絡硬體,你可以租用。節省了維護成本和辦公場地,公司可以在任何時候利用這些硬體來運作其應用。
  • Platform-as-a-Service(PaaS-平台即服務):PaaS公司在網上提供各種開發和分發應用的解決方案,比如虛拟伺服器和作業系統。這節省了你在硬體上的費用,也讓分散的工作室之間的合作變得更加容易。網頁應用管理,應用設計,應用虛拟主機,存儲,安全以及應用開發協作工具等。
  • 一些大的PaaS提供者有Google App Engine,Microsoft Azure,Force.com,Heroku,Engine Yard。最近興起的公司有AppFog,Mendix和Standing Cloud.
  • BaaS(後端即服務,Backend as a Service),公司為移動應用開發者提供整合雲後端的邊界服務。
  • 後端服務被抽象出來,它統一向開發者提供檔案存儲、資料存儲、推送服務等實作難度較高的功能,以幫助開發者快速開發移動應用。BaaS供應商比如AVOS Cloud。
  • Software-as-a-Service(SaaS-軟體即服務):大多是通過網頁浏覽器來接入。任何一個遠端伺服器上的應用都可以通過網絡來運作,就是SaaS了。
  • 一些用作商務的SaaS應用包括Citrix的Go To Meeting,Cisco的WebEx,Salesforce的CRM,ADP,Workday和SuccessFactors。
雲計算的三種模式IaaS/PaaS/SaaS/BaaS對比:SaaS架構設計分析

laaS已經變成了巨頭之間的德州撲克;PaaS市場進入白熱化,軍閥割據天下;而SaaS市場正是百家争鳴的階段,但是這個階段不會持續太久。

SaaS的優勢

  • 擷取軟體服務的方式足夠簡單,SaaS也許是迄今為止使用軟體最簡單的方式之一,相比于傳統使用軟體的方式,租戶省去了研發、部署、運維等一系列繁複的過程,且獲得軟體的時間和費用成本都大幅度降低。
    • SaaS化的産品通過網際網路向租戶提供軟體服務,随着Web技術(如jQuery、Node.js)的進步,Web頁面的互動體驗度大幅度提升,互動更流暢、更人性化。與傳統的桌面應用程式的人機互動效果相差無幾。
    • 與傳統軟體相比、SaaS軟體的相容性更好,它沒有傳統軟體的多本版維護問題和作業系統相容問題。在SaaS軟體中,租戶使用者在使用軟體的過程中,幾乎上感覺不到軟體發生了改變。當租戶使用者登入到系統上時,就已經獲得了最新版本的軟體。
  • SaaS可以體用跨地域、跨平台的軟體服務。與此同時,軟體服務商可以統一對軟體進行版本管理,這将帶來以下幾點好處(包括但不限于):
    • 縮短産品上線時間:多端适配,統一版本,統一更新
    • 降低維護成本:不需要同時維護多個版本的軟體執行個體,運維壓力減小
    • 容易更新:由于版本得到有效控制,一次更新,即可覆寫所有租戶端
  • 使用SaaS産品無需擔心資料安全問題,這好比将錢存入銀行一樣安全。相較于企業内部部署的軟體系統而言,SaaS産品具備更高的安全保障能力,因為軟體提供商具有更多軟體安全防護的技術資源、人力資源和财政資源。

SaaS可以将任何的軟體SaaS,下面列舉一些通用的分類供大家參考:

  • Office線上辦公類SaaS産品
  • 電子郵件和即時消息類SaaS産品
  • 社交媒體類SaaS産品
  • 第三方API類SaaS産品
  • 安全和通路控制類SaaS産品
  • 機器學習類SaaS産品
  • 人工智能類SaaS産品
  • 地理位置服務類SaaS産品
  • 資料流和資料檢索類SaaS産品

企業級SaaS市場近幾年在每個細分領域都湧現出了一批玩家。從技術角度看,不同的領域、不同的SaaS産品,必定有着同樣的架構核心,其中最關鍵的便是對于多租戶(Multi-Tenancy)的支援。對廣大企業來說,引入SaaS産品本質上就是對網際網路服務的租賃,因而多租戶便必然是SaaS的天然屬性之一,也是其與傳統網際網路應用架構設計的重要差異之一。

SaaS的多租戶設計

經典的分布式服務架構天然解決了網際網路應用的三高問題(高并發、高性能、高可用),這也是企業SaaS發展中後期即将面臨的問題,

從資源共享的層面看,從share nothing到share everything,在天平的任何一個點上都可以支撐多租戶。但正如我們前文所說,SaaS架構首要考慮的目标便是單執行個體,隻有單執行個體才能将成本盡可能降低,産品才會有規模效應。是以所謂共享和隔離,在經典架構下又會聚焦為一點,即如何對不同租戶進行資源層面的隔離。

SaaS系統在技術本質上也可以認為就是分布式存儲和分布式計算的融合。

在多租戶的實作中,往往更關鍵的是對于存儲資源的處理,計算資源一般隻在必要情況下才會考慮,我認為這主要是和存儲的“有狀态性”有關。

隔離存儲資源概括來說可以用一個詞來解決:命名空間。以資料庫為例,我們隻需要在每條租戶的記錄上,記下對應租戶的辨別即可。在不考慮分庫分表的情況下,我們邏輯上會在同一個Schema中,存儲所有租戶的資料。

無論何種存儲,思路都是相通的,而且處理起來相對簡單粗暴。着重強調的是,在工程層面應當将這種約定在底層架構裡做統一處理。比如可以通過AOP技術将多租戶相關的邏輯切出來進行統一處理

雲計算的三種模式IaaS/PaaS/SaaS/BaaS對比:SaaS架構設計分析

SaaS架構包括分層:

SaaS架構的呈現層

SaaS架構的呈現層用戶端可能是浏覽器、或是本地用戶端。如果是浏覽器則包括Web界面技術、互動技術等,如:HTMl5技術、CSS3技術、Ajax技術等。如果是軟體用戶端則包括遠端桌面技術、軟體互動技術等。

不同的崗位工作環境有不同适用的應用技術:

  • 對于一線現場(如生産制造、倉儲物流配送),一般采取掃碼POS或微信小程式,掃碼後簡單操作幾下就把業務關鍵點記錄了下來。
  • 對于一線零售店面收銀,現在大多數白牌平闆App
  • 對于來回跑中間分銷、管道、采購、督導的外勤,基本是手機App來處理業務
  • 對于坐在後端的營運人員、人事法務财務,基本用的就是台式電腦Web應用來處理業務

SaaS架構的排程層

SaaS架構的排程層負責識别每個使用者請求并對每個請求進行AAA認證,然後根據後端業務處理伺服器的負載及其業務特征進行合理的排程。通過這樣的架構SaaS平台可以橫向擴充。此外在存儲、緩存等方面為了滿足平台的橫向擴充需求,該層也必須具有良好的可擴充性。

因為用戶端是不同崗位、不同素質能力水準、不同業務重心、不同工作環境,是以功能不一樣、使用者體驗不一樣,是以後端的服務層業務邏輯也都不一樣。

這層因為涉及到用戶端接入,是以需要API網關中間件,因為比較輕(因為還有一層公共業務邏輯處理層),是以采取微服務中間件(如SpringCloud),這些不同的微服務都打包在一個個的Docker中,為了快速彈性啟動擴容。前面有API網關中間件可以做分流限流、路由導流,這樣後面微服務容器怎麼擴容,對前端都透明。

API網關中間件就屬于這一層,隻不過用戶端來的請求都首先經過它再路由到業務邏輯微服務。

但是總有一些業務邏輯是這四種端應用都要處理的,是以還得分出一層叫做公共業務邏輯處理層。這些公共業務邏輯處理層按功能職責也分成一個個的服務,放在Docker容器中,受Swarm或Kubernetes叢集管理。

SaaS架構的業務層

SaaS架構的業務層負責接收排程層轉發過來的請求并執行真正的業務邏輯。一般業務邏輯再怎麼複雜也足以轉載在一台伺服器上。是以業務層實際是由一排對等的伺服器組成的,每台伺服器都執行相同的業務邏輯。

SaaS架構的資料層

SaaS架構的資料層通過資料庫叢集處理存儲關系性很強并且對事務性要求很高的業務資料,這類資料往往很難采用NoSQL解決是以目前還不得不借助傳統的資料庫叢集技術來解決,主要是根據業務特征制定資料拆分方案。同時分布式資料庫用于存放海量但關系性不強的資料。

  • 有些資料需要放在記憶體裡為了快速查詢,布式Redis叢集。
  • 有些資料需要持久性放在關系型資料裡,可以用MySQL關系資料庫。
    • 為了分布式存儲,可以在MySQL之前再放一個MyCAT分庫分表分布式中間件。
    • 為了讀寫分離提高性能,我們可以在MyCAT之前再放一層MySQLProxy,用于主備讀寫分離。
  • 有些資料是檔案形式,可以用分布式檔案系統和對象存儲系統來存放(如圖檔、音頻視訊)。我們還可以使用CDN技術來做這些靜态檔案的分發加速。
  • 有些資料是特殊的資料結構,為了加快這些特殊結構的資料存取,可以用時序資料庫、圖資料庫、文檔資料庫等等。如時間序列資料(IM消息一般是這樣特點)、如圖資料(社交網絡一般是這樣特點)、如大文本資料(點評評論一般是這樣特點),

對于報表統計、曆史查詢、綜合查詢、商業名額對比分析,咱們必須把這些工作放到大資料套件中來處理,和真正快速業務處理的系統分開。

不僅僅是要計算資源分開,還要存儲資源也分開。因為對于大資料,存儲容量要大(但不一定存儲通路性能要高),記憶體要大(要進行大量資料取出進行計算),CPU性能要高(要密集計算)。是以對于統計、查詢、分析這些功能,伺服器雲主機和雲存儲都要和應用業務處理分離。

分離後,就需要從應用業務處理系統中抽取資料。

是以,對于資料抽取層:我們有一系列的ETL工具,還有資料爬蟲引擎用于爬内外靜态資料,還有用Flume、Logstash、Splunk收集IT資源日志和應用系統運作日志。

抽取來的資料可以放在大資料倉庫中,我們可以采用Hadoop HDFS、Hbase、Hive等等開源中間件。

要計算處理時,我們可以在YARN或MapRedurce計算排程架構下使用Spark、Storm來進行記憶體計算和流式計算。

處理後的資料,我們可以用presto查詢,我們也可以用ElasticSearch來搜尋。

最後,我們使用一些可視化工具把結果用圖表形式輸出出去。

按照這樣的技術架構搭建好後,每一個客戶要在公有雲上專屬獨立部署,那麼給它用DevOps工具新啟幾個服務層Docker,如果公共業務邏輯模式也要變化,那就新啟幾個公共業務邏輯Docker。畢竟我們有分布式使用者登入驗證網關和API網關,是以不管是公有雲專屬部署還是私有雲部署,都沒問題。

對于主資料管理子產品,因為也有UI層、邏輯層、資料層,是以主資料這些各層的代碼和資料和中間件,可以打包成一個部署單元,用一套專門的DevOps工具及腳本進行自動化部署、配置變更、更新。

對于資料層,我們有KV分布式資料庫、分布式關系資料庫、主備讀寫分離中間件、分庫分表中間件、CDN分發、時序資料庫/文檔資料庫/圖資料庫、我們确實需要在API網關路由層面用DevOps工具及腳本、集中配置中間件Puppet來做到自動化部署擴充、配置變更、更新。這樣不同的企業指向了不同的分布式資料庫引擎位址和分布式資料庫存儲卷。這樣就友善了既能做公有雲專屬部署又能做私有雲部署。

SaaS産品的天生缺陷

軟體控制權

與企業内部部署的軟體不同,由于SaaS軟體被擊中托管在服務提供商的Web伺服器中,是以租戶無法控制所有的軟體應用程式,SaaS化的軟體比企業自行部署的軟體獲得的控制權更少,租戶可操作的自定義控制權極度有限。

性能瓶頸

共享應用程式必然會帶來伺服器性能的下降、如計算速度、網絡資源、I/O讀寫等都将面臨嚴峻的考驗。在性能方面,企業内部部署的“獨享模式”的應用程式比SaaS軟體的“共享模式”略勝一籌。

安全問題

當租戶在選擇一款SaaS産品時,産品的安全性将會被放置在第一位進行考慮。如資料的隔離、敏感資料的加密、資料通路權限控制、個人隐私等問題。在2018年5月25日,GDPR(General Data Protection Regulation)《通用資料保護條例》出現之後,越來越多的人開始重視資料安全問題。如何最大程度的打消租戶的這一顧慮,需要服務提供商加強對自身信譽度的提升,以赢得租戶的信賴。

最重要的是:SaaS的複雜性,一般的團隊玩不轉。PaaS能否做好的微觀差距,主要展現在軟體設計者和軟體開發者的能力上。有個段子:美國把軟體開發叫工程師,中國把開發人員稱作碼農。美國很多卓越的軟體都是大叔設計開發的,而中國程式員35歲以後就要面臨失業風險。中國非常缺乏高端的軟體人才,缺乏的原因就是因為缺乏持續的積累。大家都在做一些低水準的重複勞動,和流水線上的勞工沒什麼本質差別。

參考文章:

架構師必備技能指南:SaaS(軟體即服務)架構設計 https://zhuanlan.zhihu.com/p/67848677

漫談企業級SaaS的多租戶設計 https://zhuanlan.zhihu.com/p/133311041

中國SaaS為什麼不賺錢? https://www.huxiu.com/article/354905.html

https://www.zhihu.com/question/21641778/answer/308674603

SaaS的本質和SaaS公司的大坑https://zhuanlan.zhihu.com/p/67169367

轉載本站文章《雲計算的三種模式IaaS/PaaS/SaaS/BaaS對比:SaaS架構設計分析》,

請注明出處:https://www.zhoulujun.cn/html/webfront/engineer/Architecture/8466.html

繼續閱讀