x

優(yōu)秀的SaaS服務(wù)平臺(tái)設(shè)計(jì)要領(lǐng)

陳明相 牛透社 2016-09-08 11:26:23
企服  

根據(jù)Gartner 2015年的技術(shù)成熟度曲線,SaaS是未來(lái)HCM軟件的大勢(shì)所趨,處于穩(wěn)步爬升的階段。

這里不贅述SaaS的各種優(yōu)勢(shì),像體驗(yàn)良好、靈活部署、按需付費(fèi)、快速改進(jìn)等。本文重點(diǎn)說(shuō)明優(yōu)秀的SaaS產(chǎn)品(特別是HCM產(chǎn)品)是如何進(jìn)行技術(shù)設(shè)計(jì)以建立這些優(yōu)勢(shì)的。

相比之下,如果做了糟糕的技術(shù)設(shè)計(jì),就如同把產(chǎn)品和服務(wù)建筑在流沙之上,岌岌可危。

經(jīng)典的計(jì)算機(jī)體系結(jié)構(gòu)里,底層是硬件,中間是操作系統(tǒng),上層是應(yīng)用軟件。

可以把SaaS架構(gòu)與經(jīng)典架構(gòu)做一個(gè)映射:底層是虛擬平臺(tái)層,中間是存儲(chǔ)和服務(wù)層,上層是應(yīng)用邏輯層。下面按照自下而上的順序逐一論述。

u3.jpg

虛擬平臺(tái)層

摩爾定律是計(jì)算機(jī)世界里最重要的一個(gè)定律。根據(jù)摩爾定律,今天的處理器的性能是1980年的處理器性能的100萬(wàn)倍以上,今天一臺(tái)智能手機(jī)的計(jì)算能力超過(guò)1980年的IBM大型機(jī)。

得益于計(jì)算能力的指數(shù)增長(zhǎng),虛擬化的IaaS云服務(wù)大大降低了平臺(tái)軟硬件的部署成本,從而促進(jìn)了SaaS服務(wù)的興起。

國(guó)外知名的云主機(jī)廠商有AWS和Linode,國(guó)內(nèi)知名的云主機(jī)廠商有阿里云和騰訊云,各有優(yōu)勢(shì)。操作系統(tǒng)方面,Windows、Linux、Unix是常用的選項(xiàng)??紤]到世界上80%以上的云服務(wù)都跑在Linux系統(tǒng)之上,而且Linux免費(fèi)開(kāi)源,Linux當(dāng)然是最佳選擇。

接下來(lái)要考慮的就是技術(shù)棧的問(wèn)題。SaaS是輕前端重后端的系統(tǒng),通過(guò)把復(fù)雜性從終端轉(zhuǎn)移到云端,一方面保證用戶端良好的體驗(yàn),另一方面確保云端強(qiáng)大的進(jìn)化能力。SaaS的技術(shù)核心在云計(jì)算,技術(shù)框架既要考慮開(kāi)發(fā)效率,也要考慮程序性能,還要兼顧語(yǔ)言成熟度和開(kāi)源社區(qū)支持。

老一代的框架有Widnows的.NET和Java的J2EE?;赪indows的架構(gòu)基本得不到開(kāi)源社區(qū)的支持(可見(jiàn)程序員們對(duì)Windows多不感冒);Java架構(gòu)成熟但是開(kāi)發(fā)效率低,不太適用于快速迭代和敏捷開(kāi)發(fā)。

新生代的框架包括Mean和Go?;贜odejs的Mean架構(gòu)發(fā)展迅猛,采用Javascript打通前后端成為統(tǒng)一的全棧開(kāi)發(fā)語(yǔ)言,但是Nodejs在大數(shù)據(jù)和高并發(fā)下的表現(xiàn)有待進(jìn)一步觀察;Go是Google力推的后端多并發(fā)編程語(yǔ)言,但由于是全新的語(yǔ)言,國(guó)內(nèi)在工程師的深度和廣度上面都不太能確保。

中生代的框架包括Lnmp和Ruby on Rails。經(jīng)典的Lnmp是世界上最廣為使用的Web服務(wù)框架,開(kāi)發(fā)效率高,得到廣泛驗(yàn)證穩(wěn)定可靠,而且開(kāi)源社區(qū)活躍。相比之下,Ruby在穩(wěn)定性和社區(qū)支持方面稍遜一籌。

Lnmp架構(gòu)在360和新浪微博得到廣泛應(yīng)用,承載了每日億級(jí)PV的訪問(wèn)量,F(xiàn)acebook的后端主力框架也是Lnmp。兜行的技術(shù)框架同樣采用Lnmp。

存儲(chǔ)和服務(wù)層

數(shù)據(jù)是企業(yè)最核心的信息。特別是HCM系統(tǒng),能夠得到大量的員工數(shù)據(jù),對(duì)于數(shù)據(jù)分析的要求非常強(qiáng),如人事檔案還面臨數(shù)據(jù)字段的動(dòng)態(tài)變化,這就要求HCM系統(tǒng)在數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu)設(shè)計(jì)時(shí)要充分考慮這幾點(diǎn):

