OpenHandX-Batch 1.02
企業(yè)級批量應(yīng)用架構(gòu)
2010-12-28
作者:彭明華
pengminghua@hotmail.com
本文檔中的任何部分都不得以任何手段任何形式進(jìn)行復(fù)制與傳播。
目錄
1 為什么要批量架構(gòu)
異步交易的概念相對于同步交易,同步交易是指BS/CS系統(tǒng)中當(dāng)用戶點(diǎn)擊某個(gè)按鈕系統(tǒng)就能很快查詢出需要的信息,整個(gè)過程不需要長時(shí)間等待。隨著計(jì)算機(jī)系統(tǒng)的普及化,更高級業(yè)務(wù)需求,如:分析型的報(bào)表、復(fù)雜的數(shù)據(jù)加工被提了出來。如果再做成同步交易用戶可能需要等待幾十分鐘或數(shù)小時(shí)的時(shí)間,這顯然是不被接受的。這時(shí)就需要一個(gè)高效異步交易系統(tǒng)。異步交易是指用戶提交一個(gè)請求后系統(tǒng)很快返回提交成功的信息,隨后用戶可以繼續(xù)做其它的工作,提交的請求由后臺程序按照一定規(guī)則去處理,處理完成后用戶可以取到結(jié)果,整個(gè)過程用戶都不用刻意去等待因此是異步的。面對更高層的應(yīng)用,更大的海量處理如:天氣預(yù)報(bào)的衛(wèi)星云圖、生物基因工程等計(jì)算。
傳統(tǒng)聯(lián)機(jī)架構(gòu)只能處理響應(yīng)較快的普通業(yè)務(wù)處理,對于耗時(shí)等復(fù)雜業(yè)務(wù)處理會造成服務(wù)器資源大量被占用,客戶端失去響應(yīng)等嚴(yán)重問題。異步批量架構(gòu)是解決復(fù)雜業(yè)務(wù)處理、數(shù)據(jù)分析、科學(xué)計(jì)算等耗時(shí)工作任務(wù),這些任務(wù)被安排在特定的服務(wù)器上執(zhí)行,被統(tǒng)一規(guī)劃、拆分成子任務(wù)、統(tǒng)一調(diào)度、并發(fā)執(zhí)行,大大提高了執(zhí)行效率和可靠性,另外異步批量架構(gòu)可以部署在網(wǎng)絡(luò)內(nèi)的任意服務(wù)器或PC上形成企業(yè)的云計(jì)算。
2 異步批量演化
2.1 初始級
初始級的批量是最簡單的異步批量

由應(yīng)用系統(tǒng)發(fā)起一個(gè)異步批量的請求,請求很簡單只有一個(gè)節(jié)點(diǎn)一個(gè)任務(wù),處理保存在數(shù)據(jù)庫中,由應(yīng)用系統(tǒng)去查詢結(jié)果
2.2 應(yīng)用級
應(yīng)用級的批量是處理復(fù)雜業(yè)務(wù)系統(tǒng)的批量

某個(gè)應(yīng)用發(fā)起一個(gè)批量請求到異步總控服務(wù)器,請求的業(yè)務(wù)邏輯是由復(fù)雜的節(jié)點(diǎn)圖定義,總控服務(wù)器根據(jù)節(jié)點(diǎn)圖定義拆分出多個(gè)任務(wù),再發(fā)送給異步任務(wù)服務(wù)器群去并發(fā)執(zhí)行這些任務(wù),總控服務(wù)器負(fù)責(zé)任務(wù)的拆分、分配、調(diào)度
2.3 企業(yè)級
企業(yè)級的批量面對的是整個(gè)企業(yè)所有系統(tǒng)批量,不再局限只對某個(gè)系統(tǒng)提供服務(wù),可以看作是企業(yè)信息化的一種資源

異步總控服務(wù)器群要處理的不僅有多個(gè)應(yīng)用系統(tǒng)批量請求,還可能有人為發(fā)起的批量請求,如:月終、年終報(bào)表等
2.4 云計(jì)算級

