你真的理解微服務架構嗎

来源:https://www.cnblogs.com/lfs2640666960/archive/2018/03/11/8545141.html
-Advertisement-
Play Games

什麼是微服務 首先微服務並沒有一個官方的定義,想要直接描述微服務比較困難,我們可以通過對比傳統WEB應用,來理解什麼是微服務。 傳統的WEB應用核心分為業務邏輯、適配器以及API或通過UI訪問的WEB界面。業務邏輯定義業務流程、業務規則以及領域實體。適配器包括資料庫訪問組件、消息組件以及訪問介面等。 ...


什麼是微服務

首先微服務並沒有一個官方的定義,想要直接描述微服務比較困難,我們可以通過對比傳統WEB應用,來理解什麼是微服務。

傳統的WEB應用核心分為業務邏輯、適配器以及API或通過UI訪問的WEB界面。業務邏輯定義業務流程、業務規則以及領域實體。適配器包括資料庫訪問組件、消息組件以及訪問介面等。一個打車軟體的架構圖如下:

你真的理解微服務架構嗎

儘管也是遵循模塊化開發,但最終它們會打包並部署為單體式應用。例如Java應用程式會被打包成WAR,部署在Tomcat或者Jetty上。

這種單體應用比較適合於小項目,優點是:

  • 開發簡單直接,集中式管理

  • 基本不會重覆開發

  • 功能都在本地,沒有分散式的管理開銷和調用開銷

當然它的缺點也十分明顯,特別對於互聯網公司來說:

  • 開發效率低:所有的開發在一個項目改代碼,遞交代碼相互等待,代碼衝突不斷

  • 代碼維護難:代碼功能耦合在一起,新人不知道何從下手

  • 部署不靈活:構建時間長,任何小修改必須重新構建整個項目,這個過程往往很長

  • 穩定性不高:一個微不足道的小問題,可以導致整個應用掛掉

  • 擴展性不夠:無法滿足高併發情況下的業務需求

所以,現在主流的設計一般會採用微服務架構。其思路不是開發一個巨大的單體式應用,而是將應用分解為小的、互相連接的微服務。一個微服務完成某個特定功能,比如乘客管理和下單管理等。每個微服務都有自己的業務邏輯和適配器。一些微服務還會提供API介面給其他微服務和應用客戶端使用。

比如,前面描述的系統可被分解為:

你真的理解微服務架構嗎

每個業務邏輯都被分解為一個微服務,微服務之間通過REST API通信。一些微服務也會向終端用戶或客戶端開發API介面。但通常情況下,這些客戶端並不能直接訪問後臺微服務,而是通過API Gateway來傳遞請求。API Gateway一般負責服務路由、負載均衡、緩存、訪問控制和鑒權等任務。

微服務架構的優點

微服務架構有很多重要的優點。首先,它解決了複雜性問題。它將單體應用分解為一組服務。雖然功能總量不變,但應用程式已被分解為可管理的模塊或服務。這些服務定義了明確的RPC或消息驅動的API邊界。微服務架構強化了應用模塊化的水平,而這通過單體代碼庫很難實現。因此,微服務開發的速度要快很多,更容易理解和維護。

其次,這種體繫結構使得每個服務都可以由專註於此服務的團隊獨立開發。只要符合服務API契約,開發人員可以自由選擇開發技術。這就意味著開發人員可以採用新技術編寫或重構服務,由於服務相對較小,所以這並不會對整體應用造成太大影響。

第三,微服務架構可以使每個微服務獨立部署。開發人員無需協調對服務升級或更改的部署。這些更改可以在測試通過後立即部署。所以微服務架構也使得CI/CD成為可能。

最後,微服務架構使得每個服務都可獨立擴展。我們只需定義滿足服務部署要求的配置、容量、實例數量等約束條件即可。比如我們可以在EC2計算優化實例上部署CPU密集型服務,在EC2記憶體優化實例上部署記憶體資料庫服務。

微服務架構的缺點和挑戰

