庫 vs 服務 vs 側車Sidecar的比較
所有軟體應用程式都由可重用的元素組成。這些可重用元素的目標和功能從基礎設施級別到安全級別到業務能力各不相同。
本文的目的是比較用於構建和部署這些可重用元素的不同方法。
1.庫包
這是重用程式碼的最廣泛使用的方法。可重用程式碼作為庫開發和釋出。在這種方法中,客戶端應用程式將庫定義為直接依賴項,使用提供的 API 並將其程式碼與主應用程式邏輯一起傳送。庫和主應用程式邏輯的程式碼作為同一程式/容器的一部分執行。
優點
- 延遲:庫中的程式碼與主應用程式在同一程式中執行,因此沒有網路延遲。
- 可用性:整體可用性很高,因為沒有網路分割槽(CAP定理)。
- 易於使用:使用非常簡單。
- 環境上下文:庫可以訪問環境上下文(記憶體、CPU 等),因為它們是同一容器的一部分。
缺點
- 資源:記憶體、CPU 等資源與主應用程式共享。這意味著庫的效能會對主應用程式產生副作用。
- 技術:庫中使用的庫與主要應用程式的庫相同,因此,如果組織有不同的應用程式集,則每種語言都需要多個實現。
- 可維護性:庫中的任何錯誤修復都需要對所有客戶端應用程式進行程式碼更改和測試。
服務
下一個最廣泛使用的模式是為可重用功能定義服務。在這種方法中,應用程式使用請求-響應機制進行網路呼叫以呼叫另一個服務。服務和主要應用程式邏輯的程式碼在不同的 Pod/伺服器例項中執行。
優點
- 資源:應用程式和服務分開部署,因此資源不共享。資源可以獨立地針對應用程式和服務進行最佳化。
- 可維護性:當涉及到錯誤修復時,服務可以獨立釋出。不需要版本升級。
- 技術:可以使用適合其目的的任何技術選擇來開發服務。
缺點
- 易用性:與庫相比,服務的易用性相對較低。
- 延遲:由於應用程式和服務是分散式的,並且呼叫需要網路呼叫,因此延遲明顯更高。
- 環境上下文:服務無法訪問主應用程式的環境上下文(記憶體、CPU 等),因為兩者都在不同的例項中獨立執行。
- 可用性:由於網路分割槽,總體可用性將低於庫。
Sidecar:邊車、側車
Sidecar 模式是由兩個容器組成的單節點模式。side car 和主應用程式邏輯的程式碼作為不同程式/容器的一部分執行,但一起部署在同一個 pod/server 例項中。
優點和缺點
- 可維護性:當涉及到錯誤修復時,Sidecar可以獨立釋出。
- 技術。Sidecar可以使用任何適合其目的的技術來開發。
- 延遲性。與服務相比,其延遲性較低,但比庫高。這種方法的反模式是使所有可重複使用的元件成為側車,因為這將導致對效能的重大影響。
- 資源。應用程式和Sidecar被部署到一起,所以資源是共享的,但可以為側車單獨設定資源限制,以防止側車的過度使用。這種方法的反模式是使所有可重用的元件成為側車,因為這將導致資源配置管理的巨大開銷。
- 易用性:與庫相比,邊車的易用性相對較低,如果CI/CD管道支援開箱即用,那麼與服務相比,使用起來會更簡單。
- 環境背景。環境上下文(記憶體、CPU等)是可以被sidecar訪問的,因為它是同一個pod/伺服器例項的一部分。這使得側車可以進行應用效能監控等。
- 可用性:與服務相比,可用性會更高,因為沒有真正的網路分割槽。一般來說,可用性主要取決於主應用程式和側車之間的通訊協議。例如,如果協議是火災和遺忘,那麼側車的故障將不會對主應用程式產生連帶的副作用。
總結
上面提到的方法--庫、服務和Sidecar都可以一起用於一個應用程式,以達到預期的效果。一個應用程式可以使用庫來進行資料庫呼叫,使用sidecar來進行分散式日誌記錄,使用服務來提供認證功能。開發團隊需要權衡利弊,然後選擇正確的解決方案。
相關文章
- 資料庫比較 PostgreSQL vs MongoDB資料庫SQLMongoDB
- 關聯式資料庫比較:SQLite vs MySQL vs PostgreSQL資料庫SQLiteMySql
- 微服務訊息代理比較:Redis vs Kafka vs RabbitMQ - Mertcan微服務RedisKafkaMQ
- iOS:原生應用 VS Flutter VS GICXMLLayout 比較iOSFlutterXML
- Redis vs. MongoDB比較RedisMongoDB
- JUnit 4 Vs TestNG比較
- PHP 7 vs HHVM 比較PHP
- 模組化與微服務比較 MircoService VS OSGI微服務
- Python的List vs Tuple比較Python
- JS 框架比較:AngularJS vs ReactJS vs EmberJSJS框架AngularReact
- JavaScript框架比較:AngularJS vs ReactJS vs EmberJSJavaScript框架AngularJSReact
- web快取伺服器效能比較nustervsnginxvsvarnishWeb快取伺服器Nginx
- 【譯】Flutter vs React Native vs Native:深度效能比較FlutterReact Native
- Rust的Vector vs. Golang的Slice比較RustGolang
- Java 下的 JSON庫效能比較:JSON.simple vs. GSON vs. Jackson vs. JSONPJavaJSON
- Goland與vscode比較 - redditGoLandVSCode
- docker搭建vsftpd服務DockerFTP
- FTP服務(vsftpd)配置FTP
- Google VS 亞馬遜 VS 微軟,機器學習服務選誰好?Go亞馬遜微軟機器學習
- 大資料檔案格式比較:AVRO vs. PARQUET vs. ORC大資料VR
- DNS 解析器效能比較:CloudFlare vs Google vs Quad9DNSCloudGo
- 共識演算法的比較:Casper vs Tendermint演算法
- Delphi中字串比較大小 VS Oracle-SQL中字串比較大小字串OracleSQL
- linux vsftpd 服務配置LinuxFTP
- yum安裝vsftpd服務FTP
- lvs、haproxy、nginx 負載均衡的比較分析Nginx負載
- vsftpd服務的歸納總結FTP
- J2EE vs. NET, Java vs. C#:比較公正的評價 (轉)JavaC#
- Jenkins vs Kubernetes:比較 DevOps 工具Jenkinsdev
- LVS 三種負載均衡方式比較負載
- ABAP SICF服務和Java Servlet的比較JavaServlet
- 【譯】Css Grid VS Flexbox: 實踐比較CSSFlex
- LVS-三種負載均衡方式比較負載
- 圖資料庫對比:Neo4j vs Nebula Graph vs HugeGraph資料庫
- LVS和Nginx實現負載均衡功能的比較Nginx負載
- GraphQL Vs. REST? API 開發方法的誠實比較 | transpositRESTAPI
- Nagios監控lvs服務iOS
- 比較服務間通訊的技術 - ardalis