分散式系統衛星時鐘伺服器(NTP伺服器)架設與設計

来源:https://www.cnblogs.com/yfcs999/archive/2020/03/06/1232jsfs.html
-Advertisement-
Play Games

分散式系統衛星時鐘伺服器(NTP伺服器)架設與設計 分散式系統衛星時鐘伺服器(NTP伺服器)架設與設計 本文由安徽京準科技提供支持和原資料——更多闡述可參考微♥ ahjzsz 分散式系統由Tanenbaum定義,“分散式系統是一組獨立的電腦,在”分散式系統 — 原理和範例“中作為用戶的單一,連貫的 ...


分散式系統衛星時鐘伺服器(NTP伺服器)架設與設計

分散式系統衛星時鐘伺服器(NTP伺服器)架設與設計

本文由安徽京準科技提供支持和原資料——更多闡述可參考微♥ ahjzsz 

分散式系統由Tanenbaum定義,“分散式系統是一組獨立的電腦,在”分散式系統 — 原理和範例“中作為用戶的單一,連貫的系統出現”。

區塊鏈通過構建全球分散式系統,嘗試實現分散的新數據存儲和組織結構。

首先,定位到分散式系統的原因主要是可擴展性,位置和可用性。區塊鏈也不例外。地理可擴展性,形成全球價值存儲網路/信息保護區域,包括非集中式結構下的防篡改/零停機時間的可用性。這些未來都是使用分散式系統在block中實現的。

0.目錄

X.區塊鏈和分散式系統

1.簡介(同步和整體流程概述)

2.時鐘同步

2–1。物理時鐘(時鐘和時鐘偏移)

2–2。 時鐘同步演算法(網路時間協議(NTP)/伯克利演算法)

3.邏輯時鐘

3–1。 Lamport的邏輯時鐘(完全有序的多播)

3–2。 矢量時鐘(因果訂單組播)

4.獨家控制

4–1。 集中演算法

4–2。 分散演算法

4–3。 分散式演算法

5.選舉演算法

5–1。 欺負演算法

5–2。 環演算法

6.阻止鏈和同步作為分散式系統

6–1。 塊鏈和時鐘同步(塊鏈和物理/邏輯時鐘)

6–2。 塊鏈和獨占控制演算法(PoW·PoS·BFT中的獨占控制演算法)

6–3。 塊鏈和領導者選舉演算法(PoW·PoS·BFT中的領導者選擇演算法)

1.簡介(同步和整體流程概述)

與集中式系統不同,在分散式系統中就時間達成一致並不容易。

在前一種情況下,可以基於全局共用時鐘確定絕對順序關係,但是在後一種情況下,由於存在時鐘值錯誤和對應時間,因此難以共用絕對時間。

但是,絕對時間的順序並不是絕對必要的,如果相對順序是固定的,通常就足夠了。

在本文中,將按以下順序解釋節點之間的同步。

時鐘同步是如何發生的?

使用邏輯時鐘和矢量時鐘的相對排序方法

關於分散式系統一致性的排除控制演算法

關於分散式系統中的領導選舉演算法

2.時鐘同步

2–1. 物理時鐘

時鐘和時鐘歪斜

大多數電腦都有保持時間的電路,這種設備稱為“時鐘”。這是基於頻率的振動,該振動可以通過晶體類型,切割方法和向精確加工的石英增加張力時的壓力大小明確定義。

雖然這個頻率相當穩定,但不能保證不同電腦的所有晶體都能以完全相同的頻率運行。由此引起的同步時間的差異稱為時鐘偏差。

在這種情況下,特別是在實時系統中,如何使多個時鐘與現實時鐘同步以及如何同步時鐘是一個問題。

現實世界中的時間最初基於平均太陽秒,但現在銫133過渡9,192,631,770次的時間定義為1秒,並且定義了國際原子時間和通用協調時間(UTC)。為了向需要準確時間的人提供UTC,使用WWV並且時間以±10毫秒的精度提供。

