国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于微服務(wù)構(gòu)建模型的應(yīng)用系統(tǒng)增量更新算法

2018-03-13 05:18徐亮亮
關(guān)鍵詞:增量消耗子系統(tǒng)

黃 林,楊 軍,徐亮亮

(華北計(jì)算技術(shù)研究所基礎(chǔ)四部,北京 100083)

0 引 言

“微服務(wù)+微應(yīng)用”架構(gòu)[1-4]是近年興起的新型應(yīng)用系統(tǒng)構(gòu)建模型,具有架構(gòu)靈活、高內(nèi)聚、低耦合、有效支持DevOps[5](開(kāi)發(fā)運(yùn)維一體化)等新型特征,是有效響應(yīng)需求靈活多變的新型軟件架構(gòu)模式,在互聯(lián)網(wǎng)企業(yè)中得到了廣泛應(yīng)用。

應(yīng)用系統(tǒng)與完全自由的互聯(lián)網(wǎng)應(yīng)用相比,除了響應(yīng)用戶(hù)的修改需求,還具備較多的集中管理功能,往往需要以應(yīng)用系統(tǒng)而非一堆零散的APP形式發(fā)布,經(jīng)常要求在特定時(shí)間集中完成系統(tǒng)全面更新任務(wù),集中更新將會(huì)對(duì)后臺(tái)部署服務(wù)器造成集中式壓力,同時(shí)會(huì)在網(wǎng)絡(luò)上造成大量的應(yīng)用下載流量,這些都需要有創(chuàng)新的系統(tǒng)升級(jí)方法。

增量升級(jí)已有一些算法被廣泛應(yīng)用,比如Bsdiff算法[6]、Xdelta3算法[7]等,但是這些算法通常只應(yīng)用于單個(gè)應(yīng)用的增量升級(jí),在對(duì)大型的應(yīng)用系統(tǒng)進(jìn)行增量升級(jí)時(shí)效率低下,當(dāng)網(wǎng)絡(luò)環(huán)境不好時(shí),整體更新時(shí)間過(guò)長(zhǎng),容易超時(shí)導(dǎo)致更新失敗,應(yīng)用系統(tǒng)發(fā)生頻繁更新時(shí),應(yīng)用系統(tǒng)更新的塊會(huì)比較集中。如何高效查找有差異的更新塊也是急需解決的問(wèn)題。

本文針對(duì)大型應(yīng)用系統(tǒng)提出一種基于微服務(wù)構(gòu)建模型的應(yīng)用系統(tǒng)增量更新算法ASIUpdate(Application System Increment Update),通過(guò)細(xì)粒度分層次的系統(tǒng)劃分,利用二分法有效地將大型應(yīng)用系統(tǒng)進(jìn)行分解,有利于準(zhǔn)確增量更新,提高增量升級(jí)效率。一般情況下,程序修改是局部性的,版本的升級(jí)只會(huì)影響其中的一部分,大型系統(tǒng)進(jìn)行分解后,每個(gè)局部會(huì)變得很小,增量升級(jí)的對(duì)象也很小,效率會(huì)提升很快。利用空間局部性原理[8],采用標(biāo)記每次發(fā)生變化的功能塊的方法,減少頻繁更新時(shí)查找塊的時(shí)間。

1 應(yīng)用系統(tǒng)功能構(gòu)成及其構(gòu)建模型

1.1 應(yīng)用系統(tǒng)構(gòu)成

一個(gè)功能完善、實(shí)用、擴(kuò)展性良好的應(yīng)用系統(tǒng)[9]按照職能管理劃分應(yīng)該包括以下7個(gè)子系統(tǒng)(如圖1所示):生產(chǎn)管理子系統(tǒng)、供應(yīng)管理子系統(tǒng)、市場(chǎng)銷(xiāo)售子系統(tǒng)、財(cái)務(wù)管理子系統(tǒng)、人力資源子系統(tǒng)、設(shè)備管理子系統(tǒng)、高層決策子系統(tǒng)。

圖1 應(yīng)用系統(tǒng)構(gòu)成

1.2 基于微服務(wù)的應(yīng)用系統(tǒng)構(gòu)建模型

典型的應(yīng)用系統(tǒng)EAI構(gòu)建模型[10]包含應(yīng)用集成框架、圖形化集成開(kāi)發(fā)工具、流程管理器、監(jiān)控管理工具、統(tǒng)計(jì)分析工具等組件,其模型結(jié)構(gòu)如圖2所示。

圖2 應(yīng)用系統(tǒng)EAI模型

應(yīng)用系統(tǒng)EAI模型不利于細(xì)粒度地對(duì)應(yīng)用系統(tǒng)進(jìn)行區(qū)塊劃分,而基于微服務(wù)的應(yīng)用系統(tǒng)構(gòu)建模型,通過(guò)細(xì)粒度分層次的系統(tǒng)劃分,可有效地解決大型應(yīng)用系統(tǒng)的復(fù)雜性。本文基于微服務(wù)架構(gòu)的應(yīng)用系統(tǒng),結(jié)合傳統(tǒng)的CS架構(gòu)模型可分為服務(wù)端和客戶(hù)端進(jìn)行描述:

1)服務(wù)端。如圖3所示,業(yè)務(wù)系統(tǒng)下包含云服務(wù),云服務(wù)下包含微服務(wù),微服務(wù)再是服務(wù)集群。

圖3 服務(wù)端

服務(wù)端將微服務(wù)進(jìn)行分組,每組微服務(wù)對(duì)應(yīng)多個(gè)微應(yīng)用構(gòu)成云服務(wù),微應(yīng)用[11]針對(duì)同業(yè)務(wù)開(kāi)發(fā)小型系統(tǒng),提供更靈活、更個(gè)性化、更快速響應(yīng)、更具可擴(kuò)展性的服務(wù),也更方便第三方開(kāi)發(fā)商的接入。這些微服務(wù)運(yùn)行在服務(wù)集群上,而這種云[12]是基于“云計(jì)算”[13-14]技術(shù),通過(guò)使用計(jì)算分布在大量的分布式[15-17]計(jì)算機(jī)上,而非本地計(jì)算機(jī)或遠(yuǎn)程服務(wù)器中,實(shí)現(xiàn)各種終端設(shè)備之間的互聯(lián)互通。用戶(hù)享受的所有資源、所有應(yīng)用程序全部都由一個(gè)存儲(chǔ)和運(yùn)算能力超強(qiáng)的云端后臺(tái)來(lái)提供。服務(wù)集群則是將很多服務(wù)器集中起來(lái)一起進(jìn)行同一種服務(wù),在客戶(hù)端看來(lái)就像是只有一臺(tái)服務(wù)器,集群可以利用多個(gè)計(jì)算機(jī)進(jìn)行并行計(jì)算從而獲得很高的計(jì)算速度,也可以用多個(gè)計(jì)算機(jī)做備份,從而使得任何一個(gè)機(jī)器出現(xiàn)了故障整個(gè)系統(tǒng)還是能正常運(yùn)行。

2)客戶(hù)端。如圖4所示,業(yè)務(wù)系統(tǒng)下包含子系統(tǒng),子系統(tǒng)下包含應(yīng)用,應(yīng)用表現(xiàn)為二進(jìn)制文件。

圖4 客戶(hù)端

客戶(hù)端以子系統(tǒng)的形式展現(xiàn)給用戶(hù),這里的端為客戶(hù)提供本地服務(wù)的程序,除了一些只在本地運(yùn)行的應(yīng)用程序之外,一般安裝在普通的客戶(hù)機(jī)上,需要與服務(wù)端互相配合運(yùn)行。而子系統(tǒng)則是包含很多應(yīng)用的一個(gè)集合。子系統(tǒng)的行為由它所包含的應(yīng)用提供,子系統(tǒng)實(shí)現(xiàn)一個(gè)或多個(gè)接口,這些接口定義子系統(tǒng)可以執(zhí)行的行為。

服務(wù)端和客戶(hù)端可以用集合來(lái)表示:

S={CS1, CS2, CS3, …, CSn}

CS={a1, a2, a3, …, an}

其中:S表示整個(gè)應(yīng)用系統(tǒng)由子系統(tǒng)CS1, CS2, CS3, …, CSn構(gòu)成的集合,單個(gè)子系統(tǒng)CS也是集合,由應(yīng)用a1, a2, a3, …, an組合而成。

基于微服務(wù)的應(yīng)用系統(tǒng)構(gòu)建模型有利于對(duì)應(yīng)用系統(tǒng)進(jìn)行合理的區(qū)塊劃分,方便拆分成塊進(jìn)行增量更新。

