【源码阅读】osproxy对象存储分布式代理(1)
osproxy
项目地址
(图片来源网络,侵删)
osproxy是一个使用Go语言开发的对象存储分布式代理(object-storage-distributed-proxy),可以作为文件存储微服务,文件会在服务中转处理后再对接到对象存储,包括但不限于以下功能:
- 分布式uid及秒传,支持相同文件不同命名
- 分片读写,大文件上传,merge接口不用等待数据合并,分片上传完直接下载
- 异步任务,易扩展的event-handler,支持分片合并及其他文件处理任务
- 统一封装,降低业务接入复杂度,业务侧只需要存储文件uid
- 代理下载,不直接暴露底层存储厂商及格式
- 支持集群部署,proxy模块处理不同机器的分片转发
- 支持Local/MinIO/腾讯COS/阿里OSS等对象存储,易于扩展
- 支持Docker一键部署
main函数
位于cmd/main.go
package main import ( "github.com/qinguoyi/osproxy/api" "github.com/qinguoyi/osproxy/app" "github.com/qinguoyi/osproxy/app/pkg/base" "github.com/qinguoyi/osproxy/app/pkg/storage" "github.com/qinguoyi/osproxy/bootstrap" "github.com/qinguoyi/osproxy/bootstrap/plugins" ) func main() { // 初始化底层依赖(mysql, redis...),并初始化日志logger对象 lgConfig := bootstrap.NewConfig("conf/config.yaml") lgLogger := bootstrap.NewLogger() // 检测底层插件的情况,并输出相应信息后关闭。 plugins.NewPlugins() defer plugins.ClosePlugins() // 初始化雪花算法生成分布式ID base.InitSnowFlake() // 初始化存储 storage.InitStorage(lgConfig) // 初始化路由和服务 engine := api.NewRouter(lgConfig, lgLogger) server := app.NewHttpServer(lgConfig, engine) // 初始化应用 application := app.NewApp(lgConfig, lgLogger.Logger, server) // 应用执行 application.RunServer() }
main函数中主要是对于基础服务的初始化以及应用的执行,包含了以下几个部分:
- 初始化底层服务和日志器
- 对底层服务进行启动测试,判断是否能够正常启动
- 基于雪花算法的分布式ID生成器启动
- 存储服务启动
- 初始化路由以及服务
- 初始化整体应用
- 应用执行
文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。