三年了,WebServer已死,我来继续搅Golang的浑水
hi,牛客网的同学们,大家好,我是社长。
2020年,我在牛客的C++方向分享了一个TinyWebServer的项目,在我进腾讯工作后,就没再继续维护这个项目。到现在差不多3年,从最初的火热变成了现在的烂大街,无人问津....我想我是推波助澜的那个恶人,搅浑了C++后端开发的浑水。
工作后,慢慢接触了Golang语言、Docker、K8S等工具,发现这个方向还不错。我最近写的一个go语言练手项目osproxy和osproxy-grpc,代码已完全开源到github,希望对go方向的同学有所帮助。
相信不少接触go语言的读者,都是被它"极简协程","高并发","高性能"的特性所吸引,我也不例外,想着学完之后,能快速上手享受一把。
但当我看完基本语法,想找个练手项目时,才发现github上大部分都是博客/后台管理系统之类的,这些项目都是经验丰富的工程师快速迁移经验,写出来的go代码,对初学者不太友好;甚至不少博主推荐Docker/k8s这样的大项目,看的让人心里直打退堂鼓。
我也才接触go语言不久,明白初学者想快速实践,但找不到靠谱项目的心情,所以我希望这个基于go语言,非博客,非后台管理系统的项目能满足你的需求。
我之前有写过C++练手项目TinyWebServer,被不少人喷,也让不少人入了服务器开发的门,所以完全不要担心osproxy这个项目会很复杂,但也不要担心项目让你学不到什么东西。
正如之前很多人对TinyWebServer的评价,osproxy同样是一个"麻雀虽小又五脏俱全"的项目。
osproxy是一个使用Go语言开发的对象存储分布式代理(object-storage-distributed-proxy),可以作为文件存储微服务,支持docker一键部署,包括但不限于以下功能:
- 分布式uid及秒传,支持相同文件不同命名
- 分片读写,大文件上传,merge接口不用等待数据合并,分片上传完直接下载
- 异步任务,易扩展的event-handler,支持分片合并及其他文件处理任务
- 统一封装,降低业务接入复杂度,业务侧只需要存储文件uid
- 代理下载,不直接暴露底层存储厂商及格式
- 支持集群部署,proxy模块处理不同机器的分片转发
- 支持MinIO/腾讯COS/阿里OSS等对象存储,易于扩展
- 支持Docker一键部署
你能实践这些东西:
- go:协程,sync包(waitgroup/once/mutex),channel,interface(可插拔组件注册)等
- grpc:一元RPC,服务器流RPC,客户端流RPC,RPC拦截器,RPC数据转发
- gin:路由组,http服务转发,文件数据转发,中间件
- gorm:简单文件元数据的存储
- nginx:http和grpc的反向代理,及证书自签
- redis:数据缓存,缓存与DB双写,简单的服务注册与发现,分布式锁
- uuid:分布式ID
- docker:dockerfile的书写,docker一键部署等
如果你正在学习Go语言,并且该项目给你的学习带来了一些帮助,欢迎star,欢迎交流。
#23届找工作求助阵地##go开发##golang##go实习##go#