導(dǎo)語(yǔ)
應(yīng)用程序模型不會(huì)經(jīng)常改變,但一旦改變,就會(huì)創(chuàng)造出很多機(jī)會(huì)。
我在微軟最先看到了前兩代應(yīng)用程序模型的轉(zhuǎn)變。早期的大型機(jī)和微型計(jì)算機(jī)系統(tǒng)是一體式的,數(shù)據(jù)存儲(chǔ)、應(yīng)用程序代碼和終端服務(wù)都在一個(gè)機(jī)箱里。20世紀(jì)80年代出現(xiàn)了微處理器和以太網(wǎng),使得成本較低的計(jì)算機(jī)能夠在局域網(wǎng)上協(xié)同工作和通信。PC和Unix工作站開始連接到服務(wù)器,在業(yè)務(wù)應(yīng)用程序上采用了一種新的多機(jī)器、客戶端-服務(wù)器編程模型??蛻舳?服務(wù)器應(yīng)用程序出現(xiàn)時(shí),圖形用戶界面與后端SQL數(shù)據(jù)庫(kù)(通常是Oracle數(shù)據(jù)庫(kù)或者SQL服務(wù)器)結(jié)合在了一起。
客戶端-服務(wù)器應(yīng)用程序的構(gòu)建與單片應(yīng)用程序的構(gòu)建完全不同,呈現(xiàn)代碼運(yùn)行在客戶端計(jì)算機(jī)上,業(yè)務(wù)邏輯在服務(wù)器上運(yùn)行,通常封裝在SQL存儲(chǔ)過程中:
30多年前,我在開發(fā)我的第一款微軟產(chǎn)品Ashton Tate/Microsoft OS/2 SQL Server時(shí),就目睹了客戶端-服務(wù)器之旅的開始。
客戶端-服務(wù)器應(yīng)用程序的蓬勃發(fā)展雖然只持續(xù)了很短的一段時(shí)間,但它們創(chuàng)造了新一代易于使用的圖形化應(yīng)用程序,第一次為成千上萬(wàn)的小型企業(yè)提供了計(jì)算能力。調(diào)用SQL Server存儲(chǔ)過程的Visual Basic客戶端的組合應(yīng)用程序構(gòu)建了微軟服務(wù)器業(yè)務(wù),并創(chuàng)建了一個(gè)由軟件供應(yīng)商和增值分銷商組成的整個(gè)行業(yè)。雖然客戶端-服務(wù)器這種老方法已經(jīng)存在20多年了,但很多企業(yè)仍在繼續(xù)運(yùn)行這些相同的客戶端-服務(wù)器應(yīng)用程序的更新版本。
客戶端-服務(wù)器由于互聯(lián)網(wǎng)和網(wǎng)絡(luò)的出現(xiàn)而成為一種老模型。客戶端-服務(wù)器應(yīng)用程序是針對(duì)局域網(wǎng)而構(gòu)建的,使用的是適用于在局域網(wǎng)中工作但不適合互聯(lián)網(wǎng)要求的遠(yuǎn)距離工作的專用會(huì)話協(xié)議。
互聯(lián)網(wǎng)和三層應(yīng)用
1995年春天,比爾·蓋茨以他著名的“互聯(lián)網(wǎng)浪潮備忘錄”將微軟的業(yè)務(wù)重心轉(zhuǎn)移到了互聯(lián)網(wǎng)上。當(dāng)時(shí),我正在運(yùn)行WindowsNT Program Management,所以我參加了很多“Billg互聯(lián)網(wǎng)規(guī)劃”會(huì)議。這是微軟動(dòng)蕩時(shí)期的開始,我目睹并參與了所有一切——有好的,壞的,也有丑陋的。和微軟一起,我從互聯(lián)網(wǎng)的經(jīng)歷和隨之而來的反壟斷事件中得到了很多經(jīng)驗(yàn)教訓(xùn)。其中最重要的一點(diǎn)是,技術(shù)革命怎樣為所有人創(chuàng)造新的雙贏機(jī)會(huì)。
全球互聯(lián)網(wǎng)革命帶來了新一代開放標(biāo)準(zhǔn)協(xié)議和格式。這些新技術(shù)需要不同的基礎(chǔ)設(shè)施。最初,簡(jiǎn)單的Web服務(wù)器提供靜態(tài)網(wǎng)站。但商業(yè)和其他應(yīng)用程序迅速推動(dòng)了一種新的三層應(yīng)用程序模型的出現(xiàn):
三層應(yīng)用程序模型將使用互聯(lián)網(wǎng)協(xié)議的Web服務(wù)器與用于事務(wù)邏輯和數(shù)據(jù)庫(kù)的應(yīng)用服務(wù)器結(jié)合在了一起。數(shù)據(jù)庫(kù)、應(yīng)用服務(wù)器和Web服務(wù)器位于一個(gè)數(shù)據(jù)中心或者云區(qū)域內(nèi)。它們一起創(chuàng)建完整的網(wǎng)頁(yè),然后將其呈現(xiàn)在客戶端的瀏覽器中。實(shí)際上,客戶端JavaScript通常提供本地客戶端的交互,至少會(huì)用于字段驗(yàn)證。隨著時(shí)間的推移,本地瀏覽器的交互水平不斷提高,JavaScript推動(dòng)了關(guān)鍵的行業(yè)標(biāo)準(zhǔn),例如用于遠(yuǎn)程API的REST和用于數(shù)據(jù)格式的JSON。
與客戶端-服務(wù)器不同,三層應(yīng)用程序模型已經(jīng)過時(shí)了,現(xiàn)在除了網(wǎng)頁(yè)外,還用于提供API服務(wù)?;赗EST標(biāo)準(zhǔn)API接口的發(fā)展使得復(fù)雜的業(yè)務(wù)邏輯能夠封裝在全局可用的服務(wù)中,任何具有一定安全憑證的應(yīng)用程序都可以調(diào)用這些服務(wù)。三層應(yīng)用程序模型通常用于提供REST API服務(wù)。
無(wú)服務(wù)器API海洋中的瀏覽器
當(dāng)服務(wù)以API的形式交付、在云中自動(dòng)擴(kuò)展并根據(jù)使用情況進(jìn)行定價(jià)時(shí),它們被稱為無(wú)服務(wù)器服務(wù)。使用無(wú)服務(wù)器服務(wù),客戶不需要管理服務(wù)器基礎(chǔ)設(shè)施。無(wú)服務(wù)器服務(wù)可用于任何地方的任何經(jīng)過一定身份驗(yàn)證的設(shè)備,而且是根據(jù)相關(guān)的使用指標(biāo)來計(jì)費(fèi)的。
今天,我們發(fā)現(xiàn)自己身處一個(gè)有著各種功能強(qiáng)大的移動(dòng)和便攜式計(jì)算設(shè)備的互聯(lián)世界中。所有這些設(shè)備現(xiàn)在都支持兼容的瀏覽器,這些瀏覽器提供的最終用戶體驗(yàn)接近甚至在某些方面超過了該設(shè)備上本機(jī)應(yīng)用程序的用戶體驗(yàn)質(zhì)量。Google Docs就是一個(gè)例子,它使用瀏覽器來提供跨設(shè)備的無(wú)縫協(xié)作體驗(yàn)。
與此同時(shí),新的SaaS應(yīng)用正在被重新設(shè)想為與互聯(lián)網(wǎng)兼容的一套完整的API,它們采用基于使用情況的定價(jià)方式來提供不斷擴(kuò)展的各種不同服務(wù)。支付、內(nèi)容管理、物流、訂單管理、3D打印等等,只要你能想到的,都在成為可以從任何地方(其他服務(wù)器、移動(dòng)應(yīng)用程序和瀏覽器)調(diào)用的API。云通過支持無(wú)服務(wù)器計(jì)算加速了這種應(yīng)用,而像Stripe、Twilio和Algolia這樣的新技術(shù)公司成為這類基于使用情況新服務(wù)的領(lǐng)導(dǎo)者。
經(jīng)過長(zhǎng)時(shí)間的發(fā)展,瀏覽器已經(jīng)成為無(wú)處不在的可編程的客戶端,存在于由無(wú)服務(wù)器API組成的全球互聯(lián)世界中。無(wú)處不在的客戶端與大量無(wú)服務(wù)器API相結(jié)合,使新的客戶端-無(wú)服務(wù)器應(yīng)用程序模型得以實(shí)現(xiàn):
在客戶端-無(wú)服務(wù)器模型中,最終用戶應(yīng)用在客戶端上運(yùn)行,并調(diào)用各種各樣的服務(wù)??蛻舳颂幚沓尸F(xiàn),而業(yè)務(wù)邏輯封裝在可調(diào)用服務(wù)中。本機(jī)iOS和Android應(yīng)用便是客戶端-無(wú)服務(wù)器的例子,瀏覽器是其關(guān)鍵所在,而Jamstack正在迅速發(fā)展。隨著客戶端-無(wú)服務(wù)器的成熟,它將逐漸支持任何規(guī)模和復(fù)雜度的消費(fèi)類和業(yè)務(wù)應(yīng)用程序。
客戶端-無(wú)服務(wù)器還適用于編排業(yè)務(wù)流程的服務(wù)器和微服務(wù)。在這種情況下,服務(wù)器應(yīng)用程序或者工作流引擎充當(dāng)使用無(wú)服務(wù)器API調(diào)用遠(yuǎn)程服務(wù)的客戶端。
Jamstack和客戶端-無(wú)服務(wù)器數(shù)據(jù)庫(kù)
Jamstack中的JAM代表JavaScript、API和標(biāo)記。在Jamstack應(yīng)用程序中,瀏覽器標(biāo)記是靜態(tài)HTML,很容易從附近的CDN進(jìn)行訪問。應(yīng)用程序在瀏覽器中由JavaScript實(shí)例化,而呈現(xiàn)邏輯作為JavaScript瀏覽器應(yīng)用程序運(yùn)行。客戶端應(yīng)用程序調(diào)用遠(yuǎn)程服務(wù)API。Jamstack為任何地方的任何客戶端提供了非常好的體驗(yàn),實(shí)現(xiàn)了高效的開發(fā)人員工作流程。
Jamstack方法支持開發(fā)功能非常強(qiáng)大的客戶端應(yīng)用程序。與所有應(yīng)用程序一樣,Jamstack客戶端-無(wú)服務(wù)器應(yīng)用程序創(chuàng)建的數(shù)據(jù)要求提供安全、可靠、業(yè)務(wù)一致的數(shù)據(jù)庫(kù)存儲(chǔ)。但與三層架構(gòu)不同,Jamstack應(yīng)用需要可以在互聯(lián)網(wǎng)上任何地方使用的安全數(shù)據(jù)庫(kù)?,F(xiàn)有的SQL和NoSQL數(shù)據(jù)庫(kù)都位于應(yīng)用服務(wù)器后面,因此Jamstack客戶端應(yīng)用不能直接訪問它們。現(xiàn)有的數(shù)據(jù)庫(kù)都不能滿足新一代無(wú)服務(wù)器-客戶端應(yīng)用程序的要求。
Jamstack需要為客戶端-無(wú)服務(wù)器環(huán)境而構(gòu)建的數(shù)據(jù)庫(kù)。在無(wú)服務(wù)器API的海洋中,Jamstack需要的是無(wú)服務(wù)器數(shù)據(jù)API。
Fauna不同于其他數(shù)據(jù)庫(kù)。Fauna旨在為任何客戶端提供可隨時(shí)隨地訪問的安全數(shù)據(jù)庫(kù)服務(wù)。它具有嚴(yán)格的順序一致性,這種最高級(jí)別的業(yè)務(wù)一致性保證了應(yīng)用程序的正確,并且它使用一種受最先進(jìn)的Calvin算法啟發(fā)的協(xié)議,以一種全局性的、無(wú)處不在服務(wù)的形式來提供這種一致性。與客戶端-服務(wù)器存儲(chǔ)過程類似,使用Fauna的業(yè)務(wù)會(huì)話過程由數(shù)據(jù)庫(kù)中的用戶定義函數(shù)執(zhí)行。Fauna UDF取代了存儲(chǔ)過程,雖然Fauna是一個(gè)關(guān)系數(shù)據(jù)庫(kù),但它不使用SQL。相反,它公開了適合JavaScript開發(fā)人員的靈活的文檔模型,并使用業(yè)界標(biāo)準(zhǔn)GraphQL API高效地返回?cái)?shù)據(jù)。
無(wú)服務(wù)器API為當(dāng)今應(yīng)用程序開發(fā)人員創(chuàng)造了新的可能。正在對(duì)其當(dāng)前系統(tǒng)進(jìn)行現(xiàn)代化改造的企業(yè),以及那些構(gòu)建全新的客戶端-無(wú)服務(wù)器應(yīng)用程序的企業(yè)都將受益于這種可能。例如,Nextdoor和Hannon Hill等Fauna客戶正在使用無(wú)服務(wù)器后端來擴(kuò)展其現(xiàn)有的基礎(chǔ)設(shè)施,以實(shí)現(xiàn)全球覆蓋。像Matter Supply和Bejamas這樣的精品工作室,以及Faros這樣的初創(chuàng)公司,都在利用無(wú)服務(wù)器、Jamstack和Fauna生態(tài)系統(tǒng)來打造全新的體驗(yàn)。
應(yīng)用程序體系結(jié)構(gòu)的每一次革命都催生了一種新數(shù)據(jù)庫(kù),使開發(fā)人員能夠開發(fā)出以前不可能實(shí)現(xiàn)的應(yīng)用程序。我很高興能幫助Fauna團(tuán)隊(duì)交付為客戶端-無(wú)服務(wù)器環(huán)境構(gòu)建的數(shù)據(jù)庫(kù)。Fauna是客戶端-無(wú)服務(wù)器應(yīng)用程序的數(shù)據(jù)API。
我們剛剛開始進(jìn)入一個(gè)客戶端-無(wú)服務(wù)器應(yīng)用程序的新世界,在這一新世界中,服務(wù)無(wú)處不在而且可隨時(shí)訪問。正如客戶端-服務(wù)器和三層體系結(jié)構(gòu)那樣,客戶端-無(wú)服務(wù)器應(yīng)用程序模型將為業(yè)界每一類客戶和供應(yīng)商創(chuàng)造巨大的機(jī)會(huì),當(dāng)然也可能是顛覆。新一代開發(fā)人員正在借助Jamstack引領(lǐng)潮流。
作者:Bob Muglia是一位業(yè)務(wù)主管和研發(fā)專家。從2014年5月開始,他擔(dān)任Snowflake公司首席執(zhí)行官長(zhǎng)達(dá)5年。在加入Snowflake公司之前,他在瞻博網(wǎng)絡(luò)工作了2年,在微軟工作了23年。在其職業(yè)生涯的早期,Bob幫助啟動(dòng)了SQL Server業(yè)務(wù),并管理過包括Visual Studio, Office和Windows Server在內(nèi)的微軟部門。從2007年到2011年,Bob擔(dān)任服務(wù)器和工具部門的總裁,在他的管理下,業(yè)務(wù)增長(zhǎng)至170億美元以上。
編譯:Charles
原文網(wǎng)址:https://www.infoworld.com/article/3564264/client-serverless-is-the-4th-generation-application-model.html