複雜系統架構設計<1>

来源:https://www.cnblogs.com/lovexinyi/archive/2020/01/16/12200776.html
-Advertisement-
Play Games

這兩天開始讀由Edward Crawley(愛德華 克勞利)、Bruce Cameron(布魯斯 卡梅隆)、Daniel Selva(丹尼爾 塞爾瓦)著作的系統架構,一開始看目錄以為是介紹系統軟體架構的書,也是我買它的緣由,但粗略看完序和第一章第二章後不經肅然起敬,這本書是真的好,該書面向對象是適用 ...


這兩天開始讀由Edward Crawley(愛德華 克勞利)、Bruce Cameron(布魯斯 卡梅隆)、Daniel Selva(丹尼爾 塞爾瓦)著作的系統架構,一開始看目錄以為是介紹系統軟體架構的書,也是我買它的緣由,但粗略看完序和第一章第二章後不經肅然起敬,這本書是真的好,該書面向對象是適用於所有需要系統架構行業而不單單是軟體行業。它系統地介紹了系統的概念,組成,功能,如何分解系統,抽象系統,組合系統等相關的理論,相信不管什麼學科什麼專業什麼行業讀這本書都會有所收穫。決心仔細研讀一遍。

有的書傳播知識,有的書介紹技能,有的書娛樂大眾,而優秀的書傳播優秀的思想,本書就是。

這篇是第一部分讀書筆記,介紹了寫系統架構理念,系統分析必備思路,系統架構所用的思維模式。

0 簡介

架構的概念:對系統中實體以及實體之間關係所進行的抽象描述。

架構的目的:找出系統架構得以確立的決策點,並謹慎做出決策。不良的架構決策則會使得大型的研發活動從剛開始就變得難以推行。

核心觀點:一些早期的決策可以加依分析和處理,在不知道各個組件的詳細設計情況下,系統架構依然能經得起檢驗。不要期望直接設計出最優的架構,而僅僅是結構良好的創造活動要優於毫無結構的創造活動。目標當下。

學習目標:形成一套思考並創建系統架構的方式。

1 基本概念

1.1 系統

系統思維:與其他一些思維模式相並立,如批判思維,分析思維,創新思維。把某一種疑問、狀況或難題明確視為系統是思維方式。

系統:由一組實體和這些實體之間的關係所構成的集合,其功能要大於這些集體各自的功能之和。其由有兩個重點

  • 系統是由相互作用或相互聯繫的實體組成的
  • 實體之間發生相互作用時,會出現一種功能,這種功能大於或不同於這些實體各自所具備的功能。

實體:構成全體的小塊,也稱之為部件、模塊、常式、配件等

實體關係:可以是靜態的(連接關係),也可以是動態並交互的(貨物的交換關係)。

哪些可以視為系統:任何一組實體都可以解讀為一個系統。Complex作為

  • 形容詞複合的:形容實體與關係較多的事務。
  • 名詞系統

系統和產品:產品是能夠交換或具有交換潛力的事物,有些事物是產品不是系統(大米),有些事物既是產品(可供交換)也是系統(含有很多相互聯繫的實體)

架構:對系統種的實體及實體之間的關係所進行的抽象描述。

1.2 涌現

一組實體及其關係的集合,其功能大於這些實體各自功能之和。

涌現:系統在運作時所表現、呈現或浮現出的東西。為什麼要構建系統就是要為了取得滿意的涌現物。對涌現的理解,是系統思維的目標,也是系統的藝術。

功能:是系統最明顯和最關鍵的涌現物。是系統所作的事情,也就是系統的動作、產出或輸出。

功能/涌現物有四種分類(以汽車為例):

預期的涌現 意外的涌現
令人滿意的 汽車可以載人
汽車內可以使人感到溫暖或涼爽
汽車令人感到愉悅
汽車創造一種個人自由的感覺
不和人意的 汽車燃燒碳氫化合物 汽車可以致人死亡

性能:系統涌現物:是系統運作或執行其功能的好壞程度。系統功能的一項屬性。

