三年了,WebServer已死,我來繼續(xù)攪Golang的渾水
hi,??途W(wǎng)的同學(xué)們,大家好,我是社長。
2020年,我在??偷腃++方向分享了一個TinyWebServer的項目,在我進騰訊工作后,就沒再繼續(xù)維護這個項目。到現(xiàn)在差不多3年,從最初的火熱變成了現(xiàn)在的爛大街,無人問津....我想我是推波助瀾的那個惡人,攪渾了C++后端開發(fā)的渾水。
工作后,慢慢接觸了Golang語言、Docker、K8S等工具,發(fā)現(xiàn)這個方向還不錯。我最近寫的一個go語言練手項目osproxy和osproxy-grpc,代碼已完全開源到github,希望對go方向的同學(xué)有所幫助。
相信不少接觸go語言的讀者,都是被它"極簡協(xié)程","高并發(fā)","高性能"的特性所吸引,我也不例外,想著學(xué)完之后,能快速上手享受一把。
但當(dāng)我看完基本語法,想找個練手項目時,才發(fā)現(xiàn)github上大部分都是博客/后臺管理系統(tǒng)之類的,這些項目都是經(jīng)驗豐富的工程師快速遷移經(jīng)驗,寫出來的go代碼,對初學(xué)者不太友好;甚至不少博主推薦Docker/k8s這樣的大項目,看的讓人心里直打退堂鼓。
我也才接觸go語言不久,明白初學(xué)者想快速實踐,但找不到靠譜項目的心情,所以我希望這個基于go語言,非博客,非后臺管理系統(tǒng)的項目能滿足你的需求。
我之前有寫過C++練手項目TinyWebServer,被不少人噴,也讓不少人入了服務(wù)器開發(fā)的門,所以完全不要擔(dān)心osproxy這個項目會很復(fù)雜,但也不要擔(dān)心項目讓你學(xué)不到什么東西。
正如之前很多人對TinyWebServer的評價,osproxy同樣是一個"麻雀雖小又五臟俱全"的項目。
osproxy是一個使用Go語言開發(fā)的對象存儲分布式代理(object-storage-distributed-proxy),可以作為文件存儲微服務(wù),支持docker一鍵部署,包括但不限于以下功能:
- 分布式uid及秒傳,支持相同文件不同命名
- 分片讀寫,大文件上傳,merge接口不用等待數(shù)據(jù)合并,分片上傳完直接下載
- 異步任務(wù),易擴展的event-handler,支持分片合并及其他文件處理任務(wù)
- 統(tǒng)一封裝,降低業(yè)務(wù)接入復(fù)雜度,業(yè)務(wù)側(cè)只需要存儲文件uid
- 代理下載,不直接暴露底層存儲廠商及格式
- 支持集群部署,proxy模塊處理不同機器的分片轉(zhuǎn)發(fā)
- 支持MinIO/騰訊COS/阿里OSS等對象存儲,易于擴展
- 支持Docker一鍵部署
你能實踐這些東西:
- go:協(xié)程,sync包(waitgroup/once/mutex),channel,interface(可插拔組件注冊)等
- grpc:一元RPC,服務(wù)器流RPC,客戶端流RPC,RPC攔截器,RPC數(shù)據(jù)轉(zhuǎn)發(fā)
- gin:路由組,http服務(wù)轉(zhuǎn)發(fā),文件數(shù)據(jù)轉(zhuǎn)發(fā),中間件
- gorm:簡單文件元數(shù)據(jù)的存儲
- nginx:http和grpc的反向代理,及證書自簽
- redis:數(shù)據(jù)緩存,緩存與DB雙寫,簡單的服務(wù)注冊與發(fā)現(xiàn),分布式鎖
- uuid:分布式ID
- docker:dockerfile的書寫,docker一鍵部署等
如果你正在學(xué)習(xí)Go語言,并且該項目給你的學(xué)習(xí)帶來了一些幫助,歡迎star,歡迎交流。
#23屆找工作求助陣地##go開發(fā)##golang##go實習(xí)##go#