何謂後台
我們整天說著前端,客戶端,後台。到底什麼才是後台?
曾經和某網友聊天:
你已添加了XXX,現在可以開始聊天了。
我:你好
XXX:你也好我:你是做什麼的呀?XXX:我在酒吧上班,做前台的。我:哦哦,那咱倆差不多,我做後台的。
前台後台
前台(前端)後台,在英語中即:Front-End,Back-End。廣義上的前端包括客戶端(PC、Android、IOS等),後台即通常意義上的Server。沒錯,就是在互聯網誕生之初即存在的C/S架構。服務的提供方成為Server,一般是一個偏中心化的服務集群。客戶端Client為用戶接入服務的控制重點。C/S架構有明顯的主次之分,這與後來產生各類種子(BT、電驢)下載技術的P2P對等網路相對應。在P2P網路中不區分C或S,每個節點既是C也是S,這便是對等(Peer)網路。
言歸正傳,後台一詞描述的還是Server這一概念,不過由於網路規模的增大,數據量的攀升,Server的後台架構也變得越來越複雜,分層越來越多,早已不是簡單Server一詞能夠囊括的了。本專欄文章始於C++後台架構,卻又不僅限於此,會穿插對比各語言的通信模型以及語言無關的各類概念。
這裡的後台開發指的就是Linux上的C++編程。首先澄清一點,很多人(比如我以前)對後台開發的誤解,通常人們說前端後台,後台就馬上聯想到web後台,java、php和各種web框架橫飛的既視感。所以大學的時候,當我看到騰訊招聘後台工程師,技能要求是C++也滿是狐疑。
白馬非馬
其實web後台屬於後台,但後台卻不只有web後台。兩者應該是包含與被包含的關係。提到後台,通信是永遠的主題。通常我們談到Python的Django,PHP的Think PHP、Yii框架所涉及到的開發知識,都是聚焦於展現和邏輯。而屏蔽了底層通信的細節,這是框架之利。但也削弱了開發者對於後台達到一切盡在掌握的一些可能性。
從網路協議的角度分析,web後台聚焦的是 HTTP。web後台可以看作是一個後台架構中最靠前的東西,它解析了HTTP請求,然後層層轉發給了後面整個分散式系統的許多組件,並調用他們的服務。這一層可被稱之為「接入層」,C++語言進行接入層的實現,一般就是通過 CGI了,CGI這被教科書都寫進歷史的技術,相信很多人都不齒為用。但其實不管是 Java的Servlet,C#的 WCF,或是 Python的 WSGI,Ruby的 Rack多多少少都是受CGI影響而演化而來。行遠自邇,學習了解CGI,並不是浪費時間。
除了HTTP,企業內部主機之間絕大部分是自定義協議,而這些協議多半是在TCP 或 UDP之上實現應用層協議。這個層面上來說C++後台關注的是socket編程,由於C++本身並沒有官方的Socket通信的庫,其實這裡使用的一般也就是Linux C語言的網路編程。C和C++各自的擁躉們,爭與不爭,它們就在那裡。
天下大同
編程語言很重要,一門語言通常意味著的是一個技術棧,比如C++的技術架構的後台和Java的後台,相信絕不僅僅是語言的不同,各種組件以及編程的模式都差別很大。但其實時代發展到如今,編程語言之間的差異性卻又不那麼重要了。在當代規模的大型網路的架構中,絕不僅僅是通過某門語言自身的特效就能解決性能瓶頸的,對於架構的演進,逐漸趨於大同。
與前端技術的百花齊放不同,後端技術相對落寞,甚至不乏炒冷飯的嫌疑。在Web Service逐漸式微之後,各式RPC又被炒了起來。在豪情萬丈的 CORBA在新世紀由於J2EE的出現而逐漸雪藏多年之後,Facebook推出的 RPC框架 Thrift與 CORBA相比又是何其相似。當然,炒冷飯本身不是目的,不管黑貓白貓,能抓老鼠的就是好貓。舊技術在不停推陳出新後確實能煥發出新的生命力。
時光荏苒,新概念層出不窮。不管是偏向於Web層的概念 Restful API還是相對繁重的分散式概念 SOA,都在趨向於介面的解耦和服務化,通過組合不同服務即可快速搭建出新業務。回想起WS(Web Service),讓人唏噓。理論上講 WS屬於 SOA,但最終走向衰落。到底是 WS生不逢時,還是新時代服務化的概念在因為彌補了 WS的缺點才得以煥發新生?這樣的問題沒有答案。「是耶非耶,化為飛蝶」。唯一可以肯定的是,後台技術在潤物無聲中不停的發展,進步。
前言結束,本系列詳細文章請參閱專欄目錄:
- 目錄
推薦閱讀: