本發明涉及數據處理技術領域,特別是指一種針對數據傾斜的均衡負載處理方法及裝置。
背景技術:
近年來,隨著互聯網的普及,人們不得不面對諸如電子商務、社交網絡等許多領域中數據的指數增長。越來越多的企業和學術機構選擇spark來處理基于云的大數據處理問題。spark是用于大規模數據處理的快速且通用的引擎,它在內存中運行程序的速度比hadoopmapreduce快100倍;在磁盤上運行時則快10倍。由于其出色的性能,spark已被諸如雅虎、e-bay、twitter、亞馬遜、阿里巴巴等公司廣泛使用。在學術領域,spark在2015年有超過1000個貢獻者,使其成為apachesoftwarefoundation中最活躍的項目之一,也是最活躍的開源大數據項目之一。
然而,spark不能有效地處理傾斜數據。對于reduce(規約)任務,分區傾斜將導致節點工作負載不平衡,這意味著一些reducer將接收更多的數據。在這種情況下,任務隊列將在這些負載大的reducer上堵塞,這將增加運行作業的完成時間,使系統性能惡化。由于sparkstreaming中的延遲可能疊加,極易導致延遲和堵塞。
針對現有技術中數據傾斜導致作業時間長、系統性能差的問題,目前尚無有效的解決方案。
技術實現要素:
有鑒于此,本發明實施例的目的在于提出一種針對數據傾斜的均衡負載處理方法及裝置,能夠弱化數據傾斜影響,降低作業時間,提高系統性能。
基于上述目的,本發明實施例提供了一種針對數據傾斜的均衡負載處理方法,包括:
采集某一批次的流式數據并映射為中間結果;
生成中間結果的復件,對所述復件進行分析并更新參考表;
根據哈希算法與參考表將中間結果分配到多個桶中;
從桶中提取中間結果進行規約。
在一些實施方式中,所述中間結果為由鍵值對組成的集合,其中,所述中間結果包括多個簇,簇為與某一特定鍵對應的所有鍵值對的集合。
在一些實施方式中,對所述復件進行分析并更新參考表,包括:
對所述復件進行等距采樣獲得樣本數據;
對樣本數據中的所有鍵值對進行統計,獲得鍵的統計數;
根據鍵的統計數與桶數量確定桶平均容量閾值并生成參考表。
在一些實施方式中,根據鍵的統計數與桶數量確定桶平均容量閾值并生成參考表,包括:
根據鍵的統計數確定每個桶中的鍵值對數量;
根據每個桶中的鍵值對數量與桶數量確定桶平均容量閾值;
根據每個桶中的鍵值對數量生成參考表。
在一些實施方式中,根據哈希算法與參考表將中間結果分配到多個桶中,包括:確定中間結果中的所有簇的大小并按照由大到小的順序排列;
依次選取簇并根據被選取簇對應的鍵與哈希算法確定被選取簇應對應的桶;
根據被選取簇應對應的桶的剩余空間大小、被選取簇的大小與其他桶剩余空間大小更新參考表;
根據參考表將中間結果分配到多個桶中。
在一些實施方式中:
所述桶剩余空間大小為桶平均容量閾值與當前桶內所有簇大小之和的差;
所述根據被選取簇應對應的桶剩余空間大小、被選取簇的大小與其他桶剩余空間大小更新參考表,包括:
當被選取簇應對應的桶剩余空間大小大于被選取簇的大小時,不更新參考表;
當被選取簇應對應的桶剩余空間大小小于被選取簇的大小,但存在其他桶剩余空間大小大于被選取簇的大小時,被選取簇將被從被選取簇應對應的桶分配到其他桶,把遷移記錄更新在參考表中;
當被選取簇應對應的桶剩余空間大小小于被選取簇的大小,且不存在其他桶剩余空間大小大于被選取簇的大小時,不更新參考表。
在一些實施方式中,所述根據參考表將中間結果分配到多個桶中,包括:
當被選取簇在參考表中具有遷移記錄時,將被選取簇按照遷移記錄遷移到被分配到的其他桶中;
當被選取簇在參考表中沒有遷移記錄時,將被選取簇按照哈希算法遷移到被選取簇應對應的桶中。
在一些實施方式中,根據哈希算法與參考表將中間結果分配到多個桶中之后,計算每個桶的數據傾斜度。
在一些實施方式中,所述計算每個桶的數據傾斜度包括:
根據每個桶中的鍵值對數量與桶數量確定所有桶中鍵值對的平均數量;
根據每個桶中的鍵值對數量與所有桶中鍵值對的平均數量計算每個桶的數據傾斜度。
基于上述目的,本發明實施例還提供了一種電子設備,包括至少一個處理器;以及,與所述至少一個處理器通信連接的存儲器;其中,所述存儲器存儲有可被所述至少一個處理器執行的指令,所述指令被所述至少一個處理器執行,以使所述至少一個處理器能夠執行上述方法。
從上面所述可以看出,本發明實施例提供的針對數據傾斜的均衡負載處理方法及裝置通過使用采集某一批次的流式數據并映射為中間結果,生成中間結果的復件進行分析并更新參考表,根據哈希算法與參考表將中間結果分配到多個桶中,提取中間結果進行規約的技術手段,弱化了數據傾斜,降低了作業時間,提高了系統性能。
附圖說明
為了更清楚地說明本發明實施例或現有技術中的技術方案,下面將對實施例或現有技術描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發明的一些實施例,對于本領域普通技術人員來講,在不付出創造性勞動的前提下,還可以根據這些附圖獲得其他的附圖。
圖1為本發明提供的針對數據傾斜的均衡負載處理方法的流程示意圖;
圖2為本發明提供的針對數據傾斜的均衡負載處理方法的shuffle過程示意圖;
圖3為本發明提供的針對數據傾斜的均衡負載處理方法的shuffle數據分配示意圖;
圖4為本發明提供的針對數據傾斜的均衡負載處理方法的數據框架示意圖;
圖5為本發明提供的針對數據傾斜的均衡負載處理方法的替換策略示意圖;
圖6為本發明提供的執行所述針對數據傾斜的均衡負載處理方法的電子設備的一個實施例的硬件結構示意圖。
具體實施方式
為使本發明的目的、技術方案和優點更加清楚明白,以下結合具體實施例,并參照附圖,對本發明實施例進一步詳細說明。
需要說明的是,本發明實施例中所有使用“第一”和“第二”的表述均是為了區分兩個相同名稱非相同的實體或者非相同的參量,可見“第一”“第二”僅為了表述的方便,不應理解為對本發明實施例的限定,后續實施例對此不再一一說明。
基于上述目的,本發明實施例的第一個方面,提出了一種能夠針對不同用戶或不同類型的節點進行針對數據傾斜的均衡負載處理的針對數據傾斜的均衡負載處理方法的第一個實施例。
圖1所示出的是本發明提供的針對數據傾斜的均衡負載處理方法的第一個實施例的流程示意圖。所述針對數據傾斜的均衡負載處理方法包括:
步驟s101,采集某一批次的流式數據并映射為中間結果;
步驟s103,生成中間結果的復件,對所述復件進行分析并更新參考表;
步驟s105,根據哈希算法與參考表將中間結果分配到多個桶中;
步驟s107,從桶中提取中間結果進行規約。
在一些實施方式中,所述中間結果為由鍵值對組成的集合,其中,所述中間結果包括多個簇,簇為與某一特定鍵對應的所有鍵值對的集合。
在一些實施方式中,對所述復件進行分析并更新參考表,包括:
對所述復件進行等距采樣獲得樣本數據;
對樣本數據中的所有鍵值對進行統計,獲得鍵的統計數;
根據鍵的統計數與桶數量確定桶平均容量閾值并生成參考表。
在一些實施方式中,根據鍵的統計數與桶數量確定桶平均容量閾值并生成參考表,包括:
根據鍵的統計數確定每個桶中的鍵值對數量;
根據每個桶中的鍵值對數量與桶數量確定桶平均容量閾值;
根據每個桶中的鍵值對數量生成參考表。
在一些實施方式中,所述根據哈希算法與參考表將中間結果分配到多個桶中,包括:
確定中間結果中的所有簇的大小并按照由大到小的順序排列;
依次選取每一個簇并根據哈希算法確定被選取簇應對應的桶;
根據被選取簇應對應的桶剩余空間大小、被選取簇的大小與其他桶剩余空間大小更新參考表;
根據參考表將中間結果分配到多個桶中。
在一些實施方式中:
所述桶剩余空間大小為桶平均容量閾值與當前桶內所有簇大小之和的差;
所述根據被選取簇應對應的桶剩余空間大小、被選取簇的大小與其他桶剩余空間大小更新參考表,包括:
當被選取簇應對應的桶剩余空間大小大于被選取簇的大小時,不更新參考表;
當被選取簇應對應的桶剩余空間大小小于被選取簇的大小,但存在其他桶剩余空間大小大于被選取簇的大小時,被選取簇將被從被選取簇應對應的桶分配到其他桶,把遷移記錄更新在參考表中;
當被選取簇應對應的桶剩余空間大小小于被選取簇的大小,且不存在其他桶剩余空間大小大于被選取簇的大小時,不更新參考表。
在一些實施方式中,所述根據參考表將中間結果分配到多個桶中,包括:
當被選取簇在參考表中具有遷移記錄時,將被選取簇按照遷移記錄遷移到被分配到的其他桶中;
當被選取簇在參考表中沒有遷移記錄時,將被選取簇按照哈希算法遷移到被選取簇應對應的桶中。
在一些實施方式中,根據哈希算法與參考表將中間結果分配到多個桶中之后,計算每個桶的數據傾斜度。
在一些實施方式中,所述計算每個桶的數據傾斜度包括:
根據每個桶中的鍵值對數量與桶數量確定所有桶中鍵值對的平均數量;
根據每個桶中的鍵值對數量與所有桶中鍵值對的平均數量計算每個桶的數據傾斜度。
從上述實施例可以看出,本發明實施例提供的針對數據傾斜的均衡負載處理方法通過使用采集某一批次的流式數據并映射為中間結果,生成中間結果的復件進行分析并更新參考表,根據哈希算法與參考表將中間結果分配到多個桶中,提取中間結果進行規約的技術手段,弱化了數據傾斜,降低了作業時間,提高了系統性能。
基于上述目的,本發明實施例的第二個方面,提出了一種能夠針對不同用戶或不同類型的用戶進行針對數據傾斜的均衡負載處理方法的第二個實施例。
spark圍繞著彈性分布式數據集(rdd)的概念,這是一個可以并行操作的容錯元素集合。spark在包含任何類型的對象的rdd上的操作,像“shuffle”這樣的特殊操作只能用于鍵值對型的rdd。shuffle十分常見,它是spark用于重新分發數據的機制,例如通過鍵來分組或聚合元素。在spark中,數據通常不會跨分區分布到特定操作所需的位置。在計算期間,單個任務將在單個分區上操作。要組織單個reduce任務的所有數據以執行,spark需要執行一個all-to-all操作。它必須從所有分區讀取以找到所有鍵的所有值,然后將各分區中對應某鍵的值匯集在一起以計算每個鍵的最終結果,這被稱為shuffle。為了整理shuffle的數據,spark生成一組map(映射)任務來組織數據,一組reduce(規約)任務來聚合它。與mapreduce中的shuffle類似,spark中的shuffle對mapper的輸出分區,并將它們發送到不同的reducer。
如圖2所示,mapper和reducer分別是map任務和reduce任務的容器。在這個框架中,輸出數據被組織為簇,并在mapper和reducer之間傳輸,簇是所有共享同一個鍵的鍵值對的集合,桶是相關reducer收集map任務輸出的數組緩沖區。“shufflewrite”表示將簇發送到桶的過程。spark中的標準實現使用哈希法將簇分配到桶中。對于某些種類的數據,默認哈希可能導致這些桶的大小不同。“shufflefetch”顯示reducer從桶中提取數據,并且由相同reducer處理的所有簇構成一個分區。由于分區的大小由相關鍵值對的數量決定,我們將鍵的不均勻分布描述為“鍵傾斜”,我們也可以將其稱為“數據傾斜”。鍵傾斜導致不同的分區大小,這可以被描述為“分區傾斜”,并且它可能導致不同reducer的工作負載之間的巨大差距。由于中間數據鍵傾斜總是存在,尤其是對于內存計算框架,它已經成為spark分布式環境中的主要性能瓶頸之一。
圖3展示出的是spark中基于哈希法的簇的默認分配機制。輸入數據分配給map任務,map任務處理這些數據,并產生中間輸出,通常這些中間輸出將被用哈希法分區到相應的桶中。這些中間輸出都是鍵值對,擁有同一個鍵的鍵值對集合是簇。由于擁有同一個鍵的鍵值對的量是不同的,所以各簇的尺寸不相等。
我們設有m種鍵,并且桶的數量為n。本發明實施例使用i來表示來自map任務的中間結果:
其中,k表示鍵,v表示值,k和v分別是鍵和值的集合:
k={k1,k2,…,km},(2)
放入同一個桶j的鍵被描述為:
其中,lj是桶j中的鍵數目,0≤lj≤m。
中間結果根據元組的鍵被分配到各個桶。通過這種方式,屬于同一簇的所有元組被放置在同一個桶中。因此,桶是一個或多個簇的“容器”。我們可以將桶j形式化為:
在該模型中,為了量化由桶接收的簇,考慮數據傾斜的影響,一些初始和中間對象與他們的關系可以被形式化如下。
桶j包含的鍵值對的數量被表示為bsj:
在此基礎上,我們可以計算所有桶的鍵值元組的平均數量:
其中,元素nb是桶數目。
為了測量桶的數據傾斜度,我們提出一種指示符dsdob(桶的數據傾斜度)來量化數據傾斜:
dsdob的值越小,分區傾斜越弱。本發明實施例把通過哈希法處理數據時計算的dsdob值當作數據傾斜度。
spark中的傳統分配機制缺乏對內部數據分布的感知。基于對流數據的采樣,本文提出了一種改進的計算框架,以預測到達數據的不同鍵的近似比例,預測結果可以用作負載均衡分區策略的基礎。
圖4示出了一個關于sparkstreaming的改進架構。sparkstreaming接收實時輸入數據流,并將數據分成批次,然后由spark引擎處理以批量生成最終結果流。與spark引擎中的其他partitioner方法相比,我們提出的sp-partitoner包含兩個模塊:采樣與分析模塊和分配模塊。
在數據采樣與分析模塊中,為了獲得簇的分配策略,有必要預測中間鍵的分布。第一步是采樣。為了滿足簡單準確的標準,我們采用等距采樣獲取樣本數據。后到來的中間數據中的所有簇的大體尺寸可以利用樣本數據中的鍵的統計數來預測。后到來的中間數據是經過map階段的數據的結果。默認第一批數據是第一個樣本。為了不影響我們的應用程序的處理過程,樣本數據將被復制。
如圖4所示,本發明實施例選擇第(x-1)批次的數據作為樣本。我們復制這個樣本得到復件(x-1)來作為分析函數的輸入數據。之后,分析函數將計算出樣本數據中的鍵的統計數,以生成均衡分區策略的參考表,參考表將指明如何將簇分配給桶。在本文中,如何分配簇取決于目標桶的閾值。為了盡可能公平地填充目標桶,一旦簇太大而超出桶閾值,那它將被分配給其他桶,除非所有其他的桶不能容納它。所有分配策略將被存儲在參考表中,作為對接下來到來的數據的數據分布的預測,以指導對它們的分配。通過這樣,我們可以減輕分區傾斜。
參考表記錄兩個細節,一個是這些遷移的簇的鍵,另一個是它們移入其中的桶的地址。這兩個細節信息分別被標記為“key”和“bucketid”。
在分配模塊中,分配函數是核心。當處理鍵值對時,其鍵位于參考表中的鍵值對將獲得相應的桶id,而其他鍵值對仍將通過默認哈希法來分區,以降低復雜性。
在分配模塊之后,結果可以由其他操作處理,最終結果將按時間順序輸出。如圖4所示,第(x-1)批處理的結果是數據(x-1)。考慮到中間鍵在數據中的分布可能隨時間改變,預測將變得不準確。因此,隨著每個批次數據到達,數據采樣將周期性地進行,其中s是步長,s>0,并且在最新采樣之后的第s批數據將被選擇為下一樣本。圖4中的s等于3,因此選擇第(x+2)批數據作為下一個樣本。
在圖4中的采樣與分析模塊中,復制過程保證了作為樣本的那批數據的正常處理不會受到影響,因為所有的分析操作都對復制數據執行。在獲得諸如鍵、這些鍵對應的簇和這些簇對應的桶id之類的統計數據之后,直接計算樣本的數據傾斜度。我們將每個桶的閾值記錄為
其中msample是簇的數量,
如圖5所示,在開始時,
如圖5所示,在哈希法下,應該把簇1到簇4分配到桶1中,應該把簇4和簇5分配到桶2中,并且應該把簇7到簇9分配到桶m中。很明顯,這些桶中數據量不相等。通過替換策略,首先分配較大的簇。當簇8太大而不能被分配到桶m中時,它被移動到桶2中,并且該遷移被記錄在參考表中,“key”為簇8的鍵且“bucketid”為2。接下來,簇3遇到沒有桶可以容納它的問題,所以它被留在桶1中。現在桶1的大小已經達到閾值,簇4必須去其他桶,幸運的是,它足夠小,可以被分配到桶m中,因此這個遷移被記錄在參考表中,“key”為簇4的鍵,“bucketid”為m。
在所有這些鍵值對被分配之前,將檢查其鍵是否在參考表中。當鍵在參考表中時,其對應的鍵值對將被分配到參考表中相關“bucketid”指向的桶。如果不在,鍵值對分配將遵循哈希法。
本發明實施例開發了算法spp如下。
首先,復制樣本數據。
從第2行到第7行的偽代碼展示了初始工作。當樣本數據的副本被獲得時,首先對所有簇的大小進行統計,然后計算桶的平均大小。所有桶的剩余空間被初始化為桶的平均大小。根據sparkstreaming的處理機制,我們可以將一批樣本數據的數據量作為每批數據的預測數據量。由于數據批次間隔時間固定,當數據輸入速率穩定時,一批數據的數據量也會穩定。
第10行檢查簇是否可以被分配到默認桶中,當此簇超大時,算法spp將檢查其他桶是否可以容納它,如第14行所示。最終,簇將被分配給可以容納它們的桶或它們的默認桶,在那之后,得到簇的桶的剩余空間將被重新計算,如第12行、第18行和第21行所示。
在最好的情況下,默認桶總是能夠容納簇,因此時間復雜度為o(1)。最糟糕的情況是,簇不能被分配給任何桶,它們必須放在默認桶中。在這種情況下,時間復雜度為o(n)。綜上所述,我們的算法spp的時間復雜度是o(n),因此,我們的算法的實現并不難,也意味著分析模塊將只占很少時間。
本發明實施例專注于如何將map任務的輸出數據放置到合適的桶中。對于map任務的輸出,spark中的默認中間數據分派機制不能達到滿足傾斜數據的效率。緩解數據傾斜對于提高spark性能非常重要。在本研究中,我們提出了一個名為sp-partitioner的新partitioner。它是分區傾斜問題的實際解決方案,非常適合流計算模式,此外,它在sparkstreaming中表現良好。實驗驗證可以通過在sp-partitioner中的數據替換來改進用于map任務的數據容器之間的負載均衡。本發明實施例通過在虛擬機集群中的實驗來評估sp-partitioner的有效性,與兩個現有partitioner:hashpartitioner和rangepartitioner相比,我們的sp-partitioner能夠有效地提高sparkstreaming的處理性能。
基于上述目的,本發明實施例的第三個方面,提出了一種執行所述針對數據傾斜的均衡負載處理方法的電子設備的一個實施例。
所述執行所述針對數據傾斜的均衡負載處理方法的電子設備包括至少一個處理器;以及與所述至少一個處理器通信連接的存儲器;其中,所述存儲器存儲有可被所述至少一個處理器執行的指令,所述指令被所述至少一個處理器執行,以使所述至少一個處理器能夠執行如上所述任意一種方法。
如圖6所示,為本發明提供的執行所述實時通話中的語音處理方法的電子設備的一個實施例的硬件結構示意圖。以如圖6所示的電子設備為例,在該電子設備中包括一個處理器601以及一個存儲器602,并還可以包括:輸入裝置603和輸出裝置604。
處理器601、存儲器602、輸入裝置603和輸出裝置604可以通過總線或者其他方式連接,圖6中以通過總線連接為例。
存儲器602作為一種非易失性計算機可讀存儲介質,可用于存儲非易失性軟件程序、非易失性計算機可執行程序以及模塊,如本申請實施例中的所述針對數據傾斜的均衡負載處理方法對應的程序指令/模塊。處理器601通過運行存儲在存儲器602中的非易失性軟件程序、指令以及模塊,從而執行服務器的各種功能應用以及數據處理,即實現上述方法實施例的針對數據傾斜的均衡負載處理方法。
存儲器602可以包括存儲程序區和存儲數據區,其中,存儲程序區可存儲操作系統、至少一個功能所需要的應用程序;存儲數據區可存儲根據針對數據傾斜的均衡負載處理裝置的使用所創建的數據等。此外,存儲器602可以包括高速隨機存取存儲器,還可以包括非易失性存儲器,例如至少一個磁盤存儲器件、閃存器件、或其他非易失性固態存儲器件。在一些實施例中,存儲器602可選包括相對于處理器601遠程設置的存儲器,這些遠程存儲器可以通過網絡連接至節點。上述網絡的實例包括但不限于互聯網、企業內部網、局域網、移動通信網及其組合。
輸入裝置603可接收輸入的數字或字符信息,以及產生與針對數據傾斜的均衡負載處理裝置的用戶設置以及功能控制有關的鍵信號輸入。輸出裝置604可包括顯示屏等顯示設備。
所述一個或者多個模塊存儲在所述存儲器602中,當被所述處理器601執行時,執行上述任意方法實施例中的針對數據傾斜的均衡負載處理方法。
所述執行所述針對數據傾斜的均衡負載處理方法的電子設備的任何一個實施例,可以達到與之對應的前述任意方法實施例相同或者相類似的效果。
本領域普通技術人員可以理解實現上述實施例方法中的全部或部分流程,是可以通過計算機程序來指令相關硬件來完成,所述的程序可存儲于一計算機可讀取存儲介質中,該程序在執行時,可包括如上述各方法的實施例的流程。其中,所述的存儲介質可為磁碟、光盤、只讀存儲記憶體(read-onlymemory,rom)或隨機存儲記憶體(randomaccessmemory,ram)等。所述計算機程序的實施例,可以達到與之對應的前述任意方法實施例相同或者相類似的效果。
此外,典型地,本公開所述的裝置、設備等可為各種電子終端設備,例如手機、個人數字助理(pda)、平板電腦(pad)、智能電視等,也可以是大型終端設備,如服務器等,因此本公開的保護范圍不應限定為某種特定類型的裝置、設備。本公開所述的客戶端可以是以電子硬件、計算機軟件或兩者的組合形式應用于上述任意一種電子終端設備中。
此外,根據本公開的方法還可以被實現為由cpu執行的計算機程序,該計算機程序可以存儲在計算機可讀存儲介質中。在該計算機程序被cpu執行時,執行本公開的方法中限定的上述功能。
此外,上述方法步驟以及系統單元也可以利用控制器以及用于存儲使得控制器實現上述步驟或單元功能的計算機程序的計算機可讀存儲介質實現。
此外,應該明白的是,本文所述的計算機可讀存儲介質(例如,存儲器)可以是易失性存儲器或非易失性存儲器,或者可以包括易失性存儲器和非易失性存儲器兩者。作為例子而非限制性的,非易失性存儲器可以包括只讀存儲器(rom)、可編程rom(prom)、電可編程rom(eprom)、電可擦寫可編程rom(eeprom)或快閃存儲器。易失性存儲器可以包括隨機存取存儲器(ram),該ram可以充當外部高速緩存存儲器。作為例子而非限制性的,ram可以以多種形式獲得,比如同步ram(dram)、動態ram(dram)、同步dram(sdram)、雙數據速率sdram(ddrsdram)、增強sdram(esdram)、同步鏈路dram(sldram)以及直接rambusram(drram)。所公開的方面的存儲設備意在包括但不限于這些和其它合適類型的存儲器。
本領域技術人員還將明白的是,結合這里的公開所描述的各種示例性邏輯塊、模塊、電路和算法步驟可以被實現為電子硬件、計算機軟件或兩者的組合。為了清楚地說明硬件和軟件的這種可互換性,已經就各種示意性組件、方塊、模塊、電路和步驟的功能對其進行了一般性的描述。這種功能是被實現為軟件還是被實現為硬件取決于具體應用以及施加給整個系統的設計約束。本領域技術人員可以針對每種具體應用以各種方式來實現所述的功能,但是這種實現決定不應被解釋為導致脫離本公開的范圍。
結合這里的公開所描述的各種示例性邏輯塊、模塊和電路可以利用被設計成用于執行這里所述功能的下列部件來實現或執行:通用處理器、數字信號處理器(dsp)、專用集成電路(asic)、現場可編程門陣列(fpga)或其它可編程邏輯器件、分立門或晶體管邏輯、分立的硬件組件或者這些部件的任何組合。通用處理器可以是微處理器,但是可替換地,處理器可以是任何傳統處理器、控制器、微控制器或狀態機。處理器也可以被實現為計算設備的組合,例如,dsp和微處理器的組合、多個微處理器、一個或多個微處理器結合dsp核、或任何其它這種配置。
結合這里的公開所描述的方法或算法的步驟可以直接包含在硬件中、由處理器執行的軟件模塊中或這兩者的組合中。軟件模塊可以駐留在ram存儲器、快閃存儲器、rom存儲器、eprom存儲器、eeprom存儲器、寄存器、硬盤、可移動盤、cd-rom、或本領域已知的任何其它形式的存儲介質中。示例性的存儲介質被耦合到處理器,使得處理器能夠從該存儲介質中讀取信息或向該存儲介質寫入信息。在一個替換方案中,所述存儲介質可以與處理器集成在一起。處理器和存儲介質可以駐留在asic中。asic可以駐留在用戶終端中。在一個替換方案中,處理器和存儲介質可以作為分立組件駐留在用戶終端中。
在一個或多個示例性設計中,所述功能可以在硬件、軟件、固件或其任意組合中實現。如果在軟件中實現,則可以將所述功能作為一個或多個指令或代碼存儲在計算機可讀介質上或通過計算機可讀介質來傳送。計算機可讀介質包括計算機存儲介質和通信介質,該通信介質包括有助于將計算機程序從一個位置傳送到另一個位置的任何介質。存儲介質可以是能夠被通用或專用計算機訪問的任何可用介質。作為例子而非限制性的,該計算機可讀介質可以包括ram、rom、eeprom、cd-rom或其它光盤存儲設備、磁盤存儲設備或其它磁性存儲設備,或者是可以用于攜帶或存儲形式為指令或數據結構的所需程序代碼并且能夠被通用或專用計算機或者通用或專用處理器訪問的任何其它介質。此外,任何連接都可以適當地稱為計算機可讀介質。例如,如果使用同軸線纜、光纖線纜、雙絞線、數字用戶線路(dsl)或諸如紅外線、無線電和微波的無線技術來從網站、服務器或其它遠程源發送軟件,則上述同軸線纜、光纖線纜、雙絞線、dsl或諸如紅外先、無線電和微波的無線技術均包括在介質的定義。如這里所使用的,磁盤和光盤包括壓縮盤(cd)、激光盤、光盤、數字多功能盤(dvd)、軟盤、藍光盤,其中磁盤通常磁性地再現數據,而光盤利用激光光學地再現數據。上述內容的組合也應當包括在計算機可讀介質的范圍內。
公開的示例性實施例,但是應當注公開的示例性實施例,但是應當注意,在不背離權利要求限定的本公開的范圍的前提下,可以進行多種改變和修改。根據這里描述的公開實施例的方法權利要求的功能、步驟和/或動作不需以任何特定順序執行。此外,盡管本公開的元素可以以個體形式描述或要求,但是也可以設想多個,除非明確限制為單數。
應當理解的是,在本文中使用的,除非上下文清楚地支持例外情況,單數形式“一個”(“a”、“an”、“the”)旨在也包括復數形式。還應當理解的是,在本文中使用的“和/或”是指包括一個或者一個以上相關聯地列出的項目的任意和所有可能組合。
上述本公開實施例序號僅僅為了描述,不代表實施例的優劣。
本領域普通技術人員可以理解實現上述實施例的全部或部分步驟可以通過硬件來完成,也可以通過程序來指令相關的硬件完成,所述的程序可以存儲于一種計算機可讀存儲介質中,上述提到的存儲介質可以是只讀存儲器,磁盤或光盤等。
所屬領域的普通技術人員應當理解:以上任何實施例的討論僅為示例性的,并非旨在暗示本公開的范圍(包括權利要求)被限于這些例子;在本發明實施例的思路下,以上實施例或者不同實施例中的技術特征之間也可以進行組合,并存在如上所述的本發明實施例的不同方面的許多其它變化,為了簡明它們沒有在細節中提供。因此,凡在本發明實施例的精神和原則之內,所做的任何省略、修改、等同替換、改進等,均應包含在本發明實施例的保護范圍之內。