實際上並不存在silver bullets,微服務架構也會給我們帶來新的問題和挑戰。其中一個就和它的名字類似,微服務強調了服務大小,但實際上這並沒有一個統一的標準。業務邏輯應該按照什麼規則劃分為微服務,這本身就是一個經驗工程。有些開發者主張10-100行代碼就應該建立一個微服務。雖然建立小型服務是微服務架構崇尚的,但要記住,微服務是達到目的的手段,而不是目標。微服務的目標是充分分解應用程式,以促進敏捷開發和持續集成部署。

微服務的另一個主要缺點是微服務的分散式特點帶來的複雜性。開發人員需要基於RPC或者消息實現微服務之間的調用和通信,而這就使得服務之間的發現、服務調用鏈的跟蹤和質量問題變得的相當棘手。

微服務的另一個挑戰是分區的資料庫體系和分散式事務。更新多個業務實體的業務交易相當普遍。這些類型的事務在單體應用中實現非常簡單,因為單體應用往往只存在一個資料庫。但在微服務架構下,不同服務可能擁有不同的資料庫。CAP原理的約束,使得我們不得不放棄傳統的強一致性,而轉而追求最終一致性,這個對開發人員來說是一個挑戰。

微服務架構對測試也帶來了很大的挑戰。傳統的單體WEB應用只需測試單一的REST API即可,而對微服務進行測試,需要啟動它依賴的所有其他服務。這種複雜性不可低估。

微服務的另一大挑戰是跨多個服務的更改。比如在傳統單體應用中,若有A、B、C三個服務需要更改,A依賴B,B依賴C。我們只需更改相應的模塊,然後一次性部署即可。但是在微服務架構中,我們需要仔細規劃和協調每個服務的變更部署。我們需要先更新C,然後更新B,最後更新A。

部署基於微服務的應用也要複雜得多。單體應用可以簡單的部署在一組相同的伺服器上,然後前端使用負載均衡即可。每個應用都有相同的基礎服務地址,例如資料庫和消息隊列。而微服務由不同的大量服務構成。每種服務可能擁有自己的配置、應用實例數量以及基礎服務地址。這裡就需要不同的配置、部署、擴展和監控組件。此外,我們還需要服務發現機制,以便服務可以發現與其通信的其他服務的地址。因此,成功部署微服務應用需要開發人員有更好地部署策略和高度自動化的水平。

以上問題和挑戰可大體概括為:

  • API Gateway

  • 服務間調用

  • 服務發現

  • 服務容錯

  • 服務部署

  • 數據調用

你真的理解微服務架構嗎

幸運的是,出現了很多微服務框架,可以解決以上問題。

第一代微服務框架

Spring Cloud

Spring Cloud為開發者提供了快速構建分散式系統的通用模型的工具(包括配置管理、服務發現、熔斷器、智能路由、微代理、控制匯流排、一次性令牌、全局鎖、領導選舉、分散式會話、集群狀態等)。 主要項目包括:

  • Spring Cloud Config:由Git存儲庫支持的集中式外部配置管理。配置資源直接映射到Spring Environment,但是如果需要可以被非Spring應用程式使用。

  • Spring Cloud Netflix:與各種Netflix OSS組件(Eureka,Hystrix,Zuul,Archaius等)集成。

  • Spring Cloud Bus:用於將服務和服務實例與分散式消息傳遞聯繫起來的事件匯流排。用於在集群中傳播狀態更改(例如配置更改事件)。

  • Spring Cloud for Cloudfoundry:將您的應用程式與Pivotal Cloudfoundry集成。提供服務發現實現,還可以輕鬆實現通過SSO和OAuth 2保護資源,還可以創建Cloudfoundry服務代理。

  • Spring Cloud - Cloud Foundry Service Broker:提供構建管理一個Cloud Foundry中服務的服務代理的起點。

  • Spring Cloud Cluster:領導選舉和通用狀態模型(基於ZooKeeper,Redis,Hazelcast,Consul的抽象和實現)。

  • Spring Cloud Consul:結合Hashicorp Consul的服務發現和配置管理

  • Spring Cloud Security:在Zuul代理中為負載平衡的OAuth 2休眠客戶端和認證頭中繼提供支持。

  • Spring Cloud Sleuth:適用於Spring Cloud應用程式的分散式跟蹤,與Zipkin,HTrace和基於日誌(例如ELK)跟蹤相容。

  • Spring Cloud Data Flow:針對現代運行時的可組合微服務應用程式的雲本地編排服務。易於使用的DSL,拖放式GUI和REST-API一起簡化了基於微服務的數據管道的整體編排。

  • Spring Cloud Stream:輕量級事件驅動的微服務框架,可快速構建可連接到外部系統的應用程式。使用Apache Kafka或RabbitMQ在Spring Boot應用程式之間發送和接收消息的簡單聲明式模型。

  • Spring Cloud Stream Application Starters:Spring Cloud任務應用程式啟動器是Spring Boot應用程式,可能是任何進程,包括不會永遠運行的Spring Batch作業,並且它們在有限時間的數據處理之後結束/停止。

  • Spring Cloud ZooKeeper:ZooKeeper的服務發現和配置管理。

  • Spring Cloud for Amazon Web Services:輕鬆集成托管的Amazon的Web Services服務。它通過使用Spring的idioms和APIs便捷集成AWS服務,例如緩存或消息API。開發人員可以圍繞托管服務,不必關心基礎架構來構建應用。

  • Spring Cloud Connectors:使PaaS應用程式在各種平臺上輕鬆連接到後端服務,如資料庫和消息代理(以前稱為“Spring Cloud”的項目)。

  • Spring Cloud Starters:作為基於Spring Boot的啟動項目,降低依賴管理(在Angel.SR2後,不在作為獨立項目)。

  • Spring Cloud CLI:插件支持基於Groovy預言快速創建Spring Cloud的組件應用。

Dubbo

Dubbo是一個阿裡巴巴開源出來的一個分散式服務框架,致力於提供高性能和透明化的RPC遠程服務調用方案,以及SOA服務治理方案。其核心部分包含:

  • 遠程通訊: 提供對多種基於長連接的NIO框架抽象封裝,包括多種線程模型,序列化,以及“請求-響應”模式的信息交換方式。

  • 集群容錯:提供基於介面方法的透明遠程過程調用,包括多協議支持,以及軟負載均衡,失敗容錯,地址路由,動態配置等集群支持。

  • 自動發現:基於註冊中心目錄服務,使服務消費方能動態的查找服務提供方,使地址透明,使服務提供方可以平滑增加或減少機器。

你真的理解微服務架構嗎

但是顯而易見,無論是Dubbo還是Spring Cloud都只適用於特定的應用場景和開發環境,它們的設計目的並不是為了支持通用性和多語言性。並且它們只是Dev層的框架,缺少DevOps的整體解決方案(這正是微服務架構需要關註的)。而隨之而來的便是Service Mesh的興起。

下一代微服務:Service Mesh?

Service Mesh

Service Mesh又譯作“服務網格”,作為服務間通信的基礎設施層。如果用一句話來解釋什麼是Service Mesh,可以將它比作是應用程式或者說微服務間的TCP/IP,負責服務之間的網路調用、限流、熔斷和監控。對於編寫應用程式來說一般無須關心TCP/IP這一層(比如通過 HTTP 協議的 RESTful 應用),同樣使用Service Mesh也就無須關係服務之間的那些原來是通過應用程式或者其他框架實現的事情,比如Spring Cloud、OSS,現在只要交給Service Mesh就可以了。

Service Mesh有如下幾個特點:

  • 應用程式間通訊的中間層

  • 輕量級網路代理

  • 應用程式無感知

  • 解耦應用程式的重試/超時、監控、追蹤和服務發現

Service Mesh的架構如下圖所示:

你真的理解微服務架構嗎

Service Mesh作為Sidebar運行,對應用程式來說是透明,所有應用程式間的流量都會通過它,所以對應用程式流量的控制都可以在Service Mesh中實現。

目前流行的Service Mesh開源軟體有Linkerd、Envoy和Istio,而最近Buoyant(開源Linkerd的公司)又發佈了基於Kubernetes的Service Mesh開源項目Conduit。

Linkerd

Linkerd是開源網路代理,設計為以服務網格部署:用於管理,控制和監控應用程式內的服務與服務間通訊的專用層。

