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

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

 

 

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

國內很多人談到全文檢索就必提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>
            亚洲黄色免费网站| 久久精品国产69国产精品亚洲| 男人天堂欧美日韩| 久久这里只有| 国产一区二区三区的电影| 欧美激情第8页| 国产欧美精品| 亚洲人www| 国产亚洲福利一区| 亚洲视频免费观看| 亚洲欧美日韩国产综合| 亚洲国产精品第一区二区| 亚洲一二三区精品| 国产亚洲精品7777| 狠狠色噜噜狠狠色综合久| 美女性感视频久久久| 极品av少妇一区二区| 亚洲电影在线看| 国产精品理论片| 亚洲第一成人在线| 国产一区二区三区在线播放免费观看| 欧美激情综合色| 黄色另类av| 亚洲专区国产精品| 日韩视频二区| 亚洲欧美日韩精品久久亚洲区 | 欧美中文字幕不卡| 亚洲日本电影| 亚洲一区二区三区四区五区午夜| 黄色成人在线免费| 亚洲少妇在线| 亚洲精品视频在线播放| 午夜国产精品影院在线观看| 国产日韩欧美| aa级大片欧美三级| 亚洲国产天堂网精品网站| 一级日韩一区在线观看| 最近中文字幕日韩精品| 欧美亚洲综合久久| 亚洲一区二区三区在线视频| 香蕉亚洲视频| 久久久青草婷婷精品综合日韩| 中日韩高清电影网| 欧美成人午夜剧场免费观看| 亚洲自拍偷拍一区| 亚洲人成人77777线观看| 欧美一区二区三区免费观看视频| 亚洲美女av网站| 久久成人免费电影| 午夜在线不卡| 欧美午夜精品久久久久久浪潮| 久久国产精品亚洲va麻豆| 久久久国产亚洲精品| 久久狠狠亚洲综合| 国产精品免费福利| 欧美一级久久久| 亚洲国产精品传媒在线观看| 久久久久久9| 99热在线精品观看| 欧美日韩午夜精品| 久久成人综合网| 欧美日韩一区二区高清| 中文在线一区| 午夜精品一区二区三区电影天堂 | 亚洲视频狠狠| 欧美夫妇交换俱乐部在线观看| 美女91精品| 伊人春色精品| 久久久久久欧美| 欧美伊人影院| 国产日韩欧美一二三区| 亚洲欧美综合国产精品一区| av成人天堂| 快射av在线播放一区| 欧美精品一区在线播放| 欧美激情按摩| 亚洲精品人人| 欧美日韩国产高清视频| 麻豆国产精品一区二区三区| 亚洲精品乱码久久久久久蜜桃91| 欧美国产激情| 亚洲麻豆国产自偷在线| 亚洲一区二区三区欧美| 国产精品一区=区| 亚洲欧洲99久久| 欧美成年人网| 99精品热视频| 欧美日韩无遮挡| 亚洲一区二区三区视频| 久久精品最新地址| 亚洲片区在线| 国产欧美视频一区二区| 久久久久久久综合狠狠综合| 欧美激情影音先锋| 亚洲一区二区三区免费视频| 国产精品综合视频| 久久伊人免费视频| 亚洲欧洲在线播放| 午夜精品成人在线视频| 国产中文一区二区| 欧美成人在线影院| 亚洲一区二区三区精品动漫| 久久久水蜜桃| 欧美a级片网| 欧美影院精品一区| 亚洲电影激情视频网站| 亚洲在线观看视频网站| aa国产精品| 女人色偷偷aa久久天堂| 国产亚洲精品久久久| 欧美日韩大片一区二区三区| 亚洲欧美成人综合| 亚洲大片在线| 久久精品30| aa日韩免费精品视频一| 国产精品国产福利国产秒拍| 米奇777在线欧美播放| 一本久久精品一区二区| 亚洲日本精品国产第一区| 国产亚洲一级高清| 欧美国产一区二区| 久久久久久免费| 正在播放亚洲| 最新高清无码专区| 久久夜色精品国产| 亚洲在线网站| 一区二区冒白浆视频| 在线看国产日韩| 国产精品久久久久9999| 久久在线免费观看| 欧美一级成年大片在线观看| 蜜桃av一区二区| 久久人人97超碰精品888| 一区二区久久久久久| 亚洲国产一区二区精品专区| 国产伦精品一区二区三区高清版| 欧美精品 日韩| 亚洲一区日韩在线| 亚洲一区二区毛片| 99综合电影在线视频| 欧美激情视频免费观看| 久久久久久国产精品一区| 午夜精品久久久久久久99樱桃| 激情视频一区| 国产亚洲成av人在线观看导航| 欧美猛交免费看| 欧美国产日韩一区| 欧美成熟视频| 欧美肥婆bbw| 久久亚洲二区| 欧美一区二区三区在线看| 亚洲乱码国产乱码精品精天堂 | 欧美一级视频一区二区| 亚洲国产精品久久久| 国产精品影音先锋| 国语精品中文字幕| 国产综合网站| 国产综合色在线| 国产在线视频欧美一区二区三区| 国产亚洲激情| 亚洲激情国产| 国产又爽又黄的激情精品视频| 国产精品久久久久免费a∨大胸| 欧美日韩一区自拍| 欧美日韩成人一区二区三区| 国产精品男gay被猛男狂揉视频| 欧美肉体xxxx裸体137大胆| 欧美日韩国产一区二区三区地区| 欧美日韩国产成人在线观看| 欧美日韩美女在线| 久热精品在线| 欧美成人午夜77777| 欧美日韩国产麻豆| 欧美午夜片欧美片在线观看| 欧美国产日韩视频| 国产午夜精品美女视频明星a级 | 日韩一区二区福利| 亚洲视频自拍偷拍| 欧美一级电影久久| 久久综合给合久久狠狠色| 欧美国产国产综合| 亚洲视频你懂的| 欧美怡红院视频| 免费观看成人www动漫视频| 欧美成人性生活| 国产精品二区三区四区| 国产精品伦一区| 激情综合久久| 狂野欧美性猛交xxxx巴西| 午夜精品福利在线| aⅴ色国产欧美| 欧美在线观看视频| 久久国产综合精品| 美玉足脚交一区二区三区图片| 噜噜噜91成人网| 国产精品有限公司| 国产三级精品三级| 好吊色欧美一区二区三区四区| 国产亚洲一区在线播放| 国产一区二区电影在线观看|