當(dāng)你遇到別人討論關(guān)于服務(wù)器的內(nèi)容時(shí),你是否能夠聽(tīng)得懂?本文作者Kannan Chandrasegaran向讀者介紹了一些非技術(shù)類的內(nèi)容,讓讀者對(duì)服務(wù)器有一個(gè)更好的理解。以下為譯文。
假設(shè)你在休息室里面碰到了一位軟件開(kāi)發(fā)的同事。她正準(zhǔn)備去玩桌上足球,而你為了能夠提提神,正在喝紅牛。雖然你不是故意為了和她在一起而特意這么做的,但是事實(shí)是現(xiàn)在這里只有你們兩個(gè)。為了讓場(chǎng)面不那么尷尬,你嘗試打破這種寂靜,“所以你現(xiàn)在手頭負(fù)責(zé)的是什么項(xiàng)目?”,她開(kāi)始告訴你,你們就這么開(kāi)始聊起來(lái)了,最后你也很贊同她的說(shuō)法,然后你倆就分道揚(yáng)鑣了。這樣就完美地避免了尷尬。
但有時(shí),如果你遇到了其他的同事,比如服務(wù)器工程師,后端開(kāi)發(fā)人員。你可能對(duì)他們工作的內(nèi)容不太了解,所以你可能會(huì)詢問(wèn)他們到底是如何實(shí)現(xiàn)的。
聽(tīng)到這些陌生的詞匯,你的腦??赡芤呀?jīng)有大量的疑問(wèn)了?!癆PI是什么東西?我們應(yīng)該在什么時(shí)候用到數(shù)據(jù)庫(kù)?Jason又是誰(shuí)?”
你的工程師朋友們談?wù)摰氖顷P(guān)于服務(wù)器。也許你以前聽(tīng)過(guò)這個(gè)詞,但可能根本就不知道它究竟是什么。今天我們就來(lái)好好聊聊它。
鉆到屏幕后面去
當(dāng)你用手機(jī)點(diǎn)開(kāi)一個(gè)APP,是不是每次用APP都感覺(jué)很爽的樣子???事實(shí)上應(yīng)用程序就是所謂的前端。它負(fù)責(zé)給用戶帶來(lái)友好的體驗(yàn)。但這并不是應(yīng)用程序的全部功能。
假設(shè)你在消息傳遞平臺(tái)上給我發(fā)送了一條消息??雌饋?lái)好像是信息從你的手機(jī)發(fā)到了我的手機(jī)上。但是讓我們仔細(xì)想想,比方說(shuō),當(dāng)我的手機(jī)關(guān)機(jī)了,你給我發(fā)送完信息以后你又關(guān)機(jī)了,然后我開(kāi)機(jī)了。盡管我們的手機(jī)從來(lái)沒(méi)有在同一時(shí)間運(yùn)行,但我還是收到了消息。
很明顯,我們還是忽略了某些東西。
其實(shí)我們忽略的就是后端,也可以稱之為服務(wù)器。
服務(wù)器
服務(wù)器是一臺(tái)計(jì)算機(jī),它負(fù)責(zé)連接到互聯(lián)網(wǎng),并且一直處于運(yùn)行狀態(tài)。服務(wù)器有兩個(gè)主要功能:存儲(chǔ)數(shù)據(jù)和促進(jìn)通信。
因此,當(dāng)你發(fā)送消息時(shí),實(shí)際上是手機(jī)上的應(yīng)用程序?qū)⑾l(fā)送了服務(wù)器上面,并存儲(chǔ)在了服務(wù)器上。當(dāng)服務(wù)器監(jiān)測(cè)到我的手機(jī)連上了以后,服務(wù)器就會(huì)把這些存儲(chǔ)的消息發(fā)送給我。
服務(wù)器就是應(yīng)用程序的強(qiáng)大后援團(tuán)
無(wú)論應(yīng)用程序需要什么信息,它都會(huì)向服務(wù)器發(fā)送請(qǐng)求。當(dāng)應(yīng)用程序的某位用戶需要與另一位用戶對(duì)話時(shí),服務(wù)器就會(huì)促進(jìn)通信。像服務(wù)器、后端和API這樣的術(shù)語(yǔ)是可以經(jīng)常互換使用的。
存儲(chǔ)
服務(wù)器的主要功能之一是存儲(chǔ)。
存儲(chǔ)的內(nèi)容包括照片、視頻和文檔這些文件。服務(wù)器以結(jié)構(gòu)化的方式進(jìn)行存儲(chǔ),類似于計(jì)算機(jī)上的文件夾,這樣它們就可以被應(yīng)用程序訪問(wèn)。
服務(wù)器也可以存儲(chǔ)信息。每個(gè)應(yīng)用程序都有一些很重要的信息,這些信息對(duì)于應(yīng)用程序的工作方式來(lái)說(shuō)很重要。
你可以把它想象成一堆的電子表格。例如,應(yīng)用程序需要存儲(chǔ)用戶信息,以及登錄情況,以便能夠進(jìn)行身份驗(yàn)證。應(yīng)用程序可能是一個(gè)餐館目錄,在這種情況下,服務(wù)器會(huì)存儲(chǔ)關(guān)于每家餐館的詳細(xì)信息。
除了信息之外,服務(wù)器還記錄了一些信息之間的關(guān)系。例如,某個(gè)用戶“喜歡”應(yīng)用程序上的某家餐館,服務(wù)器會(huì)記住該用戶和餐館之間的關(guān)系。
這樣很多問(wèn)題都可以迎刃而解,比如:“有多少人喜歡這家餐廳?”;“用戶喜歡什么餐館?”;“用戶都喜歡什么菜?”
信息以及信息之間的關(guān)系存儲(chǔ)在數(shù)據(jù)庫(kù)中。數(shù)據(jù)庫(kù)有很多類型,但它們都有一些核心功能:①存儲(chǔ)信息;②存儲(chǔ)信息間的關(guān)系;③可以響應(yīng)不同的信息問(wèn)詢(這就可以方便客戶提交每一種不同信息請(qǐng)求的響應(yīng))。
我可以列出很多不同類型的數(shù)據(jù)庫(kù),它們各有千秋。如果你聽(tīng)到有人使用“SQL”,“MongoDB”,“CouchDB”,“Redis”這樣的術(shù)語(yǔ),說(shuō)明他們正在討論的是關(guān)于數(shù)據(jù)庫(kù)的內(nèi)容。
通信
服務(wù)器另一個(gè)重要的作用是與app以及其他服務(wù)器間進(jìn)行高效的通信。APP在工作時(shí)需要與服務(wù)器進(jìn)行頻繁的通信。
應(yīng)用程序中的許多活動(dòng)都需要與服務(wù)器進(jìn)行通信。例如,如果用戶搜索某樣?xùn)|西,則需要將搜索項(xiàng)發(fā)送到服務(wù)器,服務(wù)器將對(duì)結(jié)果進(jìn)行響應(yīng)。如果用戶向另一個(gè)用戶發(fā)送消息,則消息將發(fā)送到服務(wù)器。然后通常是以推送通知的形式發(fā)送到另一個(gè)用戶的應(yīng)用程序。
服務(wù)器為app提供了一個(gè)可以調(diào)用的接口——API。接口中的各個(gè)函數(shù)可以稱為端點(diǎn)。
通信的本質(zhì)是數(shù)據(jù)的傳輸。最常見(jiàn)的兩種通信格式是JSON和XML。
左邊的是xml,右邊的是JSON
乍一看,這些格式似乎很難讀懂。
需要謹(jǐn)記的是服務(wù)器只是一臺(tái)計(jì)算機(jī),跟筆記本電腦或手機(jī)一樣。應(yīng)用程序以觸摸或聲音的形式接收用戶輸入,再處理這些信息,然后以圖像的形式輸出到屏幕上。手機(jī)上的app主要用于用戶交互,輸入輸出都十分人性化,不需要我們自己去讀取上面難懂的格式。
服務(wù)器是只與其它計(jì)算機(jī)通信的計(jì)算機(jī)。
人類通過(guò)諸如字體大小、文字顏色和布局之類的進(jìn)行表達(dá)。但這些對(duì)計(jì)算機(jī)來(lái)說(shuō)是沒(méi)有意義的。服務(wù)器通信以易于另一臺(tái)計(jì)算機(jī)解析和理解的格式發(fā)生。
服務(wù)器應(yīng)用程序
與在手機(jī)上運(yùn)行應(yīng)用程序一樣,你需要一個(gè)在服務(wù)器上運(yùn)行的應(yīng)用程序。服務(wù)器應(yīng)用程序是使用服務(wù)器端框架構(gòu)建的。流行的選項(xiàng)包括Ruby on Rails、PHP、ASP.NET,Java,Node.js。
API是通往服務(wù)器的網(wǎng)關(guān),應(yīng)用程序知道在那里調(diào)用。數(shù)據(jù)庫(kù)存儲(chǔ)所有信息。您的服務(wù)器應(yīng)用程序是“大腦”,它把所有東西都放在一起。
它偵聽(tīng)并響應(yīng)來(lái)自API的請(qǐng)求,它將從數(shù)據(jù)庫(kù)中添加和檢索信息,并做出決策。例如,當(dāng)應(yīng)用程序發(fā)送登錄信息時(shí),請(qǐng)求通過(guò)API進(jìn)來(lái),正確的登錄信息存儲(chǔ)在數(shù)據(jù)庫(kù)中。但是服務(wù)器應(yīng)用程序的工作是比較兩者,并通過(guò)API對(duì)應(yīng)用程序做出適當(dāng)?shù)捻憫?yīng)。
硬件
當(dāng)有人說(shuō)“服務(wù)器”時(shí),你可能會(huì)一下子想到這種場(chǎng)景:一間鎖著的房間里閃爍著燈光,等待湯姆·克魯斯飾演的007從天花板上跳下來(lái)偷東西。
許多大公司都有自己的服務(wù)器。Facebook和谷歌在全球擁有數(shù)百臺(tái)服務(wù)器。當(dāng)運(yùn)行的服務(wù)用戶量達(dá)到數(shù)百萬(wàn)時(shí),運(yùn)行自己的服務(wù)器可以更便宜,而且性能也會(huì)更好。
很多開(kāi)發(fā)人員自己不會(huì)使用物理服務(wù)器,而是使用某種云服務(wù)。像Amazon Web Services、Azure和Digital Ocean這種提供“虛擬服務(wù)器”的。這些服務(wù)本身?yè)碛杏布彩亲约喝ゾS護(hù),而開(kāi)發(fā)人員只是上傳服務(wù)器應(yīng)用程序。
現(xiàn)在甚至還有一些后端作為服務(wù)提供者,開(kāi)發(fā)者不需要寫(xiě)復(fù)雜的服務(wù)器應(yīng)用就可以輕松部署自己的后端了。
所有的應(yīng)用程序都需要后端嗎?
你看到的大多數(shù)應(yīng)用程序可能都有一個(gè)后端組件。當(dāng)然也有一些應(yīng)用程序是不需要的。判斷是否存在后端有一種簡(jiǎn)單的方法:如果切換到飛行模式,應(yīng)用程序還能正常工作嗎? 如果不能,那么可能存在后臺(tái)服務(wù)器。
讀完這篇文章希望可以幫助你更好地理解應(yīng)用程序的后端是什么樣子的。也許,下次遇到朋友時(shí),你可以和他們輕松地談?wù)揓SON的故事。
原文:The non-techie’s guide to servers
作者:Kannan Chandrasegaran
翻譯:Vincent