第一篇:Google Megastore分布式存儲技術全揭秘
Google Megastore分布式存儲技術全揭秘
導讀:本文根據Google最新Megastore論文翻譯而來,原作者為Google團隊,團隊人員包括:Jason Baker,Chris Bond,James C.Corbett,JJ Furman,Andrey Khorlin,James Larson,Jean-Michel Léon,Yawei Li,Alexander Lloyd,Vadim Yushprakh。翻譯者為國內知名IT人士。
在上個月舉行的創(chuàng)新數據系統研討會上(CIDR),Google公開了其Megastore分布式存儲技術的白皮書。
Megastore是谷歌一個內部的存儲系統,它的底層數據存儲依賴Bigtable,也就是基于NoSql實現的,但是和傳統的NoSql不同的是,它實現了類似RDBMS的數據模型(便捷性),同時提供數據的強一致性解決方案(同一個datacenter,基于MVCC的事務實現),并且將數據進行細顆粒度的分區(qū)(這里的分區(qū)是指在同一個datacenter,所有datacenter都有相同的分區(qū)數據),然后將數據更新在機房間進行同步復制(這個保證所有datacenter中的數據一致)。Megastore的數據復制是通過paxos進行同步復制的,也就是如果更新一個數據,所有機房都會進行同步更新,因為使用paxos進行復制,所以不同機房針對同一條數據的更新復制到所有機房的更新順序都是一致的,同步復制保證數據的實時可見性,采用paxos算法則保證了所有機房更新的一致性,所以個人認為megastore的更新可能會比較慢,而所有讀都是實時讀(對于不同機房是一致的),因為部署有多個機房,并且數據總是最新。
為了達到高可用性,megastore實現了一個同步的,容錯的,適合長距離連接的日志同步器 為了達到高可擴展性,megastore將數據分區(qū)成一個個小的數據庫,每一個數據庫都有它們自己的日志,這些日志存儲在NoSql中 Megastore將數據分區(qū)為一個Entity Groups的集合,這里的Entity Groups相當于一個按id切分的分庫,這個Entity Groups里面有多個Entity Group(相當于分庫里面的表),而一個Entity Group有多個Entity(相當于表中的記錄)
在同一個Entity Group中(相當于單庫)的多個Entity的更新事務采用single-phase ACID事務,而跨Entity Group(相當于跨庫)的Entity更新事務采用two-phase ACID事務(2段提交),但更多使用Megastore提供的高效異步消息實現。需要說明的一點是,這些事務都是在同一個機房的,機房之間的數據交互都是通過數據復制來實現的。
傳統關系型數據庫使用join來滿足用戶的需求,對于Megastore來說,這種模型(也就是完全依賴join的模型)是不合適的。原因包括
1.高負載交互性型應用能夠從可預期的性能提升得到的好處多于使用一種代價高昂的查詢語言所帶來的好處。2.Megastore目標應用是讀遠遠多于寫的,所以更好的方案是將讀操作所需要做的工作轉移到寫操作上面(比如通過具體值代替外鍵以消除join)3.因為megastore底層存儲是采用BigTable,而類似BigTable的key-value存儲對于存取級聯數據是直接的
所以基于以上幾個原因,Megastore設計了一種數據模型和模式語言來提供基于物理地點的細顆粒度控制,級聯布局,以及申明式的不正規(guī)數據存儲來幫助消除大部分joins。查詢時只要指定特定表和索引即可。
當然可能有時候不得不使用到join,Megastore提供了一種合并連接算法實現,具體算法這里我還是沒弄清楚,原文是[the user provides multiple queries that return primary keys for the same table in the same order;we then return the intersection of keys for all the provided queries.] 使用Megastore的應用通過并行查詢實現了outer joins。通常先進行一個初始的查詢,然后利用這個查詢結果進行并行索引查詢,這個過程我理解的是,初始查詢查出一條數據,就馬上根據這個結果進行并行查詢,這個時候初始查詢繼續(xù)取出下一條數據,再根據這個結果并行查詢(可能前面那個外鍵查詢還在繼續(xù),使用不同的線程)。這種方法在初始查詢數據量較小并且外鍵查詢使用并行方式的情況下,是一種有效的并且具有sql風格的joins。Megastore的數據結構介于傳統的RDBMS和NoSql之間的,前者主要體現在他的schema表示上,而后者體現在具體的數據存儲上(BigTable)。和RDBMS一樣,Megastore的數據模型是定義schema中并且是強類型的。每一個schema有一個表集合,每個表包含一個實體集合(相當于record),每個實體有一系列的屬性(相當于列屬性),屬性是命名的,并且指定類型,這些類型包括字符串,各種數字類型,或者google的protocol buffer。這些屬性可以被設置成必需的,可選的,或者可重復的(一個屬性上可以具有多個值)。一個或者多個屬性可以組成一個主鍵。
在上圖中,User和Photo共享了一個公共屬性user_id,IN TABLE User這個標記直接將Photo和User這兩張表組織到了同一個BigTable中,并且鍵的順序(PRIMARY KEY(user_id,photo_id)?是這個還是schema中定義的順序?)保證Photo的實體存儲在對應的User實體鄰接位置上。這個機制可以遞歸的應用,加速任意深度的join查詢速度。這樣,用戶能夠通過操作鍵的順序強行改變數據級聯的布局。其他標簽請參考原文。Megastore支持事務和并發(fā)控制。一個事務寫操作會首先寫入對應Entity Group的日志中,然后才會更新具體數據。BigTable具有一項在相同row/column中存儲多個版本帶有不同時間戳的數據。正是因為有這個特性,Megastore實現了多版本并發(fā)控制(MVCC,這個包括oracle,innodb都是使用這種方式實現ACID,當然具體方式會有所不同):當一個事務的多個更新實施時,寫入的值會帶有這個事務的時間戳。讀操作會使用最后一個完全生效事務的時間戳以避免看到不完整的數據.讀寫操作不相互阻塞,并且讀操作在寫事務進行中會被隔離(?)。
Megastore 提供了current,snapshot,和inconsistent讀,current和snapshot級別通常是讀取單個entity group。當開始一個current讀操作時,事務系統會首先確認所有之前提交的寫已經生效了;然后系統從最后一個成功提交的事務時間戳位置讀取數據。對于snapshot讀取,系統拿到己經知道的完整提交的事務時間戳并且從那個位置直接讀取數據,和current讀取不同的是,這個時候可能提交的事務更新數據還沒有完全生效(提交和生效是不同的)。Megastore提供的第三種讀就是inconsistent讀,這種讀無視日志狀態(tài)并且直接讀取最后一個值。這種方式的讀對于那些對減少延遲有強烈需求,并且能夠容忍數據過期或者不完整的讀操作是非常有用的。
一個寫事務通常開始于一個current讀操作以便確定下一個可用的日志位置。提交操作將數據變更聚集到日志,并且分配一個比之前任何一個都高的時間戳,并且使用Paxos將這個log entry加入到日志中。這個協議使用了樂觀并發(fā):即使有可能有多個寫操作同時試圖寫同一個日志位置,但只會有1個成功。所有失敗的寫都會觀察到成功的寫操作,然后中止,并且重試它們的操作。咨詢式的鎖定能夠減少爭用所帶來的影響。通過特定的前端服務器分批寫入似乎能夠完全避免競爭(這幾句有些不能理解)[ Advisory locking is available to reduce the effects of contention.Batching writes through session affinity to a particular front-end server can avoid contention altogether.]。完整事務生命周期包括以下步驟:
1.讀:獲取時間戳和最后一個提交事務的日志位置
2.應用邏輯:從BigTable讀取并且聚集寫操作到一個日志Entry 3.提交:使用Paxos將日志Entry加到日志中 4.生效:將數據更新到BigTable的實體和索引中 5.清理:刪除不再需要的數據
寫操作能夠在提交之后的任何點返回,但是最好還是等到最近的副本(replica)生效(再返回)。Megastore提供的消息隊列提供了在不同Entity Group之間的事務消息。它們能被用作跨Entity Group的操作,在一個事務中分批執(zhí)行多個更新,或者延緩工作(?)。一個在單個Entity Group上的事務能夠原子性地發(fā)送或者收到多個信息除了更新它自己的實體。每個消息都有一個發(fā)送和接收的Entity Group;如果這兩個Entity Group是不同的,那么傳輸將會是異步的。
消息隊列提供了一種將會影響到多個Entity Group的操作的途徑,舉個例子,日歷應用中,每一個日歷有一個獨立的Entity Group,并且我們現在需要發(fā)送一個邀請到多個其他人的日歷中,一個事務能夠原子地發(fā)送邀請消息到多個獨立日歷中。每個日歷收到消息都會把邀請加入到它自己的事務中,并且這個事務會更新被邀請人狀態(tài)然后刪除這個消息。Megastore大規(guī)模使用了這種模式:聲明一個隊列后會自動在每一個Entity Group上創(chuàng)建一個收件箱。Megastore支持使用二段提交進行跨Entity Group的原子更新操作。因為這些事務有比較高的延遲并且增加了競爭的風險,一般不鼓勵使用。
接下來內容具體來介紹下Megastore最核心的同步復制模式:一個低延遲的Paxos實現。Megastore的復制系統向外提供了一個單一的,一致的數據視圖,讀和寫能夠從任何副本(repli ca)開始,并且無論從哪個副本的客戶端開始,都能保證ACID語義。每個Entity Group復制結束標志是將這個Entity Group事務日志同步地復制到一組副本中。寫操作通常需要一個數據中心內部的網絡交互,并且會跑檢查健康狀況的讀操作。current級別的讀操作會有以下保證:
1.一個讀總是能夠看到最后一個被確認的寫。(可見性)2.在一個寫被確認后,所有將來的讀都能夠觀察到這個寫的結果。(持久性,一個寫可能在確認之前就被觀察到)數據庫典型使用Paxos一般是用來做事務日志的復制,日志中每個位置都由一個Paxos實例來負責。新的值將會被寫入到之前最后一個被選中的位置之后。
Megastore在事先Paxos過程中,首先設定了一個需求,就是current reads可能在任何副本中進行,并且不需要任何副本之間的RPC交互。因為寫操作一般會在所有副本上成功,所以允許在任何地方進行本地讀取是現實的。這些本地讀取能夠很好地被利用,所有區(qū)域的低延遲,細顆粒度的讀取failover,還有簡單的編程體驗。
Megastore設計實現了一個叫做Coordinator(協調者)的服務,這個服務分布在每個副本的數據中心里面。一個Coordinator服務器跟蹤一個Entity Groups集合,這個集合中的Entity Groups需要具備的條件就是它們的副本已經觀察到了所有的Paxos寫。在這個集合中的Entity Groups,它們的副本能夠進行本地讀取(local read)。
寫操作算法有責任保持Coordinator狀態(tài)是保守的,如果一個寫在一個副本上失敗了,那么這次操作就不能認為是提交的,直到這個entity group的key從這個副本的coordinator中去除。(這里不明白)為了達到快速的單次交互的寫操作,Megastore采用了一種Master-Slave方式的優(yōu)化,如果一次寫成功了,那么會順帶下一次寫的保證(也就是下一次寫就不需要prepare去申請一個log position),下一次寫的時候,跳過prepare過程,直接進入accept階段。Megastore沒有使用專用的Masters,但是使用Leaders。
Megastore為每一個日志位置運行一個Paxos算法實例。[ The leader for each log position is a distinguished replica chosen alongside the preceding log position's consensus value.] Leader仲裁在0號提議中使用哪一個值。第一個寫入者向Leader提交一個值會贏得一個向所有副本請求接收這個值做為0號提議最終值的機會。所有其他寫入者必需退回到Paxos的第二階段。
因為一個寫入在提交值到其他副本之前必需和Leader交互,所以必需盡量減少寫入者和Leader之間的延遲。Megastore設計了它們自己的選取下一個寫入Leader的規(guī)則,以同一地區(qū)多數應用提交的寫操作來決定。這個產生了一個簡單但是有效的原則:使用最近的副本。(這里我理解的是哪個位置提交的寫多,那么使用離這個位置最近的副本做為Leader)Megastore的副本中除了有日志有Entity數據和索引數據的副本外,還有兩種角色,其中一種叫做觀察者(Witnesses),它們只寫日志,并且不會讓日志生效,也沒有數據,但是當副本不足以組成一個quorum的時候,它們就可以加入進來。另外一種叫只讀副本(Read-Only),它剛剛和觀察者相反,它們只有數據的鏡像,在這些副本上只能讀取到最近過去某一個時間點的一致性數據。如果讀操作能夠容忍這些過期數據,只讀副本能夠在廣闊的地理空間上進行數據傳輸并且不會加劇寫的延遲。
上圖顯示了Megastore的關鍵組件,包括兩個完整的副本和一個觀察者。應用連接到客戶端庫,這個庫實現了Paxos和其他一些算法:選擇一個副本進行讀,延遲副本的追趕,等等。
Each application server has a designated local replica.The client library makes Paxos operations on that replica durable by submitting transactions directly to the local Bigtable.To minimize wide-area roundtrips, the library submits remote Paxos operations to stateless intermediary replication servers communicating with their local Bigtables.客戶端,網絡,或者BigTable失敗可能讓一個寫操作停止在一個中間狀態(tài)。復制的服務器會定期掃描未完成的寫入并且通過Paxos提議沒有操作的值來讓寫入完成。
接下來介紹下Megastore的數據結構和算法,每一個副本存有更新和日志Entries的元數據。為了保證一個副本能夠參與到一個寫入的投票中即使是它正從一個之前的宕機中恢復數據,Megastore允許這個副本接收不符合順序的提議。Megastore將日志以獨立的Cells存儲在BigTable中。
當日志的前綴不完整時(這個前綴可能就是一個日志是否真正寫入的標記,分為2段,第一段是在寫入日志之前先寫入的幾個字節(jié),然后寫入日志,第二段是在寫入日志之后寫入的幾個字節(jié),只有這個日志前綴是完整的,這個日志才是有效的),日志將會留下holes。下圖表示了一個單獨Megastore Entity Group的日志副本典型場景。0-99的日志位置已經被清除了,100的日志位置是部分被清除,因為每個副本都會被通知到其他副本已經不需要這個日志了。101日志位置被所有的副本接受了(accepted),102日志位置被Y所獲得,103日志位置被A和C副本接受,B副本留下了一個hole,104日志位置因為副本A和B的不一致,復本C的沒有響應而沒有一致結果。
在一個current讀的準備階段(寫之前也一樣),必需有一個副本要是最新的:所有之前更新必需提交到那個副本的日志并且在該副本上生效。我們叫這個過程為catchup。省略一些截止超時的管理,一個current讀算法步驟如下:
1.本地查詢:查詢本地副本的Coordinator,判定當前副本的Entity Group是最新的 2.查找位置:確定最高的可能已提交的日志位置,然后選擇一個己經將這個日志位置生效的副本
a.(Local read)如果步驟1發(fā)現本地副本是最新的,那么從本地副本中讀取最高的被接受(accepted)的日志位置和時間戳。
b.(Majority read)如果本地副本不是最新的(或者步驟1或步驟2a超時),那么從一個多數派副本中發(fā)現最大的日志位置,然后選取一個讀取。我們選取一個最可靠的或者最新的副本,不一定總是是本地副本
3.追趕:當一個副本選中之后,按照下面的步驟追趕到已知的日志位置: a.對于被選中的不知道共識值的副本中的每一個日志位置,從另外一個副本中讀取值。對于任何一個沒有已知已提交的值的日志位置,發(fā)起一個沒有操作的寫操作。Paxos將會驅動多數副本在一個值上打成共識-----可能是none-op的寫操作或者是之前提議的寫操作 b.順序地將所有沒有生效的日志位置生效成共識的值,并將副本的狀態(tài)變?yōu)榈椒植际焦沧R狀態(tài)(應該是Coordinator的狀態(tài)更新)如果失敗,在另外一個副本上重試。4.驗證:如果本地副本被選中并且之前沒有最新,發(fā)送一個驗證消息到coordinator斷定(entity group,replica)能夠反饋(reflects)所有提交的寫操作。不要等待回應----如果請求失敗,下一個讀操作會重試。
5.查詢數據:從選中的副本中使用日志位置所有的時間戳讀取數據。如果選中的副本不可用,選取另外一個副本重新開始執(zhí)行追趕,然后從它那里讀取。一個大的讀取結果有可能從多個副本中透明地讀取并且組裝返回
注意在實際使用中 1和2a通常是并行執(zhí)行的。
在完整的讀操作算法執(zhí)行后,Megastore發(fā)現了下一個沒有使用的日志位置,最后一個寫操作的時間戳,還有下一個leader副本。在提交時刻,所有更新的狀態(tài)都變?yōu)榇虬?packaged)和提議(proposed),并且包含一個時間戳和下一個leader 候選人,做為下一個日志位置的共識值。如果這個值贏得了分布式共識,那么這個值將會在所有完整的副本中生效。否則整個事務將會終止并且必需重新從讀階段開始。
就像上面所描述的,Coordinators跟蹤Entity Groups在它們的副本中是否最新。如果一個寫操作沒有被一個副本接受,我們必需將這個Entity Group的鍵從這個副本的Coordinator中移除。這個步驟叫做invalidation(失效)。在一個寫操作被認為提交的并且準備生效,所有副本必需已經接受或者讓這個Entity Group在它們coordinator上失效。寫算法的步驟如下:
1.接受Leader:請求Leader接受值做為0號提議的值。如果成功。跳到第三步
2.準備:在所有副本上執(zhí)行Paxos Prepare階段,使用一個關于當前l(fā)og位置更高的提議號。將值替換成擁有最高提議號的那個值。[Replace the value being written withthe highest-numbered proposal discovered, if any] 3.接受:請求余下的副本接受這個值。如果多數副本失敗,轉到第二步。4.失效:將沒有接受值的副本coordinator失效掉。錯誤處理將在接下來描述
5.生效:將更新在盡可能多的副本上生效。如果選擇的值不同于原始提議的,返回沖突錯誤[?]
Coordinator進程在每一個數據中心運行并且只保持其本地副本的狀態(tài)。在上述的寫入算法中,每一個完整的副本必需接受或者讓其coordinator失效,所以這個可能會出現任何單個副本失效就會引起不可用。在實際使用中這個不是一個尋常的問題。Coordinator是一個簡單的進程,沒有其他額外的依賴并且沒有持久存儲,所以它表現得比一個BigTable服務器更高的穩(wěn)定性。然而,網絡和主機失敗仍然能夠讓coordinator不可用。
Megastore使用了Chubby鎖服務:Coordinators在啟動的時候從遠程數據中心獲取指定的Chubby locks。為了處理請求,一個Coordinator必需持有其多數locks。一旦因為宕機或者網絡問題導致它丟失了大部分鎖,它就會恢復到一個默認保守狀態(tài)----認為所有在它所能看見的Entity Groups都是失效的。隨后(該Coordinator對應的)副本中的讀操作必需從多數其他副本中得到日志位置直到Coordinator重新獲取到鎖并且Coordinator的Entries重新驗證的。
寫入者通過測試一個Coordinator是否丟失了它的鎖從而讓其在Coordinator不可用過程中得到保護:在這個場景中,一個寫入者知道在恢復之前Coordinator會認為自己是失效的。在一個數據中心活著的Coordinator突然不可用時,這個算法需要面對一個短暫(幾十秒)的寫停頓風險---所有的寫入者必需等待Coordinator的Chubby locks過期(相當于等待一個master failover后重新啟動),不同于master failover,寫入和讀取都能夠在coordinator狀態(tài)重建前繼續(xù)平滑進行。除了可用性問題,對于Coordinator的讀寫協議必需滿足一系列的競爭條件。失效的信息總是安全的,但是生效的信息必需小心處理。在coordinator中較早的寫操作生效和較晚的寫操作失效之間的競爭通過帶有日志位置而被保護起來。標有較高位置的失效操作總是勝過標有較低位置的生效操作。一個在位置n的失效操作和一個在位置m 總體來說,使用Coordinator從而能夠在任何數據中心進行快速的本地讀取對于可用性的影響并不是完全沒有的。但是實際上,以下因素能夠減輕使用Coordinator所帶來的問題。1.Coordinators是比任何的BigTable 服務器更加簡單進程,機會沒有依賴,所以可用性更高。 2.Coordinators簡單,均勻的工作負載讓它們能夠低成本地進行預防措施。3.Coordinators輕量的網絡傳輸允許使用高可用連接進行服務質量監(jiān)控。 4.管理員能夠在維護期或者非安全期集中地讓一批Coordinators失效。對于默寫信號的監(jiān)測是自動的。 5.一個Chubby qunrum能夠監(jiān)測到大多數網絡問題和節(jié)點不可用??偨Y 文章總體介紹了下google megastore的實現思路,其主要解決的問題就是如何在復雜的環(huán)境下(網絡問題,節(jié)點失效等等)保證數據存取服務的可用性。對于多機房,多節(jié)點,以及ACID事務支持,實時非實時讀取,錯誤處理等等關鍵問題上給出了具體方案。 從Google Spanner漫談分布式存儲與數據庫技術 文/曹偉 Spanner 的設計反映了 Google 多年來在分布式存儲系統領域上經驗的積累和沉淀,它采用了 Megastore 的數據模型,Chubby 的數據復制和一致性算法,而在數據的可擴展性上使用了 BigTable 中的技術。新穎之處在于,它使用高精度和可觀測誤差的本地時鐘來判斷分布式系統中事件的先后順序。Spanner 代表了分布式數據庫領域的新趨勢——NewSQL。 Spanner 是 Google 最近公開的新一代分布式數據庫,它既具有 NoSQL 系統的可擴展性,也具有關系數據庫的功能。例如,它支持類似 SQL 的查詢語言、支持表連接、支持事務(包括分布式事務)。Spanner 可以將一份數據復制到全球范圍的多個數據中心,并保證數據的一致性。一套 Spanner 集群可以擴展到上百個數據中心、百萬臺服務器和上T條數據庫記錄的規(guī)模。目前,Google 廣告業(yè)務的后臺(F1)已從 MySQL 分庫分表方案遷移到了 Spanner 上。 數據模型 傳統的 RDBMS(例如 MySQL)采用關系模型,有豐富的功能,支持 SQL 查詢語句。而 NoSQL 數據庫多是在 key-value 存儲之上增加有限的功能,如列索引、范圍查詢等,但具有良好的可擴展性。Spanner 繼承了 Megastore 的設計,數據模型介于 RDBMS 和 NoSQL 之間,提供樹形、層次化的數據庫 schema,一方面支持類 SQL 的查詢語言,提供表連接等關系數據庫的特性,功能上類似于 RDBMS;另一方面整個數據庫中的所有記錄都存儲在同一個 key-value 大表中,實現上類似于 BigTable,具有 NoSQL 系統的可擴展性。 在 Spanner 中,應用可以在一個數據庫里創(chuàng)建多個表,同時需要指定這些表之間的層次關系。例如,圖 1 中創(chuàng)建的兩個表——用戶表(Users)和相冊表(Albums),并且指定用戶表是相冊表的父節(jié)點。父節(jié)點和子節(jié)點間存在著一對多的關系,用戶表中的一條記錄(一個用戶)對應著相冊表中的多條記錄(多個相冊)。此外,要求子節(jié)點的主鍵必須以父節(jié)點的主鍵作為前綴。例如,用戶表的主鍵(用戶 ID)就是相冊表主鍵(用戶 ID+ 相冊 ID)的前綴。 圖 1 schema 示例,表之間的層次關系,記錄排序后交錯的存儲 顯然所有表的主鍵都將根節(jié)點的主鍵作為前綴,Spanner 將根節(jié)點表中的一條記錄,和以其主鍵作為前綴的其他表中的所有記錄的集合稱作一個 Directory。例如,一個用戶的記錄及該用戶所有相冊的記錄組成了一個 Directory。Directory 是 Spanner 中對數據進行分區(qū)、復制和遷移的基本單位,應用可以指定一個 Directory 有多少個副本,分別存放在哪些機房中,例如把用戶的 Directory 存放在這個用戶所在地區(qū)附近的幾個機房中。 這樣的數據模型具有以下好處。 ? 一個 Directory 中所有記錄的主鍵都具有相同前綴。在存儲到底層 key-value 大表時,會被分配到相鄰的位置。如果數據量不是非常大,會位于同一個節(jié)點上,這不僅提高了數據訪問的局部性,也保證了在一個 Directory 中發(fā)生的事務都是單機的。 ? Directory 還實現了從細粒度上對數據進行分區(qū)。整個數據庫被劃分為百萬個甚至更多個 Directory,每個 Directory 可以定義自己的復制策略。這種 Directory-based 的數據分區(qū)方式比 MySQL 分庫分表時 Table-based 的粒度要細,而比 Yahoo!的 PNUTS 系統中 Row-based 的粒度要粗。 ? Directory 提供了高效的表連接運算方式。在一個 Directory 中,多張表上的記錄按主鍵排序,交錯(interleaved)地存儲在一起,因此進行表連接運算時無需排序即可在表間直接進行歸并。 復制和一致性 Spanner 使用 Paxos 協議在多個副本間同步 redo 日志,從而保證數據在多個副本上是一致的。Google 的工程師鐘情于 Paxos 協議,Chubby、Megastore 和 Spanner 等一系列產品都是在 Paxos 協議的基礎上實現一致性的。 Paxos 的基本協議很簡單。協議中有三個角色:Proposer、Acceptor 和 Learner,Learner 和 Proposer 分別是讀者和寫者,Acceptor 相當于存儲節(jié)點。整個協議描述的是,當系統中有多個 Proposer 和 Acceptor 時,每次 Proposer 寫一個變量就會啟動一輪決議過程(Paxos instance),如圖 2 所示。決議過程可以保證即使多個 Proposer 同時寫,結果也不會在 Acceptor 節(jié)點上不一致。確切地說,一旦某個 Proposer 提交的值被大多數 Acceptor 接受,那么這個值就被選中,在整輪決議的過程中該變量就不會再被修改為其他值。如果另一個 Proposer 要寫入其他值,必須啟動下一輪決議過程,而決議過程之間是串行(serializable)的。 圖 2 Paxos 協議正常執(zhí)行流程 一輪決議過程分為兩個階段,即 prepare 階段和 accept 階段。 ? 第一階段A:Proposer 向所有 Acceptor 節(jié)點廣播 prepare 消息,消息中只包含一個序號——N。Proposer 需要保證這個序號在這輪決議過程中是全局唯一的(這很容易做到,假如系統中有兩個 Proposer,那么一個 Proposer 使用1,3,5,7,9,??,另一個 Proposer 則使用0,2,4,6,8,??)。 ? 第一階段B:Acceptor 接收到 prepare 消息后,如果N是到目前為止見過的最大序號,就返回一個 promise 消息,承諾不會接受序號小于N的請求;如果已接受過其他 Proposer 提交的值,則會將這個值連同提交這個值的請求的序號一同返回。? 第二階段A:當 Proposer 從大多數 Acceptor 節(jié)點收到了 promise 消息后,就可以選擇接下來要向 Acceptor 提交的值了。一般情況下,當然選原本打算寫入的值,但如果從收到的 promise 消息中發(fā)現已經有其他值被 Acceptor 接受了,那么為了避免造成數據不一致的風險,這時 Proposer 就必須“大義滅親”,放棄自己打算寫入的值,從其他 Proposer 提交的序號中選擇一個最大的值。接下來 Proposer 向所有的 Acceptor 節(jié)點發(fā)送 accept 包,其中包含在第一階段中挑選的序號N和剛才選擇的值V。 ? 第二階段B:Acceptor 收到 accept 包之后,如果N的大小不違反對其他 Proposer 的承諾,就接受這個請求,記錄下值V和序號N,返回一個 ack 消息。反之,則返回一個 reject 消息。 如果 Proposer 從大多數 Acceptor 節(jié)點收到了 ack 消息,說明寫操作成功。而如果在寫操作過程中失敗,Proposer 可以增大序號,重新執(zhí)行第一階段。 基本的 Paxos 協議可以保證值一旦被選出后就一定不會改變,但不能保證一定會選出值來。換句話說,這個投票算法不一定收斂。有兩個方法可以加速收斂的過程:一個是在出現沖突后通過隨機延遲把機會讓給其他 Proposer,另一個是盡量讓系統中只有一個 Proposer 去提交。在 Chubby 和 Spanner 系統中這兩種方法都用上了,先用隨機延遲的方法通過一輪 Paxos 協議,在多個 Proposer 中選舉出一個 leader 節(jié)點。接下來所有的寫操作都通過這個 leader 節(jié)點,而 leader 節(jié)點一般還是比較“長壽”的,在廣域網環(huán)境下平均“任期”可以達到一天以上。而 Megastore 系統中沒有很好地解決這個問題,所有的 Proposer 都可以發(fā)起寫操作,這是 Megastore 寫入性能不高的原因之一。 基本的 Paxos 協議還存在性能上的問題,一輪決議過程通常需要進行兩個回合通信,而一次跨機房通信的代價為幾十到一百毫秒不等,因此兩個回合的通信就有點開銷過高了。不過幸運的是,絕大多數情況下,Paxos 協議可以優(yōu)化到僅需一個回合通信。決議過程的第一階段是不需要指定值的,因此可以把 prepare/promise 的過程捎帶在上一輪決議中完成,或者更進一步,在執(zhí)行一輪決議的過程中隱式地涵蓋接下來一輪或者幾輪決議的第一階段。這樣,當一輪決議完成之后,其他決議的第一階段也已經完成了。如此看來,只要 leader 不發(fā)生更替,Paxos 協議就可以在一個回合內完成。為了支持實際的業(yè)務,Paxos 協議還需要支持并發(fā),多輪決議過程可以并發(fā)執(zhí)行,而代價是故障恢復會更加復雜。 因為 leader 節(jié)點上有最新的數據,而在其他節(jié)點上為了獲取最新的數據來執(zhí)行 Paxos 協議的第一階段,需要一個回合的通信代價。因此,Chubby 中的讀寫操作,以及 Spanner 中的讀寫事務都僅在 leader 節(jié)點上執(zhí)行。而為了提高讀操作的性能,減輕 leader 節(jié)點的負載,Spanner 還提供了只讀事務和本地讀。只讀事務只在 leader 節(jié)點上獲取時間戳信息,再用這個時間戳在其他節(jié)點上執(zhí)行讀操作;而本地讀則讀取節(jié)點上最新版本的數據。 與 Chubby、Spanner 這種讀寫以 leader 節(jié)點為中心的設計相比,Megastore 體現了一定的“去中心化”設計。每個客戶端都可以發(fā)起 Paxos 寫操作,而讀操作則盡可能在本地執(zhí)行。如果客戶端發(fā)現本地數據不是最新的,會啟動 catchup 流程更新數據,再執(zhí)行本地讀操作返回給客戶端。 最后,對比下其他系統中 replication 的實現。在 BigTable 系統中每個 tablet 服務器是沒有副本的,完全依賴底層 GFS 把數據存到多臺機器上。數據的讀寫都通過單個 tablet 服務器,在 tablet 服務器出現故障的時需要 master 服務器將 tablet 指派到其他 tablet 服務器上才能恢復可用。Dynamo 系統則貫徹了“去中心化”的思想,將數據保存在多個副本上,每個副本都可以寫入(update everywhere)。而不同副本同時寫入的數據可能會存在不一致,則需要使用版本向量(version vector)記錄不同的值和時間戳,由應用去解釋或合并不一致的數據。盡管 Dynamo 系統還提供了 NWR 的方式來支持有一致性保證的讀寫操作,但總的來說 Dynamo 為了高可用性犧牲了一致性。ZooKeeper、MongoDB 與 Chubby、Spanner 類似,通過 leader 選舉協議從多個副本中選擇一個 leader,所有寫操作都在經過 leader 節(jié)點序列化后,同步到其他副本上。ZooKeeper 則是在寫入大多數節(jié)點后返回,而 MongoDB 主要采用異步的主從復制方式。 分布式事務 Spanner 系統中的分布式事務通過兩階段提交協議(2PC)實現。2PC 是一類特殊的一致性協議,假設一個分布式事務涉及了多個數據節(jié)點,2PC 可以保證在這些節(jié)點上的操作要么全部提交,要么全部失敗,從而保證了整個分布式事務的原子性(ACID 里的A)。協議中包含兩個角色:協調者(coordinator)和參與者(participant/cohort)。協調者是分布式事務的發(fā)起者,而參與者是參與了事務的數據節(jié)點。在協議最基本的形式中,系統中有一個協調者和多個參與者。 顧名思義,2PC 也包含兩個階段,即投票階段和提交階段(如圖 3 所示)。 圖 3 兩階段提交協議 ? 在第一階段,協調者向所有的參與者發(fā)送投票請求,每個參與者決定是否要提交事務。如果打算提交的話需要寫好 redo、undo 等日志,并向協調者回復 yes 或 no。 ? 在第二階段,協調者收到所有參與者的回復,如果都是 yes,那么決定提交這個事務,寫好日志后向所有參與者廣播提交事務的通知。反之,則中止事務并且通知所有參與者。參與者收到提交/中止事務的命令后,執(zhí)行相應操作,如果提交的話還需要寫日志。 協議過程包括兩回合的通信,在協調者和參與者端需要多次寫日志,而且整個過程中所有參與者都占有讀鎖、寫鎖,可見 2PC 開銷不菲。 2PC 最令人詬病之處還不在于性能,而是在有些故障條件下,會造成所有參與者占有讀鎖、寫鎖堵塞在第二階段,需要人工干預才能繼續(xù),存在嚴重的可用性隱患。假設故障發(fā)生在第二階段,協調者在做出決定后,通知完一個參與者就宕機了,更糟糕的是被通知的這位參與者在執(zhí)行完“上級指示”之后也宕機了,這時對其他參與者來說,就必須堵塞在那里等待結果。 Spanner 利用基于 Paxos 協議的復制技術,改善了 2PC 的可用性問題。2PC 協議過程中的協調者和參與者生成的日志都會利用 Paxos 協議復制到所有副本中,這樣無論是協調者或參與者宕機,都會有其他副本代替它們,完成 2PC 過程而不至于堵塞。在 Paxos 協議上實現 2PC 這一思路很巧妙,Paxos 協議保證了大多數節(jié)點在線情況下的可用性,而 2PC 保證了分布式協議的一致性。 事件的順序 傳統上,在設計一個分布式系統時,都會假設每個節(jié)點的運行速度和時鐘的快慢各不相同的情況,并且在節(jié)點之間進行同步的唯一方法就是異步通信。系統中的每個節(jié)點都扮演著觀察者的角色,并從其他節(jié)點接收事件發(fā)生的通知。判斷系統中兩個事件的先后順序主要依靠分析它們的因果關系,包括 Lamport 時鐘、向量時鐘等算法,而這一切都存在通信開銷。 因此,Spanner 提出了一種新的思路,在不進行通信的情況下,利用高精度和可觀測誤差的本地時鐘(TrueTime API)給事件打上時間戳,并且以此比較分布式系統中兩個事件的先后順序。利用這個方法,Spanner 實現了事務之間的外部一致性(external consistency)(如圖 4 所示),也就是說,一個事務結束后另一個事務才開始,Spanner 可以保證第一個事務的時間戳比第二個事務的時間戳要早,從而兩個事務被串行化后也一定能保持正確的順序。 圖 4 事務外部一致性的實現 TrueTime API 是一個提供本地時間的接口,但與 Linux 上 gettimeofday 接口不一樣的是,它除了可以返回一個時間戳t,還會給出一個誤差ε。例如,返回的時間戳是 1 分 30 秒 350 毫秒,而誤差是 5 毫秒,那么真實的時間在 1 分 30 秒 345 毫秒到 355 毫秒之間。真實的系統中ε平均下來是 4 毫秒。 利用 TrueTime API,Spanner 可以保證給出的事務標記的時間戳介于事務開始的真實時間和事務結束的真實時間之間。假如事務開始時 TrueTime API 返回的時間是{t1, ε1},此時真實時間在 t1-ε1到 t1+ε1之間;事務結束時 TrueTime API 返回的時間是{t2, ε2},此時真實時間在 t2-ε2到 t2+ε2之間。Spanner 會在 t1+ε1和 t2-ε2之間選擇一個時間點作為事務的時間戳,但這需要保證 t1+ε1小于 t2-ε2,為了保證這點,Spanner 會在事務執(zhí)行過程中等待,直到 t2-ε2大于 t1+ε1時才提交事務。由此可以推導出,Spanner 中一個事務至少需要2ε的時間(平均 8 毫秒)才能完成。 由此可見,這種新方法雖然避免了通信開銷,卻引入了等待時間。為了保證外部一致性,寫延遲是不可避免的,這也印證了 CAP 定理所揭示的法則,一致性與延遲之間是需要權衡的。 最后介紹一下 TrueTime API 的實現。TrueTime API 的實現大體上類似于網絡時間協議(NTP),但只有兩個層次。第一層次,服務器是擁有高精度計時設備的,每個機房若干臺,大部分機器都裝備了 GPS 接收器,剩下少數機器是為 GPS 系統全部失效的情況而準備的,叫做“末日”服務器,裝備了原子鐘。所有的 Spanner 服務器都屬于第二層,定期向多個第一層的時間服務器獲取時間來校正本地時鐘,先減去通信時間,再去除異常值,最后求交集。 NewSQL 六年前,BigTable 展示了一個簡潔、優(yōu)美、具有高可擴展性的分布式數據庫系統,引起了 NoSQL 浪潮。然而 Spanner 的設計者們指出了 BigTable 在應用中遇到的一些阻力。 ? 缺少類似 SQL 的界面,缺少關系數據庫擁有的豐富的功能。? 只支持單行事務,缺少跨行事務。 ? 需要在跨數據中心的多個副本間保證一致性。 這些來自應用開發(fā)者的需求催生了 Spanner,一個既擁有 key-value 系統的高可擴展性,也擁有關系數據庫的豐富功能(包括事務、一致性等特性)的系統。這類兼顧可擴展性和關系數據庫功能的產品被稱為“NewSQL”,Spanner 的公開會不會開啟 NewSQL 的時代呢?我們拭目以待。 總結 最后從 CAP 定理的角度來分析下 Spanner。 CAP 定理是指在網絡可能出現分區(qū)故障的情況下,一致性和可用性不可得兼。形式化地說就是,P => 非(A與P),可以更進一步地總結為,一致性和延遲之間必須進行權衡。Paxos 協議在C和A之間選擇了嚴格的一致性,而A則降級為大多數一致性(majority available)。 Spanner 還通過在事務中增加延遲的方法實現了外部一致性,每個事務需要至少兩倍的時鐘誤差才能完成。如果時鐘出現故障造成誤差增長,那么完成事務所需的時間也就隨之增長。在這里,時鐘故障也應當認為是P的一種形式。在發(fā)生時鐘故障(P)的情況下,為了保證一致性(C),而必須增加延遲(A),這一點充分印證了 CAP 定理。 從 Spanner 系統中,我們可以學習到一些經驗。 ? MegaStore、Spanner 和 F1 系統所選擇的樹形、層次化的數據庫 schema 是很精妙的,它能支持高效的表連接,這既提供了類似關系模型的范式,也提供了一個合適的粒度進行數據分區(qū),具有好的可擴展性,H-Store 也采用了這樣的 schema。 ? 跨數據中心的多個副本間保持一致是可行的,Paxos 協議的性能可以優(yōu)化到一個可接受的范圍。 ? 在 Paxos 協議的基礎之上實現的兩階段提交的可用性得到了提高。? 在一個分布式系統中,本地時鐘的作用可以比我們之前想象的大很多。 作者曹偉,淘寶核心系統數據庫組技術專家,從事高性能服務器、IM、P2P、微博等各類型分布式系統、海量存儲產品的開發(fā),關注系統高可用性和一致性及分布式事務領域。 家用、屋頂按階梯電價算(算上國家0.42元補貼,若地方暫無補貼): 第一檔(月):180度以下,收費標準在0.56元/度 推薦安裝1KW-2KW發(fā)電設備,投資1—2萬元左右,全部自用成本回收年限7年左右,全部出售給電網公司成本回收年限(按賣電0.43元/度算)8年左右。 綜述:成本回收年限在7—8年左右 第二檔(月):180度—260度,收費標準在0.61元/度 推薦安裝2KW-3KW發(fā)電設備,投資2—3萬元左右,全部自用成本回收年限6.7年左右,全部出售給電網公司成本回收年限(按賣電0.43元/度算)8年左右 綜述:成本回收年限在6.7—8年左右 第三檔(月):260度以上,收費標準在0.86元/度 推薦安裝3KW以上發(fā)電設備,投資3萬元以上,全部自用成本回收年限在5.5年左右,全部出售給電網公司成本回收年限(按賣電0.43元/度算)8年左右 綜述:成本回收年限在5.5—8年左右 投資家用太陽能發(fā)電不僅在一定程度上擺脫對傳統電力的依賴,還是一份高回報無風險的對未來收益擁有充分保障的投資,更是您對全球碳減排做出的一份努力。江陰中望光伏科技有限公司,專業(yè)提供太陽能發(fā)電一站式服務,質量有保障,如果您有相關需求,請撥打我們的聯系電話:400-600-5338。 家用、屋頂按階梯電價算(算上國家0.42元補貼,若地方暫無補貼): 第一檔(月):180度以下,收費標準在0.56元/度 推薦安裝1KW-2KW發(fā)電設備,投資1—2萬元左右,全部自用成本回收年限7年左右,全部出售給電網公司成本回收年限(按賣電0.43元/度算)8年左右。 綜述:成本回收年限在7—8年左右 第二檔(月):180度—260度,收費標準在0.61元/度 推薦安裝2KW-3KW發(fā)電設備,投資2—3萬元左右,全部自用成本回收年限6.7年左右,全部出售給電網公司成本回收年限(按賣電0.43元/度算)8年左右 綜述:成本回收年限在6.7—8年左右 第三檔(月):260度以上,收費標準在0.86元/度 推薦安裝3KW以上發(fā)電設備,投資3萬元以上,全部自用成本回收年限在5.5年左右,全部出售給電網公司成本回收年限(按賣電0.43元/度算)8年左右 綜述:成本回收年限在5.5—8年左右 投資家用太陽能發(fā)電不僅在一定程度上擺脫對傳統電力的依賴,還是一份高回報無風險的對未來收益擁有充分保障的投資,更是您對全球碳減排做出的一份努力。江陰中望光伏科技有限公司,專業(yè)提供太陽能發(fā)電一站式服務,質量有保障,如果您有相關需求,請撥打我們的聯系電話:400-600-5338。 家庭屋頂怎樣安裝光伏發(fā)電系統? 發(fā)布者:gaoming發(fā)布時間:2016-08-17 10:39:54瀏覽:100 近年來,太陽能光伏發(fā)電這一綠色能源走進了人們的視野,我們看到一些山上排布整齊、大氣的藍色光伏組房以及一些居民區(qū)屋頂上也會發(fā)現光伏發(fā)電系統。光伏發(fā)電開始走進了我們的生活中,有不少朋友很好奇,太陽不能也安裝一套呢?不要著急,下面PVtrade光伏交易網來給您介紹一下屋頂到底怎么安裝太陽能光伏發(fā)電系統 1、安裝光伏發(fā)電系統的屋頂類型要求 一般情況下分為水平屋頂和斜屋頂,水平屋頂即屋頂是平面的,主要以水泥屋頂為主。斜屋頂包括彩鋼斜屋的話,南方一般以角度大的斜屋頂資源為主;中部地區(qū)兼有,而東北地區(qū)則大部分是陶瓦屋頂資源。 日常用電單位為千瓦時,安裝太陽能光伏發(fā)電系統通常以功率單位千瓦來計算。安裝設備位置主要以向陽面光伏發(fā)電系統大小,詳細參考如下表: 2、光伏發(fā)電設備安裝條件 這些數據是怎么計算的呢?由于水泥屋頂放置光伏組件時,需將組件傾斜一定角度,用以保證光照盡可能垂光伏支架將組件固定,為避免前后排組件間遮擋,要空余一定間隔。間隔大小根據地區(qū)有所差異,一般每千瓦光平米左右。斜屋頂可直接敷設于屋頂上,因此可忽略間隔,而斜屋頂每千瓦組件需屋頂面積在10-15平米左右。 在安裝光伏系統時,首先要保證在避免破壞屋頂的情況下安裝。 對于水泥平屋頂來說,對于使用防水層的屋頂,比如覆蓋瀝青等。要盡量避免在屋頂打孔,可采用放置水泥基礎下面墊橡膠墊以保護防水層,并防止水泥基礎的滑動。 對于斜屋頂而言,瓦式屋頂需將瓦片掀起,將陶瓦掛鉤固定在房梁上或水泥層上。因此部分地區(qū)建造房屋頂致陶瓦掛鉤附著力下降,因此要尋找更合理的方式安裝;彩鋼屋頂可根據彩鋼類型進行夾具式或打孔式安裝,打 3、光伏發(fā)電系統發(fā)電量 對一般家庭來說,安裝一套3-5kW光伏發(fā)電系統即可滿足日常用電所需。例如河北地區(qū)一套3千瓦系統平以供給戶用個體使用。 由于地區(qū)不同,下面以3千瓦光伏發(fā)電系統為例,光伏交易網為您整理了各地區(qū)3千瓦系統每日發(fā)電量匯總 若您不屬于以上城市,可根據就近原則作為參考,由于安裝角度不同、光照情況的變化以及設備的差異,可若想要系統達到較高的性價比,需要更合理的優(yōu)化匹配才行。 四、安裝光伏發(fā)電系統價格 大多數人最關心問題大多集中在價格方面。根據現在光伏市場上光伏發(fā)電系統平均價格計算,一套3千瓦的而安裝環(huán)境難度及光伏產品品牌和質量等也會影響價格的高低。 光伏發(fā)電已經成為很多朋友關注的熱點,那么光伏發(fā)電系統到底是什么樣子?我們自家屋頂想要安裝需要知道哪些東西呢? 首先我們應該了解大致流程是什么,下面筆者為大家介紹一下如何安裝一套家用光伏系統。 一、根據屋頂情況計算裝機容量 一般情況下,我們估算自家屋頂能夠裝多大光伏系統,可根據下面公式進行計算: 水泥平屋頂:裝機量=80瓦/平米×屋頂面積; 彩鋼或瓦屋頂:裝機量=100瓦/平米×屋頂面積;下面是筆者為大家測算的裝機量可供參考: 二、光伏系統發(fā)電量 對一般家庭來說,安裝一套3到5kW的光伏發(fā)電系統即可滿足日常用電所需。例如河北地區(qū)一套3千瓦系統平均每天可發(fā)電12度電左右;5千瓦系統一天發(fā)電量平均在20多度,天氣較好的時候可達到30度以上,足以供給戶用個體使用。由于地區(qū)不同,溫度和光照條件不同,所有發(fā)電量會有所差異。 三、了解當地光伏補貼政策 想要安裝光伏發(fā)電系統,了解補貼政策必不可少,這關乎到我們能夠獲得多少收益!光伏補貼分為國家補貼和地方補貼,國家補貼為0.42元/度電,共補貼20年,地方補貼因各地政策不同而有所差異,今后筆者會將匯總的地方補貼政策陸續(xù)分享給大家。 一般家用系統的光伏補貼主要和我們的上網模式有關,分為兩種情況: 1.自發(fā)自用,余電上網模式:即光伏所發(fā)的電量優(yōu)先為用戶的家用電器等設備使用,用不完的電量賣給國家電網。當然,所發(fā)電量不夠用時,家用設備用電還需要從電網取電。 補貼金額為:自用電量×(國家補貼×補貼年限+地方補貼×補貼年限) 其中:國家補貼0.42元/度,補貼20年;各地方補貼政策不同,詳細情況可加筆者微信進行咨詢。 2.全額上網模式:所發(fā)電量全部賣給國家電網。 補貼金額為:發(fā)電量×(國家補貼×補貼年限+地方補貼×補貼年限) 其中:國家補貼0.88元/度-0.98元/度,補貼20年;各地補貼政策不同。 按照河北(冀南地區(qū))補貼條件計算,假如一天發(fā)電25度,按照全額上網測算: 日收益為:22度×(國家補貼0.98元/度+地方補貼0.2元/度)=25.96元 年收益為:25.96元×365天=9475.4元 按照全額上網模式計算,我們一年的收益可以達到9475.4元左右。大家可以根據兩種收益進行測算比較,選擇收益較高的上網模式。(算法不清楚的也可咨詢筆者哦!) 四、系統成本報價 看完了每年能得到的補貼,有人會問,我們建這一套系統需要多少錢呢?下面筆者為您呈上設備價格單,以供參考: 注:產品價格根據品牌、采購量、時間等有所差異,以上價格僅供參考。 由上表可知,一套5千瓦的光伏系統基本在8.5元/瓦的價格,一套系統做下來要在4萬多元左右。不同的廠家產品價格會有所差異,但是筆者需要提醒大家不要貪圖一時便宜,買到不合格的產品哦!辛辛苦苦安裝好的光伏系統,若是沒幾年就不發(fā)電了,咱們豈不是要賠慘了? 五、并網申請流程 知道了安裝系統的相關知識,我們還需要到電網公司進行并網申請,保證安裝好后能夠與電網相連,才能拿到補貼和售電收益! 第一步:帶上身份證,房產證(土地使用證),到當地電力局,規(guī)模不同受理單位是不一樣的,家用系統到區(qū)縣電力局就可以辦理。 第二步:制訂接入系統方案,這一步是電網公司完成的,不需要你做,靜等消息吧,當然,有些地方電網公司會讓你等得比較久。 第三步:確認接入系統方案,這一步主要就是確認是全額上網還是余電上網,一般來說,業(yè)主用電電價比較高且用電量較大的適合自發(fā)自用模式,否則直接選全額上網即可。 第四步:出具接網意見書,就是原則上同意接入電網了。 第五步:找一個有資質的施工單位吧,參考以上的表格價格去談價吧,太低的價格可是做不出來好的系統的,最好是選擇正規(guī)可靠的廠家,不要貪圖一時的便宜,安裝的系統質量無法保證,售后找不到人可就悲劇了哦! 六、建光伏電站 現在開始建電站了,首先施工方會來看場地,并出初步的圖紙,一般有平面圖,效果圖,工程預算等,現在一般選用255W-260W組件,系統示意圖見如下。 電氣連接示意圖 組件安裝示意圖 有經驗的工程隊大約只需要二個工作日即可完成施工,這個過程是非常快速的,然后,你家的屋頂上就多了一個漂亮的光伏電站啦! 七、并網驗收 建成后的電站經并網驗收后加裝雙向電表,然后簽訂售電合同,你就可以合法的向電網輸送電力了,是不是真的很神奇? 網絡存儲技術優(yōu)缺點與發(fā)展趨勢 隨著不斷加速的信息需求使得存儲容量飛速增長,存儲系統網絡平臺已經成為一個核心平臺,同時各種應用對平臺的要求也越來越高,不僅在存儲容量上,還包括數據訪問性能、數據傳輸性能、數據管理能力、存儲擴展能力等等多個方面。可以說,存儲網絡平臺的綜合性能的優(yōu)劣,將直接影響到整個系統的正常運行。因此,發(fā)展一種具有成本效益的和可管理的先進存儲方式就成為必然。下面就當前的存儲技術及發(fā)展趨勢進行分析和探討。信息量的飛速發(fā)展使得存儲容量也飛速增長,發(fā)展一種具有成本效益和可管理和先進存儲方式就成為必然。本文就幾種傳統的網絡存儲框架進行探討,之后介紹了新的存儲技術,并分析了網絡存儲體系結構的發(fā)展趨勢。 隨著不斷加速的信息需求使得存儲容量飛速增長,存儲系統網絡平臺已經成為一個核心平臺,同時各種應用對平臺的要求也越來越高,不僅在存儲容量上,還包括數據訪問性能、數據傳輸性能、數據管理能力、存儲擴展能力等等多個方面??梢哉f,存儲網絡平臺的綜合性能的優(yōu)劣,將直接影響到整個系統的正常運行。因此,發(fā)展一種具有成本效益的和可管理的先進存儲方式就成為必然。下面就當前的存儲技術及發(fā)展趨勢進行分析和探討。 一、網絡存儲技術概述 所謂網絡存儲技術(Network Storage Technologies),就是以互聯網為載體實現數據的傳輸與存儲,數據可以在遠程的專用存儲設備上,也可以是通過服務器來進行存儲。網絡存儲技術是基于數據存儲的一種通用網絡術語。實際上,我們可以將存儲技術分為三個階段:①總線存儲階段;②存儲網絡階段;③虛擬存儲階段。以存儲網絡為中心的存儲是對數據存儲新需求的回答。它采用面向網絡的存儲體系結構,使數據處理和數據存儲分離;網絡存儲體系結構包括了網絡和I/O的精華,將I/O能力擴展到網絡上,特別是靈活的網絡尋址能力,遠距離數據傳輸能力,I/O高效的原性能;通過網絡連接服務器和存儲資源,消除了不同存儲設備和服務器之間的連接障礙;提高了數據的共享性、可用性和可擴展性、管理性。 二、幾種傳統的網絡存儲架構 網絡存儲架構大致分為三種:直連附加存儲、網絡附加存儲、存儲區(qū)域網絡。這幾種網絡存儲方式特點各異,應用在不同的領域。下面我們來做簡單的介紹并分析其中區(qū)別。 2.1 直連附加存儲(DAS:Direct Attached Storage) 直接網絡存儲(DAS)是指將存儲設備通過SCSI接口或光纖通道直接連接到服務器上的方式。這種連接方式主要應用于單機或兩臺主機的集群環(huán)境中,主要優(yōu)點是存儲容量擴展的實施簡單,投入成本少,見效快。DAS主要應用于: ①服務器在地理分布上很分散,SAN或NAS在它們之間進行互連非常困難時; ②存儲系統必須被直接連接到應用服務器時; ③包括許多數據庫應用和應用服務器在內的應用時。 缺點: ①不能提供跨平臺的文件共享功能; ②用戶要備份數據和存儲數據,都要占用服務器CPU的時間,降低了服務器的管理效能; ③由于各個主機之間的數據獨立,數據需要逐一備份,使數據備份工作較為困難; ④隨著服務器的增多,數據管理會越來越復雜;增加存儲設備,擴展存儲容量,需要對服務器進行重新配置,這樣做容易中斷單位的業(yè)務連接性,造成數據丟失。 2.2 網絡附加存儲(NAS:Network Attached Storage) 網絡附加存儲(NAS)是一種將分布、獨立的數據整合為大型、集中化管理的數據中心,以便于對不同主機和應用服務器進行訪問的技術。NAS中服務器與存儲之間的通信使用TCP/IP協議,數據處理是“文件級”。NAS可附加大容量的存儲內嵌操作系統,專門針對文件系統進行重新設計和優(yōu)化以提供高效率的文件服務,降低了存儲設備的成本,數據傳輸速率也很高。 NAS應用于電子出版、CAD、圖像、教育、銀行、政府、法律環(huán)境等那些對數據量有較大需求的應用中。多媒體、Internet下載以及在線數據的增長,特別是那些要求存儲器能隨著公司文件大小規(guī)模而增長的企業(yè)、小型公司、大型組織的部門網絡,更需要這樣一個簡單的可擴展的方案。 缺點: ①NAS采用File I/O方式,因此當客戶端數目或來自客戶端的請求較多時,NAS服務器仍將成為系統的瓶頸; ②進行數據備份時需要占用LAN的帶寬,造成資源浪費; ③NAS只能對單個存儲(單個NAS內部)設備中的磁盤進行資源整合,目前還無法跨越不同的NAS設備,只能進行單獨管理,不適合密集型大規(guī)模的數據傳輸。 2.3 存儲區(qū)域網絡(SAN:Storage Area Network) SAN(Storage Area Network,存儲區(qū)域網),通常SAN由RAID陣列連接光纖通道(Fibre Channel)組成,SAN和服務器以及客戶機的數據通信通過SCSI命令而非TCP/IP,數據處理是“塊級”。 應用: ①數據共享由于存儲設備的中心化,大量的文件服務器可以低成本的存取和共享信息,同時也不會使系統性能有明顯下降; ②存儲共享兩個或多個服務器可以共享一個存儲單元,這個存儲單元在物理上可以被分成多個部分,而每個部分又連接在特定的服務器上; ③數據備份通過使用SAN,這些操作可以獨立于原來的網絡,從而能夠提高操作的性能; ④災難恢復傳統方法,當災難發(fā)生時,使用磁帶實現數據恢復。通過使用SAN,可采用多種手段實現數據的自動備份,而且這種備份是熱備份形式,也就是說,一旦數據出錯,立即可以獲得該數據的鏡像內容。 三、新的網絡存儲技術IP—SAN 網絡存儲的發(fā)展產生了一種新技術IP—SANt。IP—SAN是以IP為基礎的SAN存儲方案,是IP存儲技術應用的第三階段,是完全的端到端的、基于IP的全球SAN存儲。它充分利用了IP網絡的技術成熟、性能穩(wěn)定、傳輸距離遠、安裝實施簡單、后期維護量少的特點,可為用戶提供一個運行穩(wěn)定、實施簡單方便、價格低廉的大容量存儲系統,是一種可共同使用SAN與NAS,并遵循各項標準的純軟件解決方案。IP—SAN可讓用戶同時使用GigabitEtherne SCSI與Fibre Channel,建立以IP為基礎的網絡存儲基本架構,由于IP在局域網和廣域網上的應用以及良好的技術支持,在IP網絡中也可實現遠距離的塊級存儲,以IP協議替代光纖通道協議,IP協議用于網絡中實現用戶和服務器連接,隨著用于執(zhí)行1P協議的計算機的速度的提高及G比特的以太網的出現,基于IP協議的存儲網絡實現方案成為SAN的更佳選擇。 四、虛擬存儲 所謂虛擬存儲,就是把內存與外存有機的結合起來使用,從而得到一個容量很大的“內存”。以存儲網絡為中心的存儲解決不了全部的數據存儲問題,如存儲資源共享、數據共享、數據融合等。不少先進存儲系統的倡導者都提出,存儲作為一種資源,應該像我們日常生活中的自來水和電力一樣,隨時可以方便的存取和使用,這就是存儲公用設施模型,也是網絡存儲的發(fā)展目標。實現存儲公用設施模型的關鍵就是在網絡存儲基礎上實現統一虛擬存儲系統。目前存儲技術還處于存儲網絡階段,虛擬存儲才剛剛起步。 五、云存儲 云存儲是在云計算(Cloud computing)概念上延伸和發(fā)展出來的一個新的概念。云計算是是分布式處理(Distributed Computing)、并行處理(Parallel Computing)和網格計算(Grid Computing)的發(fā)展,是透過網絡將龐大的計算處理程序自動分拆成無數個較小的子程序,再交由多部服務器所組成的龐大系統經計算分析之后將處理結果回傳給用戶。 云存儲的概念與云計算類似,它是指通過集群應用、網格技術或分布式文件系統等功能,將網絡中大量各種不同類型的存儲設備通過應用軟件集合起來協同工作,共同對外提供數據存儲和業(yè)務訪問功能的一個系統。云存儲的核心是應用軟件與存儲設備相結合,通過應用軟件來實現存儲設備向存儲服務的轉變。 云存儲對使用者來講,不是指某一個具體的設備,而是指一個由許許多多個存儲設備和服務器所構成的集合體。用戶使用云存儲,并不是使用某一個存儲設備,而是使用整個云存儲系統帶來的一種數據訪問服務。所以嚴格來講,云存儲不是存儲,而是一種服務。 六、結束語 數據的重要性越來越得到人們的廣泛認同,未來網絡的核心將是數據,網絡化存儲正是數據存儲的一個發(fā)展方向。目前網絡存儲技術沿著三個主要的方向發(fā)展:NAS、SAN、IP—SAN。而SAN和NAS的融合將更有利于數據的存儲和備份,因此,SAN和NAS的融合、統一虛擬存儲技術是未來網絡存儲技術發(fā)展的兩個趨勢。 APEC領導人服裝全揭秘 2014年APEC領導人歡迎宴會在北京國家游泳中心“水立方”舉行。參加會議的各成員經濟體領導人身著中國特色服裝抵達現場時,受到隆重熱烈的歡迎。領導人拍攝了一張具有濃郁中國特色的亞太大家庭“全家?!闭掌?。 據APEC領導人服裝工作團隊人員介紹,為領導人制作特色中式服裝,雖然大多數都是按照其提供的尺寸,但有一些國家領導人的尺寸無法直接取得。設計師們開動腦筋,根據人體工程學,再加上多年的裁衣經驗,從領導人公開露面的新聞圖片中“目測”尺寸。從實際效果來看,設計師們的“眼光”都很準,令人嘆服。 為照顧領導人不同體型,采用中西結合的剪裁方式,表達中國意韻的同時更為合體、舒適。領導人穿在身上,透出的是一種圓融大氣,溫潤儒雅的氣質。 此次的APEC領導人服裝是一系列展示中國人新形象的中式服裝,其根為“中”,其魂為“禮”,其形為“新”,合此三者,謂之“新中裝”。 女領導人服裝為立領、對襟、連肩袖,雙宮緞面料、飾海水江崖紋外套。 為與會領導人及配偶提供了多種款式和顏色供自由選擇。其中,男領導人一款四式五色,女領導人一款兩色,女配偶外套及內搭各四款四色。 APEC領導人服裝面料織造團隊負責人吳建華介紹,近代以來,由于工藝復雜,產量較低,宋錦多為書畫裝潢使用,一般不作為衣料。但與蜀錦、云錦相比,宋錦質地堅柔,平服挺括,圖紋豐富而流暢生動,色彩艷而不火,繁而不亂,富有明麗古雅的韻味。2009年,宋錦被列入世界非物質遺產,逐漸走向全球。但是,領導人把宋錦這一“非遺”穿在身上,而且是在APEC這樣的舞臺上盛裝亮相,是宋錦的第一次,也是中國給APEC和世界帶來的一份驚喜。第二篇:從Google Spanner漫談分布式存儲與數據庫技術
第三篇:分布式太陽能技術(最終版)
第四篇:網絡存儲技術優(yōu)缺點與發(fā)展趨勢
第五篇:APEC領導人服裝全揭秘范文