99999久久久久久亚洲,欧美人与禽猛交狂配,高清日韩av在线影院,一个人在线高清免费观看,啦啦啦在线视频免费观看www

熱線電話:13121318867

登錄
首頁大數(shù)據時代 想搭好大數(shù)據架構,這7個技術是關鍵
想搭好大數(shù)據架構,這7個技術是關鍵
2018-04-03
收藏



    企業(yè)IT基礎設施平臺的重新構建是一項復雜的任務。重新構建平臺通常由一系列變化的關鍵業(yè)務驅動因素引發(fā),現(xiàn)在情況正是如此。簡而言之,主導企業(yè)IT技術的近30年的平臺無法再滿足推動業(yè)務發(fā)展所需的工作負載的需求。


  數(shù)字化轉型的核心是數(shù)據,它已成為商業(yè)中最有價值的事務。由于格式不兼容,傳統(tǒng)數(shù)據庫的局限性,以及無法靈活地合并來自多個來源的數(shù)據,組織長期以來一直受到其使用數(shù)據的困擾。新興技術的出現(xiàn)有望改變這一切。


108.jpg


       大數(shù)據


  改善軟件部署模式是消除數(shù)據使用障礙的一個主要方面。更高的“數(shù)據靈活性”還需要更靈活的數(shù)據庫和更具可擴展性的實時流式傳輸平臺。實際上,事實上,至少有七種基礎技術可以結合在一起,為企業(yè)提供一種靈活的、實時的“數(shù)據結構”。


  與他們正在取代的技術不同,這七種軟件創(chuàng)新能夠擴展以滿足許多用戶和許多用例的需求。對于企業(yè)而言,他們有能力實現(xiàn)更快、更明智的決策,并創(chuàng)造更好的客戶體驗。


  1. NoSQL數(shù)據庫


  RDBMS在數(shù)據庫市場上占據了近30年的主導地位。但是,面對數(shù)據量的不斷增長以及數(shù)據處理速度的加快,傳統(tǒng)關系數(shù)據庫已經顯示出其不足。NoSQL數(shù)據庫由于其速度和擴展能力而被接管。就文檔數(shù)據庫而言,它們從軟件工程的角度提供了一個更簡單的模型。這種更簡單的開發(fā)模式可加快產品上市速度,并幫助企業(yè)更快響應客戶和內部用戶的需求。


  2.實時流媒體平臺


  實時響應客戶對客戶體驗至關重要。在過去的10年中面向消費者的行業(yè)經歷了巨大的顛覆,這并不神秘。這與企業(yè)對用戶實時做出反應的能力有關。轉向實時模型需要事件流。


  消息驅動的應用程序已存在多年。然而,如今的流媒體平臺的規(guī)模比以往要大得多,成本要低得多。最近流媒體技術的進步為許多優(yōu)化業(yè)務的新方式打開了大門。通過為軟件開發(fā)和測試團隊提供實時反饋循環(huán),事件流還可以幫助企業(yè)提高產品質量,并更快地開發(fā)新的軟件。


    102.jpg


  3. Docker和容器


  容器對開發(fā)人員和操作人員,以及組織本身都有很大的好處。傳統(tǒng)的基礎設施隔離方法是靜態(tài)分區(qū),即為每個工作負載分配一個單獨的固定資源塊(無論是物理服務器還是虛擬機)。靜態(tài)分區(qū)可以更容易排除故障,但是實質性未充分利用的硬件成本很高。例如,Web服務器平均只使用了可用總計算量的10%。


  容器技術的巨大好處是它能夠創(chuàng)造一種新的隔離方式。那些最了解容器的人員可能會相信他們可以通過使用Ansible、Puppet或Chef等工具來獲得同樣的好處,但實際上這些技術具有很強的互補性。此外,無論企業(yè)如何努力,這些自動化工具都無法實現(xiàn)在不同基礎設施和硬件設置之間自由移動工作負載所需的隔離。同一個容器可以在本地數(shù)據中心的裸機硬件上或公共云中的虛擬機上運行,無需進行任何更改。這是真正的工作負載移動性。


  4.容器存儲庫


  容器存儲庫對于敏捷性至關重要。如果沒有用于構建容器映像的DevOps進程以及用于存儲它們的回收站,每個容器都必須建立在每一臺機器中,才可以運行。通過存儲庫,可以在讀取該存儲庫的計算機上啟動容器映像。在多個數(shù)據中心處理時,這變得更加復雜。如果在一個數(shù)據中心內建立一個容器圖像,那么如何將圖像移動到另一個數(shù)據中心?理想情況下,通過利用融合數(shù)據平臺,企業(yè)將有能力在數(shù)據中心之間對存儲庫實現(xiàn)鏡像。


  這里的一個關鍵細節(jié)是,內部部署和云計算之間的鏡像功能可能與企業(yè)的數(shù)據中心之間的鏡像功能差異很大。融合數(shù)據平臺將通過提供這些功能為企業(yè)解決這個問題,而不管組織中使用的是數(shù)據中心基礎設施還是云計算基礎設施。


  5.容器編排


  每個容器看起來都有它自己的私有操作系統(tǒng),而不是靜態(tài)硬件分區(qū)。與虛擬機不同,容器不需要計算和內存的靜態(tài)分區(qū)。這使管理員能夠在服務器上啟動大量容器,而無需擔心大量的內存量。有了像Kubernetes這樣的容器編排工具,啟動容器,移動它們并在環(huán)境中的其他地方重新啟動容器變得非常容易。


  在新的基礎設施組件到位之后,諸如MapR-DB或MongoDB之類的文檔數(shù)據庫,MapR-ES或Apache Kafka之類的事件流式傳輸平臺(諸如Kubernetes之類的編排工具),以及在Docker容器中實現(xiàn)用于構建和部署軟件的DevOps過程之后,人們必須了解應該在這些容器中部署哪些組件的問題。


    104.jpg


  6.微服務


  從歷史上看,微服務的概念并不新鮮。如今的差異在于,啟用技術(NoSQL數(shù)據庫、事件流、容器編排)可以隨著數(shù)千個微服務的創(chuàng)建而擴展。如果沒有這些數(shù)據存儲、事件流和架構編排的新方法,大規(guī)模微服務部署將不可能實現(xiàn)。管理大量數(shù)據、事件和容器實例所需的基礎設施將無法擴展到所需的級別。


  微服務都是與提供敏捷性有關。微服務通常由一個功能或一小組功能組成。工作的功能單元越小且越集中,創(chuàng)建、測試和部署服務就越容易。這些服務必須解耦,否則企業(yè)將失去具有敏捷性的微服務承諾。微服務可以依賴于其他服務,但通常通過負載平衡的REST API或事件流。通過使用事件流,企業(yè)可以利用請求和響應主題輕松跟蹤事件的歷史記錄。由于整個請求流和請求中的所有數(shù)據都可以在任何時間點重播,因此這種方法對故障排除具有重大的益處。


  由于微服務封裝了一小部分工作,并且由于它們彼此分離,所以隨著時間的推移更換或幾乎沒有障礙地升級服務。在原有模式下,依賴像RPC這樣的緊密耦合意味著不得不關閉所有連接,然后重新建立它們。負載均衡是實現(xiàn)這些的一個大問題,因為人工配置使它們容易出錯。


  7.功能即服務


  正如人們已經看到微服務在行業(yè)中占據主導地位,所以人們也會看到無服務器計算的興起或者可能更準確地將其稱為功能即服務(FaaS)。 FaaS以這樣一種方式創(chuàng)建微服務,即代碼可以包裝在輕量級框架中,內置于容器中,按需執(zhí)行(基于某種觸發(fā)器),然后自動進行負載平衡,多虧有了輕量級框架。FaaS的美妙之處在于它讓開發(fā)人員幾乎完全專注于該功能。因此,F(xiàn)aaS看起來是微服務方法的合乎邏輯的結論。


  觸發(fā)事件是FaaS的關鍵組成部分。沒有它,只有在需要完成工作的情況下,才能調用功能和消耗資源。功能的自動調用使得FaaS真正具有價值。想象一下,每當有人讀取用戶的配置文件時,都會有一個審計事件,這是一個必須運行以通知安全團隊的功能。更具體地說,它可能僅過濾出某些類型的記錄。它可以是具有選擇性的,畢竟它是一個完全可定制的業(yè)務功能。需要注意的是,使用像FaaS這樣的部署模型來完成這樣的工作流程非常簡單。


  把事件放在一起


  觸發(fā)服務背后的魔力實際上不過是事件流中的事件。某些類型的事件比其他事件更頻繁地用作觸發(fā)器,但是企業(yè)如果希望成為觸發(fā)器的事件都可能成為觸發(fā)器。觸發(fā)事件可以是文檔更新,對新文檔運行OCR過程,然后將OCR過程中的文本添加到NoSQL數(shù)據庫。如果人們以更有趣的方式思考,每當上傳圖像時,都可以通過機器學習框架進行圖像識別和評分。這里沒有根本的限制。如果定義了一個觸發(fā)器事件,發(fā)生了一些事件,該事件觸發(fā)該功能,并且該功能完成其工作。


  FaaS將成為采用微服務的下一個階段。然而,接近FaaS時必須考慮一個主要因素,那就是供應商鎖定。 FaaS隱藏了特定的存儲機制、特定的硬件基礎架構和編排,這對開發(fā)人員來說都是偉大的事情。但由于這種抽象,托管的FaaS產品是IT行業(yè)有史以來最大的供應商鎖定機會之一。由于這些API不是標準化的,因此從公共云中的FaaS產品遷移幾乎是不可能的,不會丟失已經完成的近100%的工作。如果通過利用來自融合數(shù)據平臺的事件以更有條理的方式接近FaaS,那么在云計算提供商之間移動將變得更加容易。


