CloudFoundry DEA运作源码分析

DEA各种模型原理及stata代码实现 DEA各种模型原理及stata代码实现DEA各种模型原理及stata代码实现一、CCR和BCC1.原理2.效率测算stata代码3.Malmquist指数3.1M指数3.2Global-Malmquist指数4.指数计算代码与案例二、SBM模型1.原理2.stata代码实现三、方向性距离函数(DDF)1.原理2.stata代码实现3.非径向DDF模型(NDDF)3.GML指数4.指数测算四、总结 DEA各种模型原理及stata代码实现 一、CCR和BCC 1.原理 CCR模型产出导向下的效率通过求解以下规划 阅读详情

这篇文章结构比较糟,我在http://lory-yang.com/2012/09/09/cloud-foundry-dea/中做了一些改进,可以去那里看看。另外我的博客整体搬迁到独立地址了:lory-yang.com,欢迎大家来访问

本文是对Cloud Foundry中的DEA组件源码的一些分析。有点流水帐的感觉,就事论事吧,同时因为本人能力有限,而且研究不深,错误在所难免。诸位就随便看看,希望大家能获得些帮助。有关Cloud Foundry的基础知识可以参考:http://qing.weibo.com/2294942122/88ca09aa330004r8.html, http://qing.weibo.com/2294942122/88ca09aa33000975.html

和其他模块一样,DEA也是使用ROR的目录组织方式,主要代码均集中在lib文件夹中,而在config文件夹下面有一个yaml配置文件。

yaml配置文件:

可以看到文件里面的注释相当完善了,配置的项基本上都可以看懂的。

1. lib文件夹中的代码:

精简版:这是下面所有内容的简单描述:

DEA通过dea.rb来启动,dea.rb调用agent.run来启动DEA服务。DEA启动时会向NATS订阅所有自己需要的消息,然后当消息传来时,进行相应的处理,包括status、start、stop、discover、heartbeat等各种处理。droplet在DEA中的运作主要是:首先将staged file拿过来,然后解压至instance目录,最后执行其中的startup脚本,停止则执行stop脚本。

接下来是比较详细的介绍:

1.1 dea.rb

dea.rb相当于一个启动dea的脚本,里面内容相当简单。主要就是负责config,这些config可以来自于config文件,比如yaml文件,或者传入的opts。然后就new了一个agent对象,调用run函数。这个agent就会负责处理所有的DEA承担的任务。

其中EM就是Event Machine,简单讲就是一个基于事件的工具,可以用来网络编程和并发编程。它主要的特色是免去了并发编程的繁杂,同时提供了易用的网络通讯接口。可以看这里:http://www.infoq.com/cn/news/2008/08/eventmachine

然后看lib文件夹,总共有三个文件,其中一个就是agent,另外两个是secure和directory。

1.2 secure:

暂时没有深入研究secure问题,所以DEA中的所有的secure环节会被略去。从大致的功能上讲,secure就负责划分user和group,每次的操作会验证用户所在的组的权限。同时创建的app也会chown给特定的group。

1.3 directory:

directory利用Rack::File提供了一个对root目录的定制访问功能,在agent中只有一个地方用到,就是start_file_viewer函数,这个函数的注释表示:This is for general access to the file system for the staged droplets。也说的很明白了。在DEA start时,会让EM去不断地启动droplets的文件访问,Periodically try to start the file viewer in case of port contention。

1.4 agent:

这个文件非常长,但是结构其实比较简单。各种参数大部分也能了解其含义了,这里也不说了。主要看agent类的结构。

首先当然有构造函数,主要就是设置参数,就是DEA环境的各种配置,没有其他好说的。

1.4.1 run函数

然后是run函数,我们知道了dea.rb文件中就是调用了这个run函数,那么说明这个函数可以把DEA启动起来,开始为CF提供服务了。这里是整篇文章的一个重点了,我们仔细的看下去:

  1. 创建一个pid file,就是创建一个process id,当前这个DEA就是使用这个id标注了。
  2. 配置了一些参数,这个就略去了。
  3. 在180行创建了所有需要的路径,有兴趣可以全部用log打出来看看。
  4. 将staged dir清除干净,这个dir就是用来存放被打包(staged)的droplet。
  5. 然后可以看到上面提到的start_file_viewer,开启staged dir的文件访问
  6. ['TERM', 'INT', 'QUIT'].each { |s| trap(s) { shutdown() } }

     如果EM捕捉到这些信号,就shutdown
  7. 然后就是最重要的开启NATS服务了,大部分的CF模块都通过NATS交互,NATS是一个消息中间件,用来订阅和发布JSON格式的消息。首先将自己注册到Component中,然后可以获得Component提供的uuid。然后就向NATS订阅了一堆的消息,每个消息都是DEA可以提供的一个功能,其他组件如果需要使用DEA的某个功能,就只需要向NATS发布一个相对应的消息即可。文章后面会对其中几个复杂的功能做一些介绍。
  8. 由于是启动,所以要恢复已经存在的droplets删除不需要的instances
  9. 向EM添加了定时运行的事件,比如heartbeat之类的。
  10. 最后向NATS发布一个dea start消息就算启动完成了

2. DEA的各个主要功能

接下来是DEA向NATS订阅的一些消息以及处理函数

2.1 dea.uuid.start:启动一个droplet的instance

就是让dea启动一个droplet,对应函数是process_dea_start,start函数也比较长,慢慢看。

  1. 从message里面解析出n多的参数,基本上就是droplet和app的一些参数。
  2. 做一些mem和fs usage的判断,是否有足够的mem和disk
  3. 接下来可以看到:
          tgz_file = File.join(@staged_dir, "#{sha1}.tgz")
          instance_dir = File.join(@apps_dir, "#{name}-#{instance_index}-#{instance_id}")
    这个tgz_file就是staged droplet。sha1当初研究了很久,不解其意,这里可以看到其实就是droplet的一个标识,目前手头没有实例可以验证,但是app的目录名称应该也和这个sha1相关。
  4. 然后创建了一个instance的map,这个map包含了instance的所有信息,然后处理了一下DEA自己的域。
  5. 然后可以看到一个lambda: start_operation。顾名思义就是用来start一个instance的。前面都是一些特殊的配置,暂时不研究了,看主要部分:line 669,这里将DEA项目的bin目录下的close_fds文件拷贝至instance目录下,然后执行,看字面意思是prepare。line697: 获得一个app_env数组,就是instance的一些环境变量,后面会把每个值都export。line 719,就是启动instance的代码了,可以看到只是简单的调用了startup脚本而已,这个脚本就是在stage的时候由stager加入的启动脚本。
  6. 然后启动了一个纤程Fiber,首先将staged文件放置到staged dir中(如果有cache最好,否则会去shared folder取,或者会HTTP去读),然后调用start_operation lambda。

2.2 dea.status&droplet.status:查看状态

这两个比较简单,就是把一些状态的字段(name, host, port, mem, disk, uri...)返回回去。

2.3 dea.discover:发现DEA

意思就是当一个droplet需要一个instance时,cloud controller会向NATS广播dea.discover消息,那么DEA收到之后,会根据自己情况选择是否回复此消息。当CC受到第一个回复时,就是用发送这个消息的DEA创建instance。

我们可以看到process_dea_discover这个函数首先主要判断是否能够跑这个app,包括mem、disk、runtime等限制条件。然后会根据DEA当前的情况计算一个delay,然后在delay之后发送response。这个delay相当于在做balance,比如:一般mem使用量大的DEA会delay比较长,所以比较难以被选中。

2.4 dea.find.droplet:查找droplet

很简单,就是通过droplet id查找对应的droplet信息

2.5 dea.update:更改droplet的URI

就是message中包含了droplet id,然后一个uri,那么DEA会修改droplet当前的uri,然后去router做修改

2.6 dea.stop:停止droplet的instance

通过message中指定的droplet id找到droplet,然后根据其余的信息(version, instance id, index, state)filter instance,将这些filter出来的instances停掉。 stop instance流程:首先从router unregister,然后向NATS发布本instance stop的消息,然后调用instance目录下的stop脚本来停止instance,最后将instance目录清理干净

2.7 router.start:向router注册

这里涉及到router的运作方式,router也是通过NATS和其他组件协作的,也就是发布router.start来告诉别人router已经就位,你们可以来注册了。为了应付任何时候可能加入的组件,router会不断地发送router.start消息。而dea中也会每次都傻傻的接受到router.start信息,同时做出处理。所以可以看到dea.log里面会有大量的“DEA received router start message”字段。恩,看起来这么做还是有必要的。我们设想重启了router,那么router必须重新要求所有app来注册,那么他也只能发一个router.start,如果dea做过一次就不做了,那么新的router就无法更新了。