2 應(yīng)用系統(tǒng)版本增量升級(jí)算法與實(shí)現(xiàn)

一個(gè)大型復(fù)雜軟件應(yīng)用拆分成多個(gè)微服務(wù)組成,系統(tǒng)中的各個(gè)微服務(wù)可被獨(dú)立部署,各個(gè)微服務(wù)之間是松耦合的,每個(gè)微服務(wù)僅關(guān)注于完成一件任務(wù)并很好地完成該任務(wù),在所有情況下,每個(gè)任務(wù)代表著一個(gè)小的業(yè)務(wù)能力。ASIUpdate算法經(jīng)過(guò)對(duì)基于微服務(wù)應(yīng)用系統(tǒng)構(gòu)建模型,將應(yīng)用系統(tǒng)進(jìn)行細(xì)粒度的分層區(qū)塊劃分,拆分成多個(gè)子系統(tǒng),再對(duì)子系統(tǒng)進(jìn)行拆分成多個(gè)應(yīng)用,通過(guò)外置描述文件找出差異的應(yīng)用,最后對(duì)差異應(yīng)用采用增量升級(jí)算法,通過(guò)外置描述文件記錄各區(qū)塊及分層的詳細(xì)信息,有利于適宜地使用差分算法。

當(dāng)應(yīng)用系統(tǒng)發(fā)生頻繁的版本更新時(shí),應(yīng)用系統(tǒng)更新的塊會(huì)比較集中,在查找有差異的更新塊的過(guò)程中,根據(jù)空間局部性原理,當(dāng)應(yīng)用系統(tǒng)的某一塊發(fā)生更新時(shí),在下一個(gè)版本中,其附近的塊也會(huì)很快發(fā)生更新,將每次發(fā)生更新的塊記錄到外置描述文件中,有利于下一次更新更快地找出差異的塊。

Bsdiff算法是對(duì)整個(gè)二進(jìn)制大文件進(jìn)行無(wú)差別的二進(jìn)制比對(duì),而本文所采用的基于微服務(wù)應(yīng)用系統(tǒng)構(gòu)建模型的ASIUpdate算法,先通過(guò)二分法將大型系統(tǒng)進(jìn)行大塊分層次分解,然后對(duì)分解后的小塊做比對(duì)。

2.1 ASIUpdate算法原理

圖5 ASIUpdate算法的原理

圖5所示為ASIUpdate算法原理:圖5(a)是舊版本的應(yīng)用系統(tǒng),包含4個(gè)子系統(tǒng)(每種顏色代表的區(qū)域代表一個(gè)子系統(tǒng)),每個(gè)子系統(tǒng)都包含多個(gè)應(yīng)用(每一個(gè)小方塊代表一個(gè)應(yīng)用);圖5(b)是新版本的應(yīng)用系統(tǒng),與舊版本應(yīng)用系統(tǒng)的區(qū)別在于有3個(gè)子系統(tǒng)都各有一個(gè)應(yīng)用(白色區(qū)域)有版本更新;圖5(c)和圖5(d)為舊版本與新版本應(yīng)用ASIUpdate算法先找出各個(gè)子系統(tǒng)中不同MD5值對(duì)應(yīng)的塊,即有更新的應(yīng)用,然后對(duì)這些塊進(jìn)行差值處理,從而產(chǎn)生整個(gè)應(yīng)用系統(tǒng)新舊版本之間的差異包;圖5(e)為舊版本和新版本即對(duì)新舊版本系統(tǒng)各個(gè)子系統(tǒng)中差異的應(yīng)用采用Bsdiff算法生成差異包patch;圖5(f)則是最終對(duì)整個(gè)系統(tǒng)進(jìn)行差異產(chǎn)生的系統(tǒng)差異包,其大小只包含有差異應(yīng)用的差異包大小之和,即圖5(f)中有色的塊大小,最終的升級(jí)只需下載該差異包與舊版本的應(yīng)用進(jìn)行結(jié)合產(chǎn)生新的差異包進(jìn)行升級(jí),而無(wú)需下載圖5(b)中整個(gè)新版本應(yīng)用系統(tǒng)。

2.2 ASIUpdate算法及實(shí)現(xiàn)

