ref: https://blog.bitsrc.io/bff-pattern-backend-for-frontend-an-introduction-e4fa965128bf
本篇文章是探討一個前後端互相合作的設計模式,Backend For Frontend 簡稱為 BFF。
文章開頭,作者舉了一個常見的應用情境,假設團隊需要基於微服務的概念去設計一套電商系統,背後服務包括了購物車,訂單,產品,顧客...等不同類型的資料。
但是很容易後端所回傳的資料格式並不能完全直接符合前端的需求,這意味前端必須要維護一套邏輯來轉換資料格式來符合其需求。
基於這種情況,作者希望將前端這些轉換格式的邏輯給抽出來並且移動一個中間層來進行處理,而這個中間層也就是所謂的 BFF。
當前端需要請求一些資料時,前端會對 BFF 去發送 API,而此時 BFF 會執行下列行為
1. 呼叫對應的 backend 服務來獲得需要的資料
2. 根據前端的需求將獲得的資料進行格式轉換
3. 將轉換後的格式回傳前端
這種架構下,能夠讓前端的程式邏輯更為簡單與乾淨
接者作者針對 BFF 的架構又探討了幾個問題,分別
The role of a BFF
1. BFF 單純就是一個前後端中間的轉換介面
2. 前端 Team 要負責維護這個 BFF 的應用程式
3. 每個 BFF 就是針對一個前端,一個 UI 去設定,同時盡可能地讓前端程式碼保持單純與專注
Will this increase latency?
由於 BFF 就是一個前後端中間的轉換層,這是否意味所有請求都會需要花費更長的時間來處理,
答案是沒錯,每個請求只要經過愈多的節點整個花費時間會增加是不可避免的。
不過作者認為這個帶來的影響微乎其微,特別是當瀏覽器介面本身需要需要跟眾多沒有針對前端最佳化的服務取得資料時,BFF 帶來的影響基本上可以忽略。
此外,作者認為透過 BFF 的架構可以讓前端更容易得基於批次的概念來一口氣呼叫眾多後端服務同時於一個 reply 中取得全部所需的資料,甚至直接得更為方便呈現的資料格式。
作者提到這個特色針對 2G/3G 這種本身需要花上數秒鐘才可以建立連線的網路情況來說特別有效,減少向後建立連線的數量,反而能夠讓前端更有效率地去呈現畫面。
When to use a BFF for your applications
如同其他眾多的設計模式一樣, 使用 BFF 也是要依據團隊的使用情境與架構來判別。 假設團隊的應用程式是一個 monolithic 的架構,則 BFF 基本上幫不上什麼忙,帶來的好處微乎其微。
不過如果是基於微服務的架構的話,則 BFF 就有機會可以幫上忙。
文章中還有針對 BFF 的架構圖是以及其他相關好處,譬如
1. Separation of concerns
2. Easier to maintain and modify APIs
3. Better error handling in the frontend
4. Multiple device types can call the backend in parallel
5. Better security
6. Shared team ownership of components
有興趣的可以參考看看原文
後端架構圖 在 台灣物聯網實驗室 IOT Labs Facebook 的最讚貼文
佈署 IoT Edge 和霧運算技術以開發智慧建築服務
2021年2月19日 星期五
《3S MARKET》這篇報導把物聯網的架構與實作,描寫的非常詳細,雖然在建築的細節上描述不多,但報導中也提及這是個實際驗證,可適用在很多的場域。不知道,有多少人真正看得懂?當然,連這篇都看不懂的人,就別說他真正了解物聯網、Edge 與 Cloud。
事實上這篇報導的描述不難了解,真正物聯網與邊緣運算的挑戰,是在實作。實作真正面臨的,是這些數據處理、融合、分析上的完整度,還有 —— 找到實作的場景!
摘要
基於 SoC 架構的嵌入式系統的進步,使許多商業設備的開發變得足夠強大,足以運行操作系統和複雜的算法。這些設備整合了一組具有連通性、運算能力和成本降低的不同感測器。在這種情況下,物聯網(IoT)的潛力不斷增加,並帶來了其他發展可能性:「事物」現在可以增加數據源附近的運算量;因此,可以在本地系統上,佈署不同的物聯網服務。
這種範例稱為「邊緣運算」,它整合了物聯網技術和雲端運算系統。邊緣運算可以減少感測器與中央數據中心之間,所需的通信頻寬。此方法需要管理感測器、執行器、嵌入式設備,和可能不連續連接到網路的其他資源(例如智慧手機)。這種趨勢對於智慧建築設計非常有吸引力,在智慧建築設計中,必須整合不同的子系統(能源、氣候控制、安全性、舒適性、使用者服務、維護和營運成本)以開發智慧設施。在這項工作中,分析和提出了一種基於邊緣運算範例的智慧服務設計方法。
這種新穎的方法,克服了現有設計中與服務的互操作性,和可伸縮性有關的一些缺點。描述了基於嵌入式設備的實驗架構。能源管理、安全系統、氣候控制和資訊服務,是實施新智慧設施的子系統。
1. 簡介
建築自動化系統使用開放式通信標準和介面,可以整合多種不同的建築控制規則,例如供暖、通風、空調、照明和百葉窗、安全功能和設備。但是,現有建築物通常不具有這些系統。
通常,每種安裝類型都提供特定的服務:供暖通風和空調(HVAC)控制氣候服務,攝影機和感測器提供安全服務等。僅當設計能源管理系統時,不同的子系統相關,但僅透過以下方式,連接建築物的能源管理系統。能源管理服務,集中在專用軟體中。
對於使用者和維護技術人員來說,提供不同服務的不同製造商,發現很難整合新的服務和功能。自動化建築將用於控制和數據採集的軟體,與工業協議和介面整合在一起。此外,將新服務整合到這種解決方案中並不容易,這取決於已安裝軟體的開發。
這些工業發展還為能源管理,提供了雲端連接解決方案和智慧服務。這些服務,也在集中式電腦系統中開發。數據被傳輸到這些系統或雲端進行分析。本文提出使用佈署在物聯網(IoT)技術中的邊緣和霧運算範例,主要有兩個目的:
A. 在自動化和非自動化建築物中,促進新的智慧和可互操作服務的整合(整合)。
B. 允許在建築物的所有子系統之間,分配智慧服務(互操作性)。
透過該建議,可以促進建築物子系統之間的關係。它還促進創建新的智慧服務(例如,新的分佈式智慧控制算法;使用電源管理捕獲的數據,來檢測人類活動;捕獲設備連接的模式辨識,運算可再生電力預測,在安全服務中使用電力數據等)。在這項工作中,我們設計了一個中間軟體的體系結構,該體系結構具有兩個主要層,這些層基於嵌入式設備、IoT 通信協議和硬體支援,來開發人工智慧算法(圖1)。
為了實現這一目標,我們在建築物的設施中添加了兩個概念等級:邊緣節點和霧節點。每個等級都有不同種類的設備和功能。我們佈署並實現了基於層的中間軟體的體系結構,以對模式進行實驗。
本文的組織結構如下:第 2 節回顧了智慧建築技術,建築物中的 IoT 佈署以及邊緣運算範例。第 3 節提出了一種在建築物(自動與否)中佈署邊緣和霧運算範例的方法。第 4 節介紹了進行的實驗。最後,第 5 節介紹了結論和未來的工作。
2. 相關工作
本節介紹與這項工作相關的主要研究領域。首先,我們在分析雲端運算層之後,回顧了基於邊緣運算範例的資源和服務供應。最後,我們研究了實現智慧建築的技術,並在最後的小節中,總結了先前研究的貢獻。
2.1. 邊緣運算資源和服務供應
最近,網路在兩端被標記為「邊緣」和「核心」,以查明處理發生的位置。邊緣端靠近數據源和使用者,核心端由雲端伺服器組成。透過這種方式,邊緣運算範例將運算推送到 IoT 網路的邊緣,以減少數據處理延遲,和發送到雲端的數據數量。基於雲端的後端,可以處理對時間不太敏感,或源設備本身不需要結果的處理請求(例如,物聯網網路狀態下的大數據分析)。
在邊緣運算資源供應方面,正在進行的 Horizon 2020 RECAP 項目,提出了一種整合的雲端 - 邊緣 - 霧端架構,目的在解決應用放置、基礎架構管理和容量供應。雲端/邊緣基礎架構監控功能豐富了應用,基礎架構和工作負載模型,這些模型又被回饋到優化系統中,該系統可以協調應用並持續配置基礎架構。
徐等人進行的研究。 提出了一種用於邊緣運算的實用感知資源分配方法,稱為 Zenith。借助 Zenith,服務提供商可以與邊緣基礎設施提供商,建立資源共享合同,從而允許延遲感知資源調配算法,以滿足其延遲需求的方式,來調度邊緣任務。
邊緣節點資源管理(簡稱 ENORM),是管理邊緣/霧節點資源的框架,可透過監控應用需求,來自動擴展邊緣節點。可以透過靜態優先等級分配,來確定特定應用的優先等級。供應和自動縮放機制,是基於線性搜索的相對簡單的實現。
當源本身是可行動的時,邊緣雲範例也是可行的。 Chen 等人研究了行動設備向邊緣節點(特別是在無線電接入網路邊緣)的智慧運算分流。在這項工作中,作者提供了任務卸載算法,將分佈式運算卸載決策表述,為多使用者運算卸載功能。在同一項工作中,Wang 等人研究了聯合協調卸載任務,到多個邊緣節點的問題,並提出在邊緣等級引入及准入控制,以及兩階段調度方法,與傳統的最近邊緣選擇方法相比,改進了卸載性能。
2.2. 雲端運算服務配置
就社會和行業採用資訊技術而言,雲端運算範例是最具創新性的策略之一。提供的優勢提高了效率,並降低了成本,同時提供了可透過 Internet,普遍存取訪問的按需 IT 資源和服務。
當前,雲端運算服務種類繁多,甚至如何提供,這是一個受到廣泛研究的主題,正在提出許多的方案。甚至有評論總結了雲端運算範例的相關研究。
本小節介紹了有關以下問題的先前工作,這些問題與本手稿的主題有關:(i)安全性; (ii)服務品質(QoS); (iii)提供邊緣服務。
(i)安全是雲端運算中一個具有挑戰性的問題。雲端服務位於應用環境之外,並且超出了防火牆的保護範圍,因此,需要附加的安全層。另外,邊緣和霧運算應用的行動性和異構性,使得難以定義單個過程。因此,需要一種分佈式安全策略。
此外,必須有一個標準化的環境,才能正確解決此問題,並指定霧運算和邊緣設備,如何相互協作。網路邊緣上的多個霧節點之間的敏感數據通信,需要資源受限的事物的輕量級解決方案。另一個與安全性相關的問題是數據位置。在雲端中運行數據分析是很常見的。因此,關於數據安全或隱私的公有雲與私有雲的爭論就出現了。
(ii)分配給雲端應用的資源,通常是根據合同規定的服務水準協議(SLA)所設置的。但是,實際上,由於偶爾執行大量事務,而導致分配的基礎結構飽和,可能會出現瓶頸。為了解決此問題,可以在資源可用時,動態擴展雲端基礎架構。當前,最具創新性的趨勢,目的在建構自動 SLA 合同合規系統。在 Faniyi 和 Bahsoon,以及 Singh 和 Chana 進行的研究中,可以找到與品質服務管理相關建議的詳盡綜述。考慮到這一點,提出了幾種策略來預測,應用的資源需求和 QoS 的要求。最近的工作試圖將安全性和 QoS 問題結合起來,以提供全面的性能指標。
(iii)最後,濫用雲端服務,是該領域的另一個問題。物聯網環境是霧和邊緣設備不斷加入或離開,動態的執行前後關聯。因此必須在網路邊緣提供彈性的服務。為此,在網路的可用設備之間,共享應用工作負載,可以為高階運算應用提供靈活性。提出了可靠的服務供應方法,來為系統提供更高的彈性,並提供靈活和優化的雲端服務。
在本主題中,將雲端框架和中間軟體技術,設置為與雲端層,以及具有不同介面操作系統,和體系結構的設備之間,進行通信的平台。
2.3. 物聯網在建築服務工程中
物聯網開發為在建築物上,開發數位服務提供了新資源。建築物中常見的物聯網應用,包括節能的過程環節、維護改進、雜務自動化和增強安全性。由於全球變暖,建築物的節能是一個重要的課題。
物聯網技術引入智慧建築,不僅可以減少本地溫室氣體排放,還可以將減少溫室效應擴大到更大的領域。目前,物聯網還被用於建築領域,以協助設施管理。物聯網使營運系統能夠提供更準確和更有用的資訊,從而改善營運,並為房客租戶提供最佳體驗。有基於物聯網的建議,這些建議顯示建築系統,如何與雲端進行通信,並分析所獲取的數據,以開發新的業務見解,從而能夠推動真正的增值和更高的績效。
實驗研究顯示,物聯網平台不僅可以改善,工業能源管理系統中實體的互連性,而且可以降低工業設施的能源成本。 FacilitiesNet 表示,建築物聯網(BIoT)正在推動我們獲取資訊,彼此互動和做出決策的方式發生重大轉變。BIoT 不僅與連接性或設備數量有關,而且還與交付實際和相關結果有關。當前,有很多基於物聯網的智慧家庭應用的例子。
然而,智慧設備或「物」,僅僅是連接到網路的設備或嵌入式系統。增值來自設計協調系統,和提供智慧服務,以提供實際收益的能力。這些特徵基本上,取決於對不同類型連接事物的異質性,及其互操作性的管理,並取決於數據處理提供的情報潛力。
Tolga 和 Esra 進行的研究得出的結論是,就智慧家庭系統中的軟體和硬體而言,物聯網技術尚未變得穩定。原因之一,有可能是物聯網技術仍處於發展階段。McEIhannon 所撰寫有關物聯網應用的邊緣雲和邊緣運算的未來,其評論得出了類似的結論。這篇評論提到概念和發展,目前還處於早期階段,從學術和行業的角度來看,許多挑戰都需要解決。
物聯網帶來了新的機會,但許多企業仍在尋求了解和分析,其將如何影響,並與現有的 IT 結構和管理策略整合。為此,必須創建專門的使用模式和技術,來彌合這一差距。
2.4. 發現
以下結論闡明了這項研究建議的新穎之處:
雲端運算作為「實用」的一般概念,非常適合智慧家庭應用的常規需求。但是,在某些情況下,將所有運算都移到雲端中,是不切實際的。
邊緣計算作為一種計算範例而出現,可以在物聯網設備生成的數據附近執行計算。這種範例可能有助於滿足最新應用的安全性和 QoS 的要求。
當前,控制子系統的高級建築設施,通常使用 Internet、IoT 協議和 Web 服務。專有系統是使用標準的 Internet 通信協議設計的,用於管制和監控。先前的工作顯示,基於無線感測器網路、Web 介面和工業控制模式,用於氣候控制、電源管理或安全性的控制系統,使用不同的監視和控制技術。監控應用分析,得自監控和數據採集系統中的這些子系統。對於不同的子系統,有不同的解決方案。考慮到上述情況,本工作中提出的模式,引入了以下新穎元素:
A. 介紹了一種分層架構(整合了邊緣和霧端等級),以及提供子系統之間互操作性,以及在建築物控制中開發智慧服務的方法,該方法使用了邊緣和霧端範例,這些範例將 IoT 協議整合在一起,並在本地 Intranet 中操作 AI 技術,讓雲端服務的通信層,完善了該層的架構。
B. 介紹了一種基於使用者為中心的方法,用於在互操作性需求下設計、驗證和改進新服務。
C. 該提案允許使用可以在已建的建築物中,實施的非專有硬體和軟體系統。
3. 計算模式設計
建築物中的設施子系統分為有照明、氣候、能源、安全、警報、電梯等。在自動化建築中,這些子系統由專門的控制技術控制和監控。在非自動化建築物中,不存在這些服務,並且子系統透過電子和電氣方式進行控制。在這兩種情況下,所有子系統都為建築營運,提供必要的服務。
從邏輯上講,每個子系統都在其場景中起作用,並且不能與其他子系統互操作。嵌入式電子控制器和連接的不同感測器,可以使每個子系統自動化。這些服務都是基於直接反應性控制規則。除了嵌入式控制系統和感測器之外,通信技術(基於 Internet 協議)和新的行動設備還為開發管制、監控和數據訪問服務,提供了新的可能性。
在智慧型動設備上開發,並連接到 Web 伺服器的人機介面和專用應用,是近年來已實現的服務的範例。每個子系統中的專家(氣候、安全性、電源等),都具有可以轉換為專家規則的知識。這些規則被轉換為用於管理、維護、控制、優化和其他活動的控制算法。這些規則是可以,在可程式設備上編程和實現的。但是,它們是靜態的,不會在出現新情況時發生變化,並且不能互操作,也無法適應每個安裝的特性。
例如,氣候或安全專家決定,如何使用標準啟動條件,來配置每個子系統。每個控制規則僅在一個子系統(此範例中為氣候或安全性)中工作,因此,這些子系統之間沒有互操作性。考慮到這種情況,提出的模式有助於並允許,基於不同子系統的互操作性,來整合新的數位服務,並將人工智慧(AI)技術的新服務,引入當前設施。
例如,諸如電梯控制的設施,可以用於安全服務或建築能源管理服務。氣候控制設施,可以與安全子系統整合在一起。整合到模式中的天氣預報軟體系統,可以由能源管理服務,或建築物空調服務使用。
目的是讓每個子系統中的專家,參與設計整合服務,並將所有子系統轉換為可互操作的系統。該模式會開發自動規則,並允許在考慮安裝行為本身的情況下進行決策。該模式基於一個過程,該過程包括四個開發階段(圖2)和分為不同級別的硬體 - 軟體體系結構(圖3)。該體系結構的主要等級,是邊緣等級和霧等級。這兩個層次介紹了在建築物中,應用物聯網技術的新穎性。下面介紹了模式的各個階段(分析、設計、實施和啟動)。
.分析:在此階段確定了不同的專家使用者(氣候、安全、電力、水、能源、管理人員,以及資訊和通信技術(ICT)技術人員)。諮詢專家使用者,以指定需要控制的主要過程。資訊通信技術專家作為整合環節,參與了這一過程。第一種方法產生了設計控制規則,和潛在服務所需的事物(對象)。在此階段,使用以使用者為中心的方法,並捕獲子系統的需求。
.設計:我們提出了一個三層架構(邊緣、霧端和雲端),如圖 3 所示。
.實施和數據分析:在此階段中已安裝和整合了子系統。服務基於每個子系統中的規則,分析事物(對象)生成的數據,以設計基於機器學習的服務。
.啟動:最初,在每個子系統的監督下制訂專家規則。然後,使用回饋過程安裝規則。最後,透過人工智慧技術,可以推斷出自動的和經過調整的規則。
3.1. 分析與設計
專家使用者對此過程,進行不同的審查。以使用者為中心的技術,用於設計整合流程。目的是獲得所需的所有事物(對象),它們之間的關係,以及潛在的服務。一旦指定了事物(對象)和服務,就必須關聯通信協議和控制技術。選擇了物聯網協議和嵌入式控制器;提出了人機介面;指定了邊緣層和霧層及其功能;分析專家規則和智慧服務。最後,提出了維護和操作方法。所有這些任務在專家技術人員,和資訊技術專家之間共享。
結果是事物的定義,它們之間的關係,以及與邊緣和霧層的交互作用。該過程中代表了建築物的所有子系統,數據感測器、執行器、控制器、規則和過程經過設計,可以整合所有子系統。數據集、對象和設備,由物聯網概念表示。事物由具有狀態和配置數據的實體,和前後關聯組成。事物數據位於霧和邊緣節點中,儲存的不同配置中的關聯性。
事物以數據向量表示:[ID、類型、節點、前後關聯情境]。
– ID是辨識碼。
– 類型可以是感測器、執行器、變量、過程、設備、介面、數據儲存,或可以在 IoT 生態系統中寫入、處理、通信、儲存或讀取數據的任何對象。
– 節點指定建築物子系統、功能描述、層類型(邊緣、霧端、通信或雲端)、IoT 協議和時程存取訪問。
– 前後關聯表示在 IoT 生態系統中,用於發布或讀取數據的時間、日期、位置,與其他事物的關係、狀態和訪問頻率。
表 1 是由事物([ID、類型、節點])。所有事物都可以訪問配置文件(CF),以了解如何使用可用數據,以及如何使用適當的訪問權限配置新數據。前後關聯數據位於內建記憶體,或是靜態儲存。使用定義的事物,設計不同的控制規則。這些控制規則是分佈在連接到網路的不同嵌入式系統中,控制過程的一部分。事物表示佈署在安裝的不同子系統中,所有的可用資源。在此等級上,設計師對所有事物進行分析、指定和關聯。基本控制算法是使用此資訊實現的。配置關聯性允許層和設備之間,所有事物的互操作性。
在此階段的另一級設計,必須提出物聯網管理中,使用的節點要求和規範。設計的流程和服務,將在邊緣或模糊節點中實施。必須指定每個節點,以確定其內部功能、通信及其服務。在獲取數據的地方,開發了智慧和處理能力。邊緣和霧層的節點,位於數據感測器、執行器和控制器附近。本文提出的方法,使用具有兩個功能的兩層(邊緣和霧端)。每一層都可以佈署互連節點的網路,以促進互操作性。
邊緣和霧層的功能是:
邊緣層功能:在連接感測器/執行器的嵌入式設備上,開發的控制軟體。某些 AI 算法可以安裝在邊緣節點上。中央處理器(CPU)和計算資源有限。安裝了通信介面,以允許在本地網路中進行整合。
霧層功能:局域網級別的通信、AI 範例、儲存、配置關聯性和監控活動。霧節點透過處理、通信和儲存,來處理 IoT 的Gateway、伺服器設備,或其他設備中的數據。在此等級實施本地、全球的整合服務。利用這些節點的硬體、軟體和通信功能,開發了基於機器學習範例的算法。霧層設備還可以在很少單位的設施或服務中,執行邊緣節點功能。
透過這兩個等級,可以優化建築設施,以獲得不同子系統之間的整合和互操作性。
表 1 顯示了每件事與關聯性配置,和節點規範的關係。節點標識其所屬的子系統(控制、能源、氣候等),層(霧端、邊緣、通信和雲端)及其執行的功能。
3.2. 架構設計
在分析和設計階段,獲得對象(事物)及其關係。規範和要求用於實現每個層。實施取決於提供所需功能的設計,和現有技術(硬體、通信和軟體)。在此階段,開發了一種適合現有設施的體系結構。物聯網協議提供互操作性,而 AI 範例則提供了適應性和優化性。邊緣運算節點用於控制設備,霧運算節點安裝在本地網路節點上。這些等級為配置、安裝和運行新流程,提供了強大的資源。
物聯網協議,傳達所有子系統數據。每個子系統由對象/事物(虛擬等級)組成,安裝為可連接的感測器/執行器/控制器設備(硬體等級)。
物聯網通信中,針對建築場景建立的要求是:標準協議、低功耗、易於存取訪問和維護、支援整合新模組,非專有硬體或軟體,以及低成本設備。
MQTT 協議,是目的在用於提供整合和互操作性資源,異構通信場景的主要物聯網協議之一。該協議被提議作為感測器、執行器、控制器、通信設備,和子系統之間的通信範例。
MQTT 協議的一些主要功能,在不同的著作中有所顯示,這使其特別適合於這項研究。他們之中有一些是:
.它是針對資源受限的場景開發的發布 - 訂閱消息協議。
.它具有低頻寬要求。
.這是一個非常節能的協議。
.編程資源非常簡單,使其特別適合於嵌入式設備。
.具有三個 QoS 等級,它提供了可靠和安全的通信。
MQTT 開發了無所不在的網路,該網路支持 n-m 節點通信模式。任何節點都可以查詢其他節點,並對其進行查詢。在這些情況下,任何節點都可以充當基地台的角色,能夠將其資訊傳輸到遠端處理位置。無處不在的感測器網路(USN)中的節點,可以處理本地數據。如果使用 Gateway,則它們具有全局可訪問性;他們可以提供擴展服務。
節點(邊緣或霧),可以具有本地和全局存取訪問權限。這些設施具有不同的可能性和益處。本地數據處理,對於基本過程控制是必需的,而全局處理則可用於模式檢測和資訊生成。從這個意義上講,擬議的平台使用了組合功能:連接到 IoT 雲端服務,本地網路區域上不同的 USN。在這種情況下,運算層(邊緣或模糊等級)將用作控制流程和雲端服務之間的介面。該層可以在與雲端進行通信之前,進行處理數據。
實現邊緣和霧端運算節點需要執行三個操作:
.連接和通信服務:所有設備必須在同一網路中,並且可以互操作。所有感測器和執行器都可用於開發服務。此活動的一個示例,是在 Internet 上遠端讀取建築物的電源參數、環境條件和開放的天氣預報數據。此活動中應實現其他功能,例如連接的安全性、可靠性和互操作性。
.嵌入式設備(邊緣運算層)中的控制算法和數據處理:在此活動中,這些設備中實現的基本控制規則和數據分析服務,可以開發新功能。此階段可以應用於數據過濾、運算氣候數據或分析功耗、直接反應控製,或使用模式辨識技術檢測事件。
.Gateway 節點(霧運算層)上的高階服務:此等級使用和管理 AI 範例,和 IoT 通信協議。霧運算節點對數據執行智慧分析,對其進行儲存,過濾並將其傳遞到不同等級,以糾正較低級別的新控制措施,或者生成雲端中服務感興趣的資訊。此階段的應用示例,包括分析新模式、預測用水量,或功耗、智慧檢測和其他預測服務。
3.3. 測試與回饋
在測試階段使用標準方法,邊緣和霧層提供不同的功能。提出了針對不同子系統的機器學習模式,並且可以將其安裝在邊緣或霧節點上。必須執行以下操作,來測試機器學習應用:
A. 定義和捕獲數據集:必須辨識、捕獲和儲存主要變量。在不同的建築子系統中,過程數據集是由連接到邊緣層的感測器捕獲的數據。使用通信協議監控和儲存數據集。一個案例是電表,該電表在配電盤中連接到嵌入式設備(邊緣節點),該嵌入式設備傳送電力數據,以在霧節點設備中儲存和處理。
B. 訓練數據集和形式辨識模式。先前數據集的一個子集,用於訓練不同的模式。評估針對從未用於訓練的數據測試模式,此過程的結果已由專家使用者驗證。目的是獲得一組代表性的結果,以了解模式在現實世界中的表現。
C. 實際場景中的驗證:必須在邊緣和霧節點上,實施新的服務和控制算法。這些模式具有用於分析數據,實施特定模式,並使用結果開發最佳參數的算法。在此階段,可以修改或進行改善模式。
D. 用統計術語和模式演變,得出測試結果:基於 AI 算法的模式而將產生近似值,而不是精確的結果。分析應用結果以確定置信度,並允許模式演化。該活動支持開發新的 AI 服務,或對已實現的算法進行修改。有監督的自動更改,是維護和改進系統的過程。此階段的過程,包括所有模式層。
建議對使用邊緣和霧,任何的安裝進行這些活動。如前所述,該模式既可以安裝在既有舊的建築物中,也可以安裝在新建築物中。對於新建築設計,基於建議模式的安裝更易於整合。此外,可以提供的服務的潛力,也使其對於既有建築物具有吸引力。
4.在建築子系統中,實施智慧服務
該模式在預先存在的住宅建築物上,進行了測試。設計和實施電源管理、管制和監控服務。物聯網協議(MQTT 和 HTTP)和 ML 範例,用於建議的層體系結構。基於 KNN 的機器學習方法,和樹決策算法用於管理功耗(家用電器),和可再生能源發電(風能和太陽能)。使用房屋中的霧節點,在雲端平台上實現監控和統計數據。該節點連接到控制可再生,和家用電器子系統的不同邊緣節點。
在圖 6 中,邊緣節點,整合在先前安裝的可再生子系統中。透過邊緣層上的這種新設備、電源管理、安全控制和操作流程得以整合,並且可以與其他子系統互操作。可以設計新的智慧服務。邊緣節點將數據傳輸到霧節點 Gateway,該 Gateway 管理功耗和發電,並控製家用電器。該節點中的輸入,是可再生能源發電的數據。輸出控件是 ON-OFF 開關,用於優化發電、安全性和操作。
4.1. 分析與設計
分析了住宅建築,以設計電源管理,安全和控制服務。 在第一種方法中,所需的主要事物(對象),它們之間的關係和不同的服務,如表 2 所示。
4.2. 執行
分析房屋中的建築子系統,以整合這個執行模式層:邊緣控制、霧服務,與雲端的通信和雲端服務。 選擇了本實驗工作中使用的感測器、執行器和控制過程(事物)。 表 3 列出了使用的嵌入式設備。
家庭服務中的控制過程,需要反應時間和互操作性。人機介面、數據存取訪問和分析服務,是本地和雲端運算上的服務。上面提到的兩個需求,都使用不同的協議處理:控制/通信上的 MQTT,和雲端服務上的 HTTP(RESTful API)是用於整合,並使所有子系統互操作的 IoT 協議。在提出的該層模式中,還使用 MQTT 協議、控制、數據處理,以及使用 RESTful 協議,到雲端的數據通信,來開發機器對機器(M2M)應用。
MQTT 使用開放的消息協議,該協議可以將遙測樣式的數據(即在遠端位置收集的測量結果),以消息的形式,從設備和感測器,沿著不可靠或受約束的網路傳輸,到伺服器(BROKER)。消息是簡單、緊湊的二進制數據包,有效載荷(壓縮的標頭,比超連結傳輸協議(HTTP)少得多的詳細資訊),並且非常適合推送簡單的消息傳遞方案,例如溫度更新或移動通知。例如,消息也可以很好地用於,將受約束的或更小的設備,和感測器連接到 Web 服務。
MQTT 通信協議,使所有對象可以互操作。透過此協議實現的發布者和訂閱者模式,可以互連所有設備和事物。該通信層由安裝在霧節點上的代理設備管理。不同的發布者和訂閱者,在不同的節點上實現。安裝了一個 Gateway 設備(霧節點)和兩個嵌入式控制器(邊緣節點),來控製家用電器和電源管理。事物和流程佈署在所有節點上。
邊緣節點控制子系統,霧節點根據決策樹,以及專家定義的規則,實現 AI 範例。霧設備將數據傳輸到雲端平台,以開發儀表板螢幕,來監看子系統的狀態。
可以開發新的雲端平台服務:事件檢測、機器學習處理、統計分析等。專家使用者設計基本的控制算法。在學習和訓練過程之後,將根據專家系統的結果,對這些算法進行調整和修改。在這項工作中,目標是在不損失生產力的情況下優化資源(控制和能源)。在邊緣或霧節點中,執行不同的控製過程;分類過程和決策樹在霧節點中實現。算法以 Python 語言實現。此語言的開源庫用於不同的應用。
4.3. 佈署與測試
對於現有建築物,邊緣節點交錯插入已安裝的控制器、配電板,以及感測器和執行器中。如果在分析階段指定了新的東西(電錶、氣候和控制器),則會安裝一些新的感測器/執行器。這項工作中佈署的邊緣節點具有以下優點:
.請勿干擾先前的安裝操作。
.他們使用新的專家規則和自動規則,引入新控件。
.他們測試和重新配置,在分析、學習和測試驗證中,設計更新的專家規則。
圖 7. 佈署在配電盤中的節點。 使用 IoT 協議通信,在不同節點中開發數據捕獲、控制算法、數據分析、儲存和通信服務
在電力管理過程中,專家使用者根據電力消耗、發電量、消耗負荷曲線、氣候數據和氣候預測數據,對具有選定流程的時間表,進行可程式處理。邊緣節點捕獲數據,並將其發送到霧節點。
霧節點處理室內和室外環境的日記數據,以及天氣狀況。霧節點還可以捕獲其他感測器數據。對房屋中的這些數據消耗和生成方式,進行檢測和分類。消費和發電結果,作為數據添加,以便與儲存的數據一起進行分析。可以使用機器學習方法開發,作為家用電器或人類活動檢測的智慧服務(圖8)。
4.3.1. 機器學習:數據捕獲過程(邊緣節點)和家用電器分類(霧節點)
連接在主配電盤中的電表,用於捕獲數據,並使用標準的 K 近似值,最近鄰(KNN)分類算法,來開發形式辨識模式。 KNN 是機器學習系統中最常見的方法之一。電表捕獲電流;如果連接了新的家用電器,則電流數據會更改。不同的家用電器具有不同的變化等級。
用於辨識家用電器的不同模式的主要變量,是連接時的電流水準差異。數據捕獲過程流程圖(圖9),顯示了在邊緣節點中實現的算法,以捕獲預處理並傳遞電力數據。
在此過程中,監督階段使用訓練數據集。接下來,真實場景中的驗證,將測試分類模式。家用分類設備將用於不同的服務:人類活動的辨識、負載控制、可再生能源管理、空調、安全性等。在訓練階段,已捕獲了不同的家用電器開機,以獲得一組形式。每個家庭都有一個矩心向量,將用於分類過程中的檢測。如上面所示的算法所示,分類器處理將產生連接時的電流數據作為輸入。KNN 分類過程流程圖(圖10)描述了 KNN 方法,它在霧節點中實現。
4.3.2. 可再生電源管理。控制電力自耗的決策樹
每個建築物都有不同的需求曲線,以及在接入電網方面的特定情況。為此,整合和可互操作的設施,可以實施適用於每種情況的不同解決方案,從而提供對太陽風資源的最佳管理,優化電源效率,簡化管理流程,並實現最高的成本節省。當可再生能源超過消耗的能源時,在使用 AC 耦合到電網的設施中,會出現問題。
在實驗工作中,太陽能在一天的中央時段的能量,大於所消耗的能量(圖11)。但是,在分析了消耗曲線之後,可以在這段時間內連接負載,以避免注入電網。可以透過設計一種算法,來滿足這一要求,該算法可以預測,何時發生此事件,以自動連接不同的負載。利用所有感測器和執行器的整合,和互操作通信,已經開發了在不同節點中,所實現的算法(圖12)。
13. 在電源管理子系統上開發的決策樹。 它由專業使用者設計,並整合在邊緣節點上。該決策樹的目的,在優化可再生能源的使用。
4.3.3. 基於 Edge 和 Fog 節點的 Control Home
圖 14 顯示了安裝在住宅房間中的邊緣節點。 該節點可以控制四個設備(設備),並捕獲感測器數據(功耗、發電量、溫度、濕度等)。該設備可以使用 MQTT 協議進行通信。該協議允許設備之間,進行其他類型的通信:智慧手機、新邊緣節點等。圖 7 和圖 14 顯示了可以在其他建築物中,佈署的標準實現。在所有系統中,都有配電板,這些配電盤佈署了霧節點和邊緣節點,如圖所示。
4.3.4. 使用物聯網協議的雲端服務
雲端服務可以監控,透過霧節點或人機介面(HMI)訪問的數據。 IoT 協議(MQTT)從任何已連接 Internet 的設備推送數據。事件檢測、儲存統計分析等其他服務,完善了該資源的功能。提供類似服務的不同平台,顯示了商用物聯網技術的狀態:Amazon IoT、Microsoft Azure、Ubidots 和 Thingspeak,是提供 IoT 平台的公司一些案例。提供了資源以及客戶端,和 IoT 平台之間的應用程式介面(API)通信,以便可以使用它們。
用於設計儀表板監控和管制的 HMI 資源,是這些平台上的主要實用功能之一。霧節點使用雲端 API 傳達數據和資訊,可以實施其他控制服務。在這些雲端平台上,預先建構了用於監控數據的儀表板設計。使用 API 實用功能,霧節點中的過程處理,會將數據發送到每個儀表板。API 文件指定了在設備、IoT 平台和 Mobile-Alerts Cloud 之間,交換數據的結構,以及用於加速項目的代碼案例和形成資料庫。
圖 15 顯示了在 Ubidots 雲平台上,設計的儀表板。Ubidots是本實驗工作中使用的物聯網平台。該模式可以在實現這些協議的層,和平台中使用不同的標準協議。圖 16 顯示了在雲端平台中,IF 變量 THEN 動作的事件配置。大多數物聯網平台,都提供此功能。
5. 結論
為了設計物聯網系統,越來越多地提出邊緣霧模式。但是,每個範例都提供特定應用領域的解決方案。不同子系統之間的整合和互操作性,可以改善這種情況,並提供更好的服務。這項工作的主要目的,是透過提出一種基於邊緣層和霧層,兩層體系結構的運算模式,來解決這個問題。透過這兩層,可以基於使用邊緣或霧節點中,嵌入式的設備捕獲數據所產生的新型有用資訊,來設計和開發新服務。這些節點使用雲端平台和 IoT 協議(例如 MQTT)。
MQTT 是作為不同層(霧 – 邊緣 – 雲)之間提出的通信協議,並進行實驗的。雲端平台用於開發儀表板的面板資訊和 Internet 上的新服務,例如控制、儲存和通信事件。該平台可用於透過 API,交付不同的服務。
該模式可以在現有建築物和新建築物中,開發這些服務。在這種情況下,要求每個子系統中的專家和專業人員,參與新服務的設計。
為了測試該模式的功能,並顯示如何在實際設施中,實現該模式,在住宅中進行了一項實驗性工作。在此霧和邊緣節點前後關聯中,描述了實現的幾個範例。開發了模式辨識和決策樹方法,以展示人工智慧在設計 IoT 解決方案中的潛力。已安裝服務的結果顯示,邊緣和霧節點佈署,產生了預期中整合和互操作性的好處。
提出的工作演示了,如何將邊緣和霧範例,整合到可以增強其優勢的新架構中,從而擴展了應用領域。該體系結構的主要科學貢獻,是整合、技術的互操作性,及其為開發 AI 服務提供的設施的範例。所有這些改進,都在已開發的實驗的不同示例中顯示。具體的優化和改進,將在以後的工作中進行。此外,使用機器學習平台,和 AI 範例的新控制規則,將確保可以創建和改進新的智慧服務。
附圖:圖1.自動建構子系統和資訊技術環境。
圖2.基於使用者為中心關係的模式。
圖3.通信架構。 每個等級都有不同的功能。 提出了兩個通信等級:IoT(使用消息隊列遙測傳輸(MQTT))和 Web(使用代表性狀態傳輸(REST)協議)。這些協議的層,涵蓋了已建立的整合和互操作性要求。
圖4. 在建築物的現有設施上實施的邊緣霧架構示例:邊緣節點是較低的層次,必須與安裝的設備進行新連接。互連所有子系統的霧節點,是透過整合連接到邊緣節點的新設備來實現的。邊緣和霧節點,可以佈署在所有建築物子系統中。
圖5. 住宅建築中的第一個實驗工作。
圖6. 整合在先前安裝的可再生子系統中,邊緣節點的示例。 該節點可以使用新算法控制 ON-OFF 開關,以管理發電過程,以及通信和監控電源數據。
表1.事物示例描述。寫入 ID、類型和節點數據,以配置 XML 文件。配置關聯性儲存在霧節點中。
表 2. 實驗工作中的分析和設計要求。
表 3. 實驗室內使用的嵌入式設備。
圖 7 顯示了分佈在配電板上的節點(邊緣和霧狀)。在此節點中,設計並安裝了功率計、ON-OFF 開關控件和 AI 服務。
圖 8. 佈署的智慧電源功能。在霧節點中實施的分類過程,可用於檢測電連接和人類活動。可以使用 IoT 通信實現其他服務
圖9. 邊緣節點中捕獲,並預處理的用電量數據;MQTT 協議用於通信數據。另外,其他節點可以使用捕獲的數據,來提供其他智慧服務,佈署了整合和互操作性。
圖10. 分類過程。處理捕獲的電數據以檢測家用電器連接。可以使用 IoT 協議整合,來設計其他智慧服務。
圖11. 該圖顯示了實驗工作中的消耗和生產數據。 在自儲存的電力自備設施中,沒有儲存並且沒有注入電網,所產生的能量必須即時使用,並且不得超過所消耗的能量。 能源經理必須預測此事件,並提前連接電荷。
圖 12. 用電自耗設施中的可再生電源管理。
圖 13 是在電源管理子系統中,開發的算法的示例。 可以在邊緣節點上安裝此過程。該節點獲取氣候數據預測,並預測系統是否可以在不儲存的情況下,使用可再生能源。
圖14. 佈署的邊緣節點。該節點可以使用新算法,控制 ON-OFF 開關,並可以在每個房間或建築物中,通信和監控感測器數據。
圖 15. 在雲平台上配置的儀表板。顯示了風力發電數據和預測風力。
圖 16. 在雲端平台上配置事件的儀表板:IF 事件 THEN 動作。 該服務顯示了,如何使用雲端訪問來控制設施。與霧節點的 Internet 通信,可以控制建築物中的不同子系統,並使用電子郵件,SMS 或其他 Internet 服務來通報事件。
資料來源:https://3smarket-info.blogspot.com/2021/02/iot-edge.html?m=1&fbclid=IwAR0uijX5WdNrfzmGjVsakFGaEsWivPgyH1zumxVr7fwvvgqtdFFTI6jJXS8
後端架構圖 在 矽谷輕鬆談 Just Kidding Tech Facebook 的最佳貼文
#就地避難在家鍛鍊寫作能力
軟體工程師系統設計面試準備指南
當你有了幾年的工作經驗以後,在找工作時一定會遇到系統設計的面試,有鑒於大部分的面試心得都是針對演算法以及資料結構的程式面試 (包括我之前寫的美國軟體工程師求職心得),對於系統設計的準備資源還真的不多,本篇要來剖析系統設計面試,介紹面試的流程、正確的心態以及準備的方向,讓大家再也不怕系統設計面試!
Medium 好讀版:https://medium.com/jktech/%E8%BB%9F%E9%AB%94%E5%B7%A5%E7%A8%8B%E5%B8%AB%E7%B3%BB%E7%B5%B1%E8%A8%AD%E8%A8%88%E6%BA%96%E5%82%99%E6%8C%87%E5%8D%97-acf6ab1f502f?source=friends_link&sk=ca40acf60b749cb1b32c17a868b0c1a3
#為什麼系統設計很重要?
在程式面試表現優異,可以讓你順利拿到 Offer;但是系統設計會決定你加入公司的職等!這也就是為什麼有些人有十年經驗只能拿到 Mid-Level (L4) 的 Offer,而有些人只有五年經驗卻可以拿到資深工程師以上 (L5+) 的 Offer。
另外,如果你是面試 Staff 或是 Principal 級別以上的話,除了系統設計以外,有些公司還會有 Technical Leadership 的面試,來判斷你是否有能力可以跟不同的部門合作、解決問題的不確定性、帶領資淺的人然後推動並且完成一個跨部門的大型技術專案。
簡單來說,系統設計用來判斷你是 L4 或是 L5+,Technical Leadership 面試用來判斷是 L5 或是 L6+。
#為什麼系統設計很難準備?
大多數應徵者在準備的時候會過度偏重於程式面試,原因也不難理解,程式問題的定義很清楚,有給定的輸入以及預期的輸出,就算你真的想不出來,LeetCode 上的討論區也有參考答案;這種有考古題可以參考的面試,對於台灣教育出來的人來說相對好準備,隨著你解的問題多了,你也會更有信心,不知不覺甚至還會刷上癮了呢!但系統設計卻非如此。
系統設計面試的問題描述通常很模糊 (這是刻意的),沒有給定的輸入與輸出,比較沒有既定規則可以遵循,然後也沒有一個標準答案,針對不同系統你需要提出不同的解法然後分析優缺點,一樣的問題,面試官也會針對你過去經驗往不同的方向問,有些問題你工作上沒有碰過還真的回答不出來,這也就是為什麼很多人看到系統面試就怕了。
#到底要怎麼準備?
首先我們要先建立一個觀念:沒有任何一個人可以知道所有的技術細節
不管你的面試官有多少年經驗,不管他們再怎麼資深,在變化快速的軟體產業,沒有人可以知道所有事情,一定有你知道而他們沒聽過的事情!
請把系統設計當成分享你過去所學的面試,這個面試的目的在於展示你對於軟體架構能力的廣度跟深度,你必須可以給出大方向的架構,知道有哪些元件 (廣度),同時針對你熟悉的領域深入探討更多細節 (深度),並且提出幾個解決方案,分析優缺點,並且針對系統需求選擇合適的解法。
大方承認自己對某些領域的細節不熟,也是完全沒問題的,只要讓面試官了解你知道這個東西,如果要深入了解的話你知道有哪些方向要努力,這樣就夠了,因為在大型的軟體專案裡,一定是高度分工的,不會有人同時精通手機端、前端、後端、Infra 以及嵌入式或是硬體的。
講到這裡,相信你也知道如果真的要準備是準備不完的,這些知識是透過平常工作以及閱讀技術文章長期累積的成果,比較沒辦法臨時抱佛腳。
#具體來說會問什麼問題
舉例來說,一個系統設計的問題會像是這樣:如何設計 Facebook?
這類問題的描述通常會很大而且模糊,面試官不預期而且你也不可能在 45 分鐘內就設計出這些公司花了好幾年這麼多人力設計出來的產品,所以第一步要做的事情是確認需求:是要設計動態牆、Messenger、廣告系統還是推薦系統?流量跟資料量為多少?需要支援全球的使用者嗎?
確認完需求以後,會針對最重要的幾個使用場景設計你的 Data model 以及 API,接著畫出大的系統架構圖,大致上會包含客戶端 (手機版/桌面版)、Load Balancer (Reverse Proxy)、App Servers 以及資料庫,接著可以針對細節下去討論,這邊開始就很自由了。
如果你是專精在資料庫,可以討論要用什麼資料庫以及資料要怎麼存可以讓特定使用場景的讀取以及寫入效能比較好,要怎麼做資料庫的 Replication 跟 Sharding 來服務更多的使用者?
如果講到快取,哪些地方可以加快取呢 (瀏覽器前端, CDN, App Server, 資料庫)?具體來說寫入快取有哪些方式以及優缺點 (write-through, write-around, write-back)?什麼時候要失效?要讓哪些資料失效?
如果聊到微服務器架構跟 Service Mesh,不同的服務怎麼跟其他的服務溝通? control plane 要怎麼更新 data plane 的設定?如果 control plane 掛了怎麼辦?要怎麼做 service discovery? 哪一種 Load Balancing 策略比較好 (round robin, random, least connection, ring hash, or maglev)?有些服務掛了影響到整個系統怎麼辦?什麼時候需要 circuit breaker ?
如果你是手機開發者,怎麼實現離線瀏覽?手機要有資料庫嗎?要怎麼以及多常跟伺服器同步?API 要怎麼設計?如何實現 Infinite Loading?剛 Po 文以後要怎麼樣在自己手機上馬上看到?
這些問題真的列舉不完,總之看到這裡你會了解為什麼我說這個面試是沒有範圍而且也準備不完的,重點應該放在跟面試官的討論,展現你在技術方面的廣度跟深度,讓面試結束的時候能夠有一個你們兩個人都同意的設計!
#準備材料
系統設計的資源比較分散,以下是我篩選過後覺得有用的資料,按照素材的類型作分類,也歡迎大家留言補充!
#入門影片
針對完全沒有概念的新手,我建議可以先從哈佛的 CS75 Lecture 9 Scalability 開始,裡面講到的很多基礎觀念都相當重要,值得一再複習,這些概念先有了以後再閱讀其他的材料會比較有感覺:
如果你看完這篇文章後還想再多了解系統面試的形式,也可以看一個前 Facebook 工程師分享的影片:
Distributed Systems in One Lesson 也很推,裡面提到不少業界在使用的設計模式:
有一個需要付費的資源是 SystemsExpert,每個影片會講解一個系統設計重要的概念,我個人覺得內容有點淺所以沒有買,但是整理地還算不錯,如果你看完他們免費的影片有興趣還是可以參考一下。
#閱讀文章
影片是一個讓你很好理解大方向概念的方式,但是如果你要深入理解背後的原理還有怎麼運作的細節,還是得透過大量以及深度的閱讀來吸收呀!
system design primer 整理了很多系統設計的資源,資料量很夠, 個人的建議是先快速過一遍,不要細讀,先知道總共有哪些元件,大概是做什麼用的就好,接著針對有興趣的部分在深入研究,建立自己的知識庫。
Grokking the System Design Interview 也是很多人推薦的材料,主要是針對系統設計的問題提供範例解答,他們的答案可以當作一個參考,但面試的時候不要完全照著回答,還是得看跟面試官討論的結果來進行,但這個是需要付費的,有興趣可以用我的推薦碼註冊購買。
如果你不想花錢或是不確定 Grokking 的文章你喜不喜歡,有一個類似的網站 Crack the System Design Interview 整理得也還不錯。
#書籍
唸書是一個有系統性學習的方法,如果你只想選一本書來看,就選這本大家都推的系統設計聖經 — Designing Data-Intensive Applications,簡稱 DDIA,這本書適合的對象是想要長期準備系統設計或是分散式系統的人,裡面舉的例子都是實際上業界遇到的問題,不會有以前讀教科書那種工作又用不到的感覺;但也因為是書,花了一些篇幅在講解背景知識,包含以前的系統是怎麼設計的以及如何演進到現在,對短期要準備面試的人效率會有點低,所以不適合有時間壓力的人。
這本書我目前讀了一半,最大的收獲是它解釋了很多為什麼現代的系統要做這樣的設計,我們針對不同的系統要求可以有哪些解法,這些解法各有什麼優缺點,總之分散式系統就是我們解決了一個問題,但又會產生更多要考量的點,一切都是 trade-off。
但這本書也不是沒有缺點的,首先我覺得是本書的英文沒有很好讀,我常常一段看了好幾遍才知道他想表達的重點是什麼,而且,有些很重要的觀念常常藏在一段文字裡用一句話帶過,但是不太重要的觀念卻使用 Bullet Point 表達;另外這本書話常常講一半,一些觀念提到了一點卻說我們後面再聊,也因為這樣,我在考慮要不要幫大家整理每一個章節的重點,翻成中文分享給大家,有興趣的朋友麻煩拍手留言告訴我!
除此之外,Google 的 SRE Books 內容也很實在,但是每一個章節的內容是獨立的,建議大家選擇想研究的章節跳著看就好。
最後,Distributed systems for fun and profit 的內容也很好,以分散式系統的理論為主,比較沒那麼針對系統設計面試。
#還想閱讀更多嗎?
我知道光是上面的資源就已經讀不完了,但是行有餘力的話,平時也可以多看看各大公司的技術部落格或是訂閱技術週刊如 TechBridge (台灣) 、HackerNews 以及 InfoQ 等等。
此外,參考別人的經驗也是很好的方式,最近剛好幾個朋友剛找完工作,他們分享的矽谷找資深工程師工作心得分享以及2020 上半年軟工找工經驗分享也都很值得看!
最後,在工作上使用到的技術,除了會用以外,最好也要花時間去研讀技術文件,了解他們設計的考量以及支援的場景,大部分這類型針對開發者的文件寫得會比較深入,所以也是相當好的學習素材;我自己過去一年因為工作上需要整合 Envoy 到我們公司的 Traffic Infrastructure,從他們的文件中學到很多 Service Mesh 跟微服務器的重要概念,學習的深度都是其他資源無法提供的。
#總結
這篇文章我們整理了很豐富的系統設計資源,希望大家不要被這滿滿的資訊量嚇跑。
請記得,我們永遠有各種方法在短期內針對面試做準備,提升面試的表現,但這都只是一時的,沒辦法讓你一夕之間就成為專家;如果想要追求長期的持續成長,那麼沒有捷徑 — 就是養成每天學習以及閱讀的習慣,一開始真的很難看到效果,但是當你持續一週、一個月甚至是一年以後,你會明顯感受到自己的成長,這些投入的時間都是騙不了人的。
如果這篇文章對你有幫助,請拍手留言加訂閱,並且分享給更多有需要的人知道!
後端架構圖 在 xingshaocheng/architect-awesome: 后端架构师技术图谱 的推薦與評價
后端架构 师技术图谱. Contribute to xingshaocheng/architect-awesome development by creating an account on GitHub. ... <看更多>
後端架構圖 在 資料庫MySQL 架構說明 - YouTube 的推薦與評價
![影片讀取中](/images/youtube.png)
後端 世界中,存取資料可是一個非常非常非常重要的功能,而現在關聯式資料庫依然是常用的資料存取的工具。 在PHP 中MySQL 很常一起使用,而MySQL 在後 ... ... <看更多>
後端架構圖 在 [week 14] 後端基礎:資料庫& 系統設計 - 前端新米 的推薦與評價
[week 14] 後端基礎:資料庫& 系統設計 ... 請你畫出一張短網址服務的後端系統架構圖,越詳細越好,可以考慮到如何增進效能、scaling 以及備份資料。 ... <看更多>