2–2. 時鐘同步演算法

但是,大多數機器沒有WWV接收器。因此,每台機器都需要時間跟蹤和管理演算法,以便所有機器都可以同步時間。

順便提及,用於確定是否需要重新同步的錯誤,即時鐘偏移,如下測量。

將H定義為每台機器計數的晶體振動引起的每秒中斷次數(刻度數),並將C表示為該時鐘的值。設Cp(t)表示機器的時鐘值,當UTC時間為t時。

如果將p定義為定義允許的時鐘偏差量的最大漂移率,則假定它在以下範圍內運行。

1-p 《= dC/dt 《= 1+p

也就是說,在從先前同步開始經過At秒之後,兩個時鐘最多分開2pΔt。

當保證在操作執行時沒有大於&的偏差時,必須至少每&/2p重新同步軟體。

網路時間協議(NTP)

在許多協議中很常見,[Cristian,1989]首先提出的方法是一種與客戶伺服器通信的方法。由於時間伺服器具有WWV接收器或具有準確的時鐘,因此它可以提供當前時間。在與伺服器通信時,重要的是延遲報告消息傳播延遲的時間,但是通過估計延遲,這裡可以最小化錯誤。目前,已知NTP能夠在1至50毫秒的範圍內實現精度。

伯克利演算法

在諸如NTP的許多演算法中,時間伺服器是被動的並且僅回答查詢。另一方面,在Berkeley演算法中,時間伺服器接收每個參與節點所持有的時間,並且還基於平均值改變其自己的時間。當時間值不必與現實世界有關係時,很容易在同一當前時間達成一致,並且它對此演算法有效。

3.邏輯時鐘

到目前為止,雖然我們描述了一種根據實際時鐘將時鐘與絕對時間同步作為參考的方法,但通常只執行相對同步。這裡,邏輯時鐘的概念用於確定相對順序。

3–1. Lamport的邏輯時鐘

為了同步邏輯時鐘,Lamport定義了一個名為happen-before的關係。表達式a→b表示“a發生在b之前”,這意味著事件首先發生,然後所有進程都同意事件b將發生。發生之前 — 可以在以下兩種情況下直接觀察到關係。

如果a和b是同一過程中的事件且a出現在b之前,則a→b為真。

2. 如果a是由一個進程發送的消息的事件,並且b是由另一個進程接收的該消息的事件,那麼a→b也是如此。在發送消息之前無法接收消息,即使消息同時也需要有限的非零時間。

因為發生前關係處於過渡關係中,如果a→b和b→c,則可以證明a→c。如果事件x,y出現在不交換消息的不同進程中,則x→y和y→x都不為真,並且這些事件被認為是併發的。 (之前發生的關係未知。)

利用邏輯時鐘,通過分配所有進程對每個事件a一致的時間C(a)來測量相對時間。如果這些時間值是a→b,則通過向時間添加正值來校正它們,使得C(a)《C(b)。通過分配如下圖所示的時間值,可以掌握之前發生的關係。

 

在Lamport的邏輯時鐘中,如果a→b,則可以證明C(a)《C(b),但如果C(a)《C(b)則a→b不一定成立。換句話說,a→b是C(a)《C(b)的必要條件,並且不是充分條件。 Lamport的邏輯時鐘增加了改進,它是一個矢量時鐘,可以滿足這種必要和充足的條件。

完全有序的多播

有關詳細信息,請參閱“分散式系統一致性”一文中的內容

在許多情況下,有必要在重覆的副本之間執行完全有序的多播。換句話說,所有消息都需要以相同的順序傳遞給每個收件人。 Lamport的邏輯時鐘可用於在完全分散式系統下實現完全有序的多播。

當進程收到某個消息時,它會根據時間戳按順序放入本地隊列。收件人向另一個進程多播確認。如果您按照Lamport的演算法調整本地時鐘,則所有進程實際上都具有本地隊列的相同副本。只有當消息位於隊列的頭部並且被所有其他進程確認時,才有一個進程可以將隊列中的消息傳遞給正在運行的應用程式,因此,所有消息都以相同的順序傳遞到各處。換句話說,已經建立了完全有序的多播。

