.NET中大型項目開發必備(1)--分布式唯一Id


前言:本系列文章適合有初/中級.NET知識的同學閱讀。
(1)本系列文章,旨在講述研發一個中大型項目所需要了解的一系列“基本構件”,並提供這些“基本構件”的【最簡單】、【最快速】使用方法!!(並不深究技術原理)
(2)通過閱讀本系列文章,能讓你在正規“項目研發”方面快速入門+進階,並能達成“小團隊構建大網站”的目的。
(3)本系列文章采用的技術,已成功應用到人工智能、產業互聯網、社區電商、游戲、金融風控、智慧醫療、等項目上。

 

支持.Net/.Net Core/.Net Framework,可以部署在Docker, Windows, Linux, Mac。

分布式唯一Id,顧名思義,是指在全世界任何一台計算機上都不會重復的唯一Id。

在單機/單服務器/單數據庫的小型應用中,不需要用到這類東西。但在高並發、海量數據、大型分布式應用中,分布式唯一Id卻是構建整個系統的最核心一環。

 

設想一下如下場景:

在某個大型電商系統A中,“訂單”這類大數據(比如,每天產生1500萬條訂單)必定不會存儲在1台數據庫服務器中,而是分布式的存儲在多台數據庫服務器組成的一個集群中(比如,1000台數據庫服務器組成一個集群)。由於海量數據+高並發等特性時常會伴隨“訂單”發生,所以,如何確保“訂單Id”在整個系統中唯一不重復,已經有些設計難度了。

 

若此時,另外一家公司的電商系統B,要與你家的電商系統A合並(甚至還有更多公司的C、D、E、等等),那么這些系統合並時“訂單Id”出現重復的概率是很大的。要把這些重復修改成唯一,又會要費一番不小的改造功夫,十分麻煩…

 

 

但是,若我們一開始就使用分布式唯一Id來實現“訂單Id”,則不會有這些麻煩,一切迎刃而解,且十分輕松…

 

DeveloperSharp包中,提供了全網最完善的分布式唯一Id生成工具,使用示例如下:

若是在.Net Core環境下,代碼如下:

using DeveloperSharp.Framework.CoreUtility; //從NuGet引用DeveloperSharp包
--------------------------

   //首先在Startup.cs或Program.cs文件中進行工具預載
   Services.AddTransient<IUtility, Utility>();
--------------------------

   //IU是在相關文件中,通過依賴注入方式獲取的IUtility類型對象
   var Id = IU.GenerateId("Order");//產生分布式唯一Id

若是在.Net Framework環境下,代碼如下:

using DeveloperSharp.Framework.CoreUtility;//從NuGet引用DeveloperSharp包
------------------------

     IUtility IU = new Utility();
     var Id = IU.GenerateId("Order");//產生分布式唯一Id

說明:(1)“分布式唯一Id”的長度較長,具有全球唯一性,最早起源於facebook、twitter的應用。

           (2)“分布式唯一Id”比GUID更好。GUID在分布式、高並發環境下偶爾還是會有重復出現,而且它是無序的,會導致數據庫查詢性能下降,而“分布式唯一Id”是相對有序的。

           (3)網上自稱分布式唯一Id、GUID、雪花Id、等的工具有很多,但它們生成的Id一般實現不了“全球唯一性”。文本是極少數真正意義上能實現“全球唯一性”的Id工具。

經驗:其實,無論是單機小型應用,還是多機大型分布式應用,從今天開始,你都應采用“分布式唯一Id”作為數據庫中、每個表的“主鍵”。因為與所謂可讀性、長短、自增Id比起來,它的擴展性好太多、太多... 

 

GenerateId方法詳細說明如下:

GenerateId(Async)

聲明:string GenerateId(string Prefix)

用途:生成主鍵Id (此處生成的是一種分布式唯一Id)

參數:(1string Prefix  --  前綴詞

返回:String   --  主鍵Id

 

推薦閱讀


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM