開發者定義的應用交付
原生雲應用旨在利用分散式系統的性能、可擴展性和可靠性優勢。不幸的是,分散式系統往往以額外的複雜性為代價。由於你程序的各個組件跨網路分布,並且這些網路有通信障礙或者性能降級,因此你的分散式程序組件需要能夠繼續獨立運行。
為了避免程序狀態的不一致,分散式系統設計應該有一個共識,即組件會失效。沒有什麼比在網路中更突出了。因此,在其核心,分散式系統在很大程度上依賴於負載平衡——請求分布於兩個或多個系統,以便在面臨網路中斷時具有彈性,並在系統負載波動時水平縮放時。
隨著分散式系統在原生雲程序的設計和交付中越來越普及,負載平衡器在現代應用程序體系結構的各個層次都影響了基礎設施設計。在大多數常見配置中,負載平衡器部署在應用程序前端,處理來自外部世界的請求。然而,微服務的出現意味著負載平衡器可以在幕後發揮關鍵作用:即管理服務之間的流。
因此,當你使用原生雲程序和分散式系統時,負載均衡器將承擔其他角色:
- 作為提供緩存和增加安全性的反向代理,因為它成為外部客戶端的中間人。
- 作為通過提供協議轉換(例如 REST 到 AMQP)的 API 網關。
- 它可以處理安全性(即運行 Web 應用程序防火牆)。
- 它可能承擔應用程序管理任務,如速率限制和 HTTP/2 支持。
鑒於它們的擴展能力遠大於平衡流量, 負載平衡器 可以更廣泛地稱為 應用交付控制器 (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
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive