1. 程式人生 > >(轉載)ZooKeeper學習第一期---Zookeeper簡單介紹

(轉載)ZooKeeper學習第一期---Zookeeper簡單介紹

一、分散式協調技術

在給大家介紹ZooKeeper之前先來給大家介紹一種技術——分散式協調技術。那麼什麼是分散式協調技術?那麼我來告訴大家,其實分散式協調技術 主要用來解決分散式環境當中多個程序之間的同步控制,讓他們有序的去訪問某種臨界資源,防止造成”髒資料”的後果。這時,有人可能會說這個簡單,寫一個調 度演算法就輕鬆解決了。說這句話的人,可能對分散式系統不是很瞭解,所以才會出現這種誤解。如果這些程序全部是跑在一臺機上的話,相對來說確實就好辦了,問 題就在於他是在一個分散式的環境下,這時問題又來了,那什麼是分散式呢?這個一兩句話我也說不清楚,但我給大家畫了一張圖希望能幫助大家理解這方面的內 容,如果覺得不對儘可拍磚,來咱們看一下這張圖,如圖1.1所示。

圖 1.1 分散式系統圖

給大家分析一下這張圖,在這圖中有三臺機器,每臺機器各跑一個應用程式。然後我們將這三臺機器通過網路將其連線起來,構成一個系統來為使用者提供服務,對使用者來說這個系統的架構是透明的,他感覺不到我這個系統是一個什麼樣的架構。那麼我們就可以把這種系統稱作一個分散式系統

那我們接下來再分析一下,在這個分散式系統中如何對程序進行排程,我假設在第一臺機器上掛載了一個資源,然後這三個物理分佈的程序都要競爭這個資源,但我們又不希望他們同時進行訪問,這時候我們就需要一個協調器,來讓他們有序的來訪問這個資源。這個協調器就是我們經常提到的那個,比如說”程序-1”在使用該資源的時候,會先去獲得鎖,”程序1”獲得鎖以後會對該資源保持獨佔

,這樣其他程序就無法訪問該資源,”程序1”用完該資源以後就將鎖釋放掉,讓其他程序來獲得鎖,那麼通過這個鎖機制,我們就能保證了分散式系統中多個程序能夠有序的訪問該臨界資源。那麼我們把這個分散式環境下的這個鎖叫作分散式鎖。這個分散式鎖也就是我們分散式協調技術實現的核心內容,那麼如何實現這個分散式呢,那就是我們後面要講的內容。

二、分散式鎖的實現

好我們知道,為了防止分散式系統中的多個程序之間相互干擾,我們需要一種分散式協調技術來對這些程序進行排程。而這個分散式協調技術的核心就是來實現這個分布式鎖。那麼這個鎖怎麼實現呢?這實現起來確實相對來說比較困難的。

1.1 面臨的問題

在看了圖1.1所示的分散式環境之後,有人可能會感覺這不是很難。無非是將原來在同一臺機器上對程序排程的原語,通過網路實現在分散式環境中。是的,表面上是可以這麼說。但是問題就在網路這,在分散式系統中,所有在同一臺機器上的假設都不存在:因為網路是不可靠的。

比如,在同一臺機器上,你對一個服務的呼叫如果成功,那就是成功,如果呼叫失敗,比如丟擲異常那就是呼叫失敗。但是在分散式環境中,由於網路的不可 靠,你對一個服務的呼叫失敗了並不表示一定是失敗的,可能是執行成功了,但是響應返回的時候失敗了。還有,A和B都去呼叫C服務,在時間上 A還先呼叫一些,B後呼叫,那麼最後的結果是不是一定A的請求就先於B到達呢? 這些在同一臺機器上的種種假設,我們都要重新思考,我們還要思考這些問題給我們的設計和編碼帶來了哪些影響。還有,在分散式環境中為了提升可靠性,我們往 往會部署多套服務,但是如何在多套服務中達到一致性,這在同一臺機器上多個程序之間的同步相對來說比較容易辦到,但在分散式環境中確實一個大難題。

所以分散式協調遠比在同一臺機器上對多個程序的排程要難得多,而且如果為每一個分散式應用都開發一個獨立的協調程式。一方面,協調程式的反覆編寫浪 費,且難以形成通用、伸縮性好的協調器。另一方面,協調程式開銷比較大,會影響系統原有的效能。所以,急需一種高可靠、高可用的通用協調機制來用以協調分 布式應用。

1.2 分散式鎖的實現者

目前,在分散式協調技術方面做得比較好的就是Google的Chubby還有Apache的ZooKeeper他們都是分散式鎖的實現者。有人會問 既然有了Chubby為什麼還要弄一個ZooKeeper,難道Chubby做得不夠好嗎?不是這樣的,主要是Chbby是非開源的,Google自家 用。後來雅虎模仿Chubby開發出了ZooKeeper,也實現了類似的分散式鎖的功能,並且將ZooKeeper作為一種開源的程式捐獻給了 Apache,那麼這樣就可以使用ZooKeeper所提供鎖服務。而且在分散式領域久經考驗,它的可靠性,可用性都是經過理論和實踐的驗證的。所以我們 在構建一些分散式系統的時候,就可以以這類系統為起點來構建我們的系統,這將節省不少成本,而且bug也 將更少。

三、ZooKeeper概述

ZooKeeper是一種為分散式應用所設計的高可用、高效能且一致的開源協調服務,它提供了一項基本服務:分散式鎖服務。由於ZooKeeper的開源特性,後來我們的開發者在分散式鎖的基礎上,摸索了出了其他的使用方法:配置維護、組服務、分散式訊息佇列分散式通知/協調等。

注意:ZooKeeper效能上的特點決定了它能夠用在大型的、分散式的系統當中。從可靠性方面來說,它並不會因為一個節點的錯誤而崩潰。除此之外,它嚴格的序列訪問控制意味著複雜的控制原語可以應用在客戶端上。ZooKeeper在一致性、可用性、容錯性的保證,也是ZooKeeper的成功之處,它獲得的一切成功都與它採用的協議——Zab協議是密不可分的,這些內容將會在後面介紹。

前面提到了那麼多的服務,比如分散式鎖、配置維護、組服務等,那它們是如何實現的呢,我相信這才是大家關心的東西。ZooKeeper在實現這些服務時,首先它設計一種新的資料結構——Znode,然後在該資料結構的基礎上定義了一些原語,也就是一些關於該資料結構的一些操作。有了這些資料結構和原語還不夠,因為我們的ZooKeeper是工作在一個分散式的環境下,我們的服務是通過訊息以網路的形式傳送給我們的分散式應用程式,所以還需要一個通知機制——Watcher機制。那麼總結一下,ZooKeeper所提供的服務主要是通過:資料結構+原語+watcher機制,三個部分來實現的。那麼我就從這三個方面,給大家介紹一下ZooKeeper。

四、ZooKeeper資料模型

4.1 ZooKeeper資料模型Znode

ZooKeeper擁有一個層次的名稱空間,這個和標準的檔案系統非常相似,如下圖3.1 所示。

圖4.1 ZooKeeper資料模型與檔案系統目錄樹

從圖中我們可以看出ZooKeeper的資料模型,在結構上和標準檔案系統的非常相似,都是採用這種樹形層次結構,ZooKeeper樹中的每個節點被稱為—Znode。和檔案系統的目錄樹一樣,ZooKeeper樹中的每個節點可以擁有子節點。但也有不同之處:

(1) 引用方式

Zonde通過路徑引用,如同Unix中的檔案路徑。路徑必須是絕對的,因此他們必須由斜槓字元來開頭。除此以外,他們必須是唯一的,也就是說每一個路徑只有一個表示,因此這些路徑不能改變。在ZooKeeper中,路徑由Unicode字串組成,並且有一些限制。字串”/zookeeper”用以儲存管理資訊,比如關鍵配額資訊。

(2) Znode結構

ZooKeeper名稱空間中的Znode,兼具檔案和目錄兩種特點。既像檔案一樣維護著資料、元資訊、ACL、時間戳等資料結構,又像目錄一樣可以作為路徑標識的一部分。圖中的每個節點稱為一個Znode。 每個Znode由3部分組成:

stat:此為狀態資訊, 描述該Znode的版本, 許可權等資訊

data:與該Znode關聯的資料

children:該Znode下的子節點

ZooKeeper雖然可以關聯一些資料,但並沒有被設計為常規的資料庫或者大資料儲存,相反的是,它用來管理排程資料,比如分散式應用中的配置檔案資訊、狀態資訊、彙集位置等等。這些資料的共同特性就是它們都是很小的資料,通常以KB為大小單位。ZooKeeper的伺服器和客戶端都被設計為嚴格檢查並限制每個Znode的資料大小至多1M,但常規使用中應該遠小於此值。

(3) 資料訪問

ZooKeeper中的每個節點儲存的資料要被原子性的操作。也就是說讀操作將獲取與節點相關的所有資料,寫操作也將替換掉節點的所有資料。另外,每一個節點都擁有自己的ACL(訪問控制列表),這個列表規定了使用者的許可權,即限定了特定使用者對目標節點可以執行的操作。

(4) 節點型別

ZooKeeper中的節點有兩種,分別為臨時節點永久節點。節點的型別在建立時即被確定,並且不能改變。

① 臨時節點:該節點的生命週期依賴於建立它們的會話。一旦會話(Session)結束,臨時節點將被自動刪除,當然可以也可以手動刪除。雖然每個臨時的Znode都會繫結到一個客戶端會話,但他們對所有的客戶端還是可見的。另外,ZooKeeper的臨時節點不允許擁有子節點。

② 永久節點:該節點的生命週期不依賴於會話,並且只有在客戶端顯示執行刪除操作的時候,他們才能被刪除。

(5) 順序節點

當建立Znode的時候,使用者可以請求在ZooKeeper的路徑結尾新增一個遞增的計數。這個計數對於此節點的父節點來說唯一的,它的格式為”%10d”(10位數字,沒有數值的數位用0補充,例如”0000000001”)。當計數值大於232-1時,計數器將溢位。

(6) 觀察

客戶端可以在節點上設定watch,我們稱之為監視器。當節點狀態發生改變時(Znode的增、刪、改)將會觸發watch所對應的操作。當watch被觸發時,ZooKeeper將會向客戶端傳送且僅傳送一條通知,因為watch只能被觸發一次,這樣可以減少網路流量。

4.2 ZooKeeper中的時間

ZooKeeper有多種記錄時間的形式,其中包含以下幾個主要屬性:

(1) Zxid

致使ZooKeeper節點狀態改變的每一個操作都將使節點接收到一個Zxid格式的時間戳,並且這個時間戳全域性有序。也就是說,也就是說,每個對 節點的改變都將產生一個唯一的Zxid。如果Zxid1的值小於Zxid2的值,那麼Zxid1所對應的事件發生在Zxid2所對應的事件之前。實際 上,ZooKeeper的每個節點維護者三個Zxid值,為別為:cZxid、mZxid、pZxid。

cZxid: 是節點的建立時間所對應的Zxid格式時間戳。
② mZxid:是節點的修改時間所對應的Zxid格式時間戳。

實現中Zxid是一個64為的數字,它高32位是epoch用來標識leader關係是否改變,每次一個leader被選出來,它都會有一個 新的epoch。低32位是個遞增計數(2) 版本號

對節點的每一個操作都將致使這個節點的版本號增加。每個節點維護著三個版本號,他們分別為:

① version:節點資料版本號
② cversion:子節點版本號
③ aversion:節點所擁有的ACL版本號

4.3 ZooKeeper節點屬性

通過前面的介紹,我們可以瞭解到,一個節點自身擁有表示其狀態的許多重要屬性,如下圖所示。

圖 4.2 Znode節點屬性結構

五、ZooKeeper服務中操作

在ZooKeeper中有9個基本操作,如下圖所示:

圖 5.1 ZooKeeper類方法描述

更新ZooKeeper操作是有限制的。delete或setData必須明確要更新的Znode的版本號,我們可以呼叫exists找到。如果版本號不匹配,更新將會失敗。

更新ZooKeeper操作是非阻塞式的。因此客戶端如果失去了一個更新(由於另一個程序在同時更新這個Znode),他可以在不阻塞其他程序執行的情況下,選擇重新嘗試或進行其他操作。

儘管ZooKeeper可以被看做是一個檔案系統,但是處於便利,摒棄了一些檔案系統地操作原語。因為檔案非常的小並且使整體讀寫的,所以不需要開啟、關閉或是尋地的操作。

六、Watch觸發器

(1) watch概述

ZooKeeper可以為所有的讀操作設定watch,這些讀操作包括:exists()、getChildren()及getData()。watch事件是一次性的觸發器,當watch的物件狀態發生改變時,將會觸發此物件上watch所對應的事件。watch事件將被非同步地傳送給客戶端,並且ZooKeeper為watch機制提供了有序的一致性保證。理論上,客戶端接收watch事件的時間要快於其看到watch物件狀態變化的時間。

(2) watch型別

ZooKeeper所管理的watch可以分為兩類:

資料watch(data  watches):getDataexists負責設定資料watch
孩子watch(child watches):getChildren負責設定孩子watch

我們可以通過操作返回的資料來設定不同的watch:

① getData和exists:返回關於節點的資料資訊
② getChildren:返回孩子列表

因此

一個成功的setData操作將觸發Znode的資料watch

一個成功的create操作將觸發Znode的資料watch以及孩子watch

一個成功的delete操作將觸發Znode的資料watch以及孩子watch

(3) watch註冊與處觸發

圖 6.1 watch設定操作及相應的觸發器如圖下圖所示:

exists操作上的watch,在被監視的Znode建立刪除資料更新時被觸發。
getData操作上的watch,在被監視的Znode刪除資料更新時被觸發。在被建立時不能被觸發,因為只有Znode一定存在,getData操作才會成功。
getChildren操作上的watch,在被監視的Znode的子節點建立刪除,或是這個Znode自身被刪除時被觸發。可以通過檢視watch事件型別來區分是Znode,還是他的子節點被刪除:NodeDelete表示Znode被刪除,NodeDeletedChanged表示子節點被刪除。

Watch由客戶端所連線的ZooKeeper伺服器在本地維護,因此watch可以非常容易地設定、管理和分派。當客戶端連線到一個新的伺服器 時,任何的會話事件都將可能觸發watch。另外,當從伺服器斷開連線的時候,watch將不會被接收。但是,當一個客戶端重新建立連線的時候,任何先前 註冊過的watch都會被重新註冊。

(4) 需要注意的幾點

Zookeeper的watch實際上要處理兩類事件:

① 連線狀態事件(type=None, path=null)

這類事件不需要註冊,也不需要我們連續觸發,我們只要處理就行了。

② 節點事件

節點的建立,刪除,資料的修改。它是one time trigger,我們需要不停的註冊觸發,還可能發生事件丟失的情況。

上面2類事件都在Watch中處理,也就是過載的process(Event event)

節點事件的觸發,通過函式exists,getData或getChildren來處理這類函式,有雙重作用:

① 註冊觸發事件

② 函式本身的功能

函式的本身的功能又可以用非同步的回撥函式來實現,過載processResult()過程中處理函式本身的的功能。

七、ZooKeeper應用舉例 

為了方便大家理解ZooKeeper,在此就給大家舉個例子,看看ZooKeeper是如何實現的他的服務的,我以ZooKeeper提供的基本服務分散式鎖為例。

7.1 分散式鎖應用場景

在分散式鎖服務中,有一種最典型應用場景,就是通過對叢集進行Master選舉,來解決分散式系統中的單點故障。什麼是分散式系統中的單點故障:通常分散式系統採用主從模式,就是一個主控機連線多個處理節點。主節點負責分發任務,從節點負責處理任務,當我們的主節點發生故障時,那麼整個系統就都癱瘓了,那麼我們把這種故障叫作單點故障。如下圖7.1和7.2所示:

圖 7.1 主從模式分散式系統               圖7.2 單點故障

    

7.2 傳統解決方案

傳統方式是採用一個備用節點,這個備用節點定期給當前主節點發送ping包,主節點收到ping包以後向備用節點發送回復Ack,當備用節點收到回覆的時候就會認為當前主節點還活著,讓他繼續提供服務。如圖7.3所示:

圖 7.3 傳統解決方案

當主節點掛了,這時候備用節點收不到回覆了,然後他就認為主節點掛了接替他成為主節點如下圖7.4所示:

圖 7.4傳統解決方案

但是這種方式就是有一個隱患,就是網路問題,來看一網路問題會造成什麼後果,如下圖7.5所示:

圖 7.5 網路故障

也就是說我們的主節點的並沒有掛,只是在回覆的時候網路發生故障,這樣我們的備用節點同樣收不到回覆,就會認為主節點掛了,然後備用節點將他的Master例項啟動起來,這樣我們的分散式系統當中就有了兩個主節點也就是—雙Master, 出現Master以後我們的從節點就會將它所做的事一部分彙報給了主節點,一部分彙報給了從節點,這樣服務就全亂了。為了防止出現這種情況,我們引入了 ZooKeeper,它雖然不能避免網路故障,但它能夠保證每時每刻只有一個Master。我麼來看一下ZooKeeper是如何實現的。

7.3 ZooKeeper解決方案

(1) Master啟動

