ZStack--级联框架

ZStack云计算架构探秘(三): 超强灵活性和可扩展性 在前面探秘一和探秘二中,我们已经分享了ZStack的拓扑结构和如何实现超高可伸缩性的能力。还记得我们在Why ZStack中说的,稳定性和灵活性是IaaS需要解决的两大问题。今天我们就来揭开ZStack超强灵活性的奥秘。 今天的内容非常的丰富,我们先来看一下什么是灵活性。所谓灵活性无非是三个方面:当需要添加新功能的时候简单方便,不拖泥带水;系统升级轻巧无障碍;IaaS云配置想改就改,无需重头搭建 阅读详情

云中的资源相互都有关系。操作一个资源通常会引发连锁反应;例如,当删除一个集群的时候,是非常合理地去删除属于该集群的所有主机并停止所有在这些主机上运行的虚拟机。传统的IaaS软件要么硬编码连锁反应,要么简单地禁止这些操作,例如,禁止用户删除有虚拟机运行的集群。ZStack提供一个级联框架,用以散布本来只对一个资源的操作到所有相关的资源。资源可以通过实现一个简单的扩展点以加入级联框架,使得资源的业务逻辑与框架解耦。

动机

云中的资源多多少少都彼此依赖;例如,一个主机是一个集群的子资源,一个主存储是一个集群的兄弟资源,L3网络是一个区域的后裔资源。资源之间的关系可以被描述为一个有向图:

在这里插入图片描述

上图,我们展示了ZStack的主要资源;不同的IaaS软件可能使用不同的术语,上图主要是想让你有一个粗略的概念。由上图所暗示的,当对资源进行操作时,不仅仅是目标资源,相关资源也将受到影响;例如,当删除一个区域时,比较理想的是属于区域的集群、主机、主存储、L2网络等资源也同时被删除。为了处理这个问题,IaaS软件必须满足级联(cascading)操作的需求。

问题

大多数IaaS软件很少考虑级联操作。它们要么硬编码业务逻辑,例如,你需要显式删除一个将要被删除帐户的所有资源;要么直接不允许这种操作,例如,当你试图删除一个IP地址范围时,抛出一个错误信息“仍有VM使用在这个IP范围中的IP”。这两种方法都会带来很多麻烦。对硬编码而言,它使软件不能灵活的添加新的资源,因为你必须修改现有的代码来添加级联操作,例如,修改删除帐户的代码使得账户删除时,新资源也被删除。对于完全没有责任感的错误信息,用户要么去做无聊的工作,例如,在删除一个IP范围之前,手动删除100个虚拟机;要么摧毁现有的一切,然后从零开始,例如,重新部署整个云。

避免误操作不是借口:有些人可能会声称不允许级联删除是慎重考虑的结果,因为用户可能会误操作,误操作可能带来灾难性的后果;例如,错误地删除区域会导致损失掉所有虚拟机。然而,这种说法只是一个错误的借口,并且是一种为用户做决定的自作聪明。你能想象吗,当你为了删除一个区域必须手动删除10,000个虚拟机,因为软件认为你可能会做错事,所以迫使你枯燥的重复10,000次任务确认?一个好的软件应该为用户提供选择,并让他们做出决定。在我们的例子中,IaaS软件应该在进行到最后删除之前警告用户,还有10,000台虚拟机在运行;但一旦用户承认他们需要这么做,软件就应该这么做。

级联框架

ZStack通过一个级联框架解决这一问题;顾名思义,级联框架允许一个操作能从一个资源级联到其他资源。为了解耦整个架构,这个级联框架被作为一个单独的组件创造出来,资源可以按意愿加入框架。要加入框架,资源所需要做的全部事情就是实现一个扩展点CascadeExtensionPoint(在我们的例子中AbstractAsyncCascadeExtension是一个实现CascadeExtensionPoint的类):

class VmCascadeExtension extends
AbstractAsyncCascadeExtension {

@Override

public void asyncCascade(CascadeAction action, Completion

completion) {

    if (/* this is

from deleting Primary Storage*/) {

        /* delete VMs that have root volumes on the primary

storage*/

    } else if (/*this is from deleting L3 Network*/) {

        /* stop VMs that have nics on the L3 network, and remove

those nics */

    } else if (/* this is from deleting IP range*/) {

        /* stop VMs that have nics whose IP is in the IP range */

    } else if (/* this is from deleting host*/) {

        /* stop VMs that run on the host */

    }



    completion.success();

}



@Override

public List<String> getEdgeNames() {

    return Arrays.asList(

PrimaryStorageVO.class.getSimpleName(),

L3NetworkVO.class.getSimpleName(),

IpRangeVO.class.getSimpleName(),

HostVO.class.getSimpleName()

    );

}



@Override

public String getCascadeResourceName() {

    return VmInstanceVO.class.getSimpleName();

}



@Override

public

CascadeAction createActionForChildResource(CascadeAction
action) {

    return convertContextToVmRelatedContext(action);

}

}