原則:一種長期有效的道理,能夠適用於各種問題。

涌現原則:當各實體拼合成一個系統時,實體之間的交互會把功能、行為、性能和其他內在屬性涌現出來。將探尋系統所涌現出的預期屬性和意外屬性。名人名言

  • 系統並不是其組成物的簡單加總,而是這些組成物之間互動的產物。Russell Ackoff
  • 整體大於其各部分之和。亞里士多德《形而上學》

系統還會涌現出其他屬性:可靠性,可維護性,可操作性,安全性,健壯性,魯棒性。這些屬性與性能不同,這些屬性不是立刻就能創造出價值,而是通過系統在整個生命期種的運作情況來體現。

不合人意的意外涌現被稱之為緊急狀況。

價值:是有著一定成本的利益。構建系統就是為了獲得利益。

1.3 系統及其形式與功能

系統思維的第一任務:確定系統及其形式與功能。

形式:系統是什麼,具有一定的形狀、配置、編排及佈局,是一種已然存在或有可能存在的物之載體或信息載體。形式在一段時間內是靜止固定的。系統一定具備一定的形式。

功能:系統做什麼,能夠引發並創造某種性能,是對性能有所貢獻的活動、操作及轉換行為。是使某物得以存在或得以體現其用途的一種動作。涌現物出現在功能領域。由過程和操作數組成。

功能與形式:功能需要以形式的手段來展現。功能比形式更抽象,功能涉及轉變,比形式更難以描述。

過程:功能中純粹標識動作或轉換的那一部分,改變操作數狀態的那一部分。

操作數:其狀態會在過程中發生改變的事物。

例子:

1578987451514

1578987467515

1578987487470

形式和功能的區別:類似於商業活動中的商品和服務,商品是有形的產品(稱為形式),而服務則是相對較為無形,面向過程的產品(稱之為功能)。

每一種系統都具備形式、過程與操作數著三項特征。

名詞-動詞-名詞:第一個名詞充當執行動作所有的工具(形式),動詞用來描述該動作(過程),第二個名詞用來標識動作對象(操作數)。

1.4 實體及其形式與功能

系統思維的第二任務:確定系統中的實體、實體的形式和功能,以及系統邊界和系統所處的環境。

系統是由一組實體所構成的。系統中的每個實體都有其形式和功能。

1578988993626

當功能按某種次序執行時,會涌現出更加動態的行為。

一個系統可以分解為更小的系統,可以擴展成更大的系統,定義系統的實體和系統的邊界,是一件非常重要而又比較困難的事情。

系統思考需要面對5個問題:

  • 確定如何將系統初步分解為恰當的實體
  • 用整體思維找出潛在的實體
  • 通過對重點的分析,把註意力集中到重要的實體上
  • 為實體創建抽象
  • 定義系統的邊界,並將其與外界環境隔開

1.4.1 分解為恰當實體

難點在於:系統究竟屬於互不相同的元素所組成的系統,還是模塊化或集成系統。

如果系統由界限清楚的實體組成,可以用一種非常清晰的方式來分解。系統確實是由彼此較為獨立的一些實體所聚集並定義而成的。艦隊、馬群、樹林、圖書館

模塊化的系統 :各個模塊之間(尤其在功能上)相對獨立。模塊內部的關係比較密集,模塊之間的關係比較稀疏。放大電路

集成系統:系統系統很難在不影響其功能的前提下進行簡單分解,一般都是內部高度互聯的系統。汽車轉向裝置系統,集成電路。

1.4.2 找出潛在實體

整體論:強調整體概念,從整體上把握事物之間的緊密聯繫。

整體思維:發現對系統可能有重要意義的全部實體。通過整體思維促使發現與系統交互的每一樣東西,並考量給系統的影響和後果。

已知不確定和未知不確定:已知不確定是知道但不瞭解,未知不確定是連有沒有都不知道的事物。

整體思維的目標是儘可能找出位置不確定的事物。

