青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

基于云計算的價格查詢實現

 

 

上篇博客提到價格查詢功能,當時正在考慮做成云計算模式,所以當時連多線程都沒考慮,就是準備將功能都交給云計算系統的,由云計算內部管理線程和調度問題,所以當時實現就根本不用考慮多線程,現在功能基本實現,下面大致講講我的做法。

國內很多人談到全文檢索就必提lucene,提到云計算就必提googlemap/reduce、開源的hadoop、amazonec2,似乎只有那些東西才叫云計算,咱是實戰派,沒興趣口舌之爭,在俺看來分布式存儲+分布式計算就叫云計算,俺就看了看googlemap/reduce論文,照其思想在win下做了個簡單的job/task調度系統,使其能支撐俺的第一個實戰應用價格查詢,圖示如下:

 

 

 

 

    adminclient承擔管理功能,可查看任務及執行情況,可查看Tasknode機器情況,如果需要可管理Task,目前只支持簡單的幾條命令,adminclient主動連jobserver登錄成功后可發送管理命令。

 

    JobOwner提交一個Job之后返回一個jobid,如果意外斷開可通過下次重連的時候提交jobid和一個sessionid可提取job結果數據,job提交通過提交一個zip包即可,參數等文件都打在包里面,tasknode可直接解包執行里面的dllJobowner主動連jobserver,登錄成功后可發job命令。

 

    TaskNode是執行具體任務的客戶端,job包用zip打包后發布給tasknodetasknode參與計算并反饋結果。TaskNode設計成多線程模式,一個線程保持和jobserver的通信,其他線程參與運算,Tasknode可同時執行多個不同的任務,如a線程執行價格查詢,b線程執行hash破解等。Tasknode主動連jobserver,登錄后可接受jobserver分派的任務,由于tasknode是主動連jobserver的,所以即使是內網機器或者任意有閑置資源的機器都可作為Tasknode,不管它是家里的、公司的、還是網吧的,這也是該系統基于windows實現的一個重要前提,因為win的機器是如此的多,在國內win的機器無處不在。

 

JobServerjob調度器,管理包分發以及任務分割、調度,典型的執行流程是這樣,jobowner提交一個命名的包給jobserverjobserver將該包部署管理,之后jobowner 可給jobserver提交任務,jobserver收到任務后根據任務指定的包配置執行,如部署包后裝載dll并執行任務分割操作,分割是將一個job分割為多個task,之后再將每個task提交給一個tasknode執行,并管理tasknode的輸出以及可能的出錯,出錯現在的處理是交給另一個tasknode執行,當剩下最后一個tasknode的時候會將該tsaknode同步叫給另一個不同的tasknode執行,不管誰最后成功執行這個tasknode,只要該task執行成功立即結束整個job,并將結果反饋給jobownerjobowner也可在執行中提交查詢命令,jobserver會將被查詢job當前的輸出返回,這樣碰到需要長時間執行的任務也能適用。

 

從以上介紹可以看到,具體任務是由包執行的,這個包實際上可能是一個dll,也可能是幾個dll加上一些配置文件組成,之所以設計成這種模式,主要是考慮整個系統在win上方便部署,主dll需要支持幾個固定的接口:

 

//任務dll初始化函數

typedef bool (*jobtask_init_)(jobtaskfunc *jtfunc, bool tasknode);

//map分割函數

typedef size_t (*jobtask_split_)(jobtaskfunc *jtfunc,

                                   const char *input, size_t len,

                                   std::vector<CAutoBuffer *> &vbuf);

//reduce打包函數

typedef size_t (*jobtask_reduce_)(jobtaskfunc *jtfunc,

                                         std::vector<CAutoBuffer *> &vbuf,

                                         CAutoBuffer &buf);

//Task執行函數

typedef bool (*jobtask_map_)(jobtaskfunc *jtfunc, const char *cmdline, CAutoBuffer &outbuf);

//釋放函數

typedef bool (*jobtask_free_)(jobtaskfunc *jtfunc);

 

 

上面init函數主要執行線程相關的初始化,該函數典型的可能是空,或者是

CoInitialize(NULL);

Split函數是用來將job輸入分割為Ntasknode輸入的,該函數由jobserver調用,每個tasknode輸入就是map函數的輸入,tasknode的任務就是調用map函數,并傳遞輸入,最后將輸出返回給jobserverjobserver在需要的時候調用reduce將各個tasknode的輸出打包返回,free函數是個輔助函數,釋放資源的。