然后处理router.start的过程很简单,就是将所有running的组件注册到router中去。

其他的就不提了,也比较简单,什么heartbeat之类的,大家都懂的

(这里还有一块内容需要补充,就是定期执行的一些操作,比如app状态(CPU,内存等)的update等,还是有一定学习意义的)

CloudFoundry基础知识学习 1     CloudFoundry简介 CloudFoundry是VMware旗下子公司Pivotal的一款开源PaaS产品,是一个由多个独立子系统组成的分布式系统,能偶支持多种运行时环境、开发语言、框架及服务,可以构建于IaaS平台之上,也可以直接部署于物理机器上,总共有两个版本分别是V1和V2,V2版本采用的更为成熟的架构思想,引入了如Buildpack、Warden等强大灵活的组件。 阅读详情

相关推荐

dea的基本MATLAB程序

用于一般DEA的MATLAB编辑,主要包含BCC和CCR模型。

DEA基础模型python代码

DEA是数据包络分析()的简称,是通过数学规划模型得出效率的非参数方法,不需要对生产函数的形式进行假定。以上文字是截取自吴杰老师的《行业分析视角下中国区域环境效率研究——基于数据包络分析(DEA)方法》中的描述。(其实我的理解就是初中就学过的不等式组,只不过没有具体数字了,求最佳值也跟以前在可行域内求最大最小值的思想一样。) 吴杰老师这本书对于刚接触DEA方法的人来说真的很友好,各种基础模型之间的联系和区别都写的很清楚,不过要是想了解最新的模型,还是建议去看最新的英文文献哦。

weixin_63461935的博客 3402

超效率DEA代码文件及说明文档

DEA 是由 Charnes 等人于 1978 年首次提出的, 第一个 DEA 模型为 CCR 模型。 它的优点非常明显, 如指标数据无需 量纲化, 决策者无需掌握决策单元 (DMU) 的内部生产机制, 只需要投入和产出数据就可以对DMU 进行效率评价。

DEA数据包络分析python代码记录

DEA数据包络分析python代码记录

m0_59179752的博客 5095

数据包络法(DEA)matlab代码

数据包络法(DEA)matlab代码,计算方案的相对有效率和各项指标的权重

dea模型matlab代码,三个dea模型,超效率dea,BCC,CCR

里面有三个dea模型,投入型,产出型,超效率,都是matlab代码,打开设置下变量就可以用,希望大家共同进步!

STATA DEA代码说明及样本数据

STATA_DEA代码说明及样本数据

m0_71334485的博客 2422

非期望产出EBM模型效率测算DEA方法EBM模型计算的matlab代码,里面有详细的使用步骤,有问题可以优快云私信我,包售后哦

EBM模型是一个综合考虑径向和SBM两类距离函数的混合模型。该模型不仅解决了传统数据包络分析方法未考虑松弛变量,以及损失效率前沿投影值原始比例信息的缺陷,而且解决了对多个处于前沿位置的决策单元进行比较问题,为决策单元效率测算提供了一种新方法。 为了照顾不懂matlab的小白,本人还整理了详细的操作说明文档,从matlab安装到代码的使用步骤,均做了详细的图文说明,里面还有配套的示例数据,可跟着说明整体跑一遍,就能学会操作!一切只为大家能更好的使用。有问题优快云私信我哦

CloudFoundry之DEA源码分析

DEA启动分析 ruby的代码结构一般都是一样的: bin目录是执行文件 conf是配置文件 lib则是ruby source spec放置一些测试的文件 Gemfile+Gemfile.lock为bundler服务,让dea可以找到正确的gem依赖 Rakefile是用来做测试的 先看下dea的目录结构,bin 放的是脚本,等同shell的

K_James的专栏 2428

dea模型matlab代码_dea模型代码_MATLAB的DEA代码_非期望工具箱_

同样是DEA模型,这个包含有非期望产出的部分,使用时可以直接将数据粘贴到相应位置即可。代码中有注释,非常清楚。

在摩尔线程 MTT S80 上使用 Ollama 进行 DeepSeek R1 蒸馏版模型推理

