從單體到微服務:如何借助 Spring Cloud 實現架構轉型

一、Spring Cloud簡介

Spring Cloud 是一套基于 Spring 框架的微服務架構解決方案,它提供了一系列的工具和組件,幫助開發者快速構建分布式系統,尤其是微服務架構。

Spring Cloud 提供了諸如服務發現、配置管理、負載均衡、斷路器、消息總線等一系列功能,簡化了微服務的開發和運維。

image-20241206011507549

?

Spring Cloud官網:https://spring.io/projects/spring-cloud

image-20241206011455898

?

二、發展

2.1 發展歷程

Spring Cloud 的發展歷程是與微服務架構的發展以及云原生技術的普及緊密相連的。以下是 Spring Cloud 發展的一個詳細時間線:

  • 2013年:Spring Boot 正式發布,簡化了基于Spring的應用程序創建和部署過程。它通過自動配置機制減少了顯式配置的需求,并支持獨立運行、內嵌服務器、生產就緒特性等。
  • 2014年:隨著 Netflix 公司推出了一系列開源的微服務工具包(Netflix OSS),包括 Eureka(服務發現)、Hystrix(熔斷器)、Zuul(API網關)等,Spring Cloud 開始形成。這些工具被廣泛應用于 Netflix 的分布式系統中。Spencer Gibb 和 Josh Long 等人意識到可以將 Netflix OSS 技術與 Spring 框架相結合,降低構建微服務的技術難度和成本,從而開始了 Spring Cloud 項目的開發。

Netflix(中文常稱為奈飛公司)是全球領先的在線流媒體服務提供商,總部位于美國加利福尼亞州洛斯蓋圖斯。公司成立于1997年,由 Reed HastingsMarc Randolph 創辦,最初作為一個DVD租賃平臺運營。隨著互聯網技術的進步,Netflix逐漸轉型為在線流媒體平臺,推出了按需觀看的訂閱服務,并迅速成為全球娛樂行業的巨頭。

4a71eecb-7963-46ff-95b3-3285efa59c7b?

? Spencer Gibb

?

image?

Josh?Long

  • 2015年:Spring Cloud 項目進入穩定發展階段,發布了多個子項目來解決微服務架構中的關鍵問題,例如:

    • Spring Cloud Config:用于集中化管理應用的所有環境下的配置。
    • Spring Cloud Netflix Eureka:服務注冊與發現組件。
    • Spring Cloud Hystrix:實現斷路器模式,防止故障傳播。
    • Spring Cloud Zuul:作為API網關,提供路由、過濾等功能。
  • 2016年:Spring Cloud 繼續擴展,引入了更多項目如 Spring Cloud StreamSpring Cloud Function,并且 Spring Cloud Netflix 項目也得到了進一步完善和發展。

  • 2017年:Spring Cloud 探索服務網格(Service Mesh)技術,研究如何將 Istio 等服務網格技術與自身集成,以更好地支持微服務的監控、安全性和流量控制。

  • 2018年:整合與演進的一年,Spring Cloud 發布了 Spring Cloud Data Flow 來簡化數據驅動的微服務應用開發,并加強了安全性功能,集成了 Spring Security 提供更全面的安全解決方案。

  • 2019年:Spring Cloud 向 Serverless 架構轉變,發布了 Spring Cloud Function for Kubernetes,允許開發者在 Kubernetes 上以無服務器的方式運行 Spring Boot 函數,適應了云原生計算基金會(CNCF)生態系統的趨勢。

  • 2020年及之后:Spring Cloud 持續創新,適應最新的技術和市場需求。比如:

    • 引入了對 Spring Native 的支持,使 Spring 應用可以編譯為本地二進制文件,提高了啟動速度和運行效率。
    • 擴展其對云原生和微服務的支持,如發布 Spring Cloud Alibaba,適配國內的技術生態。
    • 發布了新的版本號命名方案,第一個使用該方案的版本是 Spring Cloud 2020.0.0,標志著一個新時代的到來。
  • 2024年:到目前為止,Spring Cloud 持續更新,保持與新興技術同步。它繼續增強對容器化、Kubernetes 和其他云原生技術的支持,同時也關注于提高性能、簡化操作以及提供更加豐富的微服務治理能力。

