.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

 

推荐阅读

posted on 2022-01-19 23:50  DeveloperSharp  阅读(1729)  评论(0编辑  收藏  举报

导航