本文主要介绍了如何在摩尔线程 MTT S80 上通过 Ollama 快速完成DeepSeek R1 蒸馏系列模型的推理。

摩尔线程blog中心 3600

cloudfoundry dea 之 app staging

DEA,即Droplet Execution Agent,管理app实例,将状态信息广播出去。比如我们创建一个app,实例的创建命令最终会下发到DEA,DEA调用warden的接口创建container,如果用户要删除某个app,实例的销毁命令最终也会下发到DEA,DEA调用warden的接口销毁对应的container。

jasson的专栏 765

SRAM ECC原理与应用:从汉明码到高可靠嵌入式系统设计

在嵌入式系统与高可靠性计算领域,内存数据完整性是系统稳定运行的基石。软错误(Soft Error)由宇宙射线或芯片内部粒子引发,可能导致存储单元发生位翻转,进而引发程序跑飞或数据损坏。为应对这一物理层挑战,错误校验与纠正(ECC)技术应运而生,其核心原理基于扩展汉明码,通过增加校验位实现单错误纠正、双错误检测(SECDED)能力。这项技术通过硬件透明纠错,在提升系统可靠性的同时,几乎不影响访问性能。在汽车电子、工业控制及航空航天等对安全性要求极高的场景中,ECC已成为保障长期稳定运行的关键硬件机制。本文聚焦

weixin_28728265的博客 532

CloudFoundry源码分析:DEA

