



下載本文檔
版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、基于SaaS模式的進(jìn)銷(xiāo)存實(shí)戰(zhàn)架構(gòu)分析 邢波濤關(guān)于什么是SaaS (Software As a Service ) ,無(wú)論是各大媒體,包括網(wǎng)絡(luò)媒體,還是?程序員?雜志本身,都已經(jīng)講了很多了?程序員?雜志還分別在2007年第10期和2021年第8期,做了兩期關(guān)于SaaS的專(zhuān)題,我也就不再重復(fù)?;赟aaS模式的應(yīng)用還是很豐富的,但是對(duì)企業(yè)管理軟件這個(gè)領(lǐng)域來(lái)講,無(wú)論是美國(guó)的Salesforce , 還是國(guó)內(nèi)的八百客,都是從CRM做起的。直至現(xiàn)在,基于SaaS模式的進(jìn)銷(xiāo)存,在技術(shù)架構(gòu)上,都還是處于摸索階段,甚至有人在我的Blog上留言,金蝶的友商網(wǎng)只是象征性的推出了用ASP.net技術(shù)編寫(xiě)的第一版,第
2、二版要完全轉(zhuǎn)向JAVA平臺(tái),從.NET平臺(tái)轉(zhuǎn)向JAVA平臺(tái),那就相當(dāng)于把整個(gè)軟件重新寫(xiě)了一遍。用友雖然推出了偉庫(kù)網(wǎng),但是至今尚未看到它的進(jìn)銷(xiāo)存應(yīng)用,只是“網(wǎng)上訂貨和“租戶(hù)營(yíng)銷(xiāo)兩大功能模塊。進(jìn)銷(xiāo)存對(duì)廣闊中小企業(yè)來(lái)講,還是非常有市場(chǎng)的,但是各大軟件廠(chǎng)商,遲遲未推出基于SaaS模式的穩(wěn)定成熟的進(jìn)銷(xiāo)存軟件,這說(shuō)明什么呢?這說(shuō)明它確實(shí)不好做,在技術(shù)架構(gòu)上,確實(shí)有很難解決的問(wèn)題。我做了很多年的MIS/ERP/進(jìn)銷(xiāo)存管理軟件,關(guān)注SaaS模式也好幾年了,所以我就做了一套基于SaaS模式的進(jìn)銷(xiāo)存軟件,和大家一起探討一下基于SaaS模式的進(jìn)銷(xiāo)存軟件的技術(shù)架構(gòu),就當(dāng)是拋磚引玉,無(wú)知者無(wú)畏吧。一、 SaaS成熟度模
3、型?程序員?在第八期,刊登了阿里軟件首席架構(gòu)師趙進(jìn)的文章?SaaS成熟度模型淺析?, 他借用Frederick和Gianpanolo Carraro的文章,把SaaS的成熟度,從低到高分成4個(gè)級(jí)別:第一,每個(gè)租戶(hù)使用一個(gè)獨(dú)立的數(shù)據(jù)庫(kù)實(shí)例和應(yīng)用效勞器實(shí)例,數(shù)據(jù)庫(kù)中的數(shù)據(jù)結(jié)構(gòu)和應(yīng)用程序的代碼根據(jù)租戶(hù)需求,訂制化修改。第二,每個(gè)租戶(hù)依然使用一個(gè)獨(dú)立的數(shù)據(jù)庫(kù)實(shí)例和應(yīng)用效勞器實(shí)例,但是應(yīng)用程序已經(jīng)考慮到了可擴(kuò)展性,針對(duì)每個(gè)租戶(hù)的可定制化通過(guò)配置的方式實(shí)現(xiàn),它是一套應(yīng)用程序。第三,單實(shí)例,多租戶(hù),所有租戶(hù)共享一個(gè)數(shù)據(jù)庫(kù)實(shí)例和一個(gè)應(yīng)用效勞器實(shí)例,數(shù)據(jù)庫(kù)通過(guò)增加Tenant表和TENANT_ID字段來(lái)解決識(shí)別
4、租戶(hù)的問(wèn)題。這時(shí)也是一套應(yīng)用程序。第四,多實(shí)例,多租戶(hù),這時(shí)有多個(gè)應(yīng)用效勞器實(shí)例,最終租戶(hù)通過(guò)負(fù)載均衡被分配到不同的應(yīng)用效勞器實(shí)例,并且該租戶(hù)攜帶某個(gè)業(yè)務(wù)數(shù)據(jù)庫(kù)實(shí)例信息,由應(yīng)用效勞器動(dòng)態(tài)鏈接到相應(yīng)得業(yè)務(wù)數(shù)據(jù)庫(kù)。此時(shí)也是一套應(yīng)用程序。二、 技術(shù)架構(gòu)設(shè)計(jì)目標(biāo)由上面分析可以看出,從理論上SaaS已經(jīng)有了一套完整的成熟度模型,所以基于SaaS模式的應(yīng)用,還是蠻豐富的。但是由于進(jìn)銷(xiāo)存軟件的需求,完全不同于CRM軟件和財(cái)務(wù)軟件,相對(duì)于財(cái)務(wù)軟件,國(guó)家有著明確的法律標(biāo)準(zhǔn),而進(jìn)銷(xiāo)存系統(tǒng)是個(gè)性化非常強(qiáng)的一個(gè)系統(tǒng),要求所有的租戶(hù)采用同一個(gè)用戶(hù)界面和同一個(gè)業(yè)務(wù)邏輯,是不現(xiàn)實(shí)的。對(duì)于進(jìn)銷(xiāo)存這塊來(lái)說(shuō),租戶(hù)有強(qiáng)烈的個(gè)性化需
5、求的意愿。所以,本著這個(gè)思想,應(yīng)用層的設(shè)計(jì)要求能夠做到以下兩點(diǎn):1所有的租戶(hù)理論上均可以自定義自己的頁(yè)面2所有的租戶(hù)理論上均可以自定義自己的業(yè)務(wù)邏輯這個(gè)目標(biāo)和SaaS模型成熟度的第一類(lèi)是類(lèi)似的,但是我們要支持多實(shí)例,多租戶(hù),并且是一套程序,一個(gè)Framwork。也就是說(shuō)我們既要實(shí)現(xiàn)SaaS模型成熟度第一類(lèi)的目標(biāo),又要實(shí)現(xiàn)第四類(lèi)的技術(shù)架構(gòu)。下面我從數(shù)據(jù)庫(kù)層到業(yè)務(wù)邏輯層,再到視圖層,詳細(xì)講解我是如何做的,其系統(tǒng)架構(gòu)圖如圖一所示。(圖一)三、 數(shù)據(jù)庫(kù)層的設(shè)計(jì) 數(shù)據(jù)庫(kù)這一層的設(shè)計(jì)模式,無(wú)外乎只有3種方案:1每個(gè)租戶(hù)獨(dú)立一個(gè)數(shù)據(jù)庫(kù): 在應(yīng)用效勞器中配制不同的數(shù)據(jù)源,或者使用不同的連接池。這個(gè)方案的優(yōu)點(diǎn)是
6、不同租戶(hù)的數(shù)據(jù)物理別離,平安性比擬好。它的缺點(diǎn)是數(shù)據(jù)庫(kù)連接的利用效率不高。性能問(wèn)題會(huì)很大。它對(duì)應(yīng)SaaS模型成熟度第一類(lèi)和第一類(lèi)。2所有租戶(hù)的數(shù)據(jù)都存放在一個(gè)數(shù)據(jù)庫(kù)的同一套表中, 增加Tenant表和TENANT_ID字段,說(shuō)明該業(yè)務(wù)數(shù)據(jù)是屬于哪個(gè)租戶(hù)的。它的優(yōu)缺點(diǎn)在趙進(jìn)的那篇文章?SaaS成熟度模型淺析?也已經(jīng)講了很清晰了。它對(duì)應(yīng)SaaS模型成熟度第三類(lèi)。(3) 多Schema,單數(shù)據(jù)源。這個(gè)方案根本是方案1的變種。同一個(gè)數(shù)據(jù)庫(kù)下可以有多個(gè)Schema。它的優(yōu)點(diǎn)是除了方案1的優(yōu)點(diǎn)以外,它共享數(shù)據(jù)源或連接池,效率更高。缺點(diǎn)是和方案(2)比擬起來(lái),數(shù)據(jù)庫(kù)連接池開(kāi)銷(xiāo)會(huì)比擬大 說(shuō)實(shí)話(huà),我不太確認(rèn)這個(gè)
7、模式是不是對(duì)應(yīng)SaaS模型成熟度第(4)類(lèi), 如果是的話(huà),那么數(shù)據(jù)庫(kù)之間的負(fù)載均衡是沒(méi)有意義的,因?yàn)槊總€(gè)數(shù)據(jù)庫(kù)之間的數(shù)據(jù)根本不一樣不包括備份數(shù)據(jù)庫(kù)。如果不是的話(huà),那么SaaS模型成熟度第(4)類(lèi)數(shù)據(jù)庫(kù)是如何劃分的呢?趙進(jìn)也沒(méi)有講清楚,或者是我自己沒(méi)有看明白。 具體到我的設(shè)計(jì),這里我選擇方案3,并結(jié)合了方案2,對(duì)于登陸/驗(yàn)證/權(quán)限,所有的租戶(hù)共享一個(gè)Schema,而對(duì)于業(yè)務(wù)數(shù)據(jù),那么每個(gè)租戶(hù)的業(yè)務(wù)數(shù)據(jù),是獨(dú)立一個(gè)Schema。這樣,每個(gè)租戶(hù)的業(yè)務(wù)數(shù)據(jù)到達(dá)了物理別離,平安性比擬好,導(dǎo)入導(dǎo)出也很方便。四、 應(yīng)用層的設(shè)計(jì) 前面咱們說(shuō)過(guò),進(jìn)銷(xiāo)存程序不同于別的應(yīng)用程序,進(jìn)銷(xiāo)存應(yīng)用程序有強(qiáng)烈的個(gè)性化需求,應(yīng)
8、用層的設(shè)計(jì)要求能夠做到以下兩點(diǎn):1所有的租戶(hù)理論上均可以自定義自己的頁(yè)面2所有的租戶(hù)理論上均可以自定義自己的業(yè)務(wù)邏輯下面我說(shuō)說(shuō)我是如何做到以上兩點(diǎn)的:要做到以上兩點(diǎn),只能有一套代碼,一個(gè)Framework才算成功,如果針對(duì)不同的用戶(hù)界面和用戶(hù)邏輯需求,F(xiàn)ramework也需要變動(dòng)的話(huà),那就是工程性質(zhì)了,也就是SaaS模型成熟度第一類(lèi)的目標(biāo)。1所有的租戶(hù)理論上均可以自定義自己的頁(yè)面我這里也是采用了MVC的架構(gòu),參考了Struts 的源代碼,并重新寫(xiě)了一個(gè)Web Framework,使之能適應(yīng)SaaS架構(gòu)的需求。上篇咱們說(shuō)過(guò),對(duì)數(shù)據(jù)庫(kù)這一層,我采用的是方案3,每個(gè)租戶(hù)有自己獨(dú)立的一個(gè)Schema,
9、但所有的租戶(hù),在菜單、角色、權(quán)限方面,他們采用了同一個(gè)公共的Schema,也就是說(shuō),用戶(hù)的登陸驗(yàn)證和對(duì)應(yīng)的菜單,是在這個(gè)公共的Schema里面實(shí)現(xiàn)的。缺省的,這些租戶(hù)共享這些菜單,每個(gè)菜單對(duì)應(yīng)一個(gè)Action,每個(gè)Action對(duì)應(yīng)一個(gè)View, 這一點(diǎn),是采用了Struts的思想。對(duì)于租戶(hù)的個(gè)性需求,如果有的租戶(hù)的界面跟其余租戶(hù)的界面不同,那么新增一個(gè)菜單登陸的時(shí)候,會(huì)覆蓋掉原來(lái)的同一個(gè)menu_id的菜單,這個(gè)菜單當(dāng)然有一個(gè)字段Compamy_ID,說(shuō)明這個(gè)菜單是這個(gè)租戶(hù)所獨(dú)有的,在登陸的時(shí)候,把這個(gè)菜單加載到界面上,而這個(gè)菜單對(duì)應(yīng)了一個(gè)新的Action,這個(gè)新的Action對(duì)應(yīng)了一個(gè)新的V
10、iew層,這樣就實(shí)現(xiàn)了不同租戶(hù),可以有自己完全不同的界面的需求。下面談?wù)劦?個(gè)目標(biāo): 所有的客戶(hù)理論上均可以自定義自己的業(yè)務(wù)邏輯在這里,我采用了Eclipse插件的思想(本人的現(xiàn)本職工作是Eclipse插件Tooling 工具開(kāi)發(fā)),所有和業(yè)務(wù)層相關(guān)的業(yè)務(wù)邏輯代碼,按照業(yè)務(wù)功能模塊分類(lèi),我都放在配置文件里,動(dòng)態(tài)加載,還是回到那個(gè)Menu-Action-View , 這個(gè)Action不僅對(duì)應(yīng)一個(gè)View層,還對(duì)應(yīng)一個(gè)業(yè)務(wù)邏輯,通過(guò)不同的租戶(hù),配置不同的菜單, 這些菜單又對(duì)應(yīng)不同的Action,這些Action又對(duì)應(yīng)不同的業(yè)務(wù)邏輯,并且是動(dòng)態(tài)加載的,這樣,就做到了業(yè)務(wù)邏輯和Framework的別離
11、。例如,有的客戶(hù)的應(yīng)付款和采購(gòu)入庫(kù)對(duì)應(yīng)上,入庫(kù)了,才會(huì)形成應(yīng)付款,而有的客戶(hù),可能跟采購(gòu)訂單對(duì)應(yīng)上,只要下了采購(gòu)訂單,就會(huì)形成應(yīng)付款,等等這些,無(wú)論客戶(hù)的需求怎么變化,這個(gè)Framework是不變的,當(dāng)然,形成應(yīng)收應(yīng)付的業(yè)務(wù)邏輯代碼還是要自己寫(xiě)的。五、 視圖層的選擇對(duì)于View這一層,我選擇了Flex,我之所以沒(méi)有采用JSP+Ajax,是因?yàn)榧虞dAjax框架,比方Ext,可能也是很浪費(fèi)時(shí)間的,造成加載速度很慢。可擴(kuò)展性和可持續(xù)開(kāi)展性也沒(méi)Flex好,而且,F(xiàn)lex天生長(zhǎng)著一張?bào)@艷的臉,會(huì)給用戶(hù)帶來(lái)很好的UI體驗(yàn),借用別人的一句話(huà):“乍一看,很唬人。在Flex框架選擇上,我沒(méi)有采用Flex流行的f
12、ramewok, 比方modelglueflex/Cairngorm/Flex FDS/PureMVC/Blazeds等等Framework,我直接自己寫(xiě)了一個(gè),感覺(jué)還是很好用的,增加、修改、查詢(xún)、刪除等等根本操作,根本上做到自動(dòng)化了,不用寫(xiě)什么代碼了。學(xué)習(xí)這些Framework的曲線(xiàn)都比擬陡,要沉下心,不容易啊。如果FDS不要錢(qián),我還是推薦FDS。 Flex最大的不方便是客戶(hù)端的Flash容器和效勞器端的Tomcat等容器,根本就是兩碼事,兩者之間也可以說(shuō)沒(méi)有任何關(guān)系,就像IE跟tomcat 沒(méi)有任何關(guān)系一樣,所以在 Flash容器內(nèi),找到Session,還是不容易的,當(dāng)然也有一些Frame
13、work,例如Blazeds似乎解決了這個(gè)問(wèn)題,我沒(méi)有仔細(xì)看,網(wǎng)上也有一些文章,說(shuō)解決了這個(gè)問(wèn)題,我看了看,都不是很方便的解決方案。拿不到Session,還是蠻不方便的。對(duì)于菜單,我還是用了JSP。因?yàn)椴藛我鶕?jù)每個(gè)客戶(hù)的不同權(quán)限,顯示不同的菜單,我在Flex里面沒(méi)有解決好Session的問(wèn)題,所以沒(méi)有用Flex做菜單。六、關(guān)于O/R Mapping工具的的選擇關(guān)于O/R Mapping工具,我并沒(méi)有采用流行的Hibernate。SaaS模式進(jìn)銷(xiāo)存的第一個(gè)目標(biāo)是允許用戶(hù)自定義自己的界面,界面的不同,也就意味著數(shù)據(jù)庫(kù)字段的不同,而Hibernate要求數(shù)據(jù)庫(kù)字段和Hibernate類(lèi)嚴(yán)格一一對(duì)應(yīng)
14、,我個(gè)人覺(jué)得它不適合SaaS模式的業(yè)務(wù)架構(gòu)。當(dāng)然也許有Hibernate的高人能夠解決這個(gè)問(wèn)題,我對(duì)Hibernate僅僅是一知半解。我采用的是Apache Tuscany DAS( ://das-overview.html), DAS 雖然犧牲了OO特性,用了類(lèi)似于HashMAP的東西,但是它的靈活架構(gòu),還是很適合SaaS這種模式的。不過(guò),在緩存上,Tuscany DAS肯定沒(méi)有Hibernate那么成熟,而且,Tuscany DAS還有一個(gè)問(wèn)題是它更新比擬慢,不像Tuscany SCA/SDO更新那么快,就好似不是一個(gè)娘生的。Tuscany DAS 目前
15、的版本還有一個(gè)很大的bug,就是double數(shù)據(jù)類(lèi)型存盤(pán)有問(wèn)題,我看他們現(xiàn)在也沒(méi)修改正來(lái)。我自己更改了它的SDODataTypeHelper類(lèi)的源代碼,修改了它的Bug。七、關(guān)于SOA/SCA關(guān)于SCA,在寫(xiě)這個(gè)進(jìn)銷(xiāo)存的第一版的時(shí)候,所有Service和Service之間的調(diào)用,我都是基于SCA實(shí)現(xiàn)的。后來(lái)出于性能的考慮,以及這些Source Codes和Service全是我自己控制的,就把所有有關(guān)SCA的調(diào)用全去掉了,Service和Service之間修改為直接調(diào)用。再后來(lái),想想這些租戶(hù)之間,很可能有很強(qiáng)的業(yè)務(wù)協(xié)同需求。而這些租戶(hù)之間的Service,也可能分布在不同的機(jī)器上,所以再次更新版本的時(shí)候,又參加了一些Service和Servic
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 調(diào)用父類(lèi)同名方法,super函數(shù)
- 2025企業(yè)顧問(wèn)聘用合同
- gui編程比較字典與列表
- 2023-2024學(xué)年廣東省廣州市從化區(qū)人教版小學(xué)二年級(jí)上冊(cè)數(shù)學(xué)期末試題及答案
- 2025國(guó)內(nèi)銷(xiāo)售合同模板示例
- 2025如何簽訂租賃合同范本
- 消防設(shè)備的技術(shù)要求試題及答案
- 家具制造行業(yè)原材料采購(gòu)協(xié)議
- 中央空調(diào)安裝工程合同
- 高級(jí)審計(jì)師考試備考分享試題及答案
- 平安人壽代理合同協(xié)議
- 貴州煙草專(zhuān)賣(mài)局招聘筆試題庫(kù)2025
- 2025年高考語(yǔ)文考前復(fù)習(xí)誦讀材料-13晨讀材料
- 書(shū)畫(huà)素養(yǎng)測(cè)試題及答案
- 鋼琴藝術(shù)培訓(xùn)管理制度
- 校園廣播設(shè)備維保合同
- 反詐宣傳課件小學(xué)生版
- 八年級(jí)數(shù)學(xué)上學(xué)期期中期末沖刺卷-特訓(xùn)10 一次函數(shù) 壓軸題(八大母題型歸納)(原卷版)
- 胰腺假性囊腫治療
- 2025年形勢(shì)與政策-加快建設(shè)社會(huì)主義文化強(qiáng)國(guó)+第二講中國(guó)經(jīng)濟(jì)行穩(wěn)致遠(yuǎn)
- 求職趣味測(cè)試題及答案
評(píng)論
0/150
提交評(píng)論