幾種後端開發技術的選型調研

最近要作個視頻社交移動應用產品,我主要負責後端架構這方面。先列了幾個選項,分別談一談,斷斷續續寫的,想到哪些記下來javascript

幾個後端方案的選型:SpringBoot、Jersey、Play、Django、GoNode.js、C&C++。java

SpirngBoot:SpringBoot是最近兩年Java圈謀求突圍的一個東西,我以前一個產品有同事用這個,我Review他的代碼發現其主要特色是把註解替代XML配置,其餘方面和傳統的spring系的那些東西區別不大,整體來講這個東西在傳統SSH中規中矩的基礎上小有「創新」,也能夠說是換湯不換藥,適合大量Javaer的中型以上團隊,其生產效率通常。突出特色:對於大多數Javaer易於接受node

Jersey:多是Java圈子裏面比較表明型的Restfui框架,JAX-RS標準的參考實現,一些典型Restful服務須要的特性都之內建或者插件的方面提供了。我作上個項目的調研時,曾經對它和DjangoRestFramework作過特性對比,我的感受後者勝出,這個東西可能須要稍微好學求進的Javaer團隊才能接受。由於其和傳統SSH有必定特性差異,國內有一本專門講這個的書。突出特色:Java界RS標準的參考實現python

Play:這東西號稱真正Java圈的Django、RoR,我在某Java社區看到不少Javaer都不推薦,我我的是想玩玩的,不過其2.0後偏向Scala,給整個團隊推這個東西,我估計比較難。官方給出的使用理由:Developer friendly、Scale predictably、Modern web & mobile、Solid & fast、Massive ecosystem、Proven in production。其中有一點須要強調一下:就是它很容易利用JavaEE的強大生態圈,JavaEE雄霸這麼多年,其生態積累仍是不可小視的。Play使用案例:Linkedin、Klout、the Guardian、Gilt、ZapTravel。突出特色:佔用資源少的同時高性能。web

Django:Django是我過去幾年主要使用的Web框架,其DjangoRestFramework我我的認爲比Jersey要Nice一點。Django在Web方面是All In One,其Rest框架是簡單快捷。其1.8之後的RDB Schema Migrations這個東西對於對DB Schema作版本管理真是方便。缺陷:它的實例性能確定要比Java弱(這在生產部署中其實不是問題),並且版本更新很快,特性還在不斷擴展中,好比最近的Django Channel。優勢:開發效率真是迅捷啊。我我的認爲它在互聯網產品和普通企業應用開發方面真是值得推薦。官方給出的使用理由:Ridiculously fast、Fully loaded、Reassuringly secure、Exceedingly scalable、Incredibly versatile。其使用案例:Disqus、Instagram、Knight Foundation、MacArthur Foundation、Mozilla、 National Geographic、Open Knowledge Foundation、Pinterest、Open Stack。突出特色:開發效率快,功能特性完備。對於大多數產品和應用,Python系都是不錯的選擇。spring

go:咱們作大用戶量的社交聊天工具,確定得考慮這個東西。這東西在C的基礎上除了加了點動態語言的特性,還特別作了了強悍的協程和通道專門用來作高併發網絡服務程序,我我的認爲他作高併發實時Socket服務器確定很合適,其餘方面可能還得分析。突出特色:能夠與其它網絡服務開發語言構成全Golang棧後端

node.js:不用說了,聽說這玩意單進程能跑出上面Go多進程實例的HTTP性能,並且這玩意號稱就是作DIRT數據密集型實時(data-intensive real-time)程序的。突出特色:性能強悍,Web先後端語言一直服務器

C&C++:爲何最後竟然加了這兩個玩意,主要緣由是咱們這個產品一個特色是視頻,我估計視頻的編碼解碼甚至通訊說不定都得用這東西寫,說實話剛畢業把C++當神語言,這麼多年寫業務應用,已經沒有那種情節了,不過有些東西可能真的還得靠它來實現。另外說一點Douban的使用語言餅圖C只比python少一點點。突出特色:底層高性能開發網絡

我的傾向:PythonDjango、Play、Go、Node.js、C&C++架構

應用方向:

業務Restful服務:DjangoRest、Jersey、Play。Restful服務的兩種架構傾向:一、初期和發展期不同;二、全棧Go,一步到位。

高併發網絡服務:Go和Node.js

這個項目中的本地視頻編解碼組件:C&C++

不得不用Java的情景:一些Java實現的框架組件的作互操做,要方便一點。其中Play的scala在其優勢中也提到Java生態圈這個事情,證實這個優點不容小覷。

這個項目的Restful業務服務模塊最終決定選擇分兩步走的策略,初期選擇DjangoRest框架快速設計實現,後期能夠再用GoWeb或者Play之類的高性能解決方案優化實現。Django Rest Framework、Jersey之類的框架除了提供面向Rest服務的實現方案,同時也引導項目的Restful設計趨於規範。在Restful規範設計這方面推薦兩本書:《Restful Web Services Cookbook中文版》和《Restful Web APIS中文版》,幫助你們的Restful API早日成爲真正的Restful API。選用DjangoRest的另一個優點是Python,咱們這個項目是社交產品,選用圖書庫neo4j做爲主要存儲設施之一,和其餘Python庫同樣,neo4j的python操做庫API也是很簡單易用。

這個項目的應用容器技術層的技術選型已經基本結束。

下一步就是要熟悉Golang高併發網絡服務和C++媒體編解碼問題了。

相關文章
相關標籤/搜索