【源码阅读】osproxy对象存储分布式代理(1)

osproxy

项目地址

  osproxy是一个使用Go语言开发的对象存储分布式代理(object-storage-distributed-proxy),可以作为文件存储微服务,文件会在服务中转处理后再对接到对象存储,包括但不限于以下功能:

  • 分布式uid及秒传,支持相同文件不同命名
  • 分片读写,大文件上传,merge接口不用等待数据合并,分片上传完直接下载
  • 异步任务,易扩展的event-handler,支持分片合并及其他文件处理任务
  • 统一封装,降低业务接入复杂度,业务侧只需要存储文件uid
  • 代理下载,不直接暴露底层存储厂商及格式
  • 支持集群部署,proxy模块处理不同机器的分片转发
  • 支持Local/MinIO/腾讯COS/阿里OSS等对象存储,易于扩展
  • 支持Docker一键部署

main函数

位于cmd/main.go

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生成器启动
  • 存储服务启动
  • 初始化路由以及服务
  • 初始化整体应用
  • 应用执行
相关推荐
知行合一。。。3 小时前
RAG--03--Milvus基本用法
数据库·oracle·milvus
TDengine (老段)3 小时前
TDengine 线程模型 — 网络、调度、执行
大数据·数据库·物联网·制造·时序数据库·tdengine·涛思数据
上学的小垃圾4 小时前
01-数据库系统概述
数据库
二进制漫游记5 小时前
FastAPI项目集成 Qdrant向量数据库+阿里云Embedding完整实战(工具封装+业务调用)
数据库·python·阿里云·embedding
2501_928996225 小时前
GPT-4o换DeepSeek迁移成本多少?中科热备解析API聚合平台技术账本
前端·数据库·人工智能
泡干脆面就番茄7 小时前
MySQL_子查询_分页查询与联合查询详解
数据库·mysql
爱浦路 IPLOOK8 小时前
矿山无人化作业5G专网方案:企业专网核心网络选型分析
网络·分布式·科技·5g·信息与通信
devpotato8 小时前
缓存与数据库更新顺序不一致问题
java·数据库·redis
天若有情6738 小时前
Node+MySQL小型全栈笔记项目实战课程分享
数据库·笔记·mysql
FfHUCisI8 小时前
Golang Map 哈希表实现
golang·哈希算法·散列表