前幾章將有特點的公有云計算平臺都介紹了1下,這里費下嘴,不是說只有這些云平臺,實際上有很多,到現在Bat、360等都得云計算平臺有觸及,方向、功能大體相似,我們經常使用的網盤算是其中之1。通過前面云計算的介紹,云計算相干的虛擬化、并行計算、主機管理等技術,我們也積累很多東西,現在就開始利用到實踐中。
筆者認為可以依照數據的使用方式,將利用分為3種:以計算為中心的利用(統計計算,摹擬計算,圖象、信息管理系統,這類單個計算所需數據量小,數據傳輸代價小,能夠實時處理),以數據為中心的利用(互聯網搜索公司、數據發掘、人口統計、日志分析,輸入數據量較大,傳輸代價高,需要散布式并行處理),需要統籌數據與計算的利用(采取分而治之的方法,根據不同的功能模塊采取不同的技術)。
對這么利用,我們有不同的架構選擇,以計算為中心的利用架構選擇,除本機采取多線程編程外,通常可以把計算所需的數據分發到多臺計算機上同時計算,1般這樣的利用計算所需數據量較小,數據傳輸花費時間少,側重于并行計算,而沒必要關注數據存儲問題,前端因特網利用可使用負載均衡器,后臺的大計算量可以選擇Platform Symphony等軟件來解決。
以數據為中心的利用架構與以計算為中心的最大區分就是計算所需的數據”量“,當需要傳輸的數據量很大時,數據傳輸的時間遠遠大于處理的時間,單純提高速度就沒有了實際用途,因而,Google提出了MapReduce計算框架,他將數據最初產生時就散布寄存在散布式文件系統中,每個數據存儲節點同時也是計算節點,大大節省了數據傳輸時間,提高了計算速度,算是目前較為有效的離線處理方案,后來就有了實時處理數據框架Spark,所以以數據為中心的利用可以采取MapReduce架構(比如hadoop實現)構建利用計算環境。
需要統籌數據和計算的利用架構選擇,比如Google的搜索頁面,它采取前端頁面使用負載均衡器提高用戶的響應速度,后臺大數據量計算采取MapReduce架構解決,總之,就是分而治之,轉化為以數據和計算為中心。
其實,MapReduce框架其實不能解決所有的問題,大致有這么3點:1、目前很多利用都是集中式存儲的,出于各種斟酌,多數用戶不會使用HDFS這類散布式文件系統,那樣就使用不了MapReduce框架;2、現有的MapReduce實現,數據都是分散式存儲的,這樣必將給數據的傳輸和同步帶來新的問題;3、MapReduce計算節點是和數據相干聯的,需要將數據分發到所有的工作節點上,而實際情況是,1般數據只存在全部集群的部份節點上,這樣有時就不能充分的利用計算資源。
除MapReduce框架的問題,現有的云計算技術還存在很多問題。由于我們說了那末多的云計算產品,他們都是針對某1方面問題而產生的解決方案,當整合時,各種問題也就隨機產生:1、NoSQL數據庫API不兼容,不同廠商提供的數據庫操作方式不1樣,一樣的插入功能不盡相同,雖然他們在設計上相似。這類不同會致使當選擇了某種特殊NoSQL數據庫開發利用后,很難將利用遷移到其他云計算平臺上;2、各公共服務提供商所提供的服務不同,具體的看下圖:
針對上面提到的問題現狀,我們也有相應的解決辦法。我們知道在傳統的關系型數據庫中,也遇到過一樣的問題,當時是創建了SQL標準數據庫訪問語言,開發了hibernate,DataNucleus等輕量級的ORM開發組件,一樣,對新興NoSQl數據庫,針對java語言,幾近所有的NoSQL數據庫都支持JPA標準,注意這是個標準。
JPA(Java Persistence API)實現了存儲對象向不同數據庫存儲的相互轉化,整體思想和現有的Hibernate、DataNucleus等ORM框架大體1致,總的來講,JPA包括以下兩方面技術:1是ORM對象關系映照,ORM簡而言之就是將java類中字段、名稱和數據庫的列名、表名關聯在1起,JPA支持XMl和java Annotation(注解式編程)兩種元數據的情勢;2是統1標準的數據庫編程接口,JPA提供統1的數據庫編程接口標準來操作實體對象,履行查詢,插入,刪除,更新等操作,以筆者經驗,JPA能很好解決90%的數據庫操作,對個別的大數據量、特定的操作需要開發人員自己完成。具體JPA的實現操作我會專門1文來介紹。
最后就是實戰基于云計算平臺的文件同享系統需求分析,請看下回分解。說明1下,基于云計算平臺的文件同享系統有很多知識點我都沒有學過,所以接下來的時間我會先逐一補充這個項目所需要的1些知識點,比如HBase、JPA的使用,簡單工具類的介紹,經常使用模式(單態等)的學習,還有Google,Amazon平臺的搭建等。待補充完再詳細學習這個項目。
上一篇 如何在三個月內獲得三年的工作經驗
下一篇 java.lang.ClassCastException:java.math.BigDecimal cannot be cast to java.lang.St