getCascadeResourceName()方法返回该资源的名称(VmInstance);getEdgeNames()方法返回一个和资源直接关联的资源名列表,在我们的例子中返回主存储、L3网络、IpRange和主机;所以如果删除操作在这些edge resources或其上游资源(如区域)上发生时,该操作将被级联至在getEdgeNames()方法中声明了这些资源的扩展。级联扩展可以在asyncCascade() 中采取行动,并获取必须的信息比如操作码(如删除),根发起者(如区域,下文将很快给出解释),作为操作来源的父发起者(如主机,将很快给出解释)和操作上下文(例如,哪台主机正在被删除)。由于资源的关系是一个可能有环路的有向图,级联框架将把图压扁成一棵树,并把环路变为分支。例如,删除区域的操作将最终创建以下树(一部分):

在这里插入图片描述

注:如你所见,删除区域操作将多次级联到虚拟机的级联扩展;这是刻意的,因为级联扩展通常依赖于父发起者去决定该采取什么行动;在这个例子中,虚拟机的父发起者为主存储、主机、L3网络和IP范围;然而,对于不同的父发起者,扩展可能会采取不同的行动;例如,如果父发起者为主存储并且操作码为delete,该扩展将摧毁所有根云盘在该主存储的虚拟机;但如果父发起者是主机,扩展将会只停止在那台主机上的虚拟机,因为这些虚拟机稍后就可以在其他主机上启动。考虑到ZStack没有产生冲突的级联操作,例如,不会有一个操作导致虚拟机在路径A启动而在路径B停止,所以级联操作从不同路径进行多次延伸是没有问题的。

当级联一个操作时,该框架从该操作被应用的root issuer开始;在上述删除区域的示例中,zone是根发起者;那么框架将从根发起者遍历树,并调用扩展的createActionForChildResource()方法为每一条路径上的每一个扩展创建上下文;一旦所有上下文创建成功,该框架将再次遍历树,不过是从叶子节点到根,并调用每个扩展的asyncCascade()方法;一个扩展可以依靠父发起者去决定应该做哪些操作,父发起者在getEdgeNames()方法中以资源名的方式声明;例如,如果父发行者是主机,则停止虚拟机;如果父发行者是主存储,则删除虚拟机。

在这里插入图片描述

这两个阶段的遍历保证,一个操作(例如删除)将只会被应用到根发起者,在所有下游资源都做完一些合适的操作后。例如,一个区域只在所有子孙资源都被删除后才能被删除。

由于并不是所有的操作都需要级联,一个资源可以在它需要的时候直接调用CascadeFacade.asyncCascade()。

总结

在这篇文章中,我们演示了ZStack的级联框架,这是一个强大的工具,用于扩散操作而不需要硬编码。ZStack用很多方式使用了它,除了我们在文中提到的以外,一些操作,如卸载主存储(这将停止将被卸载的集群中的所有虚拟机),卸载L2网络(这将停止将被卸载的集群中的所有虚拟机)都是以这种方式实现的。有了它的帮助,管理员可以快速尝试不同的云部署而无需担心不方便;你可以只删除你的部署的一部分并重新创建一个新的,而不需要仅因为你在一个设计错误的L2网络上创建了许多虚拟机,就重新部署整个云(举个例子)。

zstack(四)zstack架构简介 本篇简单介绍一下zstack的架构设计。现在的zstack加入了一个新的模块woodpecher,用于自动化测试。由于本人对这块没有研究过,这里先不讲这个。 阅读详情

相关推荐

(Cascade extended state observer)级联ADRC的simulink仿真和程序---送给中国研究学者的精华版

(Cascade extended state observer)级联ADRC的simulink仿真和程序---送给中国研究学者的精华版

weixin_44312889的博客 3786

最新的一篇视觉Transformer综述!

点击下方卡片,关注“CVer”公众号AI/CV重磅干货,第一时间送达作者:闪闪红星闪闪|已授权转载(源:知乎)https://zhuanlan.zhihu.com/p/433048...