整體原則:每個系統都作為某一個或某些個大系統的一小部分而運作,同時,每個系統總中也都包含著更小的一些系統。整體思考這些關係,並研發出與上級系統、下級系統和平級系統相協調的架構。

  • 沒有誰完全是孤島。每個人都是陸地的一小塊,都是主題的一部分。John Donne

激發整體思維:結構化和非結構化頭腦風暴,研發框架來保證相關問題可以得到考慮,從多個視角進行思考,把系統明確地放在大環境下進行思考。

1578991149518

1578991161217

1.4.3 找出重要實體

聚焦:把與當前問題有關的重要事物找出來

聚焦原則:在任何一個點上,都唔那個發現很多影響系統的問題,而其數量已經超出了人的理解能力。因此,必須找出其中最關鍵,最重要的哪些問題,並集中精力思考它們。

  • 問題不在於你看什麼,而在於你看到了什麼。Henry David Thoreau亨利 戴維 梭羅

聚焦過程中,把疑問、狀況或難題確定出來,把其中重要方面凸顯出來。更具體就是利益相關的東西是什麼,

面對實體問一個簡單的問題:這個實體對關係的成果或涌現物來說是否重要。一般來說把握其交互關係的前提下,人腦可以同時思考的事情優先,一般數量是7浮動2。列出對系統重要的事物一般為7個,把這些事物替換掉對系統的影響。

1.4.4 創建抽象

抽象:抽離於物體的性質描述,只含本質不含細節。好的抽象可以促進思考,不好的抽象會阻礙思考。

例子:

實際放大器:

1578992220030

抽象機制指導原則:

  1. 針對形式和功能創建抽象時,要把重要的信息凸顯出來,而把不太重要的細節隱藏起來。
  2. 要創建那種使適當的關係有機會得以表現出來的抽象。
  3. 在適當的層面進行分解或聚合,並於該層面創建抽象。
  4. 在能夠有效表達當前系統的重要方面這一前提下,創建數量儘可能少的抽象

違背第一條,可能會把放大器抽象成熱源,不能凸顯放大的過程,如果違背第三條,可能會在抽象過程中覆蓋過多的細節。

1.4.5 定義系統邊界

系統邊界可以清晰地劃分出系統與其外圍事物之間的界限。定義系統邊界就等於將系統與其外圍環境區隔,

外圍環境:圍繞在系統外圍的東西。

系統邊界:位於系統和大環境之間。劃定邊界考慮下列問題

  • 需要分析的實體包括進來(目標是理解某個機制)
  • 創建設計方案所必備的要素包括進來(目標是創建設計方案)
  • 負責實現和操作的東西包括進來(目標是體現某種價值)
  • 規章、契約、法律制度所建立的規範邊界
  • 把系統和大環境區分開的傳統做法和習慣做法
  • 必須遵守的一些介面定義和標準,包括與供應商的關係

外部介面:當某個關係跨越系統邊界的時候,系統與大環境之間定義了一個外部介面

例子:如果認為Team X 的任務是製作設計方案,那麼把john、susan和amy放在系統內,把市場人員和操作人員放在系統之外就是一種較為合理的邊界劃分方式。用虛線表示系統邊界。

例子中第二項任務:找出系統的實體,實體的形式與功能,以及系統邊界及外圍環境後的結果:

1579048852901

1.5 實體之間關係

系統思維的第三任務:找出系統內及系統邊界處實體之間所具備的關係,以及那些關係的形式與功能。

關係按特征分類:功能關係和形式關係。

功能關係:用來完成某件事情的實體之間所具備的關係,此關係可能涉及實體之間對某物的操作、傳輸或交換。功能關係具有動態性,所以其也成為交互關係。交互過程中,相關實體可能交換操作數,也可能協同對操作數執行操作。

形式關係:在某段那時間內穩定存在或有可能穩定存在的實體之間所具備的關係。其通常體現為連接關係或幾何關係。為了強調其靜態性也稱為結構關係

功能關係與形式關係:功能關係通常以形式關係為前提。形式關係是功能關係的載體。例子:心臟不與肺相連,就無法同肺部交換血液。