ASIUpdate算法主要分為6步,具體步驟如圖6所示。

圖6 ASIUpdate算法流程

1)劃分系統(tǒng)。將系統(tǒng)以不同的功能模塊按照基于微服務(wù)的應(yīng)用系統(tǒng)構(gòu)建模型進(jìn)行劃分為相應(yīng)的子系統(tǒng)branchSystem[],從而達(dá)到實(shí)用、擴(kuò)展性好的效果。

2)找出差異子系統(tǒng)。通過(guò)外置的描述文件(如MD5)值,找出差異的子系統(tǒng)。

3)劃分子系統(tǒng)。將子系統(tǒng)再利用基于微服務(wù)的應(yīng)用系統(tǒng)構(gòu)建模型劃分應(yīng)用app[],每個(gè)子系統(tǒng)里面的應(yīng)用都有類(lèi)似的功能或者屬于同種類(lèi)型。

4)找出有差異的應(yīng)用。以區(qū)塊劃分的機(jī)制,通過(guò)外置的描述文件(如MD5)值,而非生硬地作二進(jìn)制比較,找出有版本差異的應(yīng)用diffApp[]。

5)處理差異的應(yīng)用。對(duì)應(yīng)用采用單元級(jí)增量算法,生成差異包。

6)合并成子系統(tǒng)差異包。將有差異的子系統(tǒng)中應(yīng)用差異包按同一層合并成子系統(tǒng)差異包,并將有差異的塊記錄到子系統(tǒng)的外置描述文件中,方便下次更新采用局部性原理。

7)合并成應(yīng)用系統(tǒng)。將子系統(tǒng)差異包再按同一層合并成應(yīng)用系統(tǒng)差異包。

上述應(yīng)用系統(tǒng)增量升級(jí)算法的關(guān)鍵在于通過(guò)描述文件的信息快速定位到有版本差異的子系統(tǒng),然后通過(guò)描述文件對(duì)應(yīng)用信息的記錄,找出有變動(dòng)的應(yīng)用,對(duì)這些有變動(dòng)的應(yīng)用采用差值算法生成差異包。

在步驟4、步驟5中關(guān)鍵算法的偽代碼實(shí)現(xiàn)如下:

diff(oldApps, newApps, patchApps){

for i←0 to oldApps.len do

begin

if oldApps[i].MD5 <> newApps[i].MD5 then

Diff.gendiff(oldApps[i].path, newApps[i].path, patchApps[i].path);

end;

}

3 實(shí)驗(yàn)驗(yàn)證與測(cè)試分析

3.1 ASIUpdate算法效率分析

時(shí)間效率上相對(duì)于整體差異的效率提升百分比為t。

3.2 對(duì)比測(cè)試

1)傳統(tǒng)的應(yīng)用系統(tǒng)全部重裝的算法;

2)應(yīng)用系統(tǒng)整體Bsdiff的算法;

3)本文實(shí)現(xiàn)的ASIUpdate算法。

3.3 測(cè)試方法

同樣的應(yīng)用系統(tǒng)發(fā)布的2個(gè)版本,新版本比舊版本只有較微小的改動(dòng),只涉及少量的應(yīng)用有變化。與Bsdiff算法作比較的原因在于其對(duì)單個(gè)文件進(jìn)行增量升級(jí)應(yīng)用廣泛,比較的核心點(diǎn)在大型應(yīng)用系統(tǒng)整個(gè)增量升級(jí)過(guò)程中的效率和時(shí)間上。

測(cè)量指標(biāo)有:

1)系統(tǒng)更新時(shí)間:客戶(hù)端日志記錄。

2)網(wǎng)絡(luò)傳輸量:使用網(wǎng)絡(luò)監(jiān)控工具。

實(shí)驗(yàn)平臺(tái)是利用Java開(kāi)發(fā)環(huán)境與Eclipse集成開(kāi)發(fā)環(huán)境,與平臺(tái)無(wú)關(guān)。

3.4 比對(duì)測(cè)試結(jié)果

子系統(tǒng)中應(yīng)用程序包大小的實(shí)驗(yàn)數(shù)據(jù)如表1所示,柱狀圖如圖7所示。

表1 應(yīng)用新舊版本及差異包大小 /MB

