so2bin

青山一道同云雨,明月何曾是两乡

资料

概念

联合挂载

  • 由overlay filesystem提供的能力,支持将多个文件系统层叠加在一起,且只显示最顶层的文件和目录,OverlayFS是其实现,docker当前默认存储驱动为overlay2,就是基于该文件系统;
  • 在contaierd中这个联合挂载的roofs视图是由snapshotter准备的snapshots;
阅读全文 »

论文粗读:Slacker: Fast Distribution with Lazy Docker Containers

阅读目标

  • 了解docker容器启动过程的数据特性,以及slacker的设计思路,不对该存储驱动做过细了解。

介绍

  • 开发了名为HelloBench的工具来分析57个不同的容器应用,分析容器启动过程的IO数据特性和镜像可压缩性,得出结论:在容器的启动过程中,镜像的拉取占76%的时间,但仅读了6.4%的数据。
  • 基于这些发现,作者设计开发了一种新的docker存储驱动:Slacker,可以用于加速容器的启动速度。
  • Slacker采用中心化存储思路,所有的docker workers和registries都共享这些数据。
  • Container的启动主要慢在文件系统的瓶颈,相对而言,network, compute, memory资源更快且简单,容器应用需要一个完整的初始化文件系统,包括应用binary,完整的linux系统和依赖包;
  • 在谷歌的研究论文中,容器应用启动延时变化秀大,中间值一般为25s,且package installation占了80%,其中的一个瓶颈为并发写磁盘的过程;
  • 提供快启动的好处:
    • 应用能快速扩容以应对突发事件(flash-crowd events);
    • 集群调度器能以最少的代价频繁执行rebalance nodes;
    • 应用更新或bug修复能快速发布;
    • 开发者可以交互式构建和测试分发应用;
阅读全文 »

OCI镜像规范

资料

OCI镜像格式标准

https://www.rectcircle.cn/posts/oci-image-spec/
https://github.com/opencontainers/image-spec

  • OCI定义了镜像的格式规范:即镜像的文件和目录结构,相关的配置协议格式等;
  • 如下图为一demo示图:
    OCI Image
阅读全文 »

资料

特点

  • 镜像lazy加载,按需下载镜像blob数据,容器启动速度更快;
  • blobs级别的镜像数据去重,节省空间;
  • 提供用户态文件系统Fuse,兼容OCI分发标准,和artifacts标准(lazy加载就是基于该fuse实现);
  • 支持镜像存储backend,镜像数据可以放registry或对象存储上;
  • 与Dragonfly P2P系统集成;
阅读全文 »

资料

这项目名字取的好,按阿里武侠的风格,应该翻译为技能:飞龙在天

价值

  • 提供集群内的P2P文件分发能力,可以用于加速文件分发和镜像分发,源支持OSS, S3等云存储类型,也支持OCI镜像仓库;
  • 组件间通信协议为GRPC;
  • 可以与nydus结合,作为containerd与nydus的中间层,为集群提供nydus镜像格式的文件加速分发和加速镜像启动,如下图所示:

(df-nydus-arch

架构

  • 如下图所示,为其架构图:
    df arch
  • dragonfly包含的核心三部分:Manager, Schduler, Seed Peer以及Peer组成的P2P下载网络,Dfdaemon可以作为Seed Peer和Peer;
  • Manager:维护P2P集群的关联关系,动态配置,用户态以及权限管理;
  • Scheduler:为下载节点选择最优下载父节点,异常情况控制Dfaaemon回源;
  • Seed Peer:Dfdaemon开启Seed Peer模式可以作为P2P集群中回源节点,即整个下载的根节点,与后端存储/镜像仓库交互;
  • Peer:通过Dfdaemon部署,基于C/S架构,提供dfget命令行下载工具和dfget daemon运行守护进程,提供任务下载能力;
    df-flow

加速对象存储

Dfdaemon

代码入口:

  1. Makefile docker-build-dfdaemon
  2. build/images/dfdaemon/Dockerfile
  3. RUN make build-dfget && make install-dfget

    RUN if [ "$(uname -m)" = "ppc64le" ]; then \
    wget -qO/bin/grpc_health_probe https://github.com/grpc-ecosystem/grpc-health-probe/releases/download/${GRPC_HEALTH_PROBE_VERSION}/grpc_health_probe-linux-ppc64le; \
    elif [ "$(uname -m)" = "aarch64" ]; then \
    wget -qO/bin/grpc_health_probe https://github.com/grpc-ecosystem/grpc-health-probe/releases/download/${GRPC_HEALTH_PROBE_VERSION}/grpc_health_probe-linux-arm64; \
    else \
    wget -qO/bin/grpc_health_probe https://github.com/grpc-ecosystem/grpc-health-probe/releases/download/${GRPC_HEALTH_PROBE_VERSION}/grpc_health_probe-linux-amd64; \
    fi && \
    chmod +x /bin/grpc_health_probe
    COPY --from=builder /opt/dragonfly/bin/dfget /opt/dragonfly/bin/dfget
    COPY --from=health /bin/grpc_health_probe /bin/grpc_health_probe

    EXPOSE 65001
    ENTRYPOINT ["/opt/dragonfly/bin/dfget", "daemon"]
  4. cmd/dfget/cmd/daemon.go
  5. client/daemon/daemon.gocd.ProxyManager.IsEnabled()

背景

  • 云原生拓荒者-Netflix: 性能Performance,扩容Scalability,可用性Availability
  • 提升可用性(反脆弱性),可通过 弹性处理局部故障:
  • 快速失败(fail fast)与故障转移(failover):超时并重新请求,将流量调度到其它副本
  • 优雅降级:所有副本都出现故障时,熔断上游服务,当前应用以降级形式继续提供服务
  • 金丝雀发布:变更是导致脆弱性的重要原因,任何形式的上线新版本都应该基于灰度部署
  • 将服务治理下沉到基础设施中:service mesh
阅读全文 »

概念

分布式服务治理

  • 服务治理:对服务不断增长的复杂度的管理与管理
  • 服务拓扑变化,网络,安全
  • API网关,服务发现,服务容错,部署,调用,追踪
阅读全文 »
0%