一篇文看懂Hadoop:風雨十年,未來何去何從

来源:http://www.cnblogs.com/agileai/archive/2016/03/17/5287287.html
-Advertisement-
Play Games

本文分為技術篇、產業篇、應用篇、展望篇四部分 2006年項目成立的一開始,“Hadoop”這個單詞只代表了兩個組件——HDFS和MapReduce。到現在的10個年頭,這個單詞代表的是“核心”(即Core Hadoop項目)以及與之相關的一個不斷成長的生態系統。這個和Linux非常類似,都是由一個核


本文分為技術篇、產業篇、應用篇、展望篇四部分

技術篇

2006年項目成立的一開始,“Hadoop”這個單詞只代表了兩個組件——HDFS和MapReduce。到現在的10個年頭,這個單詞代表的是“核心”(即Core Hadoop項目)以及與之相關的一個不斷成長的生態系統。這個和Linux非常類似,都是由一個核心和一個生態系統組成。

現在Hadoop在一月發佈了2.7.2的穩定版,已經從傳統的Hadoop三駕馬車HDFS,MapReduce和HBase社區發展為60多個相關組件組成的龐大生態,其中包含在各大發行版中的組件就有25個以上,包括數據存儲、執行引擎、編程和數據訪問框架等。

Hadoop在2.0將資源管理從MapReduce中獨立出來變成通用框架後,就從1.0的三層結構演變為了現在的四層架構:

  1. 底層——存儲層,文件系統HDFS

  2. 中間層——資源及數據管理層,YARN以及Sentry等

  3. 上層——MapReduce、Impala、Spark等計算引擎

  4. 頂層——基於MapReduce、Spark等計算引擎的高級封裝及工具,如Hive、Pig、Mahout等等 

存儲層

HDFS已經成為了大數據磁碟存儲的事實標準,用於海量日誌類大文件的線上存儲。經過這些年的發展,HDFS的架構和功能基本固化,像HA、異構存儲、本地數據短路訪問等重要特性已經實現,在路線圖中除了Erasure Code已經沒什麼讓人興奮的feature。

隨著HDFS越來越穩定,社區的活躍度也越來越低,同時HDFS的使用場景也變得成熟和固定,而上層會有越來越多的文件格式封裝:列式存儲的文件格式,如Parquent,很好的解決了現有BI類數據分析場景;以後還會出現新的存儲格式來適應更多的應用場景,如數組存儲來服務機器學習類應用等。未來HDFS會繼續擴展對於新興存儲介質和伺服器架構的支持。

2015年HBase 發佈了1.0版本,這也代表著HBase 走向了穩定。最新HBase新增特性包括:更加清晰的介面定義,多Region 副本以支持高可用讀,Family粒度的Flush以及RPC讀寫隊列分離等。未來HBase不會再添加大的新功能,而將會更多的在穩定性和性能方面進化,尤其是大記憶體支持、記憶體GC效率等。

Kudu是Cloudera在2015年10月才對外公佈的新的分散式存儲架構,與HDFS完全獨立。其實現參考了2012年Google發表的Spanner論文。鑒於Spanner在Google 內部的巨大成功,Kudu被譽為下一代分析平臺的重要組成,用於處理快速數據的查詢和分析,填補HDFS和HBase之間的空白。其出現將進一步把Hadoop市場向傳統數據倉庫市場靠攏。

Apache Arrow項目為列式記憶體存儲的處理和交互提供了規範。目前來自Apache Hadoop社區的開發者們致力於將它制定為大數據系統項目的事實性標準。

Arrow項目受到了Cloudera、Databricks等多個大數據巨頭公司支持,很多committer同時也是其他明星大數據項目(如HBase、Spark、Kudu等)的核心開發人員。再考慮到Tachyon等似乎還沒有找到太多實際接地氣的應用場景,Arrow的高調出場可能會成為未來新的記憶體分析文件介面標準。

管控層

管控又分為數據管控和資源管控。

