精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

基于Etcdserver包將自己的Go程序打造成高可用系統

開發 前端
本文就給大家演示下,如何自己動手,從零開始基于Raft協議來改造我們的已有系統。很多同學都知道Raft協議是一種分布式一致性算法。

背景

我們每一個系統開發人員都希望自己的程序永遠不宕機,高可用是很多系統的目標。那我們如何把自己的系統改造成高可用的系統呢?帶著這個問題,本文就給大家演示下,如何自己動手,從零開始基于raft協議來改造我們的已有系統。很多同學都知道Raft協議是一種分布式一致性算法。從用戶的角度出發,它提供給程序設計人員的功能主要有以下2個方面

  1. 它提供了一個全局一致的存儲狀態,這樣我們的程序就可以通過它在多個節點上存儲信息
  2. 它提供了容錯的功能,當leader不可用后,系統自動開始選舉新的leader.而且每個節點知道自己的身份是follower還是leader.這樣我們就可以利用這個功能實現讀寫分離。

當然很多同學講到,我們可以直接部署高可用的分布式鍵值存儲系統etcd,它本身具有高可用、高并發、一致性等特點,已經被廣泛應用于云計算、微服務、容器等領域了,是很多云原生系統的底層基石之一。但是大家很快發現這樣做又增加了我們系統的依賴,所以本文給出的解決方案是直接采用etcdserver包(go.etcd.io/etcd/server/v3/etcdserver是etcd的Go語言實現,提供了etcd服務器的主要功能,包括集群管理、數據存儲、數據同步等)本文接下來的內容主要分為2部分,首先介紹下etcdserver的使用,然后以一個例子闡述下如何引用etcdserver包來實現高可用的系統的構建,這種構建方法不依賴于外部第三方的組件,所以它的分發與部署是比較輕便與簡單的。由于內容比較多,所以就暫定分兩期來介紹。

通過embed啟動etcdserver

我們通過go.etcd.io/etcd/server/v3/embed這個包來快速啟動集成的etcdserver。

package main

import (
   _ "context"
   "go.etcd.io/etcd/server/v3/embed"
   "log"
)

func main() {
   cfg := embed.NewConfig()
   cfg.Dir = "/Users/dongluyang1/Documents/workspace/toutiao/etcdserversample" //etcd 數據存儲的目錄,用于持久化存儲 etcd 數據。
   cfg.WalDir = ""
   cfg.Name = "test" //節點名稱
   cfg.InitialCluster = "test=http://localhost:2380" //集群名稱
   cfg.ClusterState = embed.ClusterStateFlagNew //etcd 集群的初始狀態,可以是 new 或 existing。當設置為 new 時,將啟動一個新的 etcd 集群;當設置為 existing 時,將加入一個已經存在的 etcd 集群。
   cfg.AutoCompactionMode = "periodic"
   cfg.AutoCompactionRetention = "1"
   cfg.QuotaBackendBytes = 8 * 1024 * 1024 * 1024

   e, err := embed.StartEtcd(cfg)
   if err != nil {
      log.Fatalf("Failed to start etcd: %v", err)
   }
   defer e.Close()
  
   select {} //阻止主程序退出,導致etcdserver退出
}

上面的cfg參數通過StartEtcd方法傳入embed,如下所示,實際上它的值最終傳給config.ServerConfig來實現對etcdserver的配置。

embed.NewConfig的值傳給了config.ServerConfig來控制etcdserver的配置

我們上面的代碼簡單的給出了常用的配置,下面具體給出配置的含義