數(shù)據分析咨詢請掃描二維碼

若不方便掃碼,搜微信號:CDAshujufenxi

數(shù)據分析師資訊
更多

OK
客服在線
立即咨詢
客服在線
立即咨詢
') } function initGt() { var handler = function (captchaObj) { captchaObj.appendTo('#captcha'); captchaObj.onReady(function () { $("#wait").hide(); }).onSuccess(function(){ $('.getcheckcode').removeClass('dis'); $('.getcheckcode').trigger('click'); }); window.captchaObj = captchaObj; }; $('#captcha').show(); $.ajax({ url: "/login/gtstart?t=" + (new Date()).getTime(), // 加隨機數(shù)防止緩存 type: "get", dataType: "json", success: function (data) { $('#text').hide(); $('#wait').show(); // 調用 initGeetest 進行初始化 // 參數(shù)1:配置參數(shù) // 參數(shù)2:回調,回調的第一個參數(shù)驗證碼對象,之后可以使用它調用相應的接口 initGeetest({ // 以下 4 個配置參數(shù)為必須,不能缺少 gt: data.gt, challenge: data.challenge, offline: !data.success, // 表示用戶后臺檢測極驗服務器是否宕機 new_captcha: data.new_captcha, // 用于宕機時表示是新驗證碼的宕機 product: "float", // 產品形式,包括:float,popup width: "280px", https: true // 更多配置參數(shù)說明請參見:http://docs.geetest.com/install/client/web-front/ }, handler); } }); } function codeCutdown() { if(_wait == 0){ //倒計時完成 $(".getcheckcode").removeClass('dis').html("重新獲取"); }else{ $(".getcheckcode").addClass('dis').html("重新獲取("+_wait+"s)"); _wait--; setTimeout(function () { codeCutdown(); },1000); } } function inputValidate(ele,telInput) { var oInput = ele; var inputVal = oInput.val(); var oType = ele.attr('data-type'); var oEtag = $('#etag').val(); var oErr = oInput.closest('.form_box').next('.err_txt'); var empTxt = '請輸入'+oInput.attr('placeholder')+'!'; var errTxt = '請輸入正確的'+oInput.attr('placeholder')+'!'; var pattern; if(inputVal==""){ if(!telInput){ errFun(oErr,empTxt); } return false; }else { switch (oType){ case 'login_mobile': pattern = /^1[3456789]\d{9}$/; if(inputVal.length==11) { $.ajax({ url: '/login/checkmobile', type: "post", dataType: "json", data: { mobile: inputVal, etag: oEtag, page_ur: window.location.href, page_referer: document.referrer }, success: function (data) { } }); } break; case 'login_yzm': pattern = /^\d{6}$/; break; } if(oType=='login_mobile'){ } if(!!validateFun(pattern,inputVal)){ errFun(oErr,'') if(telInput){ $('.getcheckcode').removeClass('dis'); } }else { if(!telInput) { errFun(oErr, errTxt); }else { $('.getcheckcode').addClass('dis'); } return false; } } return true; } function errFun(obj,msg) { obj.html(msg); if(msg==''){ $('.login_submit').removeClass('dis'); }else { $('.login_submit').addClass('dis'); } } function validateFun(pat,val) { return pat.test(val); }