阿木寺的博客 3701

Cascading-Examples:使用级联框架的 Mapreduce 作业的一些示例

级联示例 使用级联框架的 Mapreduce 作业的一些示例。

实体关系抽取几篇论文

实体关系抽取几篇论文 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。 新的改变 我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客: 全新的界面设计 ,将会带来全新的写作体验; 在创作中心设置你喜爱的代码高亮样式,Markdown 将代码片显示选择的高亮样式 进行展示; 增加了 图片拖拽 功能

matlabjenny的博客 1595

STM32Cubemx+CanFestival:从零到一的CANopen移植实战

本文详细介绍了如何使用STM32CubeMX和CanFestival实现CANopen协议栈的移植,从开发环境搭建到核心配置步骤,再到调试与问题排查。通过实战经验分享,帮助开发者快速掌握STM32与CANopen的结合应用,提升嵌入式系统开发效率。

weixin_42558093的博客 422

【UV打印机】PrintExp打印软件教程(二)-主界面介绍

PrintExp软件主界面如下图所示PrintExp软件的主界面主要包括主菜单区,工具栏区,界面显示区,状态栏。以下是上述部分的介绍。

Print World的专栏 6302

若依框架实现级联(增删改查)

若依级联

genghongsheng的博客 3786

王道考研操作系统笔记(第一章)附:王道考研408所有PPT和思维导图

学习感想 别人的笔记对你的学习基本上没有用处,容易培养人的惰性,如需ppt和思维导图请拉到最后,有github链接 记笔记并不是一件浪费时间的事情,还有利于多次学习 真心希望大家在学习的过程中记笔记 操作系统 第一章 计算机系统概述 1.1 操作系统 1.1.1 操作系统的概念和功能 概念 操作系统(Operating System, OS)是指控制和管理整个计算机系统的硬件和软件资源,并合理地组织调度计算机的工作和资源的分配;以提供给用户和其他软件方便的接口和环境;它是计算机系统中最基本的系统软

qq_41732756的博客 1万+

(2024,CogView3,级联架构,中继扩散,超分辨率,线性模糊,蒸馏)通过中继扩散进行更精细、更快的文本到图像生成

本文提出了 CogView3,这是一个使用中继的级联扩散框架:首先在基础阶段创建低分辨率图像,然后从基础阶段生成的结果开始扩散,通过中继进行超分辨率。

qq_44681809的博客 1825

PTGui使用教程

PTGui使用教程为啥使用ptgui开始使用ptgui 为啥使用ptgui ptgui是一个全景拼接软件,在海思hi3559上做视频拼接的时候,需要拼接参数,这是就需要使用到ptgui,这里可以在该网站下下载ptgui:下载地址 开始使用ptgui 第一步,加载图片,我这里添加了三幅图 然后添加控制点(可以先多对准几次图像,这样会自动生成一些控制点,但是不保证准确),建议控制点不要太密集 点开镜头设置,勾选以下几个选项以及配置好镜头类型,如下图 点开优化器,在高级界面中配置如下参数,最后点

what_wrong的博客 1万+

昇腾910安装驱动出错,降低Centos7.6的内核版本

Centos7.6 启动内核修改,解决昇腾910安装驱动错误的问题。

深蓝 3302

的级联选择_ZStack--级联框架

云中的资源相互都有关系。操作一个资源通常会引发连锁反应;例如,当删除一个集群的时候,是非常合理地去删除属于该集群的所有主机并停止所有在这些主机上运行的虚拟机。传统的IaaS软件要么硬编码连锁反应,要么简单地禁止这些操作,例如,禁止用户删除有虚拟机运行的集群。ZStack提供一个级联框架,用以散布本来只对一个资源的操作到所有相关的资源。资源可以通过实现一个简单的扩展点以加入级联框架,使得资源的业务逻...

weixin_34893782的博客 140

多智能体强化学习算法【一】【MAPPO、MADDPG、QMIX】

近些年,多智能体强化学习(Multi-Agent Reinforcement Learning,MARL)取得了突破性进展,例如 DeepMind 开发的 AlphaStar 在星际争霸 II 中打败了职业星际玩家,超过了 99.8% 的人类玩家;OpenAI Five 在 DOTA2 中多次击败世界冠军队伍,是首个在电子竞技比赛中击败冠军的人工智能系统;以及在仿真物理环境 hide-and-seek 中训练出像人一样可以使用工具的智能体。我们提到的这些智能体大多是采用 on-policy 算法...