在引入了Zookeeper以後我們啟動了兩個主節點,”主節點-A”和”主節點-B”他們啟動以後,都向ZooKeeper去註冊一個節點。我們 假設”主節點-A”鎖註冊地節點是”master-00001”,”主節點-B”註冊的節點是”master-00002”,註冊完以後進行選舉,編號最 小的節點將在選舉中獲勝獲得鎖成為主節點,也就是我們的”主節點-A”將會獲得鎖成為主節點,然後”主節點-B”將被阻塞成為一個備用節點。那麼,通過這 種方式就完成了對兩個Master程序的排程。

圖7.6 ZooKeeper Master選舉

(2) Master故障

如果”主節點-A”掛了,這時候他所註冊的節點將被自動刪除,ZooKeeper會自動感知節點的變化,然後再次發出選舉,這時候”主節點-B”將在選舉中獲勝,替代”主節點-A”成為主節點。

圖7.7 ZooKeeper Master選舉

(3) Master 恢復

圖7.8 ZooKeeper Master選舉

如果主節點恢復了,他會再次向ZooKeeper註冊一個節點,這時候他註冊的節點將會是”master-00003”,ZooKeeper會感知節點的變化再次發動選舉,這時候”主節點-B”在選舉中會再次獲勝繼續擔任”主節點”,”主節點-A”會擔任備用節點。

相關推薦

轉載ZooKeeper學習第一---Zookeeper簡單介紹

一、分散式協調技術 在給大家介紹ZooKeeper之前先來給大家介紹一種技術——分散式協調技術。那麼什麼是分散式協調技術?那麼我來告訴大家,其實分散式協調技術 主要用來解決分散式環境當中多個程序之間的同步控制,讓他們有序的去訪問某種臨界資源,防止造成”髒資料”的後果。這時,有人可能會說這個簡單,寫一個調 度

ZooKeeper學習第一---Zookeeper簡單介紹

ted 命名空間 不同之處 分布式系統 ast margin .html 為我 找到 一、分布式協調技術 在給大家介紹ZooKeeper之前先來給大家介紹一種技術——分布式協調技術。那麽什麽是分布式協調技術?那麽我來告訴大家,其實分布式協調技術主要用來解決分布式環境當中多

轉載ZooKeeper學習第二--ZooKeeper安裝配置