云計(jì)算級面向更大的理想應(yīng)用,能提供絕對強(qiáng)大的運(yùn)算能力,能對天氣預(yù)報(bào)、生物工程等海量數(shù)據(jù)進(jìn)行運(yùn)算。同時(shí)在同一網(wǎng)絡(luò)任何計(jì)算機(jī)終端很容易能加入到云計(jì)算系統(tǒng)中,這樣能合理利用資源減少投資。
3 企業(yè)級架構(gòu)需要什么
既然作為企業(yè)級架構(gòu)就就應(yīng)該具有一套完整的機(jī)制,比如:安全性、健壯性、高性能、擴(kuò)展性等。只有在此基礎(chǔ)上企業(yè)才能安全、有效、節(jié)省資源的情況下使用架構(gòu)
3.1 安全性
企業(yè)級架構(gòu)在數(shù)據(jù)存儲、傳輸過程中處于安全環(huán)境,不能被外界獲取,即使能獲取也是無價(jià)值的
3.2 健壯性
企業(yè)級架構(gòu)為企業(yè)重要系統(tǒng)的提供支持,甚至是核心的一部分,在系統(tǒng)中運(yùn)行的企業(yè)級架構(gòu)要有高可靠性、健壯性。除此之外,根據(jù)系統(tǒng)需要還應(yīng)該有及時(shí)有效的監(jiān)控機(jī)制,即使出現(xiàn)意外也應(yīng)該有完善的應(yīng)對方案
3.3 高性能
企業(yè)級架構(gòu)一般部署在服務(wù)器上,企業(yè)級架構(gòu)要能利用服務(wù)器提供的資源最大、最快程度完成交給的任務(wù),并且能夠通過多個(gè)服務(wù)器機(jī)群并發(fā)解決單一服務(wù)器的性能制約
3.4 擴(kuò)展性
企業(yè)級架構(gòu)最少是面向企業(yè)某一領(lǐng)域的應(yīng)用,除了架構(gòu)本身提供的缺省實(shí)現(xiàn)方法,還要提供對特殊情況的支持
3.5 可移植性性
企業(yè)級架構(gòu)不能僅局限于部署在某一類服務(wù)器或某一類操作系統(tǒng),企業(yè)級架構(gòu)應(yīng)該能在主流的服務(wù)器和操作系統(tǒng)中執(zhí)行,并且運(yùn)用主流的操作方式和通訊協(xié)議
3.6 多種應(yīng)用模式
企業(yè)級架構(gòu)面向不同企業(yè),每個(gè)企業(yè)都有不同的情況和需求,這就需要企業(yè)級架能以各種模式來滿足不同的企業(yè)。企業(yè)級架構(gòu)應(yīng)該是由多個(gè)組件組成,每個(gè)組件都是松耦合,通過組件的不同組合方式滿足不同模式的需求
3.7 易操作性
企業(yè)級架構(gòu)在必要情況下提供的方便、節(jié)約操作界面
4 OpenHandX-Batch企業(yè)級批量應(yīng)用架構(gòu)
OpenHandX-Batch 1.0是輕量級、可擴(kuò)展的企業(yè)級異步批量框架。OpenHandX-Batch 1.0異步批量框架將共性的處理抽象化并提取出來,提供多種應(yīng)用模式、并發(fā)、集群、多種節(jié)點(diǎn)圖任務(wù)運(yùn)行等能力,開發(fā)者可以將更多注意力放到自己的業(yè)務(wù)層面。減少開發(fā)環(huán)節(jié)和周期。OpenHandX-Batch 1.0異步批量框架也可以當(dāng)做企業(yè)的一種資源,將企業(yè)多個(gè)系統(tǒng)的異步批量部署到OpenHandX-Batch 1.0上,由OpenHandX-Batch 1.0統(tǒng)一支持和管理。
4.1 術(shù)語及名詞解釋
批量框架:OpenHandX-Batch 1.0異步批量框架的簡稱
事件:應(yīng)用系統(tǒng)向批量框架發(fā)送一次批量的請求
節(jié)點(diǎn):一個(gè)復(fù)雜的事件是由多個(gè)步驟,每個(gè)節(jié)點(diǎn)代表一個(gè)步驟
節(jié)點(diǎn)圖: 將多個(gè)節(jié)點(diǎn)按照某種邏輯關(guān)系組成運(yùn)行流程,這個(gè)流程就叫節(jié)點(diǎn)運(yùn)行圖或節(jié)點(diǎn)圖
任務(wù):一個(gè)節(jié)點(diǎn)要執(zhí)行必須實(shí)例化成任務(wù),一般一個(gè)節(jié)點(diǎn)可拆分成一個(gè)任務(wù),但一個(gè)節(jié)點(diǎn)也可能是同一類任務(wù)的定義
4.2 特性
4.2.1 主要特性
l 支持多個(gè)應(yīng)用系統(tǒng)-能將多個(gè)應(yīng)用系統(tǒng)部署到同一個(gè)總控服務(wù)器或多個(gè)總控服務(wù)器,由總控服務(wù)器統(tǒng)一控制和管理
l 支持多個(gè)異步事件-總控服務(wù)器能同時(shí)執(zhí)行和監(jiān)控多個(gè)事件,通過事件權(quán)重、優(yōu)先級衡量和控制制服務(wù)器的資源
l 多批量任務(wù)并發(fā)-任務(wù)服務(wù)器同時(shí)支持來自多個(gè)總控服務(wù)器的任務(wù),并行執(zhí)行這些任務(wù)
l 多種節(jié)點(diǎn)圖事件支持-總控服務(wù)器提供樹型和層型節(jié)點(diǎn)圖、單個(gè)任務(wù)類,復(fù)雜類型的事件可以通過節(jié)點(diǎn)圖配置工具來定義自己的運(yùn)行順序圖,支持?jǐn)帱c(diǎn)續(xù)跑災(zāi)難恢復(fù)
l 良好擴(kuò)展性-從總控服務(wù)器、任務(wù)服務(wù)器、事件服務(wù)器都提供了豐富的接口,能對節(jié)點(diǎn)圖、事件和任務(wù)傳輸開發(fā)出業(yè)務(wù)個(gè)性的代碼
l 快速開發(fā)接口-任務(wù)服務(wù)器提供一個(gè)主要接口就能完成所有應(yīng)用系統(tǒng)業(yè)務(wù)代碼的開發(fā),同時(shí)也提供對Spring框架的支持
l 健壯性-總控服務(wù)器的每個(gè)應(yīng)用實(shí)例有自己的運(yùn)行容器和運(yùn)行線程,任務(wù)服務(wù)器也有自己的獨(dú)立任務(wù)容器和執(zhí)行線程,保證了每個(gè)獨(dú)立的應(yīng)用或任務(wù)執(zhí)行出現(xiàn)意外不影響其它執(zhí)行的應(yīng)用和任務(wù)。其次總控服務(wù)器還對每個(gè)應(yīng)用和任務(wù)執(zhí)行進(jìn)行監(jiān)控記錄,即使整個(gè)總控服務(wù)器宕機(jī)重起后能自動恢復(fù)上次運(yùn)行的步驟繼續(xù)往下執(zhí)行
l 安全和密級-所有的批量工具提供用戶和密碼管理,任務(wù)和事件的xml傳輸協(xié)議都支持加密和壓縮
l 多種應(yīng)用模式-完整的異步批量框架需要部署總控服務(wù)器、任務(wù)服務(wù)器、事件服務(wù)器,如果您不需要那么多的功能,可以靈活部署其中的任務(wù)服務(wù)器或任務(wù)服務(wù)器+總控服務(wù)器
l 豐富的監(jiān)控和分析工具-任務(wù)服務(wù)器、總控服務(wù)器、事件服務(wù)器都有自己的監(jiān)控和管理工具,能啟動、暫停、重起服務(wù)器。另外批量框架提供了對日志實(shí)時(shí)分析的工具,比如事件、節(jié)點(diǎn)、任務(wù)的運(yùn)行狀態(tài)、完成進(jìn)度
4.2.2 性能優(yōu)勢
l 總控服務(wù)器
1、總控服務(wù)器的事件接收、任務(wù)發(fā)送、任務(wù)信息接收,可以有3種配置模式:JMS服務(wù)器、數(shù)據(jù)庫服務(wù)器、內(nèi)存隊(duì)列,其中內(nèi)存隊(duì)列服務(wù)器效率最高、其次是JMS服務(wù)器
2、對于復(fù)雜耗時(shí)節(jié)點(diǎn)圖的解析可以采用異步接口的實(shí)現(xiàn),采用異步的方式提高總控服務(wù)器的相應(yīng)速度
l 任務(wù)服務(wù)器
1、任務(wù)服務(wù)器的任務(wù)信息發(fā)送、任務(wù)接收,也同樣有3種配置模式:JMS服務(wù)器、數(shù)據(jù)庫服務(wù)器、內(nèi)存隊(duì)列,其中內(nèi)存隊(duì)列服務(wù)器效率最高、其次是JMS服務(wù)器
2、任務(wù)實(shí)例的執(zhí)行提供了獨(dú)立的執(zhí)行線程
3、任務(wù)實(shí)例由任務(wù)實(shí)例管理器統(tǒng)一管理,默認(rèn)采用單實(shí)例模式一次創(chuàng)建多次執(zhí)行減小執(zhí)行中創(chuàng)建任務(wù)實(shí)例的開銷
4.3 平臺需求
OpenHandX-Batch 1.0需要:
l Java 5
l Servlet API 2.4 (可選)
l JSP API 2.0 (可選)
l Spring 2 (可選)
l JMS1.1(可選)
l OpenHandX common1.0.jar
4.4 OpenHandX批量架構(gòu)邏輯結(jié)構(gòu)
4.4.1 總體邏輯結(jié)構(gòu)

