在德國柏林所舉辦的microXchg大會上,Stefan Tilkov進行了一場名為“Wait, what!? Our microservices have actual human users?”的演講。Tilkov表示,目前對于微服務的各種討論都傾向于以后端的主題為中心,例如API的風格、服務的查找以及伸縮等等。他認為是時候對微服務應用中最重要的一部分,即用戶界面(UI)部分的結構設計多加關注了,這一點是至關重要的。
Tilkov是innoQ的聯合創始人之一及首席顧問,他在這次演講的開篇部分首先分析了前端組件在微服務架構中所扮演的角色,并展示了一系列公眾的假設,其中第1條是:“編排工作開銷很低”。在基于微服務架構的應用程序中,后端的通信延遲往往是微秒級的(例如數據中心內部的訪問),而典型的互聯網通信的延遲往往是毫秒級的(例如客戶端對于應用后端的訪問)。這往往會促使開發者將編排與數據的聚合工作推到后端實現。
“為前端服務的后端”(BFF)這一模式最近開始走紅,它被認為是克服在前端進行復雜編排工作的一劑良藥。但Tilkov表示,這一模式內在的特性未必會為你帶來最優的實現。
我不認為“為前端所服務的后端模式”應該成為你的追求,它只是正好發生在你身上,原因可能只是你修復了某個原本出錯的功能而已。某些情況下,BFF或許是一個良好的選擇,另一些情況下它或許也是一種合理的選擇,但我認為這不是你應當遵循的一種模式。
接下來進入下一個假設,“系統很重要”,它表示BFF模式經常會對應各種系統提供獨立的實現,例如web、平板與原生應用,進而催生了各種跨服務連接的出現(從而有可能會造成脆弱的依賴性)。Tilkov對此有著不同的看法,他認為系統并不重要,用戶所期待的是一種“跨系統的無縫體驗”。與之相對,推薦的實踐是應當構建“能夠實際完成某些任務”的服務。這種實踐同時也能夠克服另一個假設,該假設曾經被認為是“SOA的原罪”,即服務最重要。
第4個假設是“前端技術只是一種實現細節”。在談話的這一部分首先展現了微服務平臺常見的后端目標:不依賴于具體實現、較小的接口層、基于標準、獨立的部署以及自治的運維。Tilkov希望聽眾能夠仔細思考一下前端平臺的概念,并表示:現有的基于web的技術,例如超鏈接、重定向與嵌入(transclusion)能夠與將瀏覽器視為一種平臺這一思想結合在一起,他們已經滿足了后端目標中的很大一部分。
對于“可以接受一體性的前端平臺”這一假設,Tilkov認為它“只是在某些情況下是正確的”。原生的前端架構往往類似于服務端的一體性架構,他們的目標與限制都有相似之處。可以通過在某種程度上利用組織結構技巧(康威定律)、平臺接口、火車發布模型(release train)以及各種規則以緩解常見的開發與部署問題。
最后的一條假設是“以JS為中心的web應用可以與原生應用表現得一樣好”,Tilkov對這條假設的回應是“這種web應用不應該像原生應用表現得那么差!”。他對聽眾提出了一個要求,在沒有必要的情況下,對于選擇一體化架構的設計方式應該提出質疑。在向原作者Phillip Greenspun表示了歉意之后,Tilkov稍稍修改了著名的格林斯潘第十定律,并勸告聽眾避免重新發明瀏覽器整合特性,接受一定程度上的低效,并且避免臃腫的模塊化實現,例如Java EE或OSGi等等。
任何足夠復雜的JavaScript客戶端應用程序中,都包含一個臨時特設的、不合規范的、充滿程序錯誤的、運行速度很慢的、只有一半功能的瀏覽器實現。
總的來說,Tilkov認為只有很少的組織在交付API的同時意識到了UI的重要性。正如上文所述,前端的一體性架構與后端并沒有高下之分,他們的性質是相同的。對于瀏覽器端的開發來說,最重要的一點在于進行模塊化的前端交付。如果你正在考慮、或是正在參與向基于微服務的應用的遷移過程,那么你就應當像后端架構一樣重視前端的架構。
Stefan Tilkov的演講“Wait, what!? Our microservices have actual human users?”的視頻可以在microXchg的Youtube頻道上找到,同時也可以在innoQ網站上找到此次演講的幻燈片。
查看英文原文:"Wait, What!? Our Microservices Have Actual Human Users?" The Importance of UI Architecture