亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于NIO的高速數(shù)據(jù)傳輸技術(shù)的實(shí)現(xiàn)

        2016-08-04 02:06:51郭金磊張玉生胡愛蘭
        關(guān)鍵詞:選擇器序列化自帶

        郭金磊,張玉生,胡愛蘭

        (華北計算機(jī)系統(tǒng)工程研究所,北京 100083)

        ?

        基于NIO的高速數(shù)據(jù)傳輸技術(shù)的實(shí)現(xiàn)

        郭金磊,張玉生,胡愛蘭

        (華北計算機(jī)系統(tǒng)工程研究所,北京 100083)

        摘要:隨著大數(shù)據(jù)技術(shù)的發(fā)展,多線程高并發(fā)等技術(shù)已經(jīng)越來越成為大數(shù)據(jù)處理中的關(guān)鍵技術(shù)。非阻塞式I/O(new I/O,NIO)技術(shù)作為一種分布式高并發(fā)技術(shù)被廣泛應(yīng)用,但對于大數(shù)據(jù)量的通信往往需要很多的時間才能完成。Google提出的Protocol Buffer序列化壓縮技術(shù)相對于傳統(tǒng)序列化效率高、時間短、使用簡單。文章將傳統(tǒng)NIO技術(shù)與Protocol Buffer相結(jié)合,在分布式系統(tǒng)不同節(jié)點(diǎn)通信中,極大地降低了分布式系統(tǒng)的網(wǎng)絡(luò)負(fù)載,大大節(jié)省了數(shù)據(jù)傳輸時間。

        關(guān)鍵詞:NIO(new I/O) ;Protocol Buffer ;分布式系統(tǒng);序列化

        引用格式:郭金磊,張玉生,胡愛蘭. 基于NIO的高速數(shù)據(jù)傳輸技術(shù)的實(shí)現(xiàn)[J].微型機(jī)與應(yīng)用,2016,35(13):19-20,24.

        0引言

        隨著大數(shù)據(jù)技術(shù)的發(fā)展,多線程高并發(fā)等技術(shù)已經(jīng)越來越成為大數(shù)據(jù)處理中的關(guān)鍵技術(shù),同一個節(jié)點(diǎn)中的不同線程和不同節(jié)點(diǎn)的線程間的通信越來越密切。Java NIO作為一種分布式數(shù)據(jù)傳輸技術(shù)在多線程高并發(fā)[1]的實(shí)際應(yīng)用中扮演著至關(guān)重要的角色。為減小網(wǎng)絡(luò)負(fù)載,加速分布式系統(tǒng)中網(wǎng)絡(luò)通信,迫切需要一種高效率壓縮序列化技術(shù)。

        1研究現(xiàn)狀

        Java NIO的核心是Channel、Buffer 和 Selector。NIO基于通道(Channel)和緩沖區(qū)(Buffer)進(jìn)行操作,通道先在選擇器注冊讀寫事件,讀數(shù)據(jù)時,當(dāng)選擇器發(fā)現(xiàn)該通道準(zhǔn)備讀完成,通道直接將數(shù)據(jù)從底層網(wǎng)卡隊列讀進(jìn)緩沖區(qū)。寫數(shù)據(jù)時,當(dāng)選擇器發(fā)現(xiàn)該通道準(zhǔn)備寫完成,通道將數(shù)據(jù)寫進(jìn)緩沖區(qū)。通道可以實(shí)現(xiàn)在緩沖區(qū)中對每個字節(jié)類似于指針對數(shù)據(jù)操作,可以來回移動讀取數(shù)據(jù)。選擇器可以用一個單獨(dú)的線程同時監(jiān)聽管理多個通道。

        傳統(tǒng)的NIO[2]都是使用Java自帶的序列化形式對傳輸數(shù)據(jù)和對象進(jìn)行序列化壓縮。這種情況下,數(shù)據(jù)壓縮率[3]較低,需要傳輸?shù)膶ο髷?shù)據(jù)流很大時,尤其在分布式系統(tǒng)中,容易造成網(wǎng)絡(luò)擁堵。本文在傳統(tǒng)NIO技術(shù)的基礎(chǔ)上結(jié)合Google Protocol Buffer技術(shù)實(shí)現(xiàn)了數(shù)據(jù)對象的高效序列化壓縮傳輸。

        2Protocol Buffer優(yōu)點(diǎn)

        Google Protocol Buffer(簡稱Protobuf)是Google公司提出的混合語言數(shù)據(jù)標(biāo)準(zhǔn),用于 RPC 系統(tǒng)和持續(xù)數(shù)據(jù)存儲系統(tǒng)。同時也可用于通信協(xié)議、數(shù)據(jù)存儲等領(lǐng)域的語言無關(guān)、平臺無關(guān)、可擴(kuò)展的序列化結(jié)構(gòu)數(shù)據(jù)格式。目前提供了C++、Java、Python三種語言的API。Protobuf 具有很多優(yōu)點(diǎn):實(shí)現(xiàn)簡單,壓縮速度快,傳輸速度快,存儲空間小。用Protobuf與Java自帶的序列化工具實(shí)現(xiàn)的對象壓縮相比,存儲空間大了一個數(shù)量級,時間上快了一個數(shù)量級,尤其是可以自動生成遠(yuǎn)程過程調(diào)用協(xié)議(Remote Procedure Call Protocol, RPC)的數(shù)據(jù)結(jié)構(gòu),特別是service業(yè)務(wù)邏輯,是一種很好地實(shí)現(xiàn)RPC的自動化工具。Protobuf 編譯器會將.proto文件編譯生成對應(yīng)的數(shù)據(jù)結(jié)構(gòu)以對Protobuf數(shù)據(jù)進(jìn)行序列化、反序列化操作。

        以最簡單的一個對象Person(僅有三個屬性:姓名、年齡和住址)為例,用Java自帶的序列化工具與Protobuf來對比。使用Java自帶的序列化工具,經(jīng)過壓縮后的數(shù)據(jù)是181 B,如圖1所示。

        圖1 Java自帶壓縮Person大小

        而當(dāng)采用Protobuf時,如圖2所示,占用空間僅有20 B,而且實(shí)現(xiàn)簡單,壓縮速度快,傳輸速度快,反序列化也快??梢院芎玫貙?shí)現(xiàn)分布式高并發(fā)式的數(shù)據(jù)傳輸,大大降低了網(wǎng)絡(luò)傳輸負(fù)載。

        圖2 Protobuf壓縮Person對象大小圖

        ProtobufSerializable序列化/ns16160反序列化/ns211002數(shù)據(jù)大小/B20180

        壓縮person對象時間和大小對比如表1所示。

        3簡單實(shí)例實(shí)現(xiàn)

        本文根據(jù)Protobuf的優(yōu)點(diǎn)在NIO的基礎(chǔ)上實(shí)現(xiàn)了一個分布式的高并發(fā)、高傳輸效率的項(xiàng)目。系統(tǒng)采用多個一級引擎來處理原始日志數(shù)據(jù),讀取后進(jìn)行分段,分段后采用Hash映射到多個二級引擎(可以任意臺Hash映射)中進(jìn)行數(shù)據(jù)融合,融合后的數(shù)據(jù)再匯總到一臺服務(wù)器上,客戶端可以通過遠(yuǎn)程Web訪問這個服務(wù)器上的數(shù)據(jù)。其中一級引擎與二級引擎之間的數(shù)據(jù)傳輸就是使用的NIO與Protobuf相結(jié)合的技術(shù),如圖3所示。

        圖3 分布式NIO結(jié)構(gòu)示意圖

        客戶端使用Protobuf對數(shù)據(jù)序列化壓縮發(fā)送。

        ListrpcList = new ArrayList ();

        //實(shí)例化發(fā)送數(shù)據(jù)

        for(HTTPAPPHost hah : list){

        RPCHah rpchah = RPCHah.newBuilder()

        .setCellid(hah.getCellid()).setAppType(hah

        .getAppType()).build();

        rpcList.add(rpchah);

        //將原始list轉(zhuǎn)化為RPCList完成

        RPCReq req = RPCReq.newBuilder()

        .addAllHahs(rpcList).build();

        //序列化壓縮完成

        if(e2info.getDataQueue().offer(req.toByteArray())){

        //調(diào)用網(wǎng)絡(luò)模塊,將數(shù)據(jù)發(fā)送到二級引擎

        NIOClientRunner.sendData(e2info); }

        //發(fā)送數(shù)據(jù)

        服務(wù)器端采用NIO接收數(shù)據(jù)并使用Protobuf反序列化及處理。

        Selector selector=Selector.open();

        //開啟選擇器

        ServerSocketChannel ssc=

        ServerSocketChannel.open();

        ssc.configureBlocking(false);

        //配置為非阻塞模式

        ssc.register(selector, SelectionKey.OP_WRITE);

        while(isRunning){

        selector.select(1);

        //阻塞延時1ns

        Set set=selector.selectedKeys();

        Iterator it=set.iterator();

        while(it.hasNext()){

        SelectionKey skey=it.next();

        if(skey.isReadable()){

        //選擇讀數(shù)據(jù)通道

        SocketChannel sct = skey.channel();

        ByteBuffer tempBuf=

        ByteBuffer.allocate(1);

        String dataStr="";

        while(!dataStr.endsWith(" ")){

        sct.read(tempBuf);

        dataStr +=new String (tempBuf.array());

        tempBuf.clear();}

        //防止粘包

        byte[] data= dataStr.array();

        recoverData2List.handlerData(engine1Info, data); }

        下面服務(wù)器端把data數(shù)據(jù)反序列化。

        List pcList=request.getHahsList();

        for(RPCHah rpchah : rpcList){

        HTTPAPPHost hah = new HTTPAPPHost();

        hah.setCellid(rpchah.getCellid());

        hah.setAppType(rpchah.getAppType());

        Global.getDataQueue().put(hah);

        //將反序列化的對象存儲到dataQueue中,反序列化完成

        }

        表2是一級引擎向二級引擎發(fā)送17 980條實(shí)例HTTPAPPHost對象數(shù)據(jù)與Java自帶序列化的數(shù)據(jù)傳輸這些數(shù)據(jù)量的效率對比。

        本文在傳統(tǒng)NIO的基礎(chǔ)上結(jié)合了Proto Buffer,使得壓

        縮后的數(shù)據(jù)量大致是原來的1/9,壓縮時間上大致是原來

        表2 實(shí)際環(huán)境序列化rpcList對象時間和大小對比

        的1/8,反序列化時間大致是原來的1/40,極大地提高了傳輸?shù)男剩档土司W(wǎng)絡(luò)負(fù)載[4]。

        4結(jié)論

        本文在傳統(tǒng)NIO的基礎(chǔ)上應(yīng)用Protobuf后,能夠使得分布式高并發(fā)下性能極大提升,網(wǎng)絡(luò)負(fù)載大大減小,優(yōu)化性能明顯,尤其在以Map Reduce[5]為核心技術(shù)的大數(shù)據(jù)處理應(yīng)用中性能更為突出。

        參考文獻(xiàn)

        [1] GOETZ B,PEIERLS T,BIOCH J,等.Java并發(fā)編程實(shí)戰(zhàn)[M].童云蘭,譯.北京:機(jī)械工業(yè)出版社,2012.

        [2] 李林鋒.Netty權(quán)威指南[M].北京:電子工業(yè)出版社,2014.

        [3] 程超,楊風(fēng)召.基于Java非阻塞I/O開發(fā)高性能網(wǎng)絡(luò)應(yīng)用程序[J].電子工程師,2006,32(10):71-73.

        [4] 徐忠勝,沈蘇彬.一種云計算資源的多目標(biāo)優(yōu)化的調(diào)度方法[J].微型機(jī)與應(yīng)用, 2015, 34(13):17-20.

        [5] 元二菊,郭進(jìn)偉,皮建勇,等.基于MapReduce的序列規(guī)則在推薦系統(tǒng)中的研究[J].微型機(jī)與應(yīng)用,2014,33(6):68-70,73.

        中圖分類號:TP311

        文獻(xiàn)標(biāo)識碼:A

        DOI:10.19358/j.issn.1674- 7720.2016.13.006

        (收稿日期:2016-03-03)

        作者簡介:

        郭金磊(1987-),男,碩士研究生,主要研究方向:計算機(jī)網(wǎng)絡(luò)與大數(shù)據(jù)處理。

        張玉生(1990-),男,碩士研究生,主要研究方向:實(shí)時數(shù)據(jù)庫處理。

        胡愛蘭(1973-),女,碩士,高級工程師,主研究方向:通信,信息處理及計算機(jī)應(yīng)用。

        The implementation of high speed data transmission technology based on NIO

        Guo Jinlei, Zhang Yusheng, Hu Ailan

        (North China Computer System Engineering Research Institute, Beijing 100083, China)

        Abstract:With the development of big data technology, multi-threaded high concurrency distributed system has become the main trend in large data processing. NIO as a distributed high concurrency technology is widely used, but for the data of large scale communication often requires a lot of time to complete. The Protocol Buffer serialization compression technology proposed by Google compared with traditional methods has the advantages of more high-efficiency, faster and easier to use. The article combines traditional NIO and Protocol Buffer to implement communications in distributed environment, which reduces the load of network and saves the data transfer time greatly.

        Key words:NIO; Protocol Buffer; distributed system; serialization

        猜你喜歡
        選擇器序列化自帶
        靶通道選擇器研究與優(yōu)化設(shè)計
        如何建構(gòu)序列化閱讀教學(xué)
        甘肅教育(2020年14期)2020-09-11 07:58:36
        周迅:天才,自帶撥亂反正的能量
        文苑(2018年23期)2018-12-14 01:06:26
        中國寶玉石(2018年6期)2018-03-05 06:17:48
        四選一數(shù)據(jù)選擇器74LS153級聯(lián)方法分析與研究
        電腦與電信(2017年6期)2017-08-08 02:04:22
        好的愛情自帶成長屬性
        海峽姐妹(2017年3期)2017-04-16 03:06:35
        Java 反序列化漏洞研究
        雙四選一數(shù)據(jù)選擇器74HC153的級聯(lián)分析及研究
        作文訓(xùn)練微格化、序列化初探
        語文知識(2015年12期)2015-02-28 22:02:15
        Java序列化技術(shù)的探討
        国产日韩久久久精品影院首页 | 伊人久久这里只有精品| 亚洲av无一区二区三区久久| 人妻系列无码专区久久五月天| 亚洲第一无码精品久久| 丁香婷婷激情俺也去俺来也| 亚洲综合一区中文字幕| 中文乱码字慕人妻熟女人妻| 国产精品一区二区在线观看99| 亚洲又黄又大又爽毛片| 在线国人免费视频播放| 日本护士xxxx视频| 久久99精品久久久久久野外| 国产成人AⅤ| 最新中文字幕日韩精品| 婷婷色香五月综合激激情| 一本色道久久99一综合| 久久综合激激的五月天| 亚洲综合第一页中文字幕| 国产精品毛片完整版视频| 國产AV天堂| 日本熟女视频一区二区三区| 丰满少妇被猛烈进入高清播放 | 欧美精品一区二区精品久久| 国产一线二线三线女| 亚洲欧美日韩精品高清| 国产3p一区二区三区精品 | 美女免费视频观看网址| 国内成+人 亚洲+欧美+综合在线| 欧美午夜a级精美理论片| 视频福利一区二区三区| 亚洲av无码国产精品色午夜软件| 海角国精产品一区一区三区糖心| 亚洲三级在线播放| 国产精品成人一区二区在线不卡| 国产婷婷色一区二区三区在线| 97色伦图片97综合影院久久| 日本久久精品国产精品| 久久99精品久久久久麻豆| 国产96在线 | 欧美| yw193.can尤物国产在线网页|