当前位置: 首页 > news >正文

【源码阅读】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()// 初始化雪花算法生成分布式IDbase.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生成器启动
  • 存储服务启动
  • 初始化路由以及服务
  • 初始化整体应用
  • 应用执行

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Python面试题:在 Python 中,如何使用 multiprocessing 模块?
  • SpringBoot+HttpClient实现文件上传下载
  • LabVIEW异步和同步通信详细分析及比较
  • 0基础学python-14:python进阶之面向对象
  • Linux指令ros学习python深度学习bug学习笔记
  • 景区客流统计系统提升服务精准度
  • 深入理解Session和Cookie的作用与联系
  • 《汇编语言 基于x86处理器》- 读书笔记 - Visual Studio 2019 配置 MASM环境
  • 产品经理-一份标准需求文档的8个模块(14)
  • 亚信安全发布2024年第24期《勒索家族和勒索事件监控报告》
  • LabVIEW比例压力控制阀自动测试系统
  • 前端学习常用技术栈
  • 物流EDI:马士基IFTMBF 订舱请求
  • js实现一键任意html元素生成截图功能
  • 洛阳建筑设计资质市场未来趋势
  • 【跃迁之路】【477天】刻意练习系列236(2018.05.28)
  • Codepen 每日精选(2018-3-25)
  • Javascript基础之Array数组API
  • javascript数组去重/查找/插入/删除
  • Laravel Mix运行时关于es2015报错解决方案
  • Lsb图片隐写
  • Netty 框架总结「ChannelHandler 及 EventLoop」
  • Redis 懒删除(lazy free)简史
  • SpringCloud(第 039 篇)链接Mysql数据库,通过JpaRepository编写数据库访问
  • Sublime Text 2/3 绑定Eclipse快捷键
  • 多线程 start 和 run 方法到底有什么区别?
  • 入职第二天:使用koa搭建node server是种怎样的体验
  • 因为阿里,他们成了“杭漂”
  • 机器人开始自主学习,是人类福祉,还是定时炸弹? ...
  • 数据可视化之下发图实践
  • ​一文看懂数据清洗:缺失值、异常值和重复值的处理
  • #HarmonyOS:软件安装window和mac预览Hello World
  • #if #elif #endif
  • #鸿蒙生态创新中心#揭幕仪式在深圳湾科技生态园举行
  • (14)Hive调优——合并小文件
  • (2)STM32单片机上位机
  • (C语言)共用体union的用法举例
  • (vue)el-tabs选中最后一项后更新数据后无法展开
  • (ZT) 理解系统底层的概念是多么重要(by趋势科技邹飞)
  • (二)什么是Vite——Vite 和 Webpack 区别(冷启动)
  • (免费领源码)Java#Springboot#mysql农产品销售管理系统47627-计算机毕业设计项目选题推荐
  • (十一)手动添加用户和文件的特殊权限
  • (详细版)Vary: Scaling up the Vision Vocabulary for Large Vision-Language Models
  • (一)Dubbo快速入门、介绍、使用
  • (已解决)报错:Could not load the Qt platform plugin “xcb“
  • (自用)网络编程
  • .NET Core引入性能分析引导优化
  • .NET Core中Emit的使用
  • .NET MAUI Sqlite数据库操作(二)异步初始化方法
  • .NET 项目中发送电子邮件异步处理和错误机制的解决方案
  • .NET/C# 使用 SpanT 为字符串处理提升性能
  • .NET/C# 使用反射注册事件
  • .netcore 如何获取系统中所有session_ASP.NET Core如何解决分布式Session一致性问题
  • .NetCore实践篇:分布式监控Zipkin持久化之殇
  • .Net的DataSet直接与SQL2005交互