隨著Hadoop集群規模的增大以及對外服務的擴展,如何有效可靠的共用利用資源是管控層需要解決的問題。脫胎於MapReduce1.0的YARN成為了Hadoop 2.0通用資源管理平臺。由於占據了Hadoop的地利,業界對其在資源管理領域未來的前景非常看好

傳統其他資源管理框架如Mesos,還有現在興起的Docker等都會對YARN未來的發展產生影響。如何提高YARN性能、如何與容器技術深度融合,如何更好的適應短任務的調度,如何更完整的多租戶支持、如何細粒度的資源管控等都是企業實際生產中迫在眉睫的需求,需要YARN解決。要讓Hadoop走得更遠,未來YARN需要做的工作還很多。

另一方面大數據的安全和隱私越來越多的受到關註。Hadoop依靠且僅依靠Kerberos來實現安全機制,但每一個組件都將進行自己的驗證和授權策略。開源社區似乎從來不真正關心安全問題,如果不使用來自Hortonworks的Ranger或來自Cloudera 的Sentry這樣的組件,那麼大數據平臺基本上談不上安全可靠。

Cloudera剛推出的RecordService組件使得Sentry在安全競賽中拔得先機。RecordService不僅提供了跨所有組件一致的安全顆粒度,而且提供了基於Record的底層抽象(有點像Spring,代替了原來Kite SDK的作用),讓上層的應用和下層存儲解耦合的同時、提供了跨組件的可復用數據模型。

計算引擎層

Hadoop生態和其他生態最大的不同之一就是“單一平臺多種應用”的理念了。傳的資料庫底層只有一個引擎,只處理關係型應用,所以是“單一平臺單一應用”;而NoSQL市場有上百個NoSQL軟體,每一個都針對不同的應用場景且完全獨立,因此是“多平臺多應用”的模式。而Hadoop在底層共用一份HDFS存儲,上層有很多個組件分別服務多種應用場景,如:

  1. 確定性數據分析:主要是簡單的數據統計任務,例如OLAP,關註快速響應,實現組件有Impala等;

  2. 探索性數據分析:主要是信息關聯性發現任務,例如搜索,關註非結構化全量信息收集,實現組件有Search等;

  3. 預測性數據分析:主要是機器學習類任務,例如邏輯回歸等,關註計算模型的先進性和計算能力,實現組件有Spark、MapReduce等;

  4. 數據處理及轉化:主要是ETL類任務,例如數據管道等,關註IO吞吐率和可靠性,實現組件有MapReduce等

其中,最耀眼的就是Spark了。IBM宣佈培養100萬名Spark開發人員,Cloudera在One Platform倡議中宣佈支持Spark為Hadoop的預設通用任務執行引擎,加上Hortonworks全力支持Spark,我們相信Spark將會是未來大數據分析的核心。

雖然Spark很快,但現在在生產環境中仍然不盡人意,無論擴展性、穩定性、管理性等方面都需要進一步增強。同時,Spark在流處理領域能力有限,如果要實現亞秒級或大容量的數據獲取或處理需要其他流處理產品。Cloudera宣佈旨在讓Spark流數據技術適用於80%的使用場合,就考慮到了這一缺陷。我們確實看到實時分析(而非簡單數據過濾或分發)場景中,很多以前使用S4或Storm等流式處理引擎的實現已經逐漸Kafka+Spark Streaming代替。

Spark的流行將逐漸讓MapReduce、Tez走進博物館。

服務層

服務層是包裝底層引擎的編程API細節,對業務人員提供更高抽象的訪問模型,如Pig、Hive等。

而其中最炙手可熱的就是OLAP的SQL市場了。現在,Spark有70%的訪問量來自於SparkSQL!SQL on Hadoop到底哪家強?Hive、Facebook的Pheonix、Presto、SparkSQL、Cloudera推的Impala、MapR推的Drill、IBM的BigSQL、還是Pivital開源的HAWQ?

這也許是碎片化最嚴重的地方了,從技術上講幾乎每個組件都有特定的應用場景,從生態上講各個廠家都有自己的寵愛,因此Hadoop上SQL引擎已經不僅僅是技術上的博弈(也因此考慮到本篇中立性,此處不做評論)。可以遇見的是,未來所有的SQL工具都將被整合,有些產品已經在競爭鐘逐漸落伍,我們期待市場的選擇。

周邊的工具更是百花齊放,最重要的莫過於可視化、任務管理和數據管理了

有很多開源工具都支持基於Hadoop 的查詢程式編寫以及即時的圖形化表示,如HUE、Zeppelin等。用戶可以編寫一些SQL或Spark代碼以及描述代碼的一些標記,並指定可視化的模版,執行後保存起來,就可供其他人復用,這鐘模式也被叫做“敏捷BI”。這個領域的商業產品更是競爭激烈,如Tableau、Qlik等。

調度類工具的鼻祖Oozie能實現幾個MapReduce任務串連運行的場景,後來的Nifi及Kettle等其他工具則提供了更加強大的調度實現,值得一試。

毫無疑問,相對與傳統的資料庫生態,Hadoop的數據治理相對簡單。Atlas是Hortonworks新的數據治理工具,雖然還談不上完全成熟,不過正取得進展。Cloudera的Navigator是Cloudera商業版本的核心,匯聚了生命周期管理、數據溯源、安全、審計、SQL遷移工具等一系列功能。Cloudera收購Explain.io以後將其產品整合為Navigator Optimizator組件,能幫助用戶把傳統的SQL應用遷移到Hadoop平臺並提供優化建議,可以節省數人月的工作量。

演算法及機器學習

實現基於機器學習的自動的智能化數據價值挖掘是大數據和Hadoop最誘人的願景了,也是很多企業對大數據平臺的最終期望。隨著可獲得的數據越來越多,未來大數據平臺的價值更多的取決於其計算人工智慧的程度

現在機器學習正慢慢跨出象牙塔,從一個少部分學術界人士研究的科技課題變成很多企業正在驗證使用的數據分析工具,而且已經越來越多的進入我們的日常生活。

機器學習的開源項目除了之前的Mahout、MLlib、Oryx等,今年發生了很多令人矚目的大事,迎來了數個明星巨頭的重磅加入:

  • 2015年1月,Facebook開源前沿深度學習工具“Torch”。

  • 2015年4月,亞馬遜啟動其機器學習平臺Amazon Machine Learning,這是一項全面的托管服務,讓開發者能夠輕鬆使用歷史數據開發並部署預測模型。

  • 2015年11月,谷歌開源其機器學習平臺TensorFlow。

  • 同一月,IBM開源SystemML併成為Apache官方孵化項目。

  • 同時,微軟亞洲研究院將分散式機器學習工具DMTK通過Github開源。DMTK由一個服務於分散式機器學習的框架和一組分散式機器學習演算法組成,可將機器學習演算法應用到大數據中。

  • 2015年12月,Facebook開源針對神經網路研究的伺服器“Big Sur”,配有高性能圖形處理單元(GPUs),轉為深度學習方向設計的晶元。

產業篇

現在使用Hadoop的企業以及靠Hadoop賺錢的企業已經成千上萬。幾乎大的企業或多或少的已經使用或者計劃嘗試使用Hadoop技術。就對Hadoop定位和使用不同,可以將Hadoop業界公司劃分為四類:

  • 第一梯隊:這類公司已經將Hadoop當作大數據戰略武器。

  • 第二梯隊:這類公司將Hadoop 產品化。

  • 第三梯隊:這類公司創造對Hadoop整體生態系統產生附加價值的產品。

  • 第四梯隊:這類公司消費Hadoop,並給規模比第一類和第二類小的公司提供基於Hadoop的服務。

時至今日,Hadoop雖然在技術上已經得到驗證、認可甚至已經到了成熟期。其中最能代表Hadoop發展軌跡的莫過於商業公司推出的Hadoop發行版了。自從2008年Cloudera成為第一個Hadoop商業化公司,併在2009年推出第一個Hadoop發行版後,很多大公司也加入了做Hadoop產品化的行列。