1、數(shù)據(jù)結(jié)構(gòu)的靈活擴(kuò)展

2、讀寫的效率與可靠性

3、數(shù)據(jù)庫(kù)CAP設(shè)計(jì)的平衡

面臨快速變化的用戶需求,傳統(tǒng)的強(qiáng)schema模式數(shù)據(jù)庫(kù)常常心有余而力不足。

比較激進(jìn)的做法是直接升級(jí)到無(wú)schema的no-sql數(shù)據(jù)庫(kù),比如MongoDB和CouchDB。但是no-sql數(shù)據(jù)庫(kù)在帶來(lái)靈活性的同時(shí),也帶來(lái)了一些副作用,比如臨時(shí)表空間占用過(guò)大,不定期的垃圾回收機(jī)制導(dǎo)致性能抖動(dòng)。

比較穩(wěn)健的做法是基于穩(wěn)定成熟的關(guān)系型數(shù)據(jù)庫(kù),預(yù)留出動(dòng)態(tài)字段,如mysql從5.7版本起原生支持JSON數(shù)據(jù)類型,或者采用EAV設(shè)計(jì)模式,把原本按列保存的數(shù)據(jù)轉(zhuǎn)換成按行保存。

固定字段長(zhǎng)度的EAV表,在操作效率和穩(wěn)定性上要高于no-sql數(shù)據(jù)庫(kù)。兜行的數(shù)據(jù)庫(kù)表設(shè)計(jì)里面,大量采用EAV模式。

緩存和讀寫分離是常用的提高讀寫效率的方法。比起Memcache,Redis因?yàn)橹С謨?nèi)存數(shù)據(jù)結(jié)構(gòu),在緩存處理上更為靈活。我們可以利用Redis實(shí)現(xiàn)KV、消息隊(duì)列、列表、Hash,甚至用Redis實(shí)現(xiàn)鎖的功能。

更新緩存的Design Pattern有四種:Cache aside, Read through, Write through, Write behind caching。出于性能考慮通常選擇Cache Aside Pattern,出于一致性考慮通常會(huì)選擇Write through。

以兜行為例,后臺(tái)管理用的是Read through/Write through,前端訪問(wèn)用的是Cache Aside Pattern。

HCM系統(tǒng)需要對(duì)數(shù)據(jù)做大量分析工作,這些工作涉及到兩類科學(xué)計(jì)算:統(tǒng)計(jì)分析和數(shù)據(jù)挖掘。

以考試為例,需要做的統(tǒng)計(jì)分析包括:最高分、最低分、平均分、方差、區(qū)段、每道題目的正確率,每個(gè)選項(xiàng)的選擇比例等;可以做的數(shù)據(jù)挖掘包括:成績(jī)預(yù)測(cè),自變量與因變量的相關(guān)性等。

值得一提的是,企業(yè)的人數(shù)通常不會(huì)超過(guò)幾十萬(wàn)人,大部分時(shí)候可以把所有數(shù)據(jù)導(dǎo)入內(nèi)存,實(shí)現(xiàn)in-memory computing,既提高了速度又降低了分布式計(jì)算的復(fù)雜度。對(duì)于少數(shù)數(shù)據(jù)量極大的場(chǎng)景,可以把任務(wù)吐到map-reduce平臺(tái)完成。Python以豐富強(qiáng)大的科學(xué)運(yùn)算庫(kù)著稱,是完成這些工作的得力工具。

在服務(wù)層除了科學(xué)計(jì)算服務(wù),SaaS廠商通常還要支持CDN服務(wù),以確保用戶快速訪問(wèn)到網(wǎng)絡(luò)上的資源。

對(duì)于HCM產(chǎn)品,涉及到音視頻的課件和office文檔課件,所以還必須提供視頻編解碼服務(wù)和文檔轉(zhuǎn)換服務(wù)。另外,為了把消息及時(shí)通知到終端用戶,服務(wù)層還要支持消息推送,郵件通知,短信通知等多種機(jī)制。

SaaS服務(wù)的可靠性是很重要的指標(biāo),要達(dá)到5個(gè)9的可靠性水平(即99.999%的時(shí)間可用),除了云主機(jī)自身的穩(wěn)定,需要設(shè)計(jì)相應(yīng)的應(yīng)用監(jiān)控、負(fù)載均衡和容災(zāi)機(jī)制。

LVS可以用來(lái)實(shí)現(xiàn)負(fù)載均衡,避免單點(diǎn)故障。同時(shí)應(yīng)用層的心跳監(jiān)測(cè)和告警機(jī)制,也能及時(shí)發(fā)現(xiàn)故障。有趣的是,不少SaaS產(chǎn)品做的就是應(yīng)用監(jiān)測(cè),比如New Relic,聽(tīng)云APM和OneAPM。為了防止系統(tǒng)級(jí)的故障,數(shù)據(jù)和程序的鏡像應(yīng)該在多處備份。

