从源代码级别看懂MinIO对象存储网关的实现

我在 《MinIO对象存储的网关架构设计》一文中介绍了MinIO的网关架构设计,它的整体架构如下图所示: 从架构图可以很清楚的看到MinIO网关的分层结构,那么这一篇我就从MinIO网关的具体代码分析它是如何实现的。 网关启动 MinIO内部已经实现了GCS、S3、NAS等几个网关,支持……

阅读全文

MinIO对象存储的网关架构设计

MinIO是一个非常轻量的对象存储服务,它只有一个二进制文件即可运行,快速的构建分布式的对象存储集群,适合存储大容量的非结构化数据,比如图片、日志文件等这些。 MinIO除了可以作为对象存储服务外,还可以作为网关,也就说MinIO的后端可以NAS系统、HDFS分布式文件系统或者S3……

阅读全文

Go语言|go version命令的高级用法

go version这个命令相信大家已经非常熟悉了,使用它可以查看我们自己电脑上的Go SDK版本。 1 2 $ go version go version go1.15 darwin/amd64 以上就是我们经常使用到的功能,可以查看自己的Go版本和系统架构的信息。 但是这其实是go version最基本的用法,因为我们没有为它提供更多的参数信息,所以它默认的打印的……

阅读全文

Go语言|基于channel实现的并发安全的字节池

字节切片[]byte是我们在编码中经常使用到的,比如要读取文件的内容,或者从io.Reader获取数据等,都需要[]byte做缓冲。 1 2 func ReadFull(r Reader, buf []byte) (n int, err error) func (f *File) Read(b []byte) (n int, err error) 以上是两个使用到[]byte作为缓冲区的方法。那么现在问题来了,如果对于以上方法我们有大量的调用,那么就要声……

阅读全文

不考虑用户体验的编程语言都是耍流氓

其实这篇文章应该还可以有个副标题—为什么选择Go语言。很多时候,我们在做一个需求的时候,很多编程语言都可以,但是为什么选择这个,而不是那个,甚至说为什么选择Go语言,而不是其他编程语言?今天我抛开特定业务只能选择某种特定的编程语言除外,对比下有多种语言选择的情况下,G……

阅读全文

聊聊越来越火的对象存储

随着云计算的发展,云存储作为一种更基础的云上资源池设施也越来越受到重视和欢迎。从云存储的类型来讲,目前流行的有块存储、文件存储和对象存储三种。今天的主角是对象存储,不过我们在介绍对象存储之前,先来了解下另外两种存储,做个对比,这样才能更好的了解对象存储。 块存储是什么? 对于这些概念……

阅读全文

Go语言 | 从并发模式看channel使用技巧

最近重看MinIO的源代码,发现纠删码模式下读取数据盘的时候,使用了更简单的并发读取方式,以前看的时候没发现,查了下Git历史记录,发现是19年新改的,新的使用channel做标记的方式的确非常巧妙,简化了代码逻辑,值得我们学习。所以今天就开篇文章,介绍下channel在并发下的……

阅读全文

Go语言 | 你还在这样获取文件的大小吗?

在项目中,我们可能会需要获取一个文件的大小,在Golang(Go语言)中,有很多方法来获取一个文件的大小,看看你是否还在用最慢的方式。 Read字节方式 第一种,是最直观会想到的,也就是打开文件,把文件读取一遍。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 func main() { file,err:=os.Open("water") if err ==nil { sum := 0 buf:=make([]byte,2014) for { n,err:=file.Read(buf) sum+=n if err==io.EOF { break }……

阅读全文

Golang Gin 实战(十三)| 中间件详解看这一篇就够了

在Gin的整个实现中,中间件可谓是Gin的精髓。一个个中间件组成一条中间件链,对HTTP Request请求进行拦截处理,实现了代码的解耦和分离,并且中间件之间相互不用感知到,每个中间件只需要处理自己需要处理的事情即可。今天我们就通过这篇文章,详细的介绍Gin中间的使用和原理。 通过……

阅读全文

最近文章

福利派送

分类

标签

其它