l 事件由應(yīng)用系統(tǒng)或事件中心創(chuàng)建,通過事件通訊服務(wù)器到達(dá)已部署的總控服務(wù)器
l 總控服務(wù)器將事件按照預(yù)先定義好的節(jié)點(diǎn)圖拆分、解析成任務(wù),按照合適的條件再發(fā)送到任務(wù)通訊服務(wù)器,并記錄日志
l 任務(wù)服務(wù)器根據(jù)自身的資源情況從任務(wù)通訊服務(wù)器接受相應(yīng)的任務(wù)去執(zhí)行
l 任務(wù)執(zhí)行完成后將記錄日志,并將完成后的任務(wù)信息發(fā)送回任務(wù)通訊服務(wù)器
l 總控服務(wù)器再從任務(wù)通訊服務(wù)器取回任務(wù)信息,判斷節(jié)點(diǎn)和事件的完成情況,如果未完成繼續(xù)后續(xù)節(jié)點(diǎn)的拆分和任務(wù)的發(fā)送,如果全部節(jié)點(diǎn)的任務(wù)完成則該事件完成
4.4.2 總控服務(wù)器內(nèi)部結(jié)構(gòu)

l 一個(gè)總控服務(wù)器由部署的多個(gè)應(yīng)用實(shí)例,總上下文、總的資源、配置管理組成
l 總控服務(wù)器以Task、Event對象的形式與外界傳輸數(shù)據(jù)
l 每個(gè)應(yīng)用實(shí)例運(yùn)行在自己獨(dú)立的應(yīng)用容器里和獨(dú)立的線程,并且包含了多個(gè)不同的事件接收實(shí)例、應(yīng)用上下文、應(yīng)用資源、應(yīng)用配置管理、事件接收管理、任務(wù)發(fā)送管理、任務(wù)信息接收管理
l 每個(gè)事件接收實(shí)例有自己獨(dú)立的節(jié)點(diǎn)圖解析器、任務(wù)拆分器、日志記錄器、任務(wù)發(fā)送驗(yàn)證器、自己的上下文、自己的資源
4.4.3 任務(wù)服務(wù)器內(nèi)部結(jié)構(gòu)