3–2. 矢量時鐘

使用矢量時鐘,可以掌握Lamport邏輯時鐘無法掌握的因果關係。 假設事件a的向量時鐘是VC(a),則執行以下步驟,使得a→b成為VC(a)《VC(b)的必要和充分條件。

在通過網路發送消息之前,節點Pi向矢量時鐘VCi [i]添加1,或者操作一些內部事件。

2. 如果處理Pi將消息m發送到Pj,則Pi在執行前一步驟之後將m的向量時間戳ts(m)設置為等於VCi。

3. 當接收到消息m時,進程Pj執行步驟1,將消息分發給應用程式,然後更新其自己的向量時鐘的每個k,如下所示:VCj [k]←max {VCj [k],ts(m)[k]}。

 

因果關係多播

通過使用向量時鐘,可以實現稍微弱於上述完全有序多播的因果有序多播。

通過比較矢量時鐘的值並掌握髮生在之前的關係,對於特定事件x,其他事件可以被分類為過去事件,併發事件和未來事件。例如,在上圖中,當事件d用作參考點時,過去事件是a,b,c,i,併發事件是j,l,m,未來事件是f,g,h。

此時,假設因果有序多播是過去事件和因果事件的序列,其中發生所有因果關係,以便在所有過程中保持一致,但是關於併發事件的順序是無關緊要的。通過這種方式,與Lamport的邏輯時鐘不同,可以用向量時鐘來掌握因果關係。

4.獨家控制

多個進程之間的併發操作和協作操作是分散式系統的基本,但是為了保證對資源的獨占訪問,以便通過多個進程同時訪問相同資源時不處於不一致狀態時,需要分散式排他演算法。

分散式獨占控制演算法可以分為以下兩種類型。

基於Token的解決方案

基於許可權的方法

在基於Token的方案中,很容易避免StarvaTIon(很長時間內不允許訪問資源)和死(多個進程等待彼此的進展)。一個代表性的例子是Token環演算法。但是,當持有Token的過程異常停止並且Token丟失,有必要只生成一個新Token,這種複雜性是一個嚴重的缺點。

許多其他分散的獨占控制演算法採用基於許可權的方法,並有許多不同的獲取許可權的方法,我們將分別具體解釋。

4–1. 集中演算法

通過模擬單處理器系統的功能,可以輕鬆實現分散式系統中獨占控制的單一訪問。在集中式演算法中,一個進程被指定為協調器,並且當進程訪問共用資源時,請求消息被髮送到協調器以獲得許可。如果其他進程未訪問共用資源,則協調器返回許可權響應,並且在接收到回覆之後,所請求的進程執行該進程。

很容易看出,該演算法保證了對資源的獨占訪問,但它具有單點故障的嚴重缺點。雖然這可能是大型系統中的性能瓶頸,但這種簡單性帶來的優勢仍然可以彌補這些缺點。

4–2. 分散演算法

假設各項都會重覆n次。在分散演算法中,當進程訪問資源時,需要批准大多數m》 n / 2。如果獲得大多數批准,則該過程獲得許可並可以進行處理。

雖然該方案解決了集中式演算法的單點故障問題,但是如果有太多的節點試圖訪問,則存在另一個問題,即沒有節點可以獲得足夠的投票而無法獲得充分的性能。

4–3. 分散式演算法

在該演算法中,假設系統上所有事件的順序可以定義為完全有序的關係。作為這個基礎,使用了前一章中描述的Lamport的邏輯時鐘,並且假設沒有消息會丟失。

當進程嘗試訪問共用資源時,它會創建一條消息,其中包含資源名稱,自己的進程號和當前邏輯時鐘,並將其發送給所有其他進程。當接收到該請求消息時,根據其自身狀態執行以下操作。