“發行版”這個詞是開源文化特有的符號,看起來任何一個公司只要將開源代碼打個包,再多多少少加個佐料就能有一個“發行版”,然而背後是對海量生態系統組件的價值篩選、相容和集成保證以及支撐服務。

  • 2012年以前的發行版基本為對Hadoop打補丁為主,出現了好幾個私有化Hadoop版本,所折射的是Hadoop產品在質量上的缺陷。同期HDFS、HBase等社區的超高活躍度印證了這個事實。

  • 而之後的公司更多是工具、集成、管理,所提供的不是“更好的Hadoop”而是如何更好的用好“現有”的Hadoop。

  • 2014年以後,隨著Spark和其他OLAP產品的興起,折射出來是Hadoop善長的離線場景等已經能夠很好的解決,希望通過擴大生態來適應新的硬體和拓展新的市場。

Cloudera提出了Hybrid Open Source的架構:核心組件名稱叫CDH(Cloudera'sDistribution including Apache Hadoop),開源免費並與Apache社區同步,用戶無限制使用,保證Hadoop基本功能持續可用,不會被廠家綁定;數據治理和系統管理組件閉源且需要商業許可,支持客戶可以更好更方便的使用Hadoop技術,如部署安全策略等。Cloudera也在商業組件部分提供在企業生產環境中運行Hadoop所必需的運維功能,而這些功能並不被開源社區所覆蓋,如無宕機滾動升級、非同步災備等。

Hortonworks採用了100%完全開源策略,產品名稱為HDP(HortonworksData Platform)。所有軟體產品開源,用戶免費使用,Hortonworks提供商業的技術支持服務。與CDH相比,管理軟體使用開源Ambari,數據治理使用Atlas,安全組件使用Ranger而非Sentry,SQL繼續緊抱Hive大腿。

MapR採用了傳統軟體廠商的模式,使用私有化的實現。用戶購買軟體許可後才能使用。其OLAP產品主推Drill,又不排斥Impala。

現在主流的公有雲如AWS、Azure等都已經在原有提供虛擬機的IaaS服務之外,提供基於Hadoop的PaaS雲計算服務。未來這塊市場的發展將超過私有Hadoop部署。

應用篇

Hadoop平臺釋放了前所未有的計算能力,同時大大降低了計算成本。底層核心基礎架構生產力的發展,必然帶來的是大數據應用層的迅速建立。

對於Hadoop上的應用大致可以分為這兩類:

IT優化

將已經實現的應用和業務搬遷到Hadoop平臺,以獲得更多的數據、更好的性能或更低的成本。通過提高產出比、降低生產和維護成本等方式為企業帶來好處。

這幾年Hadoop在數個此類應用場景中已經被證明是非常適合的解決方案,包括:

  • 歷史日誌數據線上查詢:傳統的解決方案將數據存放在昂貴的關係型資料庫中,不僅成本高、效率低,而且無法滿足線上服務時高併發的訪問量。以HBase為底層存儲和查詢引擎的架構非常適合有固定場景(非ad hoc)的查詢需求,如航班查詢、個人交易記錄查詢等等。現在已經成為線上查詢應用的標準方案,中國移動在企業技術指導意見中明確指明使用HBase技術來實現所有分公司的清賬單查詢業務。

  • ETL任務:不少廠商已經提供了非常優秀的ETL產品和解決方案,併在市場中得到了廣泛的應用。然而在大數據的場景中,傳統ETL遇到了性能和QoS保證上的嚴重挑戰。多數ETL任務是輕計算重IO類型的,而傳統的IT硬體方案,如承載資料庫的小型電腦,都是為計算類任務設計的,即使使用了最新的網路技術,IO也頂多到達幾十GB。採用分散式架構的Hadoop提供了完美的解決方案,不僅使用share-nothing的scale-out架構提供了能線性擴展的無限IO,保證了ETL任務的效率,同時框架已經提供負載均衡、自動FailOver等特性保證了任務執行的可靠性和可用性。

  • 數據倉庫offload:傳統數據倉庫中有很多離線的批量數據處理業務,如日報表、月報表等,占用了大量的硬體資源。而這些任務通常又是Hadoop所善長的

經常被問到的一個問題就是,Hadoop是否可以代替數據倉庫,或者說企業是否可以使用免費的Hadoop來避免採購昂貴的數據倉庫產品。資料庫界的泰斗Mike Stonebroker在一次技術交流中說:數據倉庫和Hadoop所針對的場景重合型非常高,未來這兩個市場一定會合併。

我們相信在數據倉庫市場Hadoop會遲早替代到現在的產品,只不過,那時候的Hadoop已經又不是現在的樣子了。就現在來講,Hadoop還只是數據倉庫產品的一個補充,和數據倉庫一起構建混搭架構為上層應用聯合提供服務。

業務優化

在Hadoop上實現原來尚未實現的演算法、應用,從原有的生產線中孵化出新的產品和業務,創造新的價值。通過新業務為企業帶來新的市場和客戶,從而增加企業收入。

Hadoop提供了強大的計算能力,專業大數據應用已經在幾乎任何垂直領域都很出色,從銀行業(反欺詐、徵信等)、醫療保健(特別是在基因組學和藥物研究),到零售業、服務業(個性化服務、智能服務,如UBer的自動派車功能等)。

在企業內部,各種工具已經出現,以幫助企業用戶操作核心功能。例如,大數據通過大量的內部和外部的數據,實時更新數據,可以幫助銷售和市場營銷弄清楚哪些客戶最有可能購買。客戶服務應用可以幫助個性化服務; HR應用程式可幫助找出如何吸引和留住最優秀的員工等。

為什麼Hadoop如此成功?這個問題似乎是個馬後炮,但當我們今天驚嘆於Hadoop在短短10年時間取得如此統治性地位的時候,確實會自然而然地思考為什麼這一切會發生。基於與同期其他項目的比較,我們認為有很多因素的綜合作用造就了這一奇跡:

  • 技術架構:Hadoop推崇的本地化計算理念,其實現在可擴展性、可靠性上的優勢,以及有彈性的多層級架構等都是領先其他產品而獲得成功的內在因素。沒有其他任何一個這樣複雜的系統能快速的滿足不斷變化的用戶需求。

  • 硬體發展:摩爾定律為代表的scale up架構遇到了技術瓶頸,不斷增加的計算需求迫使軟體技術不得不轉到分散式方向尋找解決方案。同時,PC伺服器技術的發展使得像Hadoop這樣使用廉價節點組群的技術變為可行,同時還具有很誘人的性價比優勢。

  • 工程驗證:Google發表GFS和MapReduce論文時已經在內部有了可觀的部署和實際的應用,而Hadoop在推向業界之前已經在Yahoo等互聯網公司驗證了工程上的可靠性和可用性,極大的增加了業界信心,從而迅速被接納流行。而大量的部署實例又促進了Hadoop的發展喝成熟。

  • 社區推動:Hadoop生態一直堅持開源開放,友好的Apache許可基本消除了廠商和用戶的進入門檻,從而構建了有史以來最大最多樣化最活躍的開發者社區,持續地推動著技術發展,讓Hadoop超越了很多以前和同期的項目。

  • 關註底層:Hadoop 的根基是打造一個分散式計算框架,讓應用程式開發人員更容易的工作。業界持續推動的重點一直在不斷夯實底層,併在諸如資源管理和安全領域等領域不斷開花結果,為企業生產環境部署不斷掃清障礙。

下一代分析平臺

過去的十年中Apache Hadoop社區以瘋狂的速度發展,現在儼然已經是事實上的大數據平臺標準。但仍有更多的工作要做!大數據應用未來的價值在於預測,而預測的核心是分析。下一代的分析平臺會是什麼樣呢?它必定會面臨、同時也必須要解決以下的問題:

  1. 更多更快的數據。

  2. 更新的硬體特性及架構。

  3. 更高級的分析。

  4. 更安全。

因此,未來的幾年,我們會繼續見證“後Hadoop時代”的下一代企業大數據平臺:

  • 記憶體計算時代的來臨。隨著高級分析和實時應用的增長,對處理能力提出了更高的要求,數據處理重點從IO重新回到CPU。以記憶體計算為核心的Spark將代替以IO吞吐為核心的MapReduce成為分散式大數據處理的預設通用引擎。做為既支持批處理有支持準實時流處理的通用引擎,Spark將能滿足80%以上的應用場景。

然而,Spark畢竟核心還是批處理,擅長迭代式的計算,但並不能滿足所有的應用場景。其他為特殊應用場景設計的工具會對其補充,包括:

a) OLAP。OLAP,尤其是聚合類的線上統計分析應用,對於數據的存儲、組織和處理都和單純離線批處理應用有很大不同。

b) 知識發現。與傳統應用解決已知問題不同,大數據的價值在於發現並解決未知問題。因此,要最大限度地發揮分析人員的智能,將數據檢索變為數據探索。

  • 統一數據訪問管理。現在的數據訪問由於數據存儲的格式不同、位置不同,用戶需要使用不同的介面、模型甚至語言。同時,不同的數據存儲粒度都帶來了在安全控制、管理治理上的諸多挑戰。未來的趨勢是將底層部署運維細節和上層業務開發進行隔離,因此,平臺需要系統如下的功能保證:

a) 安全。能夠大數據平臺上實現和傳統數據管理系統中相同口徑的數據管理安全策略,包括跨組件和工具的一體化的用戶權利管理、細粒度訪問控制、加解密和審計。

b) 統一數據模型。通過抽象定義的數據描述,不僅可以統一管理數據模型、復用數據解析代碼,還可以對於上層處理屏蔽底層存儲的細節,從而實現開發/處理與運維/部署的解偶。

  • 簡化實時應用。現在用戶不僅關心如何實時的收集數據,而且關心同時儘快的實現數據可見和分析結果上線。無論是以前的delta架構還是現在lambda架構等,都希望能夠有一種解決快速數據的方案。Cloudera最新公開的Kudu雖然還沒有進入產品發佈,但卻是現在解決這個問題可能的最佳方案:採用了使用單一平臺簡化了快速數據的“存取用”實現,是未來日誌類數據分析的新的解決方案。