Spring Cloud 的發展史是不斷適應新的技術挑戰和市場需求的歷史。它不僅推動了Java社區內的微服務實踐,也為全球開發者提供了強大的工具鏈來構建靈活、可擴展且易于維護的云原生應用程序。

?

2.2 版本發展

Spring Cloud 的版本發展歷程反映了其在微服務架構中的持續演進和技術適應。以下是 Spring Cloud 版本發展的詳細時間線,涵蓋了主要版本發布和重要變化:

早期階段

  • 2015年:Spring Cloud 發布了它的第一個版本,即 Angel? 系列。這一系列的版本為 Spring Cloud 奠定了基礎,引入了諸如 Spring Cloud Netflix、Spring Cloud Config 和 Spring Cloud Bus 等關鍵組件。

主要版本發布

  • Brixton (2016年) :這是 Spring Cloud 的一個重要里程碑,它帶來了更穩定的 API 和更多的特性支持。
  • Camden (2016年末至2017年初) :這個版本繼續增強了功能,并對之前版本中的一些問題進行了修復。
  • Dalston (2017年3月) :引入了一些新的特性和改進,特別是針對 Spring Boot 1.5.x 的兼容性。
  • Edgware (2017年10月) :進一步加強了與 Spring Boot 2.0 的兼容性準備,并且添加了對新發布的 Spring Framework 5 的支持。
  • Finchley (2018年4月) :正式支持了 Spring Boot 2.0,并引入了新的模塊如 Spring Cloud Gateway 來替代 Zuul 作為推薦的網關解決方案。
  • Greenwich (2018年12月) :繼續增強 Spring Boot 2.0 和 Spring Framework 5 的集成,同時增加了對 Reactive 編程的支持。
  • Hoxton (2019年11月) :這是一個重要的版本,它標志著從基于舊版 Netflix OSS 組件(Eureka, Hystrix, Ribbon, Zuul)向新一代組件轉變的關鍵點。例如,引入了 Spring Cloud Circuit Breaker 以統一熔斷器編程模型,并用 Spring Cloud LoadBalancer 取代了 Netflix Ribbon。

新時代命名方案

  • 2020年:Spring Cloud 宣布采用全新的版本號命名方案,不再使用字母表順序的名字,而是改為基于年份和季度的格式,比如 2020.0.x?,這被稱為 “Ilford” 版本。這種新的命名方式旨在更好地反映項目的迭代周期,并簡化版本管理和依賴關系處理。
  • 2020.0.x (Ilford) (2020年12月) :該版本是首個使用新命名方案的版本,基于 Spring Boot 2.4 和 Spring Framework 5.3。它還計劃移除處于維護模式的老化項目,并簡化了 Spring Cloud 的發布列車機制。

最近的發展

  • 2021年及以后:隨著云原生技術和微服務架構的不斷發展,Spring Cloud 持續更新,以適應最新的技術和市場需求。例如:

    • Spring Native 的支持,使得 Spring 應用可以編譯成本地二進制文件,提高了啟動速度和運行效率。
    • 擴展其對云原生的支持,如 Spring Cloud Alibaba,以便更好地適配國內技術生態。
    • 強化與 Kubernetes 的集成,以及對 Serverless 架構的支持。
  • 2024年:到目前為止,Spring Cloud 保持著與新興技術同步的步伐,持續優化性能、簡化操作流程,并提供更加豐富的微服務治理能力。最新版本通常會包含對最新 Spring Boot 和 Spring Framework 的支持,以及其他社區貢獻的新特性和改進。

?

三、特點

3.1 主要特點

組件豐富,功能齊全

  • Spring Cloud 集成了多個子項目,每個子項目都專注于解決微服務架構中的某個特定問題,如配置管理(Spring Cloud Config)、服務發現(Eureka、Consul、Zookeeper)、斷路器(Hystrix)、API網關(Zuul、Spring Cloud Gateway)、消息總線(Spring Cloud Bus)等。
  • 這些組件基本覆蓋了日常開發中遇到的各種需求,確保開發者能夠快速找到合適的工具來解決問題。