名稱(chēng)舊版本大小新版本大小差異包大小APACHE_TOMCAT_Noarch_325.88.04AGENT_BASE_Noarch_3223230.149JAVA_JDK_Noarch_32138168163

圖7 應(yīng)用新舊版本及差異包大小對(duì)比

從圖7的數(shù)據(jù)中可以看出patch包相對(duì)于新版本包大大減小。

系統(tǒng)整體采用Bsdiff與本文的部分差異算法ASIUpdate消耗的時(shí)間的實(shí)驗(yàn)數(shù)據(jù)如表2所示,對(duì)比柱狀圖如圖8所示。

表2 系統(tǒng)整體Bsdiff與部分差異算法ASIUpdate消耗時(shí)間 /ms

名稱(chēng)全量Bsdiff算法消耗的時(shí)間ATUPdating算法消耗的時(shí)間APACHE_TOMCAT_Noarch_322600026500AGENT_BASE_Noarch_322400400JAVA_JDK_Noarch_329800099800

圖8 系統(tǒng)整體BsDiff與部分差異算法ASIUpdate消耗時(shí)間對(duì)比

從圖8的數(shù)據(jù)中可以看出,當(dāng)拆分的塊有更新時(shí),本文實(shí)現(xiàn)的部分差異算法ASIUpdate消耗的時(shí)間比系統(tǒng)整體BsDiff消耗的時(shí)間略大,但是沒(méi)有變化的塊基本不消耗時(shí)間,對(duì)于一組微服務(wù)整體的升級(jí)過(guò)程中,往往只有某些塊發(fā)生變化,大大縮短了增量升級(jí)過(guò)程的時(shí)間。

全量升級(jí)與增量升級(jí)所消耗的時(shí)間實(shí)驗(yàn)數(shù)據(jù)如表3所示,對(duì)比柱狀圖如圖9所示。

表3 全量升級(jí)與增量升級(jí)所消耗的時(shí)間實(shí)驗(yàn)數(shù)據(jù) /ms

名稱(chēng)全量Bsdiff算法消耗的時(shí)間ATUPdating算法消耗的時(shí)間APACHE_TOMCAT_Noarch_321000600AGENT_BASE_Noarch_3220000JAVA_JDK_Noarch_32160008000

圖9 全量升級(jí)與增量升級(jí)所消耗的時(shí)間實(shí)驗(yàn)數(shù)據(jù)對(duì)比

從圖9的數(shù)據(jù)中可以得出,增量升級(jí)相對(duì)于全量升級(jí)消耗的時(shí)間顯著降低。

實(shí)驗(yàn)數(shù)據(jù)的結(jié)果表明:本文提出的應(yīng)用系統(tǒng)級(jí)更新算法ASIUpdate,可以有效提升效率。

4 結(jié)束語(yǔ)

本文提出的基于微服務(wù)構(gòu)建模型的應(yīng)用系統(tǒng)增量更新算法ASIUpdate,對(duì)大型應(yīng)用系統(tǒng)進(jìn)行塊級(jí)更新,采用空間局部性原理,通過(guò)外置描述文件記錄塊的詳細(xì)信息,測(cè)試數(shù)據(jù)表明,可有效解決大型應(yīng)用系統(tǒng)更新過(guò)程中的單一升級(jí)不穩(wěn)定性問(wèn)題,有效降低數(shù)據(jù)傳輸量、顯著提升系統(tǒng)更新速度,尤其在系統(tǒng)頻繁更新的情況下,可快速找到有差異的塊,對(duì)于大型應(yīng)用系統(tǒng)快速迭代更新、系統(tǒng)快速生成起到有效的技術(shù)支撐作用。

[1] Lewis J, Fowler M. Microservices[EB/OL]. https://www.martinfowler.com/articles/microservices.html, 2014-03-25.

[2] 米沃奇. 深度剖析微服務(wù)架構(gòu)的九大特征[J]. 電腦知識(shí)與技術(shù):經(jīng)驗(yàn)技巧, 2016(10):105-110.

[3] Walraven S, Truyen E,Joosen W. Comparing PaaS offerings in light of SaaS development[J]. Computing, 2014,96(8):669-724.

[4] 郭棟,王偉,曾國(guó)蓀. 一種基于微服務(wù)架構(gòu)的新型云件PaaS平臺(tái)[J]. 信息網(wǎng)絡(luò)安全, 2015(11):15-20.

