成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

【C#|.NET】分布式鎖服務

開發 后端 分布式
分布式鎖服務在大家的項目中或許用的不多,因為大家都把排他放在數據庫那一層來擋。當大量的行鎖、表鎖、事務充斥著數據庫的時候,不如換個角度思考問題。一般web應用很多的瓶頸都在數據庫上,這里給大家介紹的是減輕數據庫鎖負擔的一種方案。

背  景

分布式鎖服務在大家的項目中或許用的不多,因為大家都把排他放在數據庫那一層來擋。當大量的行鎖、表鎖、事務充斥著數據庫的時候,不如換個角度思考問題。一般web應用很多的瓶頸都在數據庫上,這里給大家介紹的是減輕數據庫鎖負擔的一種方案。


簡  介

如果我們的需求很簡單,例如對于用戶的賬戶資金,要保證原子性操作。并且不同的客戶端在同一時間內只能提交一個對象操作。lock、單例?!在單臺上還可以,但是大型web項目上,負載均衡是常用的技術手段手段,同一意義的對象可能存在不同的副本,這時我們又如何保證排他操作。數據庫的事務!除了這個,接下來我們引出本章的主題、分布式鎖服務。

一個簡單的鎖服務實現起來并不難,甚至利用memcache很快就能構造一套分布式鎖系統。我們只需要在操作對象時寫入kv鍵值對,操作完畢時釋放kv,在讀取對象時判斷kv中是否有數據就可以了,我們甚至還可以給它一個默認的釋放時間。

這是一種解決方案,但是如果我們的要求更高一點,我們需要權限認證(例如只能來自xxx域名的請求)、需要上下級節點關聯(例如一個用戶的資金賬戶被鎖住,同時鎖住他的購物車、積分等)、需要監視器回調、甚至需要考慮單點故障問題。那么,蟲子在這里推薦另一套方案----zookeeper。


zookeeper

官方文檔:http://zookeeper.apache.org/doc/r3.3.2/zookeeperOver.html#ch_DesignOverview

下載:http://zookeeper.apache.org/releases.html

Zookeeper是Hadoop中的一個模塊。是一個分布式的,開源的分布式應用程序協調服務,用它可以來現同步服務,配置維護。

更多的內容大家看文檔吧或者直接網上搜一下,理論性的內容寫多了讓人困。我們直接看實踐。


性能篇

服務器ubuntu (虛擬機一臺)

客戶端window2003

服務端安裝好java環境 然后跟著官方的介紹部署

啟動zkserver

我們測試下鎖服務相關的操作

ps:試下本機的windows2003  因為是本地環境 不于上面做對比 僅看看zookeeper本身的數據處理效率


功能篇

一張圖就可以介紹完普通功能

再看下watcher

  1. public class MyWatch : IWatcher  
  2.     {  
  3.         public void Process(WatchedEvent qevent)  
  4.         {  
  5.             Console.WriteLine("this is MyWatch");  
  6.         }       
  7.     }  
  8. public class MyWatch2 : IWatcher  
  9.     {  
  10.         public void Process(WatchedEvent qevent)  
  11.         {  
  12.             Console.WriteLine("this is MyWatch2");  
  13.         }     
  14.     } 

創建連接時 new ZooKeeper("192.168.206.129:2181", new TimeSpan(0, 0, 0, 4000), new MyWatch());

檢查是否存在時zk.Exists(Dir, new MyWatch2());

獲取數據時zk.GetData(Dir, new MyWatch2(), stat);

我們再運行一遍之前的demo  去掉delete操作

加上delete操作


淺  析

創建連接:

  1. 獲取服務主機列表
  2. 設置超時時間
  3. 注冊客戶端事件
  4. 以線程安全的方式創建請求連接(啟動客戶端請求隊列,循環隊列基于socket通信、根據請求類型執行不同的請求動作)

請求流程:

構造請求頭、構造request,reponse、構造響應頭、構造Packet對象,packet對象準備好后,把整個對象放入一個outgoingQueue
packet被放入outgoingQueue中,等待SendThread把packet對應的內容發送給server。server處理分3步在 doio方法中ReadLength ReadConnectResult ReadResponse,直到ReadResponse方法中確定packet請求結束。

響應流程:

針對心跳的ping請求的resp,針對auth請求的resp,一般接口請求的resp,如果接口請求要求了watcher,當watcher關注的內容有變化時的notification

鎖相關部分API方法:

創建節點:create

demo:zk.Create(Dir, severname.GetBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.Persistent);

其中CreateMode分為4類Persistent、PersistentSequential、Ephemeral、EphemeralSequential

PERSISTENT 創建持久化節點,對應機器關閉連接后節點/數據不會消失