熟悉googlemap/reduce的應該知道,我的實現簡化了reduce,在我的實現里面并沒有獨立的reduce worker,該任務由jobserver自己做了,這一方面是簡化實現,另方面也是適應需求的結果,畢竟在我的需求里面輸入是很少的(一個典型任務100字節量級)tasknode的計算是很多的,輸出也是不多的(1k量級),所以由jobserver打包整個輸出也很輕松,用不著一組獨立的reduce來管理輸出。另外可以看到上面接口用了我的自定義類CAutoBuffer,這個類主要管理不定長數據的,其實用vector<char>也可,但考慮方便,我的實現內部都用了CAutoBuffer。一個典型的分布式應用只要做一個dll,有上面幾個函數,并輸出一個

 

struct jobtaskfunc

{

        //初始化函數

        jobtask_init_ init;

        //釋放函數

        jobtask_free_ free;

 

        //以下被tasknode調用

        jobtask_map_ map;

 

        //以下被jobserver調用

        jobtask_split_ split;

        jobtask_reduce_ reduce;

};

typedef jobtaskfunc *(WINAPI *create_jobtask_)();

函數即可。

 

學習map/reduce重要的是學習其思想,并不拘泥于實現形式,我想這大概正是國內環境欠缺的,國內能說得頭頭是道的人太多,能動手干出結果來的人很少,真正坐下來做實事的不多,只喜歡抄抄概念,拿別人的東西過來架設一下,就是這樣的人也能混成大拿。我從map/reduce思想出發,學習其思想,簡化其實現,為實際應用服務,雖然這個東西很簡單,甚至可以說有些簡陋,但實際效果不錯,雖然現在只部署了兩個點,但總體上還是令人滿意的。

 

實現這個jobserver/tasknode系統并部署價格查詢花了不到兩周時間,實際上花在jobservertasknode上的時間大概只有一周多一點,ppsget.dll(具體干活的dll)用正則表達式分析網頁并提取輸出,該dll被應用到多線程環境后也出了一些問題,用boost::reg的時候居然偶爾會出現異常,原以為boost::reg這樣的應用應該是非常明確的,要么找到,要么沒有找到,除此不應該有第三態,沒想到boost::reg這個不爭氣的東西不但不是二態的,還容易出現異常,試用了一下tr1::regex也是類似的問題,無奈只能在外面包了一層異常處理,雖然不再被異常搞死,但一旦出現異常就是很慢的,要10s左右才返回,現在也沒有特別好的辦法,只在異常的時候將頁面保存,事后分析并改寫正則表達式,盡量將正則表達式做小,將非貪婪式查找用少一點。

下面看看我們價格查詢網站 http://www.shprog.com/pps.aspx 的輸出:

 

 

那個360的價格居然是圖片,ocr模塊是俺同事搞的,現在識別率能達到99%以上,還是很不錯的。