DEA(Droplet Execution Agent),主要流程都在agent.rb文件中实现。 由于CloudFoundry平台是以NATS为中心的,只要弄清楚了这个组件能够处理的NATS消息,也就清楚了这个组件的基本流程。DEA也不例外。 Agent主要注册了以下几种事件,下面分别介绍这些方法的实现流程 。 NATS.subscribe('dea.s

Tony的专栏 1461

电池充电管理芯片规格书精读指南:从参数解析到设计实战

电池充电管理是嵌入式系统和便携式设备开发中的基础环节,其核心在于理解并应用充电芯片的规格参数。充电芯片通过精确控制电压、电流、温度等关键参数,实现对锂电池等可充电电池的安全、高效管理。掌握这些参数原理,对于优化产品功耗、提升充电效率、保障电池寿命具有重要技术价值,广泛应用于智能穿戴、消费电子、无人机等场景。本文聚焦于**充电电流**设定与**热管理**等核心参数,深入解析其相互影响与工程选型中的权衡,旨在帮助开发者将抽象的规格书数据转化为可靠的电路设计依据,从而有效排查充电故障,提升产品整体可靠性。

weixin_26874745的博客 667

NVIDIA Isaac Sim 入门教程(二)

Omniverse Isaac Sim 的工作空间非常容易自定义。调整用户界面的大小、停靠、取消停靠、添加和移除面板都非常容易。进入顶部菜单栏,单击下拉菜单最下方的窗口 > 视口 > 视口 2(现在工作区中应该会出现一个名为 "视口 2 "的新视口。如果您想创建更多的视口,请按照相机检查器扩展进行操作。单击并拖动视口 2 的顶部标题以激活停靠部件。拖放到原始视口的右侧,将两个视口并排放置。单击并向左拖动视口 2 的左侧,使视口大小相等。

机器人控制与仿真应用 6545

cloud foundry之dea组件源码分析

上一篇文章分析了router的运行原理,在这一篇开始分析dea组件的运行。。。,记得以前自己刚刚开始接触cloud foundry的时候就会觉得dea是最神奇的一个模块,不过看了它的代码之后它的神秘感也就渐渐的消失了。。 首先来看启动的代码:EM.run { agent = DEA::Agent.new(config) agent.run() }还是在eventmachine中启动,主要

fjs的专栏 2481

【Embabel Agent】生产级最佳实践与避坑指南

本文围绕架构师最关心的 8 大维度展开:测试策略(FakeOperationContext 实现 Action 级单元测试、Prompt 质量与敏感信息校验)、MCP 集成实战(STDIO/HTTP 双模式、自建 Server、Docker MCP 生态)、RAG 检索增强、OpenTelemetry 全链路可观测性与追踪、Docker/K8s 生产部署、API Key 管理与 @Tool 安全防护、模型选择/缓存/并行等性能优化,以及过度依赖 LLM、忽略错误处理等 8 大常见反模式避坑指南。

program哲学 307

CloudFoundry dea实践经验

CloudFoundry dea实践经验分享下使用CF过程中一些经验:查询所有dea的容器个数curl router:c1oudc0w@ROUTER_IP:PORT/routes | python -mjson.tool | grep DEA_IP | wc -l ++note:其中ROUTER_IP是gorouter的Ip,PORT是gorouter查询状态的那个端口,DEA_IP是待查询的dea

wenhao的专栏 598

冲压机器人系列编程:ABB IRB 6700_(6).RAPID编程语言入门

主菜单:包含文件、编辑、视图、工具等常用操作。项目浏览器:显示当前项目的文件结构,包括机器人模型、程序模块等。图形界面:用于创建和编辑机器人的虚拟环境。RAPID代码编辑器:用于编写和编辑RAPID代码。仿真控制面板:用于控制仿真过程,包括启动、暂停、停止等。变量是存储数据的容器,可以通过变量名访问和修改其存储的数据。变量定义时需要指定其类型和名称。% 定义一个整数变量并赋初值% 定义一个实数变量,未赋初值函数定义时需要指定其返回类型和参数。num result;子程序类似于函数,但不返回值。

zhubeibei168的博客 1378

Synopsys逻辑工艺库(DC综合)

逻辑库包括仅与综合过程有关的信息且通过DC用于设计的综合和优化。这一信息包括引脚到引脚的时序、面积、引脚类型和功耗以及其他DC需要的必须数据。逻辑库是一个文本(通常扩展名".lib"),通过使用Library Compiler(LC)编译生成带有扩展名名".db"的二进制文件。以SMIC的逻辑综合库为例:库文件下载地址。

baidu_34971492的博客 2425

Cloud Foundry中DEA与warden通信完成应用端口监听

在Cloud Foundry v2,DEA为一个用户应用运行的控制模块,而应用的真正运行都是依附于warden。更具体的来说,是DEA接收到Cloud Controller的请求;DEA发送请求给warden server;warden server创建warden container并将用户应用droplet等环境配置好;DEA发送应用启动请求至warden serve;最后warden container执行启动脚本启动应用。 本文主要具体描述,DEA如何与warden交互,以保证最终用户的应用可以成功

木精灵的技术博客 3927

ESP32-CAM 赋能 AI 视觉巡检小车:自主避障与目标追踪实现全解析

本文基于 ESP32-CAM 实现了低成本 AI 视觉巡检小车的核心功能,硬件成本<100 元,兼顾自主避障与目标追踪。算法升级:移植 YOLOv5nano 量化模型(INT8),提升目标检测精度(如识别巡检场景中的 “异常物体”“人员”);无线拓展:通过 MQTT 协议将巡检图像、距离数据上传到阿里云 / 腾讯云,实现远程监控;多传感器融合:增加温湿度(DHT11)、红外测温(MLX90614)模块,扩展巡检维度;路径规划:结合 SLAM 算法,实现自主建图与路径巡检。

weixin_42300449的博客 368

Cloud Foundry中DEA组件内应用的启动与资源监控

Cloud Foundry中所有的应用都运行在一个称为DEA的组件中,DEA的全称是Droplet Execution Agent。 DEA的主要功能可以分为两个部分:运行所有的应用,监控所有的应用。本文主要讲解Cloud Foundry v1版本中DEA如何启动一个应用,以及DEA如何监控应用的资源使用。虽然DEA两个功能的实现远不止这么多,但是笔者认为启动应用和监控应用资源是DEA的精髓所在,很多其他的内容都是在这两个点上进行封装或者强化。

木精灵的技术博客 4443

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

详解CloudFoundry中各个组件的作用

CloudFoundry是一个标杆性的项目,架构设计上有很多值得借鉴之处。从CloudFoundry官网摘了一张图,我们以此剖析各个组件的作用。 Router Router是整个平台的流量入口,负责分发所有的请求到对应的组件,包括来自外部用户对app的请求和平台内部的管理请求。 Router是PaaS平台中至关重要的一个组件,它在内存中维护了一张路由表,记录了域名与实例的

zbq928171481的专栏 1434

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

上一篇: Openshift源码与运作方式初步分析
下一篇: cloudfoundry dev setup 分析以及chef学习
Lory_yang
博客等级 码龄18年 48粉丝 69原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值