l 一個(gè)任務(wù)服務(wù)器由部署的多個(gè)應(yīng)用實(shí)例,總上下文、總的資源、配置管理組成
l 總控服務(wù)器以Task對象的形式與外界傳輸數(shù)據(jù)
l 每個(gè)應(yīng)用實(shí)例運(yùn)行在自己獨(dú)立的應(yīng)用容器里和獨(dú)立的守護(hù)線程,并且包含了多個(gè)任務(wù)實(shí)例、應(yīng)用上下文、任務(wù)運(yùn)行池、任務(wù)實(shí)例管理類、、任務(wù)信息發(fā)送管理、任務(wù)接收管理
l 每個(gè)任務(wù)實(shí)例有自己獨(dú)立的應(yīng)用容器里和獨(dú)立的執(zhí)行線程、任務(wù)執(zhí)行類、日志記錄器、自己的上下文、自己的資源
4.5 節(jié)點(diǎn)模型
首先節(jié)點(diǎn)圖是由總控服務(wù)器來解析的,負(fù)責(zé)節(jié)點(diǎn)及任務(wù)的拆分和調(diào)度。總控服務(wù)器默認(rèn)支持3種最常用的節(jié)點(diǎn)圖模型,開發(fā)人員也可以通過接口擴(kuò)展支持新的節(jié)點(diǎn)圖模型。這3種節(jié)點(diǎn)圖模型是:單節(jié)點(diǎn)模型、樹型節(jié)點(diǎn)圖模型、層型節(jié)電圖模型。單節(jié)點(diǎn)模型是由一個(gè)節(jié)點(diǎn)組成,非常簡單。
4.5.1 樹型節(jié)點(diǎn)圖
樹型節(jié)點(diǎn)圖每個(gè)節(jié)點(diǎn)執(zhí)行都依賴父節(jié)點(diǎn)是否完成。樹型節(jié)點(diǎn)圖實(shí)際上更像網(wǎng)狀結(jié)構(gòu)。通過節(jié)點(diǎn)之間關(guān)系建立緊密的聯(lián)系,這樣的好處是每個(gè)節(jié)點(diǎn)執(zhí)行完能很快執(zhí)行它下級節(jié)點(diǎn),效率較高。但是節(jié)點(diǎn)關(guān)系過于緊密,因此創(chuàng)建樹型節(jié)點(diǎn)圖和維護(hù)的代價(jià)很大。
如:

假設(shè)這有7個(gè)節(jié)點(diǎn),他們的關(guān)系如圖所示。整個(gè)節(jié)點(diǎn)圖執(zhí)行完一共需要14分鐘。
4.5.2 層型節(jié)點(diǎn)圖
層型節(jié)點(diǎn)圖像瀑布從上到下一批批地執(zhí)行完,只有前一層執(zhí)行完才能到下一層。這種結(jié)構(gòu)關(guān)系相對簡單,易于創(chuàng)建和維護(hù)。但是如果分層不當(dāng),層內(nèi)會因某個(gè)節(jié)點(diǎn)非常費(fèi)時(shí)而等待,從而影響整個(gè)執(zhí)行的效率。
如:

還是這7個(gè)節(jié)點(diǎn),整個(gè)節(jié)點(diǎn)圖執(zhí)行完一共需要18分鐘。其實(shí)這節(jié)點(diǎn)5也可以放到第2層,但效率更低,需要21分鐘。
4.6 組件及功能

4.6.1 任務(wù)服務(wù)器
批量任務(wù)執(zhí)行的服務(wù)器
1、每個(gè)任務(wù)服務(wù)器實(shí)例都支持多線程、多應(yīng)用系統(tǒng)、多服務(wù)器集群
2、通過任務(wù)的優(yōu)先級、權(quán)重管理任務(wù)服務(wù)器群的負(fù)載均衡
3、任務(wù)類運(yùn)行方式有單體類模式、配置文件容器運(yùn)行模式、spring容器管理模式,最優(yōu)化合理地利用資源
4、支持多數(shù)據(jù)源、多jms源、內(nèi)存隊(duì)列、多通道接受和發(fā)送任務(wù)
5、對于jms傳送xml任務(wù)信息支持加密和壓縮
4.6.2 任務(wù)服務(wù)器監(jiān)控
監(jiān)控當(dāng)前任務(wù)服務(wù)器的運(yùn)行狀態(tài)


1、可以停止、暫停、重起任務(wù)服務(wù)器
2、可以對部署在任務(wù)服務(wù)器上的應(yīng)用單獨(dú)暫停
3、能查詢運(yùn)行的任務(wù)數(shù)量、部署的應(yīng)用、內(nèi)存應(yīng)用情況、正在運(yùn)行任務(wù)的狀態(tài)
4.6.3 總控服務(wù)器
處理批量事件的服務(wù)器,負(fù)責(zé)事件任務(wù)拆分、任務(wù)調(diào)度
1、默認(rèn)支持樹型節(jié)點(diǎn)圖、層型節(jié)點(diǎn)圖、單個(gè)節(jié)點(diǎn)的任務(wù)拆分
2、支持多應(yīng)用部署、多事件并發(fā)執(zhí)行
3、可以設(shè)置敏感度,是否時(shí)時(shí)響應(yīng)每個(gè)應(yīng)用的事件
4、任務(wù)錯誤后的終止、忽略、重跑三種重跑方式
5、通過事件的優(yōu)先級、權(quán)重管理總控服務(wù)器群的負(fù)載均衡
6、支持?jǐn)帱c(diǎn)續(xù)跑,支持災(zāi)難恢復(fù)
7、對于jms傳送xml任務(wù)支持加密和壓縮
4.6.4 總控服務(wù)器監(jiān)控
監(jiān)控當(dāng)前總控服務(wù)器的運(yùn)行狀態(tài)