翹首展望,下一個十年

10年以後的Hadoop應該只是一個生態和標準的“代名詞”了,下層的存儲層不只是HDFS、HBase和Kudu等現有的存儲架構,上層的處理組件更會像app store里的應用一樣多,任何第三方都可以根據Hadoop的數據訪問和計算通信協議開發出自己的組件,用戶在市場中根據自己數據的使用特性和計算需求選擇相應的組件自動部署。

當然,有一些明顯的趨勢必然影響著Hadoop的前進:

  • 雲計算

現在50%的大數據任務已經運行在雲端,在3年以後這個比例可能會上升到80%。Hadoop在公有雲的發展要求更加有保障的本地化支持。

  • 硬體

快速硬體的進步會迫使社區重新審視Hadoop的根基,Hadoop社區絕不會袖手旁觀。

  • 物聯網

物聯網的發展會帶來海量的、分佈的和分散的數據源。Hadoop將適應這種發展。

以後的十年會發生什麼?以下是筆者的一些猜想:

  1. SQL和NoSQL市場會合併,NewSQL和Hadoop技術相互借鑒而最終走向統一,Hadoop市場和數據倉庫市場會合併,然而產品碎片化會繼續存在。

  2. Hadoop與其他資源管理技術和雲平臺集成,融合docker和unikernal等技術統一資源調度管理,提供完整多租戶和QoS能力,企業數據分析中心合併為單一架構。

  3. 企業大數據產品場景化。以後直接提供產品和技術的公司趨於成熟並且轉向服務。越來越多的新公司提供的是行業化、場景化的解決方案,如個人網路徵信套件以及服務。

  4. 大數據平臺的場景“分裂”。與現在談及大數據言必稱Hadoop以及某某框架不同,未來的數據平臺將根據不同量級的數據(從幾十TB到ZB)、不同的應用場景(各種專屬應用集群)出現細分的階梯型的解決方案和產品,甚至出現定製化一體化產品。