開箱即用,快速啟動

  • 由于基于 Spring Boot 構建,Spring Cloud 繼承了其自動配置的優勢,使得開發者可以輕松地創建獨立運行的應用程序,而無需復雜的配置文件。
  • 開發者只需引入相應的依賴項并遵循簡單的約定,就可以立即開始使用這些強大的功能。

模塊化部署,降低維護難度

  • 在 Spring Cloud 中,應用程序通常被拆分為多個獨立的服務或模塊,每個模塊都可以單獨開發、測試、部署和擴展。
  • 模塊間的松耦合特性減少了不同部分之間的相互影響,從而降低了整個系統的復雜度,提高了項目的可維護性和靈活性。

良好的擴展性和穩定性

  • 基于微服務架構設計,各個服務擁有自己的數據庫和其他資源,因此易于水平擴展以應對流量增長。
  • 同時,通過集成 Hystrix 等容錯處理機制,當某一部分出現問題時,系統仍然能夠保持穩定運行,避免了單點故障帶來的風險。

提供全面的安全支持

  • Spring Cloud Security 提供了身份驗證、授權等功能,保障了微服務間的通信安全。
  • 支持 OAuth2、JWT 等標準協議,允許開發者根據實際需要選擇合適的安全策略。

與云平臺和服務網格的良好兼容性

  • Spring Cloud 可以很好地與各大云服務平臺(如 AWS、Azure、Google Cloud Platform)以及服務網格(如 Istio)進行整合。
  • 它不僅支持傳統的 IaaS 和 PaaS 平臺,還為 Kubernetes 等容器編排工具提供了良好的支持,便于在現代云環境中部署和管理應用。

社區活躍和技術文檔完善

  • Spring Cloud 擁有一個龐大的開源社區,眾多貢獻者不斷為其添加新特性和修復bug。
  • 官方網站上有詳盡的技術文檔、示例代碼和教程,方便初學者學習和進階開發者深入研究。

具有容錯處理機制

  • 項目實際開發中可能會因為網絡連接失敗、超時、服務器硬件故障等原因導致某些模塊無法正常運行,Spring Cloud 提供了如 Hystrix 斷路器組件,專門用于處理這類情況,確保即使某一模塊出錯后,系統也能有其他備用方案或者善后處理措施。

綜上所述,Spring Cloud 憑借其豐富的特性集、易用性和強大的社區支持,成為了當今最流行的微服務框架之一,極大地促進了軟件開發領域內的創新與發展。如果您有關于具體特性的更詳細問題,請隨時提問!

?

3.2 與其他微服務解決方案對比

Spring Cloud 與其他微服務解決方案的對比可以從多個角度進行分析,包括但不限于架構設計、社區支持、技術棧兼容性、功能特性、部署靈活性以及性能等方面。以下是 Spring Cloud 與一些其他流行的微服務框架和解決方案之間的比較:

1. Spring Cloud vs. Dubbo

  • 架構完整性

    • Spring Cloud 提供了一站式的微服務解決方案,涵蓋了配置管理、服務發現、負載均衡、斷路器等功能,適用于更廣泛的分布式系統需求。
    • Dubbo 更專注于服務治理層面,主要提供了高性能的服務調用機制(基于 RPC),需要額外集成其他工具來完成完整的微服務體系。
  • 社區活躍度

    • Spring Cloud 擁有一個非常活躍且龐大的開源社區,更新頻繁,文檔豐富,問題解決速度快。
    • Dubbo 的社區也相當活躍,特別是在中國地區,但由于歷史原因曾經有一段時間停止了官方維護,不過現在已恢復并積極發展。
  • 協議支持

    • Spring Cloud 支持多種通信協議(HTTP, gRPC 等)和服務間調用方式(Feign, Ribbon 等)。
    • Dubbo 默認使用的是自定義的二進制協議,雖然也支持 HTTP 和 Hessian 協議,但在跨語言支持上不如 Spring Cloud。
  • 學習曲線

    • Spring Cloud 的組件較多,對于新手來說可能一開始會感覺復雜,但一旦掌握了基本原理后,開發效率很高。
    • Dubbo 的核心概念相對簡單,如果只需要實現高效的服務調用,則更容易上手。

?

2. Spring Cloud vs. Service Mesh (如 Istio)

  • 抽象層次

    • Spring Cloud 是一個應用級別的框架,開發者需要直接在代碼中引入依賴項并編寫相關邏輯。
    • Service Mesh 則是基礎設施級別的方案,通過代理(sidecar)模式在網絡層面上處理服務間的交互,對應用程序透明。
  • 控制平面與數據平面分離

    • Spring Cloud 將所有功能都嵌入到了應用程序內部,因此沒有明確的數據平面和控制平面之分。
    • Service Mesh 明確區分了這兩者,控制平面負責策略管理和流量規則設置,而數據平面則執行實際的網絡請求轉發。
  • 適用場景

    • Spring Cloud 更適合于已經熟悉 Java 生態系統的團隊,尤其是那些希望快速構建基于 JVM 的微服務應用的企業。
    • Service Mesh 如 Istio 更傾向于云原生環境下的多語言微服務架構,并且特別適用于高度動態變化的環境中,比如容器化部署。

?

3. Spring Cloud vs. KubeSphere / Kubernetes

  • 定位不同

    • Spring Cloud 是一個專門針對微服務的應用開發框架。
    • KubernetesKubeSphere 是容器編排平臺,它們不僅限于微服務,而是為整個集群提供自動化運維能力,包括調度、擴展、監控等。
  • 集成程度

    • Spring Cloud 可以很好地與 Kubernetes 結合使用,例如通過 Helm Chart 方便地部署到 Kubernetes 集群中。
    • KubeSphere 作為 Kubernetes 的增強版,提供了圖形化的界面和其他高級特性,簡化了 Kubernetes 的操作,但它本身不是用來替代 Spring Cloud 的微服務功能。

?

總結

Spring Cloud:適用于 Java 開發者,特別是已經使用 Spring 生態的團隊。提供了一整套功能豐富的微服務解決方案,特別注重易用性和與 Spring 生態系統的深度集成。

Kubernetes:更側重容器化和基礎設施層面的微服務管理,適合大規模、云原生的微服務架構。雖然不提供完整的應用級微服務功能,但可以與其他工具(如 Istio)結合使用。

Netflix OSS:適合需要高度定制化的微服務架構。Spring Cloud 其實是基于 Netflix OSS 構建的,適合對底層技術有較高要求的開發團隊。

Apache Dubbo:專注于高性能 RPC,適合對低延遲、高吞吐量要求極高的應用場景。

Istio:更適合復雜的微服務網格,提供全面的流量管理、故障恢復、監控等功能,但也相對復雜,適合大規模的微服務架構。

?

選擇哪種微服務解決方案取決于具體的業務需求和技術背景。如果您正在尋找一套全面、易于使用的Java微服務框架,并且您的團隊已經熟悉了Spring生態系統,那么Spring Cloud可能是最佳選擇。然而,如果您更關注服務網格提供的細粒度流量控制或者非JVM語言的支持,您可能會考慮像Istio這樣的Service Mesh工具。對于大規模容器化部署的需求,Kubernetes則是不可或缺的基礎平臺。每個選項都有其獨特的優勢,在做決策時應該綜合考量項目的特點和團隊的技術棧。

?

?

四、架構及組件

4.1 架構

Spring Cloud 架構通常圍繞以下幾個核心概念構建:服務發現、負載均衡、配置管理、斷路器、API 網關和消息總線等。這些概念通過不同的組件實現,以支持微服務架構中的各種需求。

在這里插入圖片描述

4.2 組件

Spring Cloud 提供了許多用于實現微服務架構的關鍵組件,以下是一些核心組件的介紹:

1597213385700?

?

Spring Cloud Netflix

Spring Cloud Netflix 是 Spring Cloud 的一部分,它整合了 Netflix 的多個開源項目,幫助開發人員構建高可用、可靠的微服務系統。

  • Eureka:一個服務注冊與發現的工具,Eureka Server 作為服務注冊中心,Eureka Client 用于服務的注冊和發現,幫助服務自動發現對方的網絡位置。
  • Ribbon:一個客戶端負載均衡工具,支持 HTTP 和 TCP 協議的負載均衡。與 Eureka 配合使用時,Ribbon 可以動態選擇一個健康的服務實例。
  • Hystrix:一個斷路器工具,可以防止系統中出現級聯故障。Hystrix 能夠監控服務的健康狀態,并在服務不可用時快速返回降級邏輯,防止故障蔓延。
  • Zuul:一個 API 網關,能夠路由請求到微服務,并支持過濾器進行流量控制、負載均衡、身份驗證等功能。Zuul 是一種邊緣服務,可以將客戶端請求轉發到后端微服務。
  • Turbine:用于整合多個 Hystrix 實例的監控數據,將多個服務的監控信息聚合到一起,提供集中監控功能。

?

Spring Cloud Config

Spring Cloud Config 是一個用于集中管理和版本化微服務配置的組件,支持將配置存儲在 Git、SVN 等版本控制系統中,支持配置的動態刷新。

  • Config Server:提供配置管理服務,可以從 Git 或其他版本控制系統加載配置信息,作為中心化配置服務。
  • Config Client:每個微服務作為客戶端從 Config Server 獲取配置。

?

Spring Cloud Stream

Spring Cloud Stream 是一個構建消息驅動微服務的框架,支持多種消息中間件(如 RabbitMQ、Kafka)作為消息隊列來實現異步通信。

  • 提供了 Binder 抽象層,支持與消息中間件的集成。
  • 通過 Spring Integration 支持流式處理、事件驅動和消息的傳遞。

?

Spring Cloud Sleuth 和 Zipkin

  • Spring Cloud Sleuth:為分布式微服務系統提供鏈路跟蹤功能,可以通過日志跟蹤請求在微服務之間的流轉路徑。
  • Zipkin:一個分布式跟蹤系統,用于收集和查詢來自微服務的分布式跟蹤數據,幫助開發者排查性能瓶頸和故障。

?

Spring Cloud Security

Spring Cloud Security 提供了微服務架構中的安全性控制,支持 OAuth2 等認證和授權協議,用于保護微服務的 API 安全性。

  • Spring Security OAuth2:幫助保護微服務,支持 JWT(JSON Web Tokens)和 OAuth2 協議,支持單點登錄(SSO)。

?

Spring Cloud Bus

Spring Cloud Bus 是一種消息總線,幫助在多個服務實例之間傳播事件(如配置變更、服務狀態變化等)。它通常與 Spring Cloud Config 配合使用,在更新配置時自動廣播配置變更。

?

Spring Cloud Gateway

Spring Cloud Gateway 是一個基于 Spring WebFlux 的 API 網關,支持反向代理、路由、負載均衡、限流、認證等功能。它是 Zuul 的替代品,提供了更高效的非阻塞式編程模型。

?

Spring Cloud LoadBalancer

Spring Cloud LoadBalancer 是 Spring 6.x 和 Spring Boot 2.x 引入的新的客戶端負載均衡機制。它是 Ribbon 的替代品,提供了靈活的負載均衡策略,能夠根據需求進行配置和擴展。

?

?

四、場景及案例

Spring Cloud 的應用場景廣泛,特別適用于那些需要構建、部署和管理復雜分布式系統的組織。以下是 Spring Cloud 在不同場景下的應用實例:

1. 復雜業務邏輯的拆分
  • 適用行業:銀行、保險、電信等。
  • 問題描述:這些行業的業務邏輯通常非常復雜,涉及多個不同的領域(如用戶管理、訂單處理、支付系統等)。傳統的單體架構難以應對日益增長的業務需求和技術挑戰。
  • 解決方案:采用微服務架構可以將復雜的業務邏輯分解為獨立的服務,每個服務專注于特定的功能模塊。例如,銀行系統可以被拆分為賬戶服務、交易服務、客戶服務等多個微服務。這種做法提高了系統的靈活性和可維護性,同時也便于團隊并行開發。
2. 高并發與大流量處理
  • 適用行業:電子商務、在線旅游、社交媒體等。
  • 問題描述:在促銷活動期間或節假日,網站可能會面臨巨大的訪問量,傳統單體架構在這種情況下容易出現性能瓶頸甚至崩潰。
  • 解決方案:通過 Spring Cloud 實現的微服務架構允許不同的服務分別部署在不同的服務器上,從而降低了每個服務的壓力,并且可以根據實際負載情況進行彈性擴展。此外,API 網關和服務發現機制可以幫助有效地管理和路由大量的客戶端請求。
3. 多平臺和多終端支持
  • 適用行業:智能家居、移動應用開發等。
  • 問題描述:現代企業往往需要同時支持 Web、iOS、Android 等多種平臺的應用程序,而且各個平臺之間可能存在差異化的功能要求。
  • 解決方案:利用 Spring Cloud 提供的 API 網關和其他中間件組件,可以輕松創建 RESTful API 或 GraphQL 接口,以滿足不同終端的需求。這樣不僅簡化了跨平臺集成工作,還能確保后端服務的一致性和穩定性。
4. 持續集成/持續交付 (CI/CD)
  • 適用行業:軟件即服務 (SaaS) 提供商、互聯網初創公司等。
  • 問題描述:快速迭代和頻繁發布是當今軟件開發的重要特征之一,如何保證每次更新都不會影響現有功能成為一大難題。
  • 解決方案:借助 Spring Cloud 的配置中心和版本控制特性,開發者可以在不影響生產環境的前提下對應用程序進行修改和測試。藍綠部署或金絲雀發布的策略也使得新版本的上線更加平滑。
5. 混合云及多云環境
  • 適用行業:任何希望利用云計算優勢的企業。
  • 問題描述:隨著企業逐漸向云端遷移,它們可能需要在多個公有云提供商之間選擇最佳的服務組合,或者結合私有云資源來優化成本和性能。
  • 解決方案:Spring Cloud 支持多種云平臺,并提供了良好的抽象層,讓開發者不必擔心底層基礎設施的變化。這有助于實現無縫的數據遷移和工作負載轉移,同時也促進了 DevOps 文化的建立。
6. 分布式事務處理
  • 適用行業:金融、交易平臺等。
  • 問題描述:當一個業務流程涉及到多個微服務時,確保所有操作要么全部成功,要么全部失敗是非常重要的,尤其是在涉及資金轉賬等關鍵操作的情況下。
  • 解決方案:Spring Cloud 提供了分布式事務的支持,比如通過 TCC(Try-Confirm-Cancel)模式或其他補償機制,來保證跨服務的一致性。
7. 微服務治理
  • 適用行業:幾乎所有的微服務架構項目。
  • 問題描述:在一個包含大量微服務的環境中,如何有效地管理和監控這些服務是一個重大挑戰。
  • 解決方案:Spring Cloud 包含了一系列用于服務注冊與發現(Eureka)、斷路器(Hystrix)、鏈路追蹤(Sleuth)等功能的工具,幫助運維人員更好地理解和優化整個系統的運行狀態。

?

綜上所述,Spring Cloud 不僅能夠解決上述提到的具體技術問題,還為企業提供了一套完整的微服務架構方案,使他們能夠在不斷變化的技術環境中保持競爭力。對于不同的企業來說,具體的應用場景可能會有所不同,但是采用 Spring Cloud 架構能夠為企業信息技術的發展提供更多選擇和可能性。

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/62480.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/62480.shtml
英文地址,請注明出處:http://en.pswp.cn/web/62480.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

yarn : 無法加載文件 C:\Users\L\AppData\Roaming\npm\yarn.ps1,因為在此系統上禁