[5] 鄒筱菁,柯林. 基于DevOps的軟件開(kāi)發(fā)管理模式[J]. 數(shù)字技術(shù)與應(yīng)用, 2016(11):184-187.

[6] Stolikj M, Cuijpers P J L, Lukkien J J. Efficient reprogramming of wireless sensor networks using incremental updates and data compression[C]// 2013 IEEE International Conference on Pervasive Computing and Communications Workshops(PERCOM Workshops). 2012:584-589.

[7] 夏棋. 移動(dòng)互聯(lián)網(wǎng)增量數(shù)據(jù)差分更新算法研究[D]. 成都:電子科技大學(xué), 2014.

[8] 劉巍. 基于空間局部性的PCM和DRAM混合內(nèi)存頁(yè)面調(diào)度算法[J]. 中國(guó)科技論文, 2014,9(1):53-57.

[9] 趙琳,張黎明. 基于SOA架構(gòu)的企業(yè)應(yīng)用系統(tǒng)研究[J]. 太原理工大學(xué)學(xué)報(bào), 2007,38(6):535-539.

[10] 過(guò)立新. 一種新型企業(yè)應(yīng)用系統(tǒng)EAI模型的構(gòu)建[J]. 電子科技, 2006(11):72-76.

[11] 《中國(guó)金融電腦》編輯部. PWorld2015:聚焦互聯(lián)網(wǎng)+,助力“大平臺(tái)+微應(yīng)用”[J]. 中國(guó)金融電腦, 2015(7):96.

[12] 陳全,鄧倩妮. 云計(jì)算及其關(guān)鍵技術(shù)[J]. 計(jì)算機(jī)應(yīng)用, 2009,29(9):2562-2567.

[13] 王意潔,孫偉東,周松,等. 云計(jì)算環(huán)境下的分布存儲(chǔ)關(guān)鍵技術(shù)[J]. 軟件學(xué)報(bào), 2012,23(4):962-986.

[14] 盧小賓,王濤. Google三大云計(jì)算技術(shù)對(duì)海量數(shù)據(jù)分析流程的技術(shù)改進(jìn)優(yōu)化研究[J]. 圖書(shū)情報(bào)工作, 2015,59(3):6-11.

[15] 魏青松. 大規(guī)模分布式存儲(chǔ)技術(shù)研究[D]. 成都:電子科技大學(xué), 2004.

[16] 劉亞. 基于MooseFS分布式存儲(chǔ)策略的研究與實(shí)現(xiàn)[D]. 濟(jì)南:山東大學(xué), 2015.

[17] 吳思. 容錯(cuò)分布式存儲(chǔ)系統(tǒng)擴(kuò)容機(jī)制研究[D]. 合肥:中國(guó)科學(xué)技術(shù)大學(xué), 2016.

猜你喜歡
增量消耗子系統(tǒng)
玉鋼燒結(jié)降低固體燃料消耗實(shí)踐
不對(duì)中轉(zhuǎn)子系統(tǒng)耦合動(dòng)力學(xué)特性研究
導(dǎo)彈增量式自適應(yīng)容錯(cuò)控制系統(tǒng)設(shè)計(jì)
提質(zhì)和增量之間的“辯證”
轉(zhuǎn)爐煉鋼降低鋼鐵料消耗的生產(chǎn)實(shí)踐
全現(xiàn)款操作,年增量1千萬(wàn)!這家GMP漁藥廠為何這么牛?
降低鋼鐵料消耗的生產(chǎn)實(shí)踐
GSM-R基站子系統(tǒng)同步方案研究
“價(jià)增量減”型應(yīng)用題點(diǎn)撥
我們消耗很多能源
新源县| 清水县| 绩溪县| 湖口县| 武城县| 丰台区| 雅安市| 黑山县| 嘉黎县| 吉林省| 北海市| 台中县| 宁安市| 新沂市| 上杭县| 上饶市| 沙坪坝区| 富宁县| 合水县| 高尔夫| 武山县| 遵义县| 天等县| 芜湖县| 阿鲁科尔沁旗| 凤冈县| 株洲县| 宝坻区| 广河县| 大渡口区| 卢氏县| 基隆市| 天台县| 平武县| 汝州市| 清涧县| 汤阴县| 开阳县| 潼关县| 漾濞| 和政县|