形式關係與功能關係可以表示為關係圖或N×N表。

關係圖例子:系統內兩個實體與系統外圍環境中一個實體之間的關係。

  • 形式交互以雙箭頭線來表示,功能交互根據交互的性質用單箭頭線或雙箭頭線來表示。
  • 有些關係位於系統內部,有些則跨越了系統邊界,對於跨越邊界的關係其表示方法與系統內部關係相似,它用虛線而非實線來表示。畫這種關係圖,應該把實體的形式和功能寫出來,同時最好給關係加上標註。

1579049878530

放大器關係圖:黑色表示功能關係,灰色表示形式關係。

1579050306656

電路圖:把結構化連接或形式關係稱為電氣連接,功能交互中的箭頭,在電路圖中指的是電流的流動。

1579051179935

N×N表:表的上方和左側都寫了N個實體,第一張表列出形式關係,第二張表列出功能關係。表中虛線左邊是表示系統邊界內部實體。位於對角線之外的每一個單元格都表示一種內部關係或外部關係

1579051327572

關係圖可以更加直觀,N×N能夠體現更多的細節,當節點和連接數量變多之後不會顯得特備雜亂。

形式關係一般比較具體,剛開始思考關係的時候可以從形式關係入手,再思考的同時再考慮其承載的功能。形式關係的重要性,主要體現在對功能關係的曾在上。涌現物出現在功能領域,所以功能交互才是真正重要的。

外部介面:系統內部的實體和系統外圍環境中的實體之間。不管是形式關係還是功能關係都有可能跨越系統邊界。

1.6 預測涌現物

系統思維第四項任務:基於實體的功能以及實體之間的功能互動,來確定系統的涌現屬性。

1.6.1 重要性

系統是奇妙之處在於涌現。系統各個實體組合一起後,實體的功能與實體之間的功能交互形成的組合涌現出更多的功能。

在形式領域中不會發成涌現。在功能領域中則會複雜很多,就涌現出很多其他的功能。

系統思維的主要目標:努力瞭解並預測涌現物以及涌現物帶給系統的強大能力。

1.6.2 系統故障

系統故障就是由於預測涌現物沒有出現。

預期涌現物沒有出現:預期的良好涌現物未能出現,意外的涌現物出現

1579053517496

1.6.3 預測涌現物

預測的難點在於不知道系統會涌現出何種功能。

三種方式來預測:

  • 更具以前做過的情況來預測,也就是根據先例來預測。回想以前做過的相同或極相似的解決方案,然後對其略作修改,並實現出來。
  • 試驗,做出一個小模塊,來進行試驗。螺旋式開發,先構建出系統的某些部分,並檢驗其涌現物是否合意,再於後續的螺旋環節中逐次構建系統的其餘部分。
  • 建模:建模預測涌現物並取得巨大成功的例子就是集成電路
  • 推理:系統沒有先例,不能試驗建模,就只能進行推理,在推理的過程中可以從一些相似但不同的系統中瞭解一些信息,也可以通過不完備的建模來得到一些信息來對最終的涌現物進行判斷。

1.6.4 涌現物依賴於實體及關係

涌現物依賴於系統各實體的功能以及實體之間的功能交互。形式是功能交互的載體,形式於形式之間的關係(結構)對預測物有著重要意義。

三個例子,過濾器,杠桿,語句:

1579055258676

機械杠桿:杠桿和支點組成,支點放在遠離操作者就是良好涌現方法,若改變支點位置,良好涌現物就消失了。

形式關係對於涌現物起著關鍵作用,對特定的功能交互起著重要引導作用。

1.7 總結

系統思維就是把某個疑問、狀況或難題明確當成系統來思考。

1579057377482

2 複雜系統

複雜的系統:由很多高度相關、高度互聯或高度混雜的元素或實體所組成的系統。

為什麼會複雜:

  • 對系統由更多的要求,更多功能,更好性能,更加健壯,更加靈活。
  • 要求系統能夠於其他系統相互協作