go.etcd.io/etcd/server/v3/config 包中的 serverConfig 結構體包含了 etcd 服務器的配置信息,以下是該結構體中各個參數的含義:

  • Name: etcd 集群中當前節點的名稱,可以是任何字符串,建議為集群中唯一的名稱。
  • DataDir:etcd 數據存儲的目錄,用于持久化存儲 etcd 數據。
  • ListenClientUrls: etcd 服務器監聽客戶端請求的 URL 地址,支持多個 URL,以逗號分隔。例如:http://localhost:2379,http://localhost:4001。不填默認2379
  • ListenPeerUrls: etcd 服務器監聽節點之間通信的 URL 地址,支持多個 URL,以逗號分隔。例如:http://localhost:2380,http://localhost:7001。不填默認2380
  • InitialCluster: etcd 集群中所有節點的信息,以 name=URL 的形式表示,各節點信息之間以逗號分隔。例如:node1=http://localhost:2380,node2=http://localhost:7001。
  • InitialClusterState: etcd 集群的初始狀態,可以是 new 或 existing。當設置為 new 時,將啟動一個新的 etcd 集群;當設置為 existing 時,將加入一個已經存在的 etcd 集群。
  • InitialClusterToken: etcd 集群的唯一標識符,用于區分不同的 etcd 集群。當啟動一個新的 etcd 集群時,需要指定一個唯一的標識符。
  • AutoCompactionRetention: etcd 自動壓縮功能的保留時間,以天為單位。當 etcd 啟用自動壓縮功能時,將保留指定天數內的數據,過期數據將被刪除。
  • AutoCompactionMode: etcd 自動壓縮功能的模式,可以是 periodic 或 revision。當設置為 periodic 時,將按時間間隔壓縮數據;當設置為 revision 時,將按事務數壓縮數據。

客戶端訪問etcdserver

cli, err := clientv3.New(clientv3.Config{
   Endpoints:   []string{"localhost:2379"},
   DialTimeout: 5 * time.Second,
})
go func() {
   if err == nil {
      for {
         _, err = cli.Put(context.Background(), "yandaojiumozhi", fmt.Sprintf("mibao-%d", rand.Intn(100)))
         if err != nil {
            // handle error
         } else {
            resp, err := cli.Get(context.Background(), "yandaojiumozhi")
            if err != nil {
               // handle error
            }
            for _, ev := range resp.Kvs {
               fmt.Printf("%s : %s\n", ev.Key, ev.Value)
            }
         }
         time.Sleep(5 * time.Second)
      }
   }
}()
defer cli.Close()

上面的代碼簡單測試了,通過localhost:2379隨機寫入yandaojiumozhi,然后讀取這個key。

演示結果

上面的代碼使得我們不需要額外部署與維護第三方etcd組件,便可以再啟動我們后臺程序的同時通過embed啟動etcdserver來實現存儲了。

embed啟動etcdserver的邏輯

go.etcd.io/etcd/server/v3/etcdserver 包是 etcd 服務器的核心包,它包含了 etcd 服務器的所有核心邏輯。其中 EtcdServer 結構體是 etcd 服務器的核心,它負責管理 etcd 服務器的所有組件、監聽客戶端請求、處理事務和維護 etcd 數據庫等核心任務。這個包主要負責 etcd 服務器的啟動、停止和管理。而go.etcd.io/etcd/server/v3/embed 包則負責將go.etcd.io/etcd/server/v3/etcdserver 封裝到一個可嵌入的包中,使得在應用程序中嵌入 etcd 服務器變得更加容易。所以搞明白embed如何啟動的etcdserver,我們便可以直接在我們的代碼里面啟動etcdserver,這樣便可以有更大的靈活性來做一些功能。比如判斷是否是leader等。

embed啟動etcdserver的流程圖如下所示,它的核心是在2379,2380啟動監聽器,然后配置config.ServerConfig,以及調用NewServer,最后Start它。

embed創建并啟動etcdserver的流程

所以我們自己也可以寫一個embed,來創建并啟動etcdserver,然后通過下面的方法來判斷是不是leader。通過isLeader的判斷,來完成分布式環境下面的,不同角色自己該干的事情。

本期就先介紹這些,下一期給大家演示下分布式環境下的,節點加入,選舉等相關操作。

func check(srv *etcdserver.EtcdServer, ctx context.Context) {
   log.Info("start check LeaderChanged")
   for {
      select {
      case <-ctx.Done():
         log.Info("has Done")
         return
      case <-srv.LeaderChangedNotify():
         {
            log.Info("Leader changed")
           /*這個isLeader可以判斷當前節點是不是leader,如果是leader的話,可以做一些
           leader可以做的業務,比如它可以接受寫請求,其他的收到寫請求,都轉發leader
           */
            isLeader := srv.Leader() == srv.ID() 
           ......
         }

      }
   }
}

責任編輯:姜華 來源: 今日頭條
相關推薦

2011-05-30 09:44:48

FacebookiOSAndroid

2017-01-04 14:31:25

2018-07-29 23:09:15

Google Go技術

2018-09-13 10:11:42

思科網絡平臺

2021-06-07 19:26:50

WindowsDocker工作站

2020-01-18 15:02:48

技術研發指標

2022-03-14 15:06:15