PERSISTENT_SEQUENTIAL 如果PATH是以’/’結尾則以這個PATH作為父節點,創建一個子節點,其子節點名字是一個按先后順序排列的數值;否則創建一個名字是‘/’后面字符加上先后順序排列的數值字符串的節點,同樣創建持久節點

EPHEMERAL 創建瞬時節點,Zookeeper在感知連接機器宕機后會清除它創建的瞬時節點

EPHEMERAL_SEQUENTIAL 穿件瞬時順序節點,和PERSISTENT_SEQUENTIAL一樣,區別在于它是瞬時的

刪除節點 delete

demo :zk.Delete(Dir, -1);

前一個參數代表節點名稱(一般用作路徑),后一個是版本號 -1表示全匹配

查看節點 exists

demo : zk.Exists(Dir, new MyWatch2());

獲取數據 getData 

demo :zk.GetData(Dir, new MyWatch2(), stat);

獲取一個節點的數據,可注入watcher 

設置數據 setData 

demo : zk.SetData(Dir, new byte[1], 1);

獲取下級節點集合 GetChildren

demo :zk.GetChildren(Dir, true);

存  儲

znodes類似文件和目錄。但它不是一個典型的文件系統,zookeeper數據保存在內存中,這意味著zookeeper可以實現高吞吐量和低延遲。

watcher

Zookeeper有兩種watches,一種是data watches,另一種是child watches。其中,getData()和exists()以及create()等會添加data watches,getChildren()會添加child watches。而delete()涉及到刪除數據和子節點,會同時觸發data watches和child watches。

詳細可以參考:http://www.geminikwok.com/2011/09/08/%E6%B5%85%E8%B0%88zookeeper-watch%E4%BA%8B%E4%BB%B6/

算  法

Paoxs算法 本篇中僅用單臺server做demo 改個時間詳細介紹下Paoxs


本篇先到此 希望對大家有幫助

原文鏈接:http://dubing.blog.51cto.com/3911153/791464

【編輯推薦】

  1. C#數組排序與對象大小比較
  2. 把C#.NET程序移植到DB2上的經驗淺談
  3. 淺談C#閉包的相關原理
  4. 再議C#方法中的反射方式和委托方式
  5. 淺析C#運行時相互關系
責任編輯:林師授 來源: 熬夜的蟲子的博客
相關推薦

2015-09-21 09:20:11

C#Couchbase使用

2019-06-19 15:40:06

分布式鎖RedisJava

2018-07-17 08:14:22

分布式分布式鎖方位

2022-08-04 08:45:50

Redisson分布式鎖工具

2019-02-26 09:51:52

分布式鎖RedisZookeeper

2021-07-16 07:57:34

ZooKeeperCurator源碼

2018-11-27 16:17:13

分布式Tomcat

2023-05-29 14:07:00

Zuul網關系統

2021-11-26 06:43:19

Java分布式

2015-08-17 09:48:29

C#客戶端分布式緩存

2021-07-06 08:37:29

Redisson分布式

2023-08-21 19:10:34

Redis分布式

2023-09-22 08:00:00

分布式鎖Redis

2017-10-24 11:28:23

Zookeeper分布式鎖架構

2022-01-06 10:58:07

Redis數據分布式鎖

2021-10-25 10:21:59

ZK分布式鎖ZooKeeper

2024-11-28 15:11:28

2024-05-06 00:00:00

.NET分布式鎖技術

2024-07-08 07:30:47

2011-05-11 16:42:21

.NET Remoti
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久久国产一区二区三区 | h在线免费观看 | 97久久久久久久久 | 日韩中文字幕 | 欧美一级大片 | 国产精品久久久久久久久久久久 | 在线国产一区二区 | 91视频网址| 欧美日韩一本 | 欧美日韩视频在线第一区 | 亚洲精品乱码久久久久久久久久 | 中文字幕一区二区三区四区 | 欧美网址在线观看 | 久久精品视频亚洲 | 久久久国产一区二区三区四区小说 | 国产精品国产三级国产aⅴ无密码 | 国产精品a久久久久 | 免费在线成人 | 亚洲国产日韩欧美 | 久久久久久毛片免费观看 | 亚洲欧美日韩激情 | 在线观看国产 | 国产精品久久久久久久久久久新郎 | 国产亚洲精品精品国产亚洲综合 | 国产午夜精品一区二区三区嫩草 | 亚州综合在线 | 午夜成人免费视频 | 亚洲成人国产精品 | 久久综合一区 | 国产美女黄色片 | 国产成人亚洲精品 | 日韩欧美理论片 | 日本三级网站在线观看 | 国产精品99久久久精品免费观看 | 男人天堂网站 | 欧美日韩免费视频 | 国产在线精品一区二区三区 | 久久久av一区 | 中文字幕一区在线观看视频 | 美女黄色在线观看 | 久久99视频免费观看 |