複雜度衡量法:通過一些複雜度的指標來衡量系統的複雜性。

難懂:系統的複雜度超越了人類由先的觀察和理解呢能力,難懂的事物具有較高的錶面複雜度。

架構師訓練自己的思維:去理解複雜的系統,令那些系統不再那麼難懂,應努力構建易懂的架構。

良好的系統架構:構建一套具備必要複雜度同時又不難懂的系統。

2.1 Team XT範例

Team XT是Team X的擴展,角色仍然是製作設計方案。

分析一個系統先提出三個問題:

  1. 系統是什麼:Team XT系統是由一組人員和一套過程所構成的,過程就是研發設計方案。
  2. 系統的形式是什麼:每位團隊成員的總和
  3. 系統要完成什麼功能。功能就是指系統所要做的事情、活動或轉換行為。Team XT系統功能就是研發設計方案。

第一項任務:確定系統及其形式與功能。通過仔細觀察,廣泛經驗,每位成員談話等手段。

第二項任務:確定系統中的實體、實體的形式和功能,以及系統邊界和系統所處的環境。

1579136666650

1579136679494

劃定系統邊界,虛線以下的部分是系統的外部環境。

第三項任務:找出系統內及系統邊界處實體之間所具備的關係,以及那些關係的形式與功能。

1579136931908

第四項任務:基於實體的功能以及實體之間的功能互動,來確定系統的涌現屬性。

2.2 分解

分解:就是把實體分成小的部件或組成部分。分而治之。

分解的難點:分解出來的實體構建整個系統的這一過程,這一過程通常稱為整合。

整合:把各個部件所具備的形式聚合起來。

分解方式:取決於系統元素的構成情況。不同元素構成的系統,把team XT按照成員進行分解。元素的形式不確定,可以考慮按照功能來分解(例如,轉向機制,壓縮機,排序演算法)。按照功能分解比較好。

體系:一種其實體均處在某個層次或某個位階的系統,這些層次按照上下順序排列起來。

元素在體繫上有位階的原因:

  1. 元素所涉及的範圍更廣。省長比市長行政範圍大
  2. 元素的重要性較高或性能較強。黑帶比褐帶選手高
  3. 元素在功能上承擔更多的責任。總統比副總高,職責更大。

2.3 層級分解

1579140335389

該圖沒有體現出三位小組長之間的區別

1579140582475

可以清楚的看到三個組長之間不同的分工。每個節點所統領的下層節點數量限制在7個以內,不超越認知能力。

組是一種有用的抽象單元,但不是唯一的分解方式,還可以按照地理位置,連接性或功能關係等分解。

如何確定分解結束:底層元素是不便於分解的原子部件。

簡單系統:只需要分解一次,分解出來的這一層中元素不超過7個。

1579141636094

複雜度適度系統:經過兩次分解,每個上級部件統領的夏季部件不超過7個,最低層數量不超過81個,如Team XT。

複雜系統:分解層級數超過3層。很少有這樣的系統。

系統本身稱為第0層,分解出來的那些層分別稱為系統之下的第1層,第2層。系統之下的那些層可以叫做:

  • module:模塊
  • assembly:配件
  • Sub-assembly:子配件
  • Function:函數或功能
  • Rack:架
  • Online Replacement Unit , ORM :線上更換單元
  • Routine:常式
  • committee:委員會
  • Task force:工作組和任務組
  • Unit:單元
  • Component:組件
  • Sub-component:子組件
  • Part:部件和部分
  • segment:區段
  • Section:節
  • chapter:章

系統之上的那些層:

  • system of system :系統的系統
  • complex:複合體
  • collection:集合

2.4 原子部件

原子部件:不能拆解的東西,凡是一經拆解就是去意義的東西。

2.5 邏輯關係

2.5.1 類和實例

類:一種結構,用來描述某種事物所共有的特征。

實例:類的具體表現。類的實例化。

2.5.2 特化關係

特化/泛化關係:通用的物體與一組特殊的物體之間的關係。