1. 如果收件人未訪問該資源且未嘗試訪問該資源,則收件人會向發件人返回“確定”消息。

2. 如果收件人已在訪問資源,請不要回覆並執行排隊請求。

3. 如果收件人正在嘗試訪問資源但尚未完成,請將輸入消息中的時間戳與發送給其他進程的消息中的時間戳進行比較,並將較低的一個作為獲勝者。如果收到的消息具有小的時間戳,則收件人返回OK消息。如果自己的消息具有較小的時間戳,則接收方將不會將輸入消息排隊。

顯然,如果它不像process1或2那樣衝突,這個演算法就能正常工作。即使在衝突的情況下,也只建立了唯一一個進程可以訪問的條件。

與集中式演算法一樣,該演算法可以保證獨占控制,不會出現死鎖或饑餓。 此外,沒有單點故障。 儘管如此,單點故障被故障n位置特征所取代。 它可以通過回覆許可權或拒絕許可權並引入超時來解決,但也會出現其他問題,例如需要多播通信原語。 不幸的是,目前尚未設計出超越集中式演算法的分散式演算法,並且仍在研究中。

當比較各個演算法時,變為如下。

 

5.領導者選舉演算法

許多分散式演算法需要一個特殊的過程,它具有領導者作為協調者或發起者的角色。哪個過程是領導者,唯一過程是否可以成為領導者是一個重要問題,研究人員在過去幾十年中一直在努力。

5–1. 欺負演算法

當協調員失敗並且任何進程P註意到該情況時,P根據以下過程激活選舉。

· P向所有具有比其自身更高數值的進程發送ELECTION消息。

· 如果沒有人回覆,P將贏得選舉併成為協調員。

· 如果來自具有高於P的數值的過程的答案,則將替換它。 P的工作結束了。

使用該演算法,可以唯一地確定協調器。但是,該演算法需要大量的消息和數據流量,可以說是冗餘的。作為替代方案,存在環演算法。

5–2. 環演算法

與一般環演算法不同,該演算法不使用Token。發現協調器不工作的任何進程構造一個包含其自己的進程號的ELECTION消息,並將該消息發送給其後繼者(環網中的下一個節點)。如果繼任者失敗,請跳過。如果沒有比您更高的數值的節點,您的消息將仍然返回給您自己的進程號,因此它將被指定為協調員。

在該演算法中,執行具有減少數量的消息的領導者選舉,但是還可以通過將消息的目的地設置到兩個相鄰節點來實現具有較少量數據流量的演算法。

6.阻止鏈和同步作為分散式系統

因此,在作為分散式系統之一的塊鏈中,進程之間的同步如何發生?

6–1. 區塊鏈和時鐘同步

塊鏈和邏輯時鐘

首先,考慮是否可以使用區塊鏈中的物理時鐘來掌握絕對時間關係。如第2章所述,參與網路的每個節點並不總是保持正確的物理時鐘,並且應該存在時鐘偏差。由於比特幣區塊鏈的平均生成時間是10分鐘,因此認為即使一定程度的大時鐘偏差也是可接受的。然而,當節點散佈在世界各地時難以同步各個物理時鐘,並且還可能存在偽裝時鐘的節點。通過引入網路時間協議(NTP)來重新同步節點之間的正確時間是一項困難的技術。

區塊鏈和邏輯時鐘

因此,準備邏輯時鐘而不是物理時鐘是切合實際的。實際上,通過在塊中加入時間標記,可以製備出與Lamport邏輯時鐘非常相似的機制。

如[比特幣:點對點電子現金系統Satoshi Nakamoto]中所述,對作為礦工的區塊執行寫操作的每個節點本身具有作為時間戳伺服器的角色。每個時間戳通過在其哈希中包含前一個時間戳來形成鏈。但是,無法保證這些節點保持正確的物理時鐘。時間戳的數值,即每個事務的順序和時間相對模糊。

由於時鐘的這種模糊性,有可能會進行雙重付款。但是,在比特幣區塊鏈中,只有最長的鏈是合法的,在次要驗證後丟棄不正確的交易。因此,區塊的順序隨著時間的流逝唯一確定。隨著每個時間戳的增加,前一個時間戳被加強。

總之,在區塊鏈中的模糊時間戳下,事務的順序一致性是不准確的。然而,利用鏈式連接的簡單機制,每個交易的發生前關係隨著時間的推移而建立。此外,還有一種激勵結構,以便礦工轉移到良好,交易不一致的順序不會發生。

可以說,實現類似於Lamport的邏輯時鐘的時鐘同步方法,因為事務之間的相對順序關係,即發生在之前的關係變得更清楚。

對於大多數交易,沒有因果關係,因此如果您引入向量時鐘並採用因果關係排序的概念,則可以極大地放鬆訂單關係的約束。然而,在區塊鏈中,由於結構本身預設共用所有塊的順序關係,所以保持總排序(相對於在一段時間之後的塊)。

6–2. 區塊鏈和獨占控制演算法

即使在作為分散式系統的區塊鏈中,也需要排除控制。在區塊鏈網路中,每個節點並行地非同步操作。此時,要共用的區塊鏈本身的信息不應該不一致。

PoW·PoS中的獨占控制演算法

如第4章所述,分散式排他控制演算法可分為以下兩種類型。

· 基於Token的解決方案

· 基於許可權的解決方案

PoW和PoS是基於許可權的,其中,可以說它是類似於分散式演算法的機制。那麼,您什麼時候獲得訪問資源的許可權?是的,就在你找到一個隨機數時。

在PoW中,只有當找到在哈希值後跟0後跟n為0的隨機數時,才可以執行有效的新塊寫操作。執行操作的礦工將其廣播給所有礦工並分享。

通常,當節點找到一個nonce並創建一個比他自己更早的塊時,minor會同步該信息並移動以搜索下一個nonce值。這是因為如果您使用最長鏈被認為合法的規則搜索下一個nonce值,它們可以獲得更多利潤。儘管PoS優先為具有較大硬幣持有量的人提供資源訪問,但基本排除控制演算法結構也類似於分散式演算法。

但是,嚴格來說,不執行排除控制。這是為了在公共時間內同步並形成共識10分鐘,直到下一個區塊為止。當兩個或更多個節點同時找到隨機數值時,寫入操作以非獨占狀態執行。此時,由於只有最長的鏈被認為是合法的,因此區塊鏈網路中的信息與時間的流逝保持一致。叉子發生的一個問題是因為沒有執行嚴格的排他控制而且沒有確認最終結果。

BFT類型的獨占控制演算法

另一方面,通過BFT類型,基於許可的分散演算法執行排他控制。該演算法解決了分叉和終結問題,這是PoW中與分散式演算法類似的問題。

在BFT類型中,只有一個名為Proposer,Orderer等的節點有權生成新區塊。創建區塊時,您可以從所有參與節點收集投票,獲得超過2/3的同意,您才有權創建新塊。此時,有必要同意超過2/3而不是多數的原因是處理拜占庭故障,有關此問題的詳細信息在“分散式系統中的容錯”一文中有所描述。

在BFT類型演算法中,與PoW等不同,只有一個節點可以獲得對區塊鏈的獨占訪問許可權,因此不會立即確定fork和finality。但是,任何人都可以作為礦工參與網路的財產往往會丟失。

6–3. 區塊鏈和領導者選擇演算法

PoW,PoS和領導者選擇演算法

區塊鏈上的領導者選擇演算法類似於獨占控制演算法的機制。在比特幣中,用於選舉領導者的演算法,即,新創建塊的節點是PoW。

