其實早就該寫這篇博客了,一直說忙于工作沒有時間,其實時間擠擠總會有的,可能就是因為懶吧!從2013年11月一直拖到現(xiàn)在,其實我是不怎么擅長寫技術(shù)博客的,因為語言表達(dá)能力和文采不是很好,每次寫博客都不知道自己在寫啥,作為一開始就參與 Worktile 開發(fā)的技術(shù)人員,今天就簡單談?wù)?Worktile 的技術(shù)架構(gòu)吧 。
和順ssl適用于網(wǎng)站、小程序/APP、API接口等需要進行數(shù)據(jù)傳輸應(yīng)用場景,ssl證書未來市場廣闊!成為創(chuàng)新互聯(lián)公司的ssl證書銷售渠道,可以享受市場價格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:18982081108(備注:SSL證書合作)期待與您的合作!
Worktile 自上線到現(xiàn)在收到了很多用戶的喜歡,我們倍感欣慰,自己做的產(chǎn)品得到了用戶的認(rèn)可是件幸福的事情,其中有很多來自IT的用戶,經(jīng)常在官方群或者知乎上問一些關(guān)于Worktile的技術(shù)問題:
Worktile 采用的是怎么樣的架構(gòu)?
Worktile 前后端采用了哪些技術(shù)?
...
Worktile 是企業(yè)協(xié)同辦公軟件,所以一開始注定就應(yīng)該是單頁應(yīng)用(SPA),因為使用SPA后,用戶在瀏覽器端可以像操作原生客戶端程序一樣的體驗(速度和流暢度),對于開發(fā)者來說,前后端分離,服務(wù)端只提供RESTful API服務(wù),移動端集成也非常的方便,具體可以看下面這張草圖。
Angular.js(客戶端MV*)
Bootstrap (CSS基礎(chǔ)庫和一些Javascript組件)
UI Bootstrap (Bootstrap 的 Angular.js版本)
jQuery (取代Angular.js中的jqLite,并作為其他第三方j(luò)Query插件的基礎(chǔ)類庫)
Worktile的服務(wù)端基本上只是提供API數(shù)據(jù)服務(wù)的,不會渲染HTML,前端的代碼在發(fā)布之前會使用 Grunt 工具打包合并壓縮成一個js文件。
既然是SPA程序,前端必然要選擇一個MVC(或者MVVM)框架,關(guān)于前端MVC框架有很多,當(dāng)時面臨選擇的時候也是比較猶豫,因為在此之前我們只初略的使用過 Knockoutjs 。
其實我們當(dāng)時就是急切的希望一個框架能做到:
數(shù)據(jù)能夠雙向綁定(或者只單向綁定)
前端路由功能
簡單易學(xué)的模板語言
最終我們選擇了 Angular.js,具體其中選擇的細(xì)節(jié)就不一一描述了(之前在知乎上也回答過關(guān)于Angular.js 的問題:Angular.js 在實際應(yīng)用中有哪些優(yōu)缺點?),從開始使用到現(xiàn)在已經(jīng)快2年了,事實證明當(dāng)初的選擇還是沒有錯的, Angular.js的確很適合 Worktile。
選擇Bootstrap主要是為了使用它的基礎(chǔ)CSS功能,在它的基礎(chǔ)之上很容寫出規(guī)范的樣式代碼,當(dāng)然我們也需要使用其中的部分Javascrip組件功能,因為原生的 Bootstrap是基于 jQuery的,為了在Angular.js中也能很好的使用它,我們引入了 UI Bootstrap、關(guān)于jQuery大家再熟悉不過了,我們使用的很多第三方插件是jQuery的,所以也一并引入了。
上面只是列出了 Worktile 主要使用的幾個Javascript框架和類庫,真正使用的類庫遠(yuǎn)不止上面列出的這些。比如日歷庫 ui-calendar、underscorejs 等等...
Node.js
redis
MongoDB
服務(wù)端是構(gòu)建在Node.js之上的,我們的服務(wù)端MVC框架采用的是 Expressjs,剛開始是 Express 3.x版本,現(xiàn)在已經(jīng)升級到 4.x,Expressjs提供了 Route和模板引擎的功能,由于我們的服務(wù)端基本只提供數(shù)據(jù)服務(wù),所以關(guān)于服務(wù)端模板引擎這塊基本不使用(只有布局和一些配置項輸出到界面時需要用到)。
選擇 Node.js 是因為它簡單,適合高并發(fā)的Web服務(wù),而且我們的開發(fā)人員能夠熟練使用它,關(guān)于Node.js的優(yōu)缺點我在知乎上也曾經(jīng)回答過:使用 Node.js 的優(yōu)勢和劣勢都有哪些?。
Worktile 用戶的登錄狀態(tài),一些臨時使用的數(shù)據(jù)、部分業(yè)務(wù)數(shù)據(jù)緩存 都是放在 Redis 里面的,關(guān)于Node.js怎么和 Redis 連接采用 Node Redis 模塊。
Worktile 并不是那種高度事物性的系統(tǒng)或者傳統(tǒng)的商業(yè)智能應(yīng)用,所以MongoDB非常適合,性能非常高,集群方便,而且以BSON結(jié)構(gòu)存儲,和Node.js完美集成。
Worktile 的數(shù)據(jù)層和MongoDB之間并不是使用 原生的驅(qū)動 ,而采用了 mongoosejs,類似Java或者C#上的ORM框架,使用 mongoose 可以很方面的定義數(shù)據(jù) Schema,讀取操作 MongoDB。
前面也說了 Worktile 是 SPA程序,用戶登錄到系統(tǒng)之后,基本上所有的操作都不需要刷新瀏覽器,因為是一個協(xié)同辦公軟件,其他用戶多數(shù)據(jù)進行操作需要實時更新,所以客戶端必然要和服務(wù)端保持一種長連接,方面進行數(shù)據(jù)交互,我們的實時推送服務(wù)是采用 Erlang 語言編寫的,感興趣的可以查看:https://worktile.com/tech/basic/worktile-real-time-notice
采用 Erlang 是因為我們的開發(fā)人員有這方面的經(jīng)驗,并且Erlang非常適合做這個高并發(fā)實時推送服務(wù)。
如果你熟悉 Node.js 肯定知道 Sockiet.IO,我們最初的實時推送其實是采用 Sockiet.IO的,后來由于訪問量的增張,原有的Sockiet.IO 是基于Worktile Web站點的,沒有獨立成單獨的服務(wù),重構(gòu)的時候徹底采用Erlang重寫了。
其實這2種技術(shù)都非常優(yōu)秀,選擇哪種主要取決于你擅長什么。
使用過 Worktile 的人肯定都知道,在系統(tǒng)中上傳一些文件,比如:word、excel、txt、pdf、ppt等等,都是可以在線預(yù)覽的,關(guān)于 txt、pdf這些文件的預(yù)覽其實好辦,txt直接讀取文件內(nèi)容即可,pdf采用瀏覽器自帶的預(yù)覽或者使用一些Js類庫都很方便的做到,但是對于 Ofiice 文件,是不可以直接讀取的,所以我們自己搭建了一套 Ofiice的預(yù)覽服務(wù),這個服務(wù)主要是基于微軟的 Office Web App服務(wù)
Worktile 中所有的文件存儲在阿里云的OSS上,為了做一些權(quán)限的認(rèn)證和安全問題,我們通過一個Box服務(wù)做中轉(zhuǎn),所有文件的上傳下載都是走 Box 服務(wù)。這要感謝 5樓的Box之父 @Shaun Xu 寫出了這么好的Box 服務(wù)。
以上是Worktile用的所有技術(shù)和架構(gòu)簡單介紹。
Worktile 自上線以來用戶的增長也是非常迅速的,所以 Web服務(wù)器從原先的1臺變成多臺,數(shù)據(jù)庫從單實例到現(xiàn)在的集群,等等,關(guān)于目前Worktile的服務(wù)器結(jié)構(gòu)圖參考如下:
網(wǎng)站題目:Worktile技術(shù)架構(gòu)概要
瀏覽地址:http://vcdvsql.cn/article22/podgjc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供搜索引擎優(yōu)化、小程序開發(fā)、做網(wǎng)站、外貿(mào)建站、企業(yè)網(wǎng)站制作、服務(wù)器托管
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)