特化在編程語言中類似於繼承:某個通用的類中創建子類,使得子類繼承通用類中的某些屬性及功能。

2.5.3 遞歸

遞歸:某套過程或某個對象把自己包括進來。以一種於自身相似的方式來使用實體或關係的現象。

2.6 思考

自頂而下或自底而上思考:使用最多的是自頂而下,從系統的目標開始,思考概念和高層架構。

由外向內思考。

現實工作是由內向外,最常用的方法是:從系統中選一個點,然後由這個點開始想上或向下探索1~2層。

交替思考:在思考系統時:思維會在形式領域和功能領域之間來回切換。以team XT為例:先從功能領域:研發設計方案,到形式領域:確定小組這一形式:功能領域:思考小組都要完成功能,思考研發設計方案這一功能如何涌現。

2.7 架構工具

架構展示有兩種方法:

  • 維護一個集成模型,並根據需要對其進行投射。機械上用UG等。
  • 模型中維護多個視圖。直接構建二維視圖,看能不能協調一致。

對象過程方法(object process methodology , OPM):把形式、功能、實體及關係有關的信息不都融入同一個模型中。

系統建模語言(System Modeling Language ,SysML)和美國國防部架構框架(Department of Defense Architecture Framework,DoDAF):採用不同視圖來表示信息。

2.7.1 SysML

SysML:對軟體工程中的統一建模語言進行改編

1579144797040

2.7.2 OPM

OPM:將面向對象的圖表與面向過程的圖表合併到同一套方法中,以便對系統進行描述。

在OPM中,對象用方框表示,過程用橢圓表示,其特點:並不會針對系統創建多個不同的視圖,或多種不同類型的圖表,只會為系統創建一個繼承模型,多個SysML圖可以融合到一張含有對象、過程及關係的OPM圖中。

1579145058157

1579145087049

2.8 總結

1579145150279


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

-Advertisement-
Play Games
更多相關文章
  • 這個應該是已經有很多人做過的東西,我應該只是算手癢,想寫一下,所以,花了點時間折騰了這個,順便把 Dark Mode 的處理也加上了。 首先可以很明確的一點,這個真沒技術含量存在,只是需要點耐心。 LED 數字包含了左右各兩條線,中間三條線,一共 7 條線。所以,為了能夠更容易辨識,在寫 demo ...
  • 2020-01-17 react-mockjs 使用 最近參加了公司的一個新的項目,前後端同時開發,這時後端提供不了前端介面,那麼就要靠咱們前端自己mock數據啦。 用到mock 數據的工具是 mockjs ,就是這個。 這裡是github地址:https://github.com/nuysoft/ ...
  • prop方法和表格全選案例 對於布爾類型的屬性,不用attr方法,應該用prop方法 prop用法跟attr方法一樣 <input type="button" value="選中"> <input type="button" value="不選中"> <input type="checkbox" i ...
  • 美女相冊案例 <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title></title> <style type="text/css"> body { font-family: "Helvetica", "Arial" ...
  • 因為該WPS插件使用NPAPI機制來和瀏覽器交互,故要求使用插件的瀏覽器必須支持NPAPI機制且必須開啟NPAPI機制。以下是支持的常見的瀏覽器及其版本: FireFox瀏覽器52及小於52的版本(高於52的版本不再支持NPAPI)Chrome瀏覽器45及小於45的版本(高於45的版本不再支持NPA ...
  • 樣式:在style裡面寫的,用css來操作 屬性:在裡面裡面寫的,用attr方法操作 //設置單個屬性 //attr(name, value) $("img").attr("alt", "圖破了"); $("img").attr("title", "錯錯錯錯"); //設置多個屬性 $("img") ...
  • //編輯過敏史 if(iToolbar == 'editGMS'){ lstype="gms"; var gms=""; if(gmstype=="0"){ gms=$('#GMSInfo').html(); $('#GMSDIV').html('<textarea class="form-cont ...
  • 從準備引進微服務這套技術棧的想法開始,到一個微服務架構的新系統部署上線,這大概需要經過哪些關鍵步驟呢? ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...