Posted on 2010-10-03 14:22 袁斌 閱讀(227) 評論(0)  編輯 收藏 引用
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美成人综合在线| 91久久国产综合久久| 亚洲精品在线免费观看视频| 欧美一区二区三区免费看| 亚洲一区欧美| 国产精品久久7| 狠狠色狠狠色综合| 麻豆精品视频在线观看视频| 国内精品免费在线观看| 久久久伊人欧美| 农村妇女精品| 亚洲免费视频网站| **欧美日韩vr在线| 欧美日韩精品系列| 亚洲欧美日本另类| 欧美福利视频在线观看| 亚洲国产视频一区| 久久亚洲精品欧美| 亚洲裸体俱乐部裸体舞表演av| 亚洲一区久久久| 欧美在线啊v一区| 亚洲精品久久久久久久久久久久| 国产精品永久在线| 猫咪成人在线观看| 一区二区久久久久| 欧美黄色视屏| 久久久久久国产精品mv| 一区二区三区四区五区精品| 国产毛片一区二区| 在线高清一区| 国内自拍视频一区二区三区| 亚洲激情偷拍| 在线免费高清一区二区三区| 日韩亚洲综合在线| 在线观看日韩| 亚洲欧美日本日韩| 亚洲电影免费观看高清完整版在线 | 国产精品99久久不卡二区| 久久久www免费人成黑人精品 | 亚洲精品久久久久久久久| 久久精品夜色噜噜亚洲a∨| 亚洲国产高潮在线观看| 久久成人久久爱| 欧美一区二区在线免费观看| 欧美不卡三区| 久久久久久久999| 国产精品久久久久久户外露出| 亚洲国产精品精华液网站| 亚洲国产黄色| 久久久综合激的五月天| 另类天堂av| 午夜精品婷婷| 久久精品国产精品亚洲| 国产精品久久久久国产a级| 亚洲精品久久| 一区二区久久| 亚洲无限av看| 亚洲无毛电影| 欧美日韩视频不卡| 国产精品美女久久久免费 | 99精品欧美一区| 一本不卡影院| 欧美三级视频| 国产综合香蕉五月婷在线| 亚洲欧美日韩国产精品| 夜久久久久久| 国产精品国产一区二区 | 亚洲欧美变态国产另类| 一区二区欧美在线观看| 国产精品久久久久久久久免费樱桃| 一区二区三区日韩在线观看| 999在线观看精品免费不卡网站| 中文一区二区| 国产精品美女久久| 久久国产毛片| 亚洲韩国精品一区| 欧美日韩国产探花| 亚洲一区精品电影| 亚洲欧美日韩网| 激情另类综合| 午夜国产一区| 欧美国产一区在线| 欧美精品www在线观看| 国产精品一区视频| 久久精品成人一区二区三区| 久久一综合视频| 亚洲午夜精品一区二区| 农村妇女精品| 欧美国产亚洲另类动漫| 国产九九视频一区二区三区| 久久狠狠婷婷| 欧美成人中文| 欧美一区二区三区视频免费| 久久躁狠狠躁夜夜爽| 国产精品一区二区久激情瑜伽| 欧美一级淫片aaaaaaa视频| 欧美激情按摩| 欧美视频在线观看免费网址| 久久国产精品久久久久久电车| 久久婷婷国产综合尤物精品| 一区二区三区精品视频在线观看| 亚洲午夜激情| 91久久精品日日躁夜夜躁国产| 夜夜嗨av色一区二区不卡| 影音先锋一区| 亚洲综合国产激情另类一区| 欧美日韩免费高清一区色橹橹| 亚洲伊人网站| 久久亚洲一区二区三区四区| 亚洲综合国产| 欧美gay视频| 最近中文字幕日韩精品| 亚洲一本大道在线| 久久精品国产综合| 亚洲自拍高清| 亚洲国产一区二区三区a毛片| 亚洲免费观看| 樱花yy私人影院亚洲| 一区二区国产日产| 亚洲国产精品传媒在线观看 | 久久天堂精品| 欧美一区二区国产| 欧美丝袜一区二区三区| 欧美激情第9页| 极品少妇一区二区三区精品视频| 中文日韩在线| 亚洲性感激情| 欧美日韩一区二区三区免费看 | 在线观看视频一区二区| 亚洲免费在线视频| 亚洲综合电影一区二区三区| 欧美日韩少妇| 一区二区三区成人精品| 一区二区三区成人| 欧美日韩亚洲综合| 一本色道久久综合亚洲精品不| 99精品久久免费看蜜臀剧情介绍| 欧美.www| 亚洲精品男同| 亚洲一本大道在线| 国产精品视频免费在线观看| 久久蜜臀精品av| 国产亚洲欧美日韩美女| 免费人成精品欧美精品| 欧美激情中文字幕在线| 91久久国产综合久久| 欧美先锋影音| 久久精品色图| 国产在线不卡| 久久久精彩视频| 欧美高清视频| 99伊人成综合| 欧美一区二区三区久久精品茉莉花 | 国产精品video| 9人人澡人人爽人人精品| 亚洲午夜精品| 国产伦精品一区二区三区免费迷| 午夜亚洲性色福利视频| 老鸭窝91久久精品色噜噜导演| 黄色欧美日韩| 欧美国产日韩精品免费观看| 99精品视频一区二区三区| 午夜亚洲福利| 在线观看视频欧美| 欧美日韩一区二区免费视频| 亚洲男女毛片无遮挡| 久久一区二区三区四区| 欧美网站大全在线观看| 亚洲国产婷婷综合在线精品| 免费一级欧美片在线播放| 久久九九热免费视频| 欧美专区日韩专区| 国产精品激情电影| 性欧美1819性猛交| 亚洲国产精品久久久久| 亚洲婷婷国产精品电影人久久| 久久久欧美精品| 欧美电影打屁股sp| 亚洲永久精品国产| 一区二区三区在线视频免费观看| 欧美成人免费在线| 亚洲欧美国产毛片在线| 欧美成人资源| 午夜欧美大尺度福利影院在线看| 狠狠色伊人亚洲综合网站色| 欧美日韩日本国产亚洲在线| 久久精品国产免费观看| 一本久道久久综合婷婷鲸鱼| 鲁大师影院一区二区三区| 一区二区三区精品视频| 一区二区在线不卡| 国产精品婷婷| 欧美日韩一视频区二区| 免费成人黄色av| 欧美亚洲综合另类| avtt综合网| 亚洲伦理中文字幕| 亚洲激情欧美激情| 欧美大片免费观看| 久久视频免费观看|