[轉載: 鄔興亮 ZooKeeper學習第二期–ZooKeeper安裝配置](http://www.cnblogs.com/wuxl360/p/5817489.html) 一、Zookeeper的搭建方式 Zo

轉載Actor 生命周

函數 con advance tsp dup kobject 整潔 行程 多個 Actor 生命周期 本頁面的內容: 生命周期詳解 從磁盤加載 Play in Editor 生成 延遲生成 生命走向終點 在遊戲進程中 垃圾回收 高級垃圾回收 此文檔是

轉載深度學習基礎1——感知器

原文地址:https://zybuluo.com/hanbingtao/note/581764 轉載在此的目的是自己做個筆記,日後好複習,如侵權請聯絡我!! 深度學習是什麼?   在人工智慧領域,有一個方法叫機器學習。在機器學習這個方法裡,有一類演算法叫神經網路。神經網路如下圖所示:   上圖的每

轉載深度學習基礎3——神經網路和反向傳播演算法

原文地址:https://www.zybuluo.com/hanbingtao/note/476663 轉載在此的目的是自己做個筆記,日後好複習,如侵權請聯絡我!!   在上一篇文章中,我們已經掌握了機器學習的基本套路,對模型、目標函式、優化演算法這些概念有了一定程度的理解,而且已經會訓練單個的感知器或者

轉載Numpy學習1——陣列填充np.pad()函式的應用

  【時間】2018.11.02 【題目】(轉載)Numpy學習——陣列填充np.pad()函式的應用 概述 本文轉載自 http://www.th7.cn/Program/Python/201712/1284487.shtml ,主要講述了陣

轉載深度學習基礎7——遞迴神經網路

原文地址:https://zybuluo.com/hanbingtao/note/626300 轉載在此的目的是自己做個筆記,日後好複習,如侵權請聯絡我!!   在前面的文章中,我們介紹了迴圈神經網路,它可以用來處理包含序列結構的資訊。然而,除此之外,資訊往往還存在著諸如樹結構、圖結構等更復雜的結構。對於

ZooKeeper學習第二--ZooKeeper安裝配置

一、Zookeeper的搭建方式 Zookeeper安裝方式有三種,單機模式和叢集模式以及偽叢集模式。 ■ 單機模式:Zookeeper只執行在一臺伺服器上,適合測試環境; ■ 偽叢集模式:就是在一臺物理機上執行多個Zookeeper 例項; ■ 叢集模式:Zookeepe

轉載深度學習2——線性單元和梯度下降

原文地址:https://www.zybuluo.com/hanbingtao/note/448086 轉載在此的目的是自己做個筆記,日後好複習,如侵權請聯絡我!!   在上一篇文章中,我們已經學會了編寫一個簡單的感知器,並用它來實現一個線性分類器。你應該還記得用來訓練感知器的『感知器規則』。然而,我們並沒有

轉載Oracle關於pivot與unpivot用法介紹

Pivot 和 Unpivot 使用簡單的 SQL 以電子表格型別的交叉表報表顯示任何關係表中的資訊,並將交叉表中的所有資料儲存到關係表中。 如您所知,關係表是表格化的,即,它們以列-值對的形式出現。假設一個表名為 CUSTOMERS。 Pivot SQL> d

Spring基礎:快速入門spring boot7:spring boot 2.0簡單介紹

從這篇文章開始以spring boot2為主要版本進行使用介紹。 Spring boot 2特性 spring boot2在如下的部分有所變化和增強,相關特性在後續逐步展開。 特性增強 基礎元件升級: JDK1.8+ tomcat 8+ Thymeleaf 3

Java NIO介紹————無堵塞io和Selector簡單介紹

無堵塞IO介紹 既然NIO相比於原來的IO在讀取速度上其實並沒有太大區別(因為NIO出來後,IO的低層已經以NIO為基礎重新實現了),那麼NIO的優點是什麼呢? NIO是一種同步非阻塞的I/O模型,也是I/O多路複用的基礎,而且已經被越來越多地應用到大型應用伺服器,成為解決

Day16.高效能RPC設計 學習筆記4 - Zookeeper轉載

Zookeeper ZooKeeper 是一個為分散式應用所設計的分佈的、開源的協調服務。可以解決分散式應用中出現常規問題: 同步配置、選舉、分散式鎖、服務命名分組,記住這些問題雖然zookeeper可以幫助使用者解決,並不意味著使用者不需要寫程式碼。使用者如果想使用zookeepe

ZookeeperZookeeper底層客戶端架構實現原理轉載

一次 描述 綁定 機制 一個 ini fin 源碼 receive Zookeeper的Client直接與用戶打交道,是我們使用Zookeeper的interface。了解ZK Client的結構和工作原理有利於我們合理的使用ZK,並能在使用中更早的發現問題。本文將在研究源

第一篇:基於深度學習的人臉特徵點檢測 - 背景轉載

轉載自:https://yinguobing.com/facial-landmark-localization-by-deep-learning-background/ 人臉檢測與識別一直是機器學習領域的一大熱點。人臉檢測是指從影象中檢測出人臉區域。人臉識別則是判斷特定的臉部影象是否與某個人對應

Oracle學習筆記—Db_name、Db_domain、Global_name、Service_name、Instance_name和Oracle_SID轉載

安全 文件中 分布 好處 避免 名稱 detail 數據庫安全 自動 轉載自: Oracle中DB_NAME,SID,DB_DOMAIN,SERVICE_NAME等之間的區別 Db_name:對一個數據庫(Oracle database)的唯一標識。這種表示對於單個數據

機器學習入門之四:機器學習的方法-神經網絡轉載

轉載 bsp 圖像 src nbsp 加速 數值 str 我們   轉自 飛鳥各投林   神經網絡      神經網絡(也稱之為人工神經網絡,ANN)算法是80年代機器學習界非常流行的算法,不過在90年代中途衰落。現在,攜著“深度學習”之勢,神

Dubbo學習和配置轉載

ext.get 訂閱 這樣的 內存 com 消費者 list() 增加 引用 轉載自: 簡單了解下Dubbo 1. Dubbo是什麽? Dubbo是一個分布式服務框架,致力於提供高性能和透明化的RPC遠程服務調用方案,以及SOA服務治理方案。簡單的說,dubbo就是個服

機器學習算法基礎概念學習總結轉載

原則 不清楚 tof 條件 cnblogs 偽代碼 相關關系 什麽 最近鄰   來源:lantian0802的專欄   blog.csdn.net/lantian0802/article/details/38333479      一、基礎概念