丨汀、的博客 9375

本土IaaS佼佼者,ZStack正式入驻Gitee

​IaaS(Infrastructure-as-a-Service,基础设施即服务)的概念在开发者心中可能不如 SaaS 或 PaaS 那么令人印象深刻,但作为最基础的服务,其重要性并不亚于其他两者。 而 ZStack 就是国内 IaaS 服务中的姣姣者,凭借着其全新的、自研的架构,2015 年上线以来已经为超过 1200 家企业客户提供了云产品和服务。 更难能可贵的是,ZStack 在商业化与开源中找到了平衡,在为企业客户提供服务的同时,其开源的社区版本也收获了超过一万名的用户,并逐步建立了国内最大的

ZicoChan的博客 559

2026年AI视频生成大模型全景指南:国内外主流工具深度对比与选型建议

AI视频生成技术在2025年至2026年间取得了突破性进展,从"能用"进化到"好用",商业化应用加速落地。中美双轨竞争格局基本成型,国内模型在技术追赶和本土化体验方面展现出强劲竞争力。对于用户而言,选择合适的AI视频生成工具需要综合考虑技术性能、使用门槛、成本预算和具体需求。零基础新手推荐海艺AI、通义万相等低门槛工具;进阶创作者可根据需求选择可灵AI、即梦AI、海艺AI等;专业开发者和企业用户可考虑智谱清影的开源能力或可灵AI的商业化服务。

nmdbbzcl的博客 2852

WPF+MVVM案例实战(二十三)- 阴影效果详解

通过附加属性实现阴影效果,通过改变不同的阴影属性值达到不同阴影效果

lingshuangcanxue 561

深度解读:ZStack混合云如何实现网络互联互通?

近年来,得益于SDN的快速发展,数据中心建设不再与用户业务绑定,而将网络互联的任务交给IaaS服务商来完成。ZStack做为IaaS云服务商中的一员,从ZStack 1.8版本开始,ZStack云路由就开始承担起日益复杂的网络建设任务。随着越来越多的用户将业务迁移云上,ZStack也开始支持越来越多复杂的网络功能。     部署混合云,网络打通是难点     从当前市场趋势以及Gartner、

qq_41443030的博客 4889

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

IaaS开源软件之zstack(OSC中国开源项目的TOP30)

IaaS开源软件之zstack(OSC中国开源项目的TOP30) 全新的开源IaaS国产开源软件—zstack曾于2020年在OSC(中国最权威,最大的开源项目评选中斩获TOP30。 IaaS(基础设施即务)提供传统的计算能力服务以及存储服务,是最简单的云计算交付模式。相对于传统的主机托管上,IaaS在服务的灵活性上面,以及成本等方面占有一定的优势。但是也常常便随着一些问题,比如有关IaaS软件的稳定性,以及相关复杂度,延展性,复杂度,以及灵活性等方面有一定的不足。于是zstack正是为了解决这些方面的问题

jgdabc的博客 3330

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

ZStack 3.4.0 正式发布

2019年4月16日,ZStack正式发布最新版本——ZStack 3.4.0,涵盖大屏监控新增科技款主题、云主机内部负载实时监控、VPC支持OSPF动态路由协议等功能,以下为您进行详细...

weixin_33769125的博客 268

详解ZStack Cloud 4.4.6:API Inspector带你轻松玩转ZStack Cloud API

ZStack Cloud 4.4.6轻量发布API Inspector功能,旨在降低API使用门槛,助力开发者轻松玩转ZStack Cloud API。

zstack_org的博客 650

暑期 2021 参与社区——ZStack Cloud 云平台

开源软件供应链点亮计划 - 暑期 2021是由 中国科学院软件研究所 与 openEuler 社区 共同举办的一项面向高校学生的暑期活动,旨在鼓励在校学生积极参与开源软件的开发维护,促进优秀开源软件社区的蓬勃发展。 大会主办方将联合ZStack Cloud云平台等各大优秀开源社区,针对重要开源软件的开发与维护提供项目,并向全球高校学生开放报名。 欢迎广大高校学子,选择ZStack Cloud 云平台参赛,中选后获得ZStack 社区开源大佬(社区导师)亲自指导的机会。根据项目的难易程度和完成情况,参与者还将

zstack_org的博客 420
上一篇: ZStack--查询API
下一篇: ZStack--标签系统
普通网友
博客等级 码龄10年 769粉丝 269原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值