關于執行安裝yarn命令后執行yarn -v報錯: 先確認執行安裝yarn命令是否有誤 # 安裝yarn npm install yarn -g 終端輸入set-ExecutionPolicy RemoteSigned 當然如果yarn -v仍然執行失敗,考慮使用管理員方式運行IDEA, 注:如上操作…

centos 常見問題處理

免密登錄配置 # 在當前機器下 執行命令 生成 私鑰和公鑰 ~/.ssh 目錄下 ssh-keygen -t rsa # 執行如下命令 把公鑰 放到 對應機器上的 ~/.ssh/authorized_keys ssh-copy-id 172.17.68.220 # 如此 兩臺機器兩兩配置 centos ssh連接慢 vim /etc/ssh/sshd_config # UseD…

java全棧day12-后端Web實戰(IOC+DI)

前言:前面的基礎知識了解后進入實戰篇,從以下四個方面進行準備 一、開發規范 1.1前后端分離開發 前言回顧 二、Restful風格 引言:前端與后端在進行交互的時候,所使用的url風格叫Restful。 2.1概述 小結 2.2環境準備 2.2.1apif…

鏈式設計模式——裝飾模式和職責鏈模式

一、裝飾模式 1、概述 動態地給一個對象添加一些額外的職責,就增加功能來說,裝飾模式比生成子類更為靈活。 ConcreteComponent :是定義了一個具體的對象,可以給這個對象添加一些職責;Decorator :裝飾抽象…

Cmake+基礎命令

一、版本要求&#xff1a; 檢查 cmake 版本號的最低要求&#xff0c;不滿足條件時報錯。 cmake_minimum_required(VERSION <version>)參數&#xff1a; version&#xff1a;最低要求的版本號 例子&#xff1a; # 最低要求安裝3.21版本的cmake cmake_minimum_required…

Java——容器(單例集合)(上)

一 容器介紹 容器&#xff0c;是用來容納物體、管理物體。生活中,我們會用到各種各樣的容器。如鍋碗瓢盆、箱子和包等 程序中的“容器”也有類似的功能&#xff0c;用來容納和管理數據。比如&#xff0c;如下新聞網站的新聞列表、教育網站的課程列表就是用“容器”來管理 視頻…

word poi-tl 表格功能增強,實現表格功能垂直合并

目錄 問題解決問題poi-tl介紹 功能實現引入依賴模版代碼效果圖 附加&#xff08;插件實現&#xff09;MergeColumnData 對象MergeGroupData 類ServerMergeTableData 數據信息ServerMergeTablePolicy 合并插件 問題 由于在開發功能需求中&#xff0c;word文檔需要垂直合并表格&…

OpenCV相機標定與3D重建(11)機器人世界手眼標定函數calibrateRobotWorldHandEye()的使用

操作系統&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 編程語言&#xff1a;C11 算法描述 計算機器人世界/手眼標定&#xff1a; w T b _{}^{w}\textrm{T}_b w?Tb? 和 c T g _{}^{c}\textrm{T}_g c?Tg?。 cv::calibrateRobotWorldHa…

GPT系列模型簡要概述

GPT-1&#xff1a;&#xff08;0.117B參數量&#xff0c;0.8B words預訓練數據) 動機&#xff1a; 在RNN和Transformer之間&#xff0c;選擇了后者。 和《All your need is Attention》翻譯模型的Encoder-Decoder架構相比&#xff0c;只保留Decoder&#xff0c;因此去掉了Cross…

汽車升級到底應不應該設置“可取消“功能

最近&#xff0c;汽車OTA&#xff08;Over-the-Air&#xff09;升級頻頻成為車主討論的熱點。有些車主反映&#xff0c;一些升級增加了實用功能&#xff0c;而另一些卻讓體驗變得復雜甚至帶來不便。于是&#xff0c;大家不禁發問&#xff1a;汽車升級功能究竟應不應該允許“可取…

單片機 PCB 設計要點

