開發者定義的應用交付

Lee Calcote發表於2017-09-17

負載均衡器如何幫助你解決分散式系統的複雜性。

原生雲應用旨在利用分散式系統的效能、可擴充套件性和可靠性優勢。不幸的是,分散式系統往往以額外的複雜性為代價。由於你程式的各個元件跨網路分佈,並且這些網路有通訊障礙或者效能降級,因此你的分散式程式元件需要能夠繼續獨立執行。

為了避免程式狀態的不一致,分散式系統設計應該有一個共識,即元件會失效。沒有什麼比在網路中更突出了。因此,在其核心,分散式系統在很大程度上依賴於負載平衡——請求分佈於兩個或多個系統,以便在面臨網路中斷時具有彈性,並在系統負載波動時水平縮放時。

隨著分散式系統在原生雲程式的設計和交付中越來越普及,負載平衡器在現代應用程式體系結構的各個層次都影響了基礎設施設計。在大多數常見配置中,負載平衡器部署在應用程式前端,處理來自外部世界的請求。然而,微服務的出現意味著負載平衡器可以在幕後發揮關鍵作用:即管理服務之間的流。

因此,當你使用原生雲程式和分散式系統時,負載均衡器將承擔其他角色:

  • 作為提供快取和增加安全性的反向代理,因為它成為外部客戶端的中間人。
  • 作為通過提供協議轉換(例如 REST 到 AMQP)的 API 閘道器
  • 它可以處理安全性(即執行 Web 應用程式防火牆)。
  • 它可能承擔應用程式管理任務,如速率限制和 HTTP/2 支援。

鑑於它們的擴充套件能力遠大於平衡流量,負載平衡器load balancer可以更廣泛地稱為應用交付控制器Application Delivery Controller(ADC)。

開發人員定義基礎設施

從歷史上看,ADC 是由 IT 專業人員購買、部署和管理的,最常見執行企業級架構的應用程式。對於物理負載平衡器裝置(如 F5、Citrix、Brocade等),這種情況在很大程度上仍然存在。具有分散式系統設計和臨時基礎設施的雲原生應用要求負載平衡器與它們執行時的基礎設施 (如容器) 一樣具有動態特性。這些通常是軟體負載均衡器(例如來自公共雲提供商的 NGINX 和負載平衡器)。雲原生應用通常是開發人員主導的計劃,這意味著開發人員正在建立應用程式(例如微伺服器)和基礎設施(Kubernetes 和 NGINX)。開發人員越來越多地對負載平衡 (和其他) 基礎設施的決策做出或產生重大影響。

作為決策者,雲原生應用的開發人員通常不會意識到企業基礎設施需求或現有部署的影響,同時要考慮到這些部署通常是新的,並且經常在公共或私有云環境中進行部署。雲技術將基礎設施抽象為可程式設計 API,開發人員正在定義應用程式在該基礎設施的每一層的構建方式。在有負載平衡器的情況下,開發人員會選擇要使用的型別、部署方式以及啟用哪些功能。它們以程式設計的方式對負載平衡器的行為進行編碼 —— 隨著程式在部署的生存期內增長、收縮和功能上進化時,它如何動態響應應用程式的需要。開發人員將基礎設施定義為程式碼 —— 包括基礎設施配置及其運維。

開發者為什麼定義基礎設施?

編寫如何構建和部署應用程式的程式碼實踐已經發生了根本性的轉變,它體現在很多方面。簡而言之,這種根本性的轉變是由兩個因素推動的:將新的應用功能推向市場所需的時間(上市時間)以及應用使用者從產品中獲得價值所需的時間(獲益時間)。因此,新的程式寫出來就被持續地交付(作為服務),無需下載和安裝。

上市時間和獲益時間的壓力並不是新的,但由於其他因素的加劇,這些因素正在加強開發者的決策權力:

  • 雲:通過 API 將基礎設施定義為程式碼的能力。
  • 伸縮:需要在大型環境中高效運維。
  • 速度:馬上需要交付應用功能,為企業爭取競爭力。
  • 微服務:抽象框架和工具選擇,進一步賦予開發人員基礎設施決策權力。

除了上述因素外,值得注意的是開源的影響。隨著開源軟體的普及和發展,開發人員手中掌握了許多應用程式基礎設施 - 語言、執行時環境、框架、資料庫、負載均衡器、託管服務等。微服務的興起使應用程式基礎設施的選擇民主化,允許開發人員選擇最佳的工具。在選擇負載平衡器的情況下,那些與雲原生應用的動態特質緊密整合並響應的那些人將超人一等。

總結

當你在仔細考慮你的雲原生應用設計時,請與我一起討論“在雲中使用 NGINX 和 Kubernetes 進行負載平衡”。我們將檢測不同公共雲和容器平臺的負載平衡功能,並通過一個巨集應用的案例研究。我們將看看它是如何被變成較小的、獨立的服務,以及 NGINX 和 Kubernetes 的能力是如何拯救它的。


作者簡介:

Lee Calcote 是一位創新思想領袖,對開發者平臺和雲、容器、基礎設施和應用的管理軟體充滿熱情。先進的和新興的技術一直是 Calcote 在 SolarWinds、Seagate、Cisco 和 Pelco 時的關注重點。他是技術會議和聚會的組織者、寫作者、作家、演講者,經常活躍在技術社群。


via: https://www.oreilly.com/learning/developer-defined-application-delivery

作者:Lee Calcote 譯者:geekpi 校對:wxy

本文由 LCTT 原創編譯,Linux中國 榮譽推出

相關文章