咱們成天說着前端,客戶端,後臺。到底什麼纔是後臺?php
曾經和某網友聊天:前端
你已添加了XXX,如今能夠開始聊天了。java
我:你好
XXX:你也好
我:你是作什麼的呀?
XXX:我在酒吧上班,作前臺的。
我:哦哦,那咱倆差很少,我作後臺的。
前臺後臺web
前臺(前端)後臺,在英語中即: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,並非浪費時間。socket
除了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的缺點才得以煥發新生?這樣的問題沒有答案。「是耶非耶,化爲飛蝶」。惟一能夠確定的是,後臺技術在潤物無聲中不停的發展,進步。