應(yīng)用邏輯層

MVC是經(jīng)典的程序設(shè)計(jì)架構(gòu),其實(shí)產(chǎn)品設(shè)計(jì)也遵循同樣的思路。把手機(jī)端/電腦端/網(wǎng)頁(yè)端等用戶端想象成V,用戶在界面上操作;把云端想象成M,做存儲(chǔ)和計(jì)算;把client和server之間的通信協(xié)議想象成C,完成控制與反饋。

前面說(shuō)的內(nèi)容大多與M有關(guān),下面先說(shuō)說(shuō)C,即通信過(guò)程。

SOA和MicroService之爭(zhēng)一直是很熱的話題。求同存異地看,它們共同傳遞的信息是:把功能和服務(wù)內(nèi)聚成模塊,模塊之間通過(guò)標(biāo)準(zhǔn)的接口進(jìn)行通信,去掉大而全的core,變成獨(dú)立運(yùn)轉(zhuǎn)的蟻群。聽(tīng)起來(lái)是不是和面向?qū)ο蟮乃枷牒芟嗨颇兀?/p>

抽象和內(nèi)聚的設(shè)計(jì)模式是普適性的。對(duì)象之間通過(guò)函數(shù)調(diào)用來(lái)提供服務(wù),而SOA和MicroService之間通過(guò)網(wǎng)絡(luò)請(qǐng)求來(lái)提供服務(wù)。據(jù)說(shuō)Bezos在十幾年前就要求亞馬遜的所有產(chǎn)品都以網(wǎng)絡(luò)API形式提供服務(wù),這是最早的SOA吧。

最常用的網(wǎng)絡(luò)請(qǐng)求是Http協(xié)議,Rest API是基于Http協(xié)議的一組規(guī)范,明確了CRUD四種操作對(duì)應(yīng)的Http請(qǐng)求格式。工具型SaaS廠商的服務(wù),很多以Rest API的形式提供。

HCM系統(tǒng)也會(huì)大量涉及到與企業(yè)內(nèi)其它系統(tǒng),如OA、CRM、ERP的對(duì)接和數(shù)據(jù)打通,基于Rest API的服務(wù)接口,就是不同系統(tǒng)間溝通交流的語(yǔ)言。

最后說(shuō)說(shuō)V,前端框架。

前端是技術(shù)世界里變化最快的角落。廣義來(lái)看,ios、android、windows pc、web、微信h5都是前端。

前端是用戶第一眼看到產(chǎn)品的地方,如何改善用戶體驗(yàn)是前端最關(guān)心的問(wèn)題。因?yàn)橛脩艨吹靡?jiàn)摸得到,所以展現(xiàn)層的修改和調(diào)整會(huì)特別頻繁,如何減少重復(fù)工作快速改進(jìn),這也是前端框架要解決的一個(gè)重要問(wèn)題。web app和native app是前端的兩種形式,目前看來(lái)各有優(yōu)劣。

web app的優(yōu)點(diǎn)是開(kāi)發(fā)速度快,云更新實(shí)時(shí)生效,不用維護(hù)歷史版本。缺點(diǎn)是每個(gè)獨(dú)立頁(yè)面都要發(fā)起若干個(gè)http請(qǐng)求,交互滯后明顯,體驗(yàn)較差。新興的前端框架重點(diǎn)就要解決體驗(yàn)問(wèn)題,像Angular框架的最大優(yōu)點(diǎn)就是減少了頁(yè)面請(qǐng)求。

native app的優(yōu)點(diǎn)是體驗(yàn)好,缺點(diǎn)是產(chǎn)品大量版本碎片,向下兼容維護(hù)工作量大。對(duì)于安卓手機(jī),還有繞不開(kāi)的適配問(wèn)題。

較優(yōu)的解決方案是Hybrid模式:在native里面嵌入若干的webview頁(yè)面,在效率和體驗(yàn)之間找到平衡點(diǎn)。

相比傳統(tǒng)的On-premises系統(tǒng),SaaS系統(tǒng)的架構(gòu)發(fā)生了巨大的變化,分層和模塊化更為清晰,組合方式也更為復(fù)雜。這些變化,以及依然進(jìn)行中的快速進(jìn)化,會(huì)帶給用戶越來(lái)越好的產(chǎn)品和服務(wù)。

--結(jié)束END--

投稿請(qǐng)發(fā)送至: 郵箱/tougao@2b.cn QQ/2799880133 微信/shawe_ren

分享到微信
分享到微博
關(guān)注公眾號(hào)
我要投稿
我要爆料
商務(wù)合作
x
分享到微信
回到頂部
x
歡迎投稿

郵箱:tougao@2b.cn

QQ:2799880133

微信:shawe_ren