Kubernetes 几种存储方式性能对比 (转载)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Kubernetes 几种存储方式性能对比 (转载)相关的知识,希望对你有一定的参考价值。

参考技术A 原文来自:

https://blog.fleeto.us/post/kubernetes-storage-performance-comparison/

摘要

本文展示了一个简单的存储对比,使用未经性能优化的多种存储提供的存储卷进行测试和比较。

忽略 Azure 的原生 PVC 或hostPath,我们可以得出如下测试结果:

1. Portworx 是 AKS 上最快的容器存储。

2. Ceph 是私有云集群上最快的开源存储后端。对公有云来说,其操作太过复杂,这些多余的复杂性并没有能提供更好的测试表现。

3. OpenEBS 的概念很棒,但是其后端需要更多优化。

如果你正在运行 Kubernetes,你可能正在使用,或者准备使用动态供给的块存卷 ,而首当其冲的问题就是为集群选择合适的存储技术。这个事情并不能用一个简单的测试来做出简单的回答,告诉你目前市面上最好的技术是什么。存储技术的选择过程中,集群上运行的负载类型是一个重要的输入。对于裸金属集群来说,需要根据实际用例进行选择,并集成到自己的硬件之中。公有云中的托管 K8s,例如 AKS、EKS 或者 GKE,都具有开箱可用的块存储能力,然而这也不见得就是最好的选择。有很多因素需要考虑,比如说公有云的 StorageClass 的故障转移时间太长。例如在 一个针对 AWS EBS 的故障测试中,加载了卷的 Pod 用了超过五分钟才成功的在另一个节点上启动。Portworx 或者 OpenEBS 这样的云原生存储产品,正在尝试解决这类问题。

本文的目标是使用最常见的 Kubernetes 存储方案,进行基本的性能对比。我觉得在 Azure AKS 上使用下列后端:

AKS 原生 Storageclass:

1.Azure native premium

2.使用 cStor 后端的 OpenEBS

3.Portworx

4.Heketi 管理的 Gluster

5.Rook 管理的 Ceph

Go语言写文件几种方式性能对比

Go语言中写文件有多种方式,这里进行如下几种方式的速度对比:

打开文件,写入内容,关闭文件。如此重复多次

打开文件,写入内容,defer 关闭文件。如此重复多次

打开文件,重复多次写入内容,defer 关闭文件

在VMWare下的Ubuntu 14.04下运行的结果表明:

方式1速度最慢,但是慢的很稳定

方式2比方式1略快,但是重复次数多了后会报错,应该是defer被压栈太多导致系统撑不了太多打开的文件

方式3速度约是前两者的2倍,因为减少了很多打开关闭文件的操作

测试代码如下:

package main
import (    "fmt"
   "os"
   "time")
func benchmarkFileWrite(filename string, n int, index int) (d time.Duration) {
   v := "ni shuo wo shi bu shi tai wu liao le a?"
   os.Remove(filename)
   t0 := time.Now()    switch index {    case 0: // open file and write, then close, repeat n times
       for i := 0; i < n; i++ {
           file, err := os.OpenFile(filename, os.O_WRONLY|os.O_APPEND|os.O_CREATE, 0666)            if err != nil {
               fmt.Println(index, i, "open file failed.", err.Error())                break
           }
           file.WriteString(v)
           file.WriteString("\n")
           file.Close()
       }    case 1: // open file and write, defer close, repeat n times
       for i := 0; i < n; i++ {
           file, err := os.OpenFile(filename, os.O_WRONLY|os.O_APPEND|os.O_CREATE, 0666)            if err != nil {
               fmt.Println(index, i, "open file failed.", err.Error())                break
           }
           defer file.Close()
           file.WriteString(v)
           file.WriteString("\n")
       }    case 2: // open file and write n times, then close file
       file, err := os.OpenFile(filename, os.O_WRONLY|os.O_APPEND|os.O_CREATE, 0666)        if err != nil {
           fmt.Println(index, "open file failed.", err.Error())            break
       }
       defer file.Close()        for i := 0; i < n; i++ {
           file.WriteString(v)
           file.WriteString("\n")
       }
   }
   t1 := time.Now()
   d = t1.Sub(t0)
   fmt.Printf("time of way(%d)=%v\n", index, d)    return d
}
func main() {    const k, n int = 3, 1000
   d := [k]time.Duration{}    for i := 0; i < k; i++ {
       d[i] = benchmarkFileWrite("benchmarkFile.txt", n, i)
   }    for i := 0; i < k-1; i++ {
       fmt.Printf("way %d cost time is %6.1f times of way %d\n", i, float32(d[i])/float32(d[k-1]), k-1)
   }
}

当n=1000时,测试结果如下

  time of way(0)=38.719386ms
 time of way(1)=31.428677ms
 time of way(2)=17.930829ms
 way 0 cost time is    2.2 times of way 2
 way 1 cost time is    1.8 times of way 2

当n=5000时,测试结果如下(因为方式1报错,所以它的时间是错的)

  time of way(0)=170.003521ms  1 1021 open file failed. open benchmarkFile.txt: too many open files
 time of way(1)=32.388994ms
 time of way(2)=77.777936ms
 way 0 cost time is    2.2 times of way 2
 way 1 cost time is    0.4 times of way 2

本文来自:博客园

查看原文:[笔记]Go语言写文件几种方式性能对比


以上是关于Kubernetes 几种存储方式性能对比 (转载)的主要内容,如果未能解决你的问题,请参考以下文章

JS几种数组遍历方式以及性能分析对比

JS几种数组遍历方式以及性能分析对比(转 未经测试,先mark)

Go语言写文件几种方式性能对比

技术分享 | Presto性能对比测试:Kubernetes部署 VS 物理机部署

技术分享 | Presto性能对比测试:Kubernetes部署 VS 物理机部署

求斐波那契数列第n位的几种实现方式及性能对比(c#语言)