後記

現在Hadoop儼然已經成為企業數據平臺的“新常態”。我們很榮幸能夠見證Hadoop十年從無到有,再到稱王。在我們感動於技術的日新月異時,希望能通過本文能為Hadoop的昨天、今天和明天做出一點自己的解讀,算是為Hadoop慶祝10歲生日獻上的禮物。

筆者水平有限,加之時間緊迫,膚淺粗糙之處,還請各位讀者原諒和指教。文中有些內容引自網路,某些出處未能找到,還請原作者原諒。

大數據的明天是美好的,未來Hadoop一定是企業軟體的必備技能,希望我們能一起見證。

原文作者 陳飈 ,如有侵權請聯繫公眾號:數通暢聯或QQ群:299719834,將會第一時間刪除處理。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 多態 概念:指同一操作作用於某一類對象,可以有不同的解釋,產生不同的執行結果; 存在的必要條件 ① 需要存在繼承和實現關係; ② 同樣的方法調用而執行不同操作,運行不同代碼(重寫操作); ③ 在運行時父類或者介面的引用變數可以引用其子類的對象; 作用 ① 多態通過分離做什麼和怎麼做,從另一個角度將接
  • 面向對象三大特點:封裝、繼承、多態 封裝概念 ① 將東西包裝在一起,然後以新的完整形式呈現出來: 將方法和欄位一起包裝到一個單元中,單元以類的形式實現; ② 信息隱藏,隱藏對象的實現細節,不讓外部直接訪問到; ③ 將數據和方法包裝進類中,加上具體實現的隱藏,共同被稱作封裝,其結果是一個同時帶有特征和
  • Delphi Seatle can link Delphi project with Static library files(*.a): 1.at Delphi IDE, Add the "*.a" file Path to Library Path: a. Tools Menu b.Option
  • 我們現在做的一些非業務,如:日誌、事務、安全等都會寫在業務代碼中(也即是說,這些非業務類橫切於業務類),但這些代碼往往是重覆,複製——粘貼式的代碼會給程式的維護帶來不便,AOP就實現了把這些業務需求與系統需求分開來做。這種解決的方式也稱代理機制。 先來瞭解一下AOP的相關概念,《Spring參考手冊
  • 我是在ubuntu14.14 安裝的 lnmp。 部分擴展。均已安裝好,但是我用apt-get 方式安裝 redis和curl擴展時,我的配置都設置但是從phpinfo裡面看沒有響應的配置項。 於是我找在我phpinfo 載入的是 /etc/php5/fpm/php.ini 下的配置文件,我用php
  • 文章結尾有常用命令的圖表哦!git 配置基礎配置別名配置換行符配置推薦配置core.autocrlfcore.safecrlf記住我git命令詮釋大全git clonegit initgit addgit brachgit tag打包上線啦 git archive任務簡報 git shortlog常...
  • 在elasticsearch中,有時會想要通過索引日期來篩選查詢的數據,此時就需要用到日期數學表達式。 更多內容參考 "Elasticsearch翻譯彙總" 基於日期數學表達式的索引 模式如下: 其中各個欄位含義為: static_name 是索引的靜態部分 date_math_expr 是日期的表
  • Atitit.複合文檔的格式 標準化格式 1. Docfile1 2. Iso Cdf cd file1 3. Zip1 4. Ooxml1 5. Odf :OpenDocument Format2 5.1.1. 本質2 6. 參考3 paip.docfile二進位複合文檔 前言Docfile Do
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...