Linkerd旨在解決Twitter、Yahoo、Google和Microsoft等公司運營大型生產系統時發現的問題。根據經驗,最複雜,令人驚奇和緊急行為的來源通常不是服務本身,而是服務之間的通訊。Linkerd解決了這些問題,不僅僅是控制通訊機制,而是在其上提供一個抽象層。

你真的理解微服務架構嗎

它的主要特性有:

  • 負載平衡:Linkerd提供了多種負載均衡演算法,它們使用實時性能指標來分配負載並減少整個應用程式的尾部延遲。

  • 熔斷:Linkerd包含自動熔斷,將停止將流量發送到被認為不健康的實例,從而使他們有機會恢復並避免連鎖反應故障。

  • 服務發現:Linkerd 與各種服務發現後端集成,通過刪除特定的(ad-hoc)服務發現實現來幫助您降低代碼的複雜性。

  • 動態請求路由:Linkerd 啟用動態請求路由和重新路由,允許您使用最少量的配置來設置分段服務(staging service),金絲雀(canaries),藍綠部署(blue-green deploy),跨DC故障切換和黑暗流量(dark traffic)。

  • 重試次數和截止日期:Linkerd可以在某些故障時自動重試請求,並且可以在指定的時間段之後讓請求超時。

  • TLS:Linkerd可以配置為使用TLS發送和接收請求,您可以使用它來加密跨主機邊界的通信,而不用修改現有的應用程式代碼。

  • HTTP代理集成:Linkerd可以作為HTTP代理,幾乎所有現代HTTP客戶端都廣泛支持,使其易於集成到現有應用程式中。

  • 透明代理:您可以在主機上使用iptables規則,設置通過Linkerd的透明代理。

  • gRPC:Linkerd支持HTTP/2和TLS,允許它路由gRPC請求,支持高級RPC機制,如雙向流,流程式控制制和結構化數據負載。

  • 分散式跟蹤:Linkerd支持分散式跟蹤和度量儀器,可以提供跨越所有服務的統一的可觀察性。

  • 儀器儀錶:Linkerd支持分散式跟蹤和度量儀器,可以提供跨越所有服務的統一的可觀察性。

Envoy

Envoy是一個面向服務架構的L7代理和通信匯流排而設計的,這個項目誕生是出於以下目標:

對於應用程式而言,網路應該是透明的,當發生網路和應用程式故障時,能夠很容易定位出問題的根源。

Envoy可提供以下特性:

  • 外置進程架構:可與任何語言開發的應用一起工作;可快速升級。

  • 基於新C++11編碼:能夠提供高效的性能。

  • L3/L4過濾器:核心是一個L3/L4網路代理,能夠作為一個可編程過濾器實現不同TCP代理任務,插入到主服務當中。通過編寫過濾器來支持各種任務,如原始TCP代理、HTTP代理、TLS客戶端證書身份驗證等。

  • HTTP L7過濾器:支持一個額外的HTTP L7過濾層。HTTP過濾器作為一個插件,插入到HTTP鏈接管理子系統中,從而執行不同的任務,如緩衝,速率限制,路由/轉發,嗅探Amazon的DynamoDB等等。

  • 支持HTTP/2:在HTTP模式下,支持HTTP/1.1、HTTP/2,並且支持HTTP/1.1、HTTP/2雙向代理。這意味著HTTP/1.1和HTTP/2,在客戶機和目標伺服器的任何組合都可以橋接。

  • HTTP L7路由:在HTTP模式下運行時,支持根據content type、runtime values等,基於path的路由和重定向。可用於服務的前端/邊緣代理。

  • 支持gRPC:gRPC是一個來自谷歌的RPC框架,使用HTTP/2作為底層的多路傳輸。HTTP/2承載的gRPC請求和應答,都可以使用Envoy的路由和LB能力。

  • 支持MongoDB L7:支持獲取統計和連接記錄等信息。

  • 支持DynamoDB L7:支持獲取統計和連接等信息。

  • 服務發現:支持多種服務發現方法,包括非同步DNS解析和通過REST請求服務發現服務。

  • 健康檢查:含有一個健康檢查子系統,可以對上游服務集群進行主動的健康檢查。也支持被動健康檢查。

  • 高級LB:包括自動重試、斷路器,全局限速,阻隔請求,異常檢測。未來還計劃支持請求速率控制。

  • 前端代理:可作為前端代理,包括TLS、HTTP/1.1、HTTP/2,以及HTTP L7路由。

  • 極好的可觀察性:對所有子系統,提供了可靠的統計能力。目前支持statsd以及相容的統計庫。還可以通過管理埠查看統計信息,還支持 第三方的分散式跟蹤機制。

  • 動態配置:提供分層的動態配置API,用戶可以使用這些API構建複雜的集中管理部署。