一、引言 單片機作為現代科技的重要組成部分&#xff0c;其 PCB 設計至關重要。本文將詳細介紹單片機 PCB 設計的要點和流程&#xff0c;幫助讀者更好地掌握這一關鍵技術。 在電子世界的浩瀚星海中&#xff0c;單片機無疑是現代科技中一顆閃爍的明珠。作為掌握嵌入式系統的基…

Django+Apscheduler 開發定時任務模塊【六】

目錄 回顧 前五個文章講述了django-autojob的部分代碼和執行邏輯 【DjangoApscheduler 開發定時任務模塊】【一】 【DjangoApscheduler 開發定時任務模塊】【二】 【DjangoApscheduler 開發定時任務模塊】【三】 【DjangoApscheduler 開發定時任務模塊】【四】 【DjangoApsch…

Ubuntu中配置交叉編譯工具的三條命令的詳細研究

關于該把下面的三條交叉編譯配置語句加到哪里&#xff0c;詳情見 https://blog.csdn.net/wenhao_ir/article/details/144326545 的第2點。 現在試解釋下面三條交叉編譯配置語句&#xff1a; export ARCHarm export CROSS_COMPILEarm-buildroot-linux-gnueabihf- export PATH$…

wlanapi.dll丟失怎么辦?有沒有什么靠譜的修復wlanapi.dll方法

在遇到各種系統文件錯誤當中&#xff0c;其中之一就是“wlanapi.dll文件丟失”的問題。這種問題通常發生在Windows操作系統上&#xff0c;特別是當系統試圖執行與無線網絡相關的任務時。wlanapi.dll是一個重要的系統文件&#xff0c;它負責處理Windows無線網絡服務的許多功能。…

利用ipmi工具設置ip、用戶等設置

#打開交互模式 ipmitool -I open shell #切換管理端口為lom1&#xff0c;即共享em1/eth0 delloem lan set shared with lom1 #設置ip、mask、gateway lan set 1 ipaddr 10.0.0.250 lan set 1 netmask 10.0.0.250 lan set 1 defgw ipaddr 10.0.0.250 #查看用戶名 user list 1 …

Python之因子分析詳細步驟

1.數學原理 1.1數學模型 1.2正交因子模型假設 注意&#xff1a;下面的推導都是基于這一假設。因此&#xff0c;這里的模型都是屬于正交因子模型。 1.3正交因子模型的協方差結構 1.4各類方差貢獻的介紹 在1.3正交因子模型的協方差結構中&#xff0c;我們介紹了“方差貢獻”&…

unity3d—demo(2d人物左右移動發射子彈)

目錄 人物代碼示例&#xff1a; 子彈代碼示例&#xff1a; 總結上面代碼&#xff1a; 注意點&#xff1a; 人物代碼示例&#xff1a; using System.Collections; using System.Collections.Generic; using UnityEngine;public class PlayerTiao : MonoBehaviour {public f…

linux之vim

一、模式轉換命令 vim主要有三種模式&#xff1a;命令模式&#xff08;Normal Mode&#xff09;、輸入模式&#xff08;Insert Mode&#xff09;和底線命令模式&#xff08;Command-Line Mode&#xff09;。 從命令模式切換到輸入模式&#xff1a;i&#xff1a;在當前光標所在…

顯存和GPU之間的通信;GPUDirect P2P,NVLink,NCCL;聚合通信和點對點通信

目錄 顯存和GPU之間的分配 顯存和GPU之間的通信 原語是什么,簡單舉例說明 GPUDirect P2P,NVLink,NCCL的全稱及解釋 聚合通信和點對點通信 聚合通信(Collective Communication) 點對點通信(Point-to-Point Communication) 為什么使用GPUDirect P2P,NVLink,NCCL…

Mysql 的 B+ 樹是否包含行數據?

在 MySQL 中&#xff0c;是否在 B樹 的葉子節點上存儲完整的行數據&#xff0c;取決于使用的 存儲引擎 和 索引類型&#xff1a; 聚簇索引 (Clustered Index) 葉子節點包含完整的行數據。 適用場景&#xff1a;MySQL InnoDB 存儲引擎的主鍵索引&#xff08;或聚簇索引&#xf…