PoW允許添加一個塊作為一個好的領導者,為比特幣網路提供有計算複雜性和發現nonce的節點。每個成為領導者的礦工都會嘗試為比特幣網路做出貢獻,因為更容易早期同步到首先發現現時的節點並開始搜索下一個塊的現時值更有可能獲得獎勵。儘管存在鏈條完全由硬叉分支的問題,但是通過基於博弈論準備非常簡單的激勵結構,在塊鏈網路中實現作為分散式系統的同步。

在以太坊的情況下,由於塊生成的時間很短,因此傾向於發生更多的分叉。關於這一點,通過採用unkle塊的概念,我們實現了一種結構,即使產生不合法的鏈條也會給予一定的獎勵。

將來引入未來的PoS允許優先生成具有大硬幣保持量的節點的塊作為引導者。這是一種解決/改善PoW中必要電量變得巨大且易受51%攻擊的問題的演算法。這是一種基於博弈論的選舉演算法,如果一個節點持有大量硬幣,就不會採取破壞網路等惡意行為。

BFT和領導者選擇演算法

BFT類型演算法的問題在於如何選擇將投票給塊生成的領導者作為Proposer或Orderer。

在PBFT採取的HyperLedger當中,原為可信賴的機構才會註冊為Orderer。 但這是集中式的領導者選擇方法,與分散式系統存在著明顯的區別。

Tendermint協議當中,領導者以迴圈方式被選出,以通過與不同驗證者的輪換交替來提出建議。 此時,領導候選者是基於PoS,並且可以說是可以在分散式系統中實現領導者選擇的演算法之一。

 


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

-Advertisement-
Play Games
更多相關文章
  • 本文章為本人原創,適合於剛入坑C語言,對於指針的定義和用法模糊不清的同學,如有不正,請各位指出。 從根本來說,指針變數也是變數,只是int變成了int *,以此類推。只不過指針變數裡面放的內容是普通變數在存儲空間的地址(某種奇怪的16進位地址格式,感興趣可自行百度) 定義指針變數的格式:int/do ...
  • 記錄 編碼約定 學習過程。 命名空間約定 如果沒有使用using指令,項目也沒有預設導入合適的命名空間,訪問這些命名空間或者類型時,則需要“完全限定名稱”。 namespace ConsoleApp4 { class Program { static void Main(string[] args) ...
  • 除基於屬性的動畫系統外,WPF提供了一種創建基於幀的動畫的方法,這種方法只使用代碼。需要做的全部工作是響應靜態的CompositionTarge.Rendering事件,觸發該事件是為了給每幀獲取內容。這是一種非常低級的方法,除非使用標準的基於屬性的動畫模型不能滿足需要(例如,構建簡單的側邊滾動游戲 ...
  • 事件的基本使用 聲明一個事件很簡單,只需在聲明一個委托對象時加上event關鍵字就行。如下: public delegate void PriceChangedHandler (decimal oldPrice, decimal newPrice);public class IPhone6 { pu ...
  • 如果要擴展LINQ查詢方法集,只需要為IEnumerable<T>擴展方法。 第一種:擴展聚合方法,類似已有的Max、Min,可以給具體類型擴展,也可以給泛型擴展。 using System; using System.Collections; using System.Collections.Ge ...
  • 場景:動態庫UFileDev(運行時版本v4.0.30319)內置方法調用了動態庫ICSharpCode.SharpZipLib(運行時版本v2.0.50727)。調用動態庫UFileDev過程中一直報錯如下: Pre-bind state information LOG: DisplayName ...
  • 前言 Linq 是 C# 中一個非常好用的集合處理庫,用好了能幫我們簡化大量又臭又長的嵌套迴圈,使處理邏輯清晰可見。EF 查詢主要也是依賴 Linq。但是 Linq 相對 sql 也存在一些缺點,最主要的就是動態構造查詢的難度。sql 只需要簡單進行字元串拼接,操作難度很低(當然出錯也相當容易),而 ...
  • /// <summary> /// 財政部mca /// http://www.mca.gov.cn/article/sj/xzqh/1980/ /// https://github.com/zzzprojects/html-agility-pack /// https://github.com/l ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...