Istio

Istio是一個用來連接、管理和保護微服務的開放平臺。Istio提供一種簡單的方式來建立已部署服務網路,具備負載均衡、服務間認證、監控等功能,而不需要改動任何服務代碼。想要為服務增加對Istio的支持,您只需要在環境中部署一個特殊的邊車(sidecar),使用Istio控制面板功能配置和管理代理,攔截微服務之間的所有網路通信。

Istio目前僅支持在Kubernetes上的服務部署,但未來版本中將支持其他環境。

Istio提供了一個完整的解決方案,通過為整個服務網格提供行為洞察和操作控制來滿足微服務應用程式的多樣化需求。它在服務網路中統一提供了許多關鍵功能:

  • 流量管理:控制服務之間的流量和API調用的流向,使得調用更可靠,並使網路在惡劣情況下更加健壯。

  • 可觀察性:瞭解服務之間的依賴關係,以及它們之間流量的本質和流向,從而提供快速識別問題的能力。

  • 策略執行:將組織策略應用於服務之間的互動,確保訪問策略得以執行,資源在消費者之間良好分配。策略的更改是通過配置網格而不是修改應用程式代碼。

  • 服務身份和安全:為網格中的服務提供可驗證身份,並提供保護服務流量的能力,使其可以在不同可信度的網路上流轉。

Istio服務網格邏輯上分為數據面板和控制面板:

  • 數據面板由一組智能代理(Envoy)組成,代理部署為邊車,調解和控制微服務之間所有的網路通信。

  • 控制面板負責管理和配置代理來路由流量,以及在運行時執行策略。

下圖顯示了構成每個面板的不同組件:

你真的理解微服務架構嗎

Conduit

Conduit是為Kubernetes設計的一個超輕型服務網格服務,它可透明地管理在Kubernetes上運行的服務的運行時通信,使得它們更安全可靠。Conduit提供了可見性、可靠性和安全性的功能,而無需更改代碼。

Conduit service mesh也是由數據面板和控制面板組成。數據面板承載應用實際的網路流量。控制面板驅動數據面板,並對外提供北向介面。

對比

Linkerd和Envoy比較相似,都是一種面向服務通信的網路代理,均可實現諸如服務發現、請求路由、負載均衡等功能。它們的設計目標就是為瞭解決服務之間的通信問題,使得應用對服務通信無感知,這也是Service Mesh的核心理念。Linkerd和Envoy像是分散式的Sidebar,多個類似Linkerd和Envoy的proxy互相連接,就組成了service mesh。

而Istio則是站在了一個更高的角度,它將Service Mesh分為了Data Plane和Control Plane。Data Plane負責微服務間的所有網路通信,而Control Plane負責管理Data Plane Proxy:

你真的理解微服務架構嗎

並且Istio天生的支持Kubernetes,這也彌合了應用調度框架與Service Mesh之間的空隙。

關於Conduit的資料較少,從官方介紹看它的定位和功能與Istio類似。

Kubernetes + Service Mesh = 完整的微服務框架

Kubernetes已經成為了容器調度編排的事實標準,而容器正好可以作為微服務的最小工作單元,從而發揮微服務架構的最大優勢。所以我認為未來微服務架構會圍繞Kubernetes展開。而Istio和Conduit這類Service Mesh天生就是為了Kubernetes設計,它們的出現補足了Kubernetes在微服務間服務通訊上的短板。雖然Dubbo、Spring Cloud等都是成熟的微服務框架,但是它們或多或少都會和具體語言或應用場景綁定,並只解決了微服務Dev層面的問題。若想解決Ops問題,它們還需和諸如Cloud Foundry、Mesos、Docker Swarm或Kubernetes這類資源調度框架做結合:

你真的理解微服務架構嗎

但是這種結合又由於初始設計和生態,有很多適用性問題需要解決。

Kubernetes則不同,它本身就是一個和開發語言無關的、通用的容器管理平臺,它可以支持運行雲原生和傳統的容器化應用。並且它覆蓋了微服務的Dev和Ops階段,結合Service Mesh,它可以為用戶提供完整端到端的微服務體驗。

所以我認為,未來的微服務架構和技術棧可能是如下形式:

你真的理解微服務架構嗎

多雲平臺為微服務提供了資源能力(計算、存儲和網路等),容器作為最小工作單元被Kubernetes調度和編排,Service Mesh管理微服務的服務通信,最後通過API Gateway向外暴露微服務的業務介面。

我相信未來隨著以Kubernetes和Service Mesh為標準的微服務框架的盛行,將大大降低微服務實施的成本,最終為微服務落地以及大規模使用提供堅實的基礎和保障。

推薦一個交流學習群:650385180裡面會分享一些資深架構師錄製的視頻錄像:有Spring,MyBatis,Netty源碼分析,高併發、高性能、分散式、微服務架構的原理,JVM性能優化這些成為架構師必備的知識體系。還能領取免費的學習資源,目前受益良多:

你真的理解微服務架構嗎


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 本篇文章將介頁面佈局中的自適應佈局,常見的自適應佈局有以下2種:左列固定右列自適應、左右兩列固定中間自適應。 ...
  • 本教程案例github:https://github.com/axel10/dva_demo-Counter-and-list/tree/master 這次主要通過線上獲取用戶數據並且渲染成列表這個案例來演示dva.js。 整個開發流程概括下來應該是: 編寫用戶列表model(數據模型)-> 編寫修 ...
  • 通過JS實現對一系列checkbox的全選功能,實現全選/全不選、複位,反選等。 ...
  • 先講個黑色笑話: 半年前,一個誰也沒見過的日本浪人推出的理財產品突然在七俠鎮火爆起來,據說買上點屯著,不出幾月就能把同福客棧,甚至龍門鏢局都盤下。我們家小六的七舅老爺,賣掉祖宅也嚷嚷著要 all in。我覺得這事吧很是蹊蹺,好歹也是自家人嘛,不能讓老人家上當受騙 —— 所以 … 放著我來。我用我無雙 ...
  • 一、什麼是反射機制? 反射的官方定義是這樣的:在運行狀態中,對於任意的一個類,都能夠知道這個類的所有屬性和方法,對任意一個對象都能夠通過反射機制調用一個類的任意方法,這種動態獲取類信息及動態調用類對象方法的功能稱為java的反射機制。 講的通俗一點的話就是,對於jvm來說,.java文件必須要先編譯 ...
  • Spring Cloud作為一套微服務治理的框架,幾乎考慮到了微服務治理的方方面面,本篇主要解答這兩個問題:Spring Cloud在微服務的架構中都做了哪些事情?Spring Cloud提供的這些功能對微服務的架構提供了怎樣的便利? 傳統架構發展史 單體架構 單體架構在小微企業比較常見,典型代表就 ...
  • 抽象工廠模式是所有形態的工廠模式中最為抽象和最具一般性的一種形態。抽象工廠模式是指當有多個抽象角色時,使用的一種工廠模式。抽象工廠模式可以向客戶端提供一個介面,使客戶端在不必指定產品的具體的情況下,創建多個產品族中的產品對象。根據里氏替換原則,任何接受父類型的地方,都應當能夠接受子類型。 ...
  • 銷售license是商業軟體的貫用商業模式。用戶向商家購買軟體安裝盤搭載license許可,才可以使用該軟體。我們作為軟體開發者,為了保護自身的權益,在軟體開發過程中也不可避免的會設計license管控機制。下麵就講一下設計一個基礎的license控制機制需要考慮的方方面面。 license管控方式 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...