數據戰略Cloudera混合云

2014-07-04 10:12:09

VimIDE

2011-06-29 09:45:44

網頁設計

2016-09-30 10:16:39

sublimeswift

2014-04-15 10:16:03

VMware

2021-10-28 22:32:39

比特幣基金金融

2019-06-27 09:05:29

操作系統Android 華為

2021-02-19 19:02:53

Material ShGNOME桌面Linux

2011-08-17 09:57:01

JavaScript

2009-08-02 09:01:24

Windows2008Windows7

2014-03-21 10:16:17

2025-08-20 07:00:00

IT領導CIO職業挑戰

2011-03-21 14:43:48

成功應用移動開發者

2010-08-05 14:36:01

Flipboard移動開發者
點贊
收藏

51CTO技術棧公眾號

九九九九九精品| 欧美激情久久久| 色啦啦av综合| 97影院秋霞午夜在线观看| 东方aⅴ免费观看久久av| 韩日精品中文字幕| 少妇真人直播免费视频| 亚洲国产天堂| 午夜精品免费在线观看| 天堂资源在线亚洲视频| 亚洲精品97久久中文字幕无码| 夜久久久久久| 久久成人一区二区| 免费看污黄网站在线观看| 青草综合视频| 欧美午夜激情小视频| 免费看av软件| 久香视频在线观看| 成人午夜碰碰视频| 国产一区香蕉久久| 精品人妻一区二区三区免费看| 在线看片不卡| 中文字幕日韩电影| 国产中文字幕一区二区| 天堂综合在线播放| 一本到不卡精品视频在线观看| 精品视频在线观看一区二区| aaa在线免费观看| 北岛玲一区二区三区四区| 国产日韩欧美视频在线| www.毛片.com| 亚洲精品三级| 欧美黄色性视频| 天天爽天天爽天天爽| 精品盗摄女厕tp美女嘘嘘| 亚洲第一视频网站| 韩国三级与黑人| 热久久久久久| 欧美天堂一区二区三区| 高清在线观看免费| www.九色在线| 亚洲1区2区3区视频| 成年人免费观看的视频| 国产高清视频免费最新在线| 91天堂素人约啪| 国产精品香蕉视屏| 成人h动漫精品一区二区无码| 蜜桃av一区二区| 国产精品第2页| 九九热最新视频| 久久一二三四| 国产成人91久久精品| 黄色在线免费观看| 老司机一区二区三区| 欧美性视频在线| 午夜精品三级久久久有码| 亚洲青涩在线| 69av成年福利视频| 久久不卡免费视频| 亚洲专区一区| 日本精品va在线观看| 免费黄色网址在线| 久久午夜av| 国产精品白丝jk喷水视频一区 | 网站在线你懂的| 国内欧美日韩| 欧美一级在线观看| 国产麻豆剧传媒精品国产| 中文字幕一区图| 精品处破学生在线二十三| 亚洲精品激情视频| 色吊丝一区二区| 一本大道亚洲视频| 永久免费观看片现看| 希岛爱理av一区二区三区| 欧美成年人视频网站| 国产亚洲欧美精品久久久久久| 激情婷婷久久| 国产精品成av人在线视午夜片| 亚洲视频久久久| 国产麻豆精品在线观看| 成人区精品一区二区| 青青草免费在线视频| 国产精品乱码久久久久久| 成年人免费观看的视频| 91av久久| 欧美图区在线视频| 国产精品二区视频| 日韩av网站在线免费观看| 自拍视频国产精品| 免费网站观看www在线观| 国产免费成人| 91精品久久久久久久久| 欧美一区,二区| 日本一区二区成人在线| 国产一级大片免费看| 乡村艳史在线观看| 欧美另类一区二区三区| 欧美xxxxx少妇| 欧美亚洲高清| 久久久久久欧美| 在线观看黄色网| 成人久久视频在线观看| 亚洲激情一区二区| 97人人在线视频| 欧美高清性hdvideosex| 国产毛片毛片毛片毛片毛片毛片| 91久久夜色精品国产按摩| 久久久中精品2020中文| 国产精品51麻豆cm传媒| 成人教育av在线| 一区二区三区四区欧美| 日本不卡网站| 日韩精品一区二| 长河落日免费高清观看| 99riav国产精品| 成人片在线免费看| 黄色网在线播放| 色婷婷av一区二区三区大白胸| 性生活一级大片| 成人精品视频| 欧美怡春院一区二区三区| 国产成人精品亚洲精品色欲| 中文字幕精品—区二区四季| 精品人妻一区二区三区四区在线| 日本成人手机在线| www.欧美免费| 最近中文字幕在线观看| 26uuuu精品一区二区| 国产一线二线三线女| 麻豆一区在线| 久久精品国产视频| 亚洲无码精品国产| 国产视频亚洲色图| 精品免费国产一区二区| 全国精品免费看| 国内久久久精品| 午夜精品久久久久久久91蜜桃| 中文字幕在线不卡视频| 高清一区在线观看| 欧美丝袜丝交足nylons172| 日本高清视频精品| 污污的视频网站在线观看| 亚洲一卡二卡三卡四卡五卡| 在线观看视频你懂得| 中文字幕人成人乱码| 5g国产欧美日韩视频| a毛片在线观看| 欧美一区午夜精品| 超碰手机在线观看| 国产精品一二三区在线| 免费极品av一视觉盛宴| 91国内精品白嫩初高生| 久久久久久久香蕉网| 欧美77777| 精品久久久在线观看| 人体私拍套图hdxxxx| 99视频一区| 欧美日韩精品中文字幕一区二区| 欧美黑人疯狂性受xxxxx野外| 亚洲欧美一区二区精品久久久| 天码人妻一区二区三区在线看| 久久久久免费观看| 国产精品视频分类| 我不卡伦不卡影院| 97免费高清电视剧观看| 九色91在线| 亚洲精品一区中文| 伊人影院中文字幕| 1024国产精品| 男人网站在线观看| 毛片一区二区| 青少年xxxxx性开放hg| 97久久精品| 欧美性受xxx| 永久av在线| 亚洲成人av资源网| 波多野结衣啪啪| 中文字幕欧美一区| 亚洲精品乱码久久| 日韩电影在线观看网站| 亚洲国产精品影视| 开心激情综合| 国产精品普通话| 青春草在线免费视频| 日韩精品在线观| 夜夜嗨aⅴ一区二区三区| 亚洲国产一区二区在线播放| 久久久视频6r| 国产mv日韩mv欧美| 一本久道综合色婷婷五月| 天天做天天爱天天综合网2021| 91视频婷婷| 99久久亚洲国产日韩美女| 欧美精品免费播放| 国产在线中文字幕| 精品少妇一区二区三区在线播放| 亚洲黄色三级视频| 亚洲精品乱码久久久久久日本蜜臀| 亚洲欧洲国产视频| 蜜桃一区二区三区在线| 欧美一级欧美一级| 婷婷精品进入| 欧美在线3区| 国产毛片精品| 国产精品www网站| 欧美在线极品| 欧美日韩高清区| 色哟哟免费在线观看| 国产丝袜一区视频在线观看| 99久久婷婷国产一区二区三区| 日韩欧中文字幕| 久久精品无码人妻| 亚洲色图清纯唯美| 一区二区三区伦理片| 成人av在线网站| 欧美人与性动交α欧美精品| 日本中文一区二区三区| 97国产精东麻豆人妻电影| 欧美日韩三级| 综合视频在线观看| 色综合久久网| 视频在线观看成人| 亚洲区小说区| 久久五月天婷婷| 老汉色老汉首页av亚洲| 亚洲自拍av在线| 成人动漫视频在线观看| 国产精品视频白浆免费视频| videos性欧美另类高清| 91精品国产成人| www中文字幕在线观看| 欧美人成在线视频| 黄视频在线观看网站| 最好看的2019年中文视频| 国产精品久久久久久久龚玥菲 | 一区二区三区福利| 日韩精品一区二区免费| 一区二区免费不卡在线| 最新不卡av| 99成人超碰| 免费看av软件| 欧美一区二区三区久久精品茉莉花| 亚洲精品国产一区| 色135综合网| 一区二区视频在线播放| 欧美国产小视频| 亚洲综合av一区| 我不卡伦不卡影院| 强开小嫩苞一区二区三区网站| 五月天久久久| 色婷婷777777仙踪林| 国产精品videosex极品| 亚洲精品天堂成人片av在线播放| 亚洲综合五月| 黄色一级片黄色| 亚洲国产黄色| 爆乳熟妇一区二区三区霸乳| 免费看欧美美女黄的网站| 污污网站在线观看视频| 国产在线一区二区| 黑人巨大猛交丰满少妇| 不卡在线视频中文字幕| 无码人妻精品一区二区三区温州| 久久影院午夜片一区| 精品人伦一区二区| 成人欧美一区二区三区白人| 久久人人爽人人爽人人| 五月激情六月综合| 中文字幕一区二区三区四区欧美| 欧美三级电影一区| 精品人妻伦一二三区久久 | 亚洲美女黄网| 美女福利视频在线| 精品综合久久久久久8888| 女人扒开双腿让男人捅| 26uuu亚洲综合色欧美| 欧美精品日韩在线| 一区二区三区四区五区视频在线观看 | 人人爽人人av| 极品尤物av久久免费看| 人妻激情偷乱频一区二区三区 | 日韩精品资源| 91精品成人| www.com毛片| 久久av老司机精品网站导航| 动漫av在线免费观看| 国产欧美一区二区精品性色| 国产免费无码一区二区视频| 欧美性色19p| 国产日韩一级片| 亚洲乱码国产乱码精品精天堂 | 66m—66摸成人免费视频| 激情中国色综合| 国产精品一区二区免费| 日韩不卡一区| 日韩欧美一区三区| 国产在线精品一区二区不卡了| 强迫凌虐淫辱の牝奴在线观看| 国产精品美女视频| 日韩三级av在线| 欧美一区二区三区四区高清| 麻豆导航在线观看| 久久久中精品2020中文| 在线成人免费| 日韩福利一区二区三区| 日韩午夜在线| 永久av免费在线观看| 国产亚洲福利社区一区| 久久精品久久国产| 欧美一区二区三区啪啪| 九九热视频在线观看| 欧美黄色性视频| 亚洲视频自拍| 天堂精品视频| 日韩专区一卡二卡| 日韩www视频| 亚洲综合成人网| 国产女人高潮毛片| 中文字幕亚洲在线| 户外露出一区二区三区| 久久影院理伦片| 夜夜嗨一区二区| 中文字幕 日本| 亚洲制服丝袜av| jizz中国少妇| www国产精品com| 免费成人黄色网| 午夜精品美女久久久久av福利| 性色av一区二区怡红| 人人妻人人澡人人爽人人精品| 亚洲成人第一页| 日韩中文字幕影院| 欧美精品国产精品日韩精品| 日韩精品久久久久久久软件91 | 免费看的黄色欧美网站| 国产一线在线观看| 亚洲一二三四区不卡| www五月婷婷| 色综合久综合久久综合久鬼88 | 成人性生交大合| 国产一级片网址| 亚洲国产另类 国产精品国产免费| 一区二区三区伦理| 成人在线观看av| 亚洲福利久久| www.超碰97| 色综合天天综合网天天狠天天| 欧美捆绑视频| 国产精品户外野外| 国产精品传媒精东影业在线| 色偷偷中文字幕| 亚洲欧美一区二区三区久本道91| 国产美女免费视频| 欧美刺激性大交免费视频| xxxxxhd亚洲人hd| 欧美亚洲国产成人| 国产色婷婷亚洲99精品小说| 中文字幕在线日本| 日韩在线播放一区| 亚洲国产精选| www.好吊操| 久久久精品一品道一区| 少妇又紧又色又爽又刺激视频| 久久精品国产一区二区电影| 亚洲精品一区二区三区中文字幕| 欧日韩免费视频| 国产人成亚洲第一网站在线播放| 中文资源在线播放| 超碰日本道色综合久久综合 | 国产乱对白刺激视频不卡| 欧美精品videos极品| 日韩av在线播放资源| 日本综合视频| 奇米777四色影视在线看| 97精品国产露脸对白| 久久久久久av无码免费看大片| 久久精品成人欧美大片| 国产精品传媒| 日本在线视频www| 亚洲欧洲av在线| 天堂成人在线视频| 国产精品自拍网| 国产精品多人| 非洲一级黄色片| 精品久久久久久久久久久久久久久 | 黄网站app在线观看| 激情伦成人综合小说| 美女爽到高潮91| 国产精品99re| 日韩中文字幕在线精品| 伦理一区二区| 中文字幕丰满乱码| 欧美日韩裸体免费视频| 国产精品剧情一区二区在线观看| 精品国产乱码久久久久软件| 九九视频精品免费| 亚洲免费在线观看av| www.日韩av.com| 精品国产中文字幕第一页 |