1、可以停止、暫停、重起總控服務(wù)器
2、可以對部署在總控服務(wù)器上的應(yīng)用單獨(dú)暫停
3、能查詢運(yùn)行的總控?cái)?shù)量、部署的應(yīng)用、正在運(yùn)行的事件狀態(tài)
4.6.5 事件服務(wù)器和事件中心


可以給總控服務(wù)器的發(fā)送批量事件
1、人為發(fā)起的批量事件,如:月終、年終報(bào)表等
2、事件中心默認(rèn)提供發(fā)起一個(gè)事件、發(fā)起多個(gè)事件、多個(gè)順序事件、發(fā)起周期事件,可以根據(jù)需要定制事件,事件服務(wù)器負(fù)責(zé)創(chuàng)建并發(fā)送
3、可以對多個(gè)總控或多個(gè)應(yīng)用發(fā)送批量事件
4.6.6 節(jié)點(diǎn)圖編輯平臺

定義事件的節(jié)點(diǎn)運(yùn)行圖
1、支持樹型、層型圖的節(jié)點(diǎn)圖定義
2、樹型節(jié)點(diǎn)圖支持圖嵌套,做到節(jié)點(diǎn)圖定義的重用
3、節(jié)點(diǎn)和圖都能配置業(yè)務(wù)參數(shù),節(jié)點(diǎn)可以配置運(yùn)行模式、權(quán)重、互斥等信息
4、支持對多個(gè)應(yīng)用定義節(jié)點(diǎn)運(yùn)行圖
5、提供對已定義的節(jié)點(diǎn)圖可以圖形方式預(yù)覽
4.6.7 日志分析中心


分析批量運(yùn)行的結(jié)果
1、能查詢到每個(gè)事件、節(jié)點(diǎn)、任務(wù)的日志信息
2、已不同的顏色區(qū)分當(dāng)前事件、節(jié)點(diǎn)、任務(wù)運(yùn)行的狀態(tài)
3、提供對日志進(jìn)行分析,以列表和圖形方式展現(xiàn)事件的運(yùn)行節(jié)點(diǎn)圖
4、時(shí)時(shí)刷新分析結(jié)果可以很直觀看到事件中的每個(gè)節(jié)點(diǎn)或任務(wù)的運(yùn)行過程
5、支持多個(gè)應(yīng)用的日志查詢和日志分析
4.7 應(yīng)用模式
支持多組件插拔式部署,典型的3種模式如下:
初始級的批量服務(wù)-只要部署任務(wù)服務(wù)器就可以滿足需要,部署維護(hù)簡單
應(yīng)用級的批量服務(wù)-需要部署多個(gè)任務(wù)服務(wù)器,一個(gè)總控服務(wù)器,如果需要監(jiān)控還要部署WEB的總控監(jiān)控組件和任務(wù)服務(wù)器監(jiān)控組件、日志分析中心
企業(yè)級的批量服務(wù)-部署所有組件,總控服務(wù)器和任務(wù)服務(wù)器的集群可以處理龐大的批量事件,加入事件服務(wù)器可以人為根據(jù)需要發(fā)起系統(tǒng)外批量程序
云計(jì)算級批量服務(wù)-在需要加入云計(jì)算的計(jì)算機(jī)安轉(zhuǎn)批量任務(wù)服務(wù)器客戶端并啟動她,即完成了云計(jì)算的部署。在網(wǎng)絡(luò)內(nèi)的個(gè)人pc也能加入云計(jì)算,這樣就為云計(jì)算提供靈活的、更多的資源
擴(kuò)展模式-除了以上三種模式還可以根據(jù)實(shí)際情況組合自己需要的組件,也可以增加或減少總控服務(wù)器及任務(wù)服務(wù)器
下載地址:http://code.google.com/p/openhandx2/downloads/list
posted on 2009-09-02 15:15
彭明華 閱讀(2071)
評論(12) 編輯 收藏 所屬分類:
OpenHandX工具