本文改編自Chris Stetson發(fā)表在nginx.conf 2016上的一個有關(guān)如今的微服務(wù)以及如何使用Nginx構(gòu)建一個快速的、安全的網(wǎng)絡(luò)系統(tǒng)的演講,大家可以在YourTube上回看此次演講。

0:00 - 自我介紹
Chris Stetson:Hi,我的名字是Chris Stetson,我在Nginx帶領(lǐng)專業(yè)服務(wù)部門,同時也領(lǐng)導(dǎo)微服務(wù)實踐。
今天我們要談?wù)撐⒎?wù)以及如何使用Nginx構(gòu)建一個快速的、安全的網(wǎng)絡(luò)系統(tǒng)。在我們談話的最后,我們將與我們在Zokets的合作伙伴向您展示一個使用Fabric模式如何非常快速和輕松地構(gòu)建一個微服務(wù)的demo。
在我們探討Fabric模式之前,我想談一談微服務(wù)并且從Nginx的角度來看這意味著什么。
0:56 - 大轉(zhuǎn)變

微服務(wù)已經(jīng)引起了應(yīng)用程序架構(gòu)的重大轉(zhuǎn)變。

當(dāng)我第一次開始構(gòu)建應(yīng)用程序時,他們都是差不多的?;脽羝兴故镜膯误w架構(gòu)也象征了應(yīng)用程序的構(gòu)造方式。
目前存在著某種類型的虛擬機(VM),對我來說,就是通常的Java。在虛擬機中應(yīng)用的功能組件以對象的形式存在,這些對象是在內(nèi)存中相互通訊的,它們將來來回回處理并進行方法調(diào)用。偶爾,你會采用諸如通知等機制來接觸到其他系統(tǒng)以便獲取數(shù)據(jù)或傳遞信息。

有了微服務(wù)之后,應(yīng)用程序如何構(gòu)建的范式是完全不同的了。你的功能組件會從在同一個主機的內(nèi)存中通過虛擬機相互通訊轉(zhuǎn)變到部署在容器中,并且使用Restful API調(diào)用通過HTTP來相互連接。
這是非常強大的,因為它賦予了你功能隔離。它為您提供了更細(xì)粒度的可伸縮性,并且你可以獲得更好地處理故障的彈性。很多情況下這是簡單的事實,你只需要使用HTTP進行跨網(wǎng)絡(luò)調(diào)用。
現(xiàn)在,這種方法也有一些缺點。
2:31 - 一件軼事
?

我有一個暗黑的秘密,我是一個微軟的員工并且從事.Net開發(fā)已經(jīng)很多年了。當(dāng)我在那兒的時候,我搭建了一個他們的名為Showcase的視頻發(fā)布平臺。
Showcase是一個用來將微軟內(nèi)部發(fā)布的所有視頻發(fā)布到網(wǎng)上的工具。人們可以觀看這些視頻并進行學(xué)習(xí),比如Microsoft Word的使用提示和技巧。這是一個非常受歡迎的平臺,我們有很多人使用它,并且其中很多人都會在我們發(fā)布的視頻上發(fā)表評論。
Showcase從一開始就是一個.Net單體應(yīng)用,隨著它日益受歡迎,我們決定應(yīng)該將它更換為SOA架構(gòu)。轉(zhuǎn)換是相對容易的。Visual Studio提供了本質(zhì)上的翻轉(zhuǎn)開關(guān)的能力,也就是將你的DLL調(diào)用轉(zhuǎn)變?yōu)镽estful API調(diào)用。隨著一些小的重構(gòu),我們能夠讓我們的代碼運行得相當(dāng)好。我們也為這些評論和應(yīng)用內(nèi)的社區(qū)功能使用智能社區(qū)服務(wù)。
3:53 - 緊密的回路問題
?

看起來我們是SOA可行的,在我們的首次測試中,一切都工作正常,直到我們將系統(tǒng)切換到我們的Staging環(huán)境并開始使用生產(chǎn)環(huán)境數(shù)據(jù)時,我們就會看到一些嚴(yán)重的問題。這些問題在在頁面上有很多評論。
這是一個非常受歡迎的平臺,其中的一些頁面已經(jīng)有多達(dá)2000條評論了。當(dāng)我們深入這些問題時,我們意識到這些頁面需要花費一分鐘進行渲染的原因是因為智能社區(qū)服務(wù)首先需要填充用戶名,然后對每一個用戶名都需要發(fā)起一個對于用戶數(shù)據(jù)庫的網(wǎng)絡(luò)調(diào)用來獲得用戶詳細(xì)信息并且填充在渲染頁面上。這是非常低效的,需要一到兩分鐘來渲染頁面,而在內(nèi)存中進行通常只需要5到6秒鐘。