hdfsgolang的簡單介紹

本文目錄一覽:

2017年,Web 後端出現了哪些新的思想和技術

1. 網絡交互的多樣性

1.1 Http1.1協議日漸式微,Http2和websocket,以及更多的自定義協議將會成為主流。

Web後端將不僅僅是一個web後端,而變成一個大後端,或者叫 中端+後端(這個概念阿里巴巴很早就有了)。隨着移動互聯網的發展,以及物聯網的興起(在這裡我把mobike的單車看作是物聯網的一個終端),用戶的接入方式由單純的瀏覽器,向著多種接入設備進行演進。 在這個概念之下,用戶的定義會更廣泛,站在後端的角度看來,連接上服務器的不再是一個個的用戶,而是一個個的終端,並存在多個終端同享一個用戶的情況(多端登錄)。 因此在這個趨勢之下,整個後端的接入層(比如nginx之於web)將會走向更廣闊的天地,對於任意一個設備來說,他將同時利用多種協議和多種方式連接到不同的接入點來達成自身的功能。

1.2 網絡協議與網絡信息交互的樣式多樣性

從最早的webService,到後來的json-rpc,和thrift再到如今的 protobuf(grpc)等等,我們開始為不同的數據交互設計了不同的序列化協議和調用協議,然而受到環境(移動終端的弱網絡狀態),性能(網關服務,與網絡調用)的影響,我們開始使用大量容錯性更強,數據量更小的數據傳輸方式,來滿足我們的需求。

在早先的web中,http+from表單的提交成為我們的標配,然而在今天,TCP都不一定成為必選項,UDP和UDP的改進協議都在被不同的公司進行嘗試,甚至於KCP都有可能成為大家考慮的方案之一。

2.數據多樣性開始成為設計的焦點。

2.1 在早先的web後端中,表設計和功能開發構成了日常工作的絕大部分,所有的後端人員都在試圖讓一切的用戶操作落入CRUD的抽象範疇里(比如 Restful),然而CRUD怎麼會滿足我們的抽象需求呢。

自從memcached和redis在被大量引入後端開發之後,我們可以看到,後端人員在對數據的理解上有了大量的改變,我們不再單單把數據視為RDBMS裡面的一行,而是圍繞着業務本身對數據進行了分類。最明顯的是,狀態數據的引入,在開發中,我們將用戶的部分信息,視為一個用戶的狀態,在狀態數據的基礎上,讓用戶的行為變成狀態遷移的觸發,在表現上看我們讓用戶的信息存儲到redis和memcached 里就是最RDMBS不能有效滿足我們的抽象需求的一次改進。

2.2 從狂熱的Nosql到Nosql和RDBMS的共存,代表了後端開發人員對數據這一個方式的新理解,而傳統的行存儲到列存儲,到監控常用的基於時間序列的數據庫都開始進入了我們的視野。

幾年來,大量的開發者,開始將用戶產生的數據進行了更詳細的歸類,不再是rdbms一刀切的方式, 我們會詳細地劃分出用戶的狀態數據落入到Nosql,將用戶的操作數據落入到RDBMS(表述不一定全,但在類似於訂單支付之類的具有冪等性要求的操作中要求事務的完備等),將用戶的行為統計落入時間序列數據庫, 將用戶的大量相關資源(如頭像圖片)將會落入到我們的對象存儲中。在後端開發的手冊里,數據格式的多樣性成為了必須考慮的問題。

3.圍繞着數據的收集,存儲,計算,索引查詢,分析 成為後端的常態

3.1 後端角色的含義,在人手不足的公司里,很難存在一個專註於後端業務開發的開發人員了,在大數據的浪潮下,後端開發人員開始兼職起了數據系統的開發工程師。 隨着互聯網大量技術的演進和發展,任何一個職業都很難找到一個明確的界限,因此圍繞着數據的收集,存儲,計算,分析,和索引查詢都會成為後端開發人員的必備技能。

3.2 數據收集

(1) 隨着分布式,集群化,多IDC的發展,不同於運維的系統性能收集,後端開發開始着重於收集與應用運營過程相關的各類指標和數據,

除了日常的業務開發,同時還會伴隨着應用調用過程的耗時,目標服務可用性等數據的收集,常見的如java的 metrics,zipkin等開源第三方的工具開始被廣泛借鑒和引用。

(2) 用戶行為和終端信息的上報收集,隨着大數據的開展,以及精細化運營的要求,後端逐漸開始接觸到用戶相關信息和終端運行狀態的信息上報,

收集上來的數據不僅用於用戶的畫像分析,同時也為客服的用戶追蹤,用戶的操作行為做出決策,通常表現在當用戶投訴某一筆業務的失敗時,便於開發人員的快速定位和排錯。

3.3 數據存儲

接着上面的數據收集,數據的傳輸和存儲成為了繞不開的功能,kafka的大規模運用,HDFS,HBase等工具也開始成為了後端開發日常的一部分。

3.4 數據計算

然而存儲的原始數據是沒有價值的,後端又開始了他們的數據清洗和數據處理的道路,storm,spark成為了後端的新秀,與用戶運營統計分析(俗稱跑策略跑算法)不同,當前語境下的後端數據計算,更多是一個短耗時,小規模的計算,典型的則比如風控系統,和預警系統,針對用戶的行為和流量的多少,對惡意用戶進行甄別和快速干預。

3.5 數據索引查詢

(1) 隨着業務的擴充,任意一個app幾乎都內置了相應的搜索引擎,Lucene,solr也成為了後端程序員必備的技能之一,不管是精確搜索,還是模糊匹配,後端身上背負的業務也越來越多。

(2) 准實時數據的搜索也將成為常態,在近幾年的發展中,如何快速地在一個巨量的數據中,完成RDBMS中的 join,distinct統計等成為後端工程師不得不面對的問題

3.6 數據分析查詢

AI和深度學習已經拉開了序幕,圍繞着數據本身的挖掘,學習,也開始成為了產品側的需求,但理想歸理想,現實歸現實,後端的同學們在這個方向上仍然還是摸索狀態,但長遠來說跑不了了。

4.架構設計的更進一步

2017年里,SOA的名詞正在淡出視野,微服務成了替代SOA的高頻詞,Serverless也開始走向了廣大後端的知識技能圖譜,不管是追新也好,滿足需求也罷,我也向諸位舉例一些常見的單詞,然而掛一漏萬請諸位擔待

4.1 CQRS(命令查詢職責分離模式)

將傳統CRUD的寫操作,進行異步化,後端配合讀寫數據庫的分離。以及消息隊列的引入,將寫操作相關的一些耗時操作(驗證,走流程)等進行異步化,常見的如電商中的訂單。

4.2 actor

Erlang的actor的興起,不管是golang Goroutine,還是scala/java的akka,都在深刻地影響着後端系統的架構設計。

4.3 CRDT和最終一致性

分布式系統的興起,也帶來了可用性和一致性的矛盾問題,協同兩個進程間的數據成為了每一個後端繞不過去的坎,為了達成最終一致性,各類方案如雨後春筍般冒出。

4.4 reactive

當android上的流行庫Rxjava,從前端走向後台的時候,也意味着後端也開始進入了響應式編程的時代,java的 vert.x就是其中的例子,那種request-response一招破萬法的時光不再有了。

5. 運維和devops對後端的要求

5.1 安全,穩定,高效,經濟

(1) 隨着業務走向穩定,以及互聯網的發展,網絡服務的安全性開始成為了後端的核心之一,由於法律的不健全,對違法分子的追責難度大,違法成本低,網絡安全攻擊將會在將來的一段時間內成為常態,這就對後端的程序特別是對外的接口設計提出了更高的要求。

(2) 多機房,異地容災,數據備份。健壯的後端一直是後端應用的要求之一。新的時間裡,後端的可用性,穩定性依然是每一個後端都要面對的問題。

(3) 以前一個用戶只有一個電腦,瀏覽網站的時候,只在獲取數據的時候與站點有交互。現在隨着電子設備,智能設備的增多,一個用戶能夠接入網絡的設備也在增多,同時長連接和並發數也會增多,因此高性能的接入網關開始成為了後端人員關注的焦點,比如圍繞着intel的dpdk各類應用也是紛至沓來。

(4) 經濟,利用雲服務的即買即用,用完即退的特點,使得在開展運營活動的時候,後端不用向運維徵求和購買大量的機器。 然而為了在運營活動的短時衝擊和突增流量的情況下後端應用能夠平穩地運行,對後端人員的部署和調度能力提出了更高的要求。

5.2 更規範的軟件開發流程

git+jenkins+ansible的開源組合,開始無法滿足開發和運維的需求,項目管理的集成,測試人員的介入,都要求後端的軟件工程工具從各自為陣的開源工具,走向一個大一統的系統,需要我們將 需求,BUG管理,迭代版本,開發,測試,灰度,藍綠部署流程都進行集成。

5.3 雲服務,容器化之爭

公有雲,私有雲,混合雲,以及容器等相關的雲計算技術,也在推動者後端的技術改革,後端面對的不再僅僅是一個物理機器,或者虛擬機,而是一個更複雜更多樣性的環境,對後端業務之外的技術和調度要求將越來越高。

相對於前端,後端實在是一個特別籠統的說法,正如上面提出的觀點,很多的技術其實並不屬於後端工程師,他們有的時候叫 運營開發工程師,有的叫大數據工程師,但為了相對於前端的劃分,因此我把他們的工作內容都划到了後端裡面去,畢竟相對於技術研究,他們面對的都是一些技術應用的場合,很多的開源軟件只要達到了理解原理如何使用的水平就已經足夠應付日常工作了。

golang hdfs連接方式

Go的HDFS

這是hdfs的本地golang客戶端。 它使用協議緩衝區API直接連接到namenode。

它嘗試通過在可能的情況下對stdlib os包進行os.FileInfo來使其成為慣用語言,並從中實現接口,包括os.FileInfo和os.PathError 。

這是實際的樣子:

client , _ := hdfs . New ( “namenode:8020” )

file , _ := client . Open ( “/mobydick.txt” )

buf := make ([] byte , 59 )

file . ReadAt ( buf , 48847 )

fmt . Println ( string ( buf ))

// = Abominable are the tumblers into which he pours his poison.

有關完整的文檔,請查閱 。

hdfs二進制

除庫外,此存儲庫還包含HDFS的命令行客戶端。 像庫一樣,它的主要目的是通過啟用您喜歡的unix動詞來實現慣用語:

$ hdfs –help

組件分享之後端組件——基於Golang實現的高性能和彈性的流處理器benthos

近期正在探索前端、後端、系統端各類常用組件與工具,對其一些常見的組件進行再次整理一下,形成標準化組件專題,後續該專題將包含各類語言中的一些常用組件。歡迎大家進行持續關注。

本節我們分享的是基於Golang實現的高性能和彈性的流處理器 benthos ,它能夠以各種代理模式連接各種 源 和 接收器,並對有效負載執行 水合、濃縮、轉換和過濾 。

它帶有 強大的映射語言 ,易於部署和監控,並且可以作為靜態二進制文件、docker 映像或 無服務器函數 放入您的管道,使其成為雲原生。

Benthos 是完全聲明性的,流管道在單個配置文件中定義,允許您指定連接器和處理階段列表:

Apache Pulsar, AWS (DynamoDB, Kinesis, S3, SQS, SNS), Azure (Blob storage, Queue storage, Table storage), Cassandra, Elasticsearch, File, GCP (Pub/Sub, Cloud storage), HDFS, HTTP (server and client, including websockets), Kafka, Memcached, MQTT, Nanomsg, NATS, NATS JetStream, NATS Streaming, NSQ, AMQP 0.91 (RabbitMQ), AMQP 1, Redis (streams, list, pubsub, hashes), MongoDB, SQL (MySQL, PostgreSQL, Clickhouse, MSSQL), Stdin/Stdout, TCP UDP, sockets and ZMQ4.

1、docker安裝

具體使用方式可以參見該 文檔

有關如何配置更高級的流處理概念(例如流連接、擴充工作流等)的指導,請查看 說明書部分。

有關在 Go 中構建您自己的自定義插件的指導,請查看 公共 API。

原創文章,作者:INTQ,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/140664.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
INTQ的頭像INTQ
上一篇 2024-10-04 00:24
下一篇 2024-10-04 00:24

相關推薦

  • Python簡單數學計算

    本文將從多個方面介紹Python的簡單數學計算,包括基礎運算符、函數、庫以及實際應用場景。 一、基礎運算符 Python提供了基礎的算術運算符,包括加(+)、減(-)、乘(*)、除…

    編程 2025-04-29
  • Python滿天星代碼:讓編程變得更加簡單

    本文將從多個方面詳細闡述Python滿天星代碼,為大家介紹它的優點以及如何在編程中使用。無論是剛剛接觸編程還是資深程序員,都能從中獲得一定的收穫。 一、簡介 Python滿天星代碼…

    編程 2025-04-29
  • Python海龜代碼簡單畫圖

    本文將介紹如何使用Python的海龜庫進行簡單畫圖,並提供相關示例代碼。 一、基礎用法 使用Python的海龜庫,我們可以控制一個小海龜在窗口中移動,並利用它的“畫筆”在窗口中繪製…

    編程 2025-04-29
  • Python櫻花樹代碼簡單

    本文將對Python櫻花樹代碼進行詳細的闡述和講解,幫助讀者更好地理解該代碼的實現方法。 一、簡介 櫻花樹是一種圖形效果,它的實現方法比較簡單。Python中可以通過turtle這…

    編程 2025-04-28
  • Python大神作品:讓編程變得更加簡單

    Python作為一種高級的解釋性編程語言,一直被廣泛地運用於各個領域,從Web開發、遊戲開發到人工智能,Python都扮演着重要的角色。Python的代碼簡潔明了,易於閱讀和維護,…

    編程 2025-04-28
  • 用Python實現簡單爬蟲程序

    在當今時代,互聯網上的信息量是爆炸式增長的,其中很多信息可以被利用。對於數據分析、數據挖掘或者其他一些需要大量數據的任務,我們可以使用爬蟲技術從各個網站獲取需要的信息。而Pytho…

    編程 2025-04-28
  • 如何製作一個簡單的換裝遊戲

    本文將從以下幾個方面,為大家介紹如何製作一個簡單的換裝遊戲: 1. 遊戲需求和界面設計 2. 使用HTML、CSS和JavaScript開發遊戲 3. 實現遊戲的基本功能:拖拽交互…

    編程 2025-04-27
  • Guava Limiter——限流器的簡單易用

    本文將從多個維度對Guava Limiter進行詳細闡述,介紹其定義、使用方法、工作原理和案例應用等方面,並給出完整的代碼示例,希望能夠幫助讀者更好地了解和使用該庫。 一、定義 G…

    編程 2025-04-27
  • 2的32次方-1:一個看似簡單卻又複雜的數字

    對於計算機領域的人來說,2的32次方-1(也就是十進制下的4294967295)這個數字並不陌生。它經常被用來表示IPv4地址或者無符號32位整數的最大值。但實際上,這個數字卻包含…

    編程 2025-04-27
  • 製作一個簡單的管理系統的成本及實現

    想要製作一個簡單的管理系統,需要進行技術選型、開發、測試等過程,那麼這個過程會花費多少錢呢?我們將從多個方面來闡述製作一個簡單的管理系統的成本及實現。 一、技術選型 當我們開始思考…

    編程 2025-04-27

發表回復

登錄後才能評論