Cloud Foundry中dea_ng源码文件分析

/dea_ng/lib/dea/ 目录下各文件的作用简介

bootstrap.rb:主要负责配置dea_ng其他的模块,另外还负责将这些模块启动工作,主要的模块有nats,logging,loggregator,droplet_registry ,instance_registry,staging_task_registry,instance_manager ,snapshot ,resource_manager ,router_client ,directory_server_v2 ,directories ,pid_file ,sweepers等。

config.rb:主要定义了部分的配置项,还定义了解析参数时的参数类型。

droplet.rb:负责创建droplet的指定目录,以及最后将droplet的内容下载至相应的目录。

droplet_registry.rb:实为一个Hash对象,负责记录Droplet的在本地的存储。

env.rb:主要负责应用环境变量的设置,比如export系统环境变量,用户环境变量等。

loggregator.rb:负责DEA的日志处理以及推送。

nats.rb:主要负责DEA模块关于NATS通信的部分,比如订阅消息,以及具体的实现过程。

promise.rb:在我理解而言,是负责管理任务分发和处理的对象,可以按需对任务进行定制执行。

protocol.rb:主要负责定义了DEA使用到的消息定义。

registry_enumeration.rb:负责记录当前状态下的内存以及磁盘使用情况。

resouce_manager.rb:DEA创建应用时的资源管理,包括资源的限额,资源的分配。

router_client.rb:作为与router交互的DEA端client,负责通过NATS在router处注册域名以及注销域名。

snapshot.rb:负责将当前的应用状态信息进行快照保存与快照信息导出,和v1中的applications.json类似,v2中为instances.json。

stats_collector.rb:主要负责采集资源的使用情况,包括内存,磁盘以及CPU使用率。

task.rb:主要负责创建warden的container,并通过promise来实现对container的简单管理。

user_facing_error.rb:主要描述用户遇到的简单的error。

version.rb:返回DEA的版本号。


/dea_ng/lib/dea/directory_server 目录下各文件的作用简介

directory_server_v2.rb:配置应用路径,打包任务这两个对象,并提供一个@file_api_server的thin服务器端,另外提供hmac的认证码验证。

hmac_help.rb:提供hmac认证码的生成与验证功能;

instance_paths.rb:给用户提供相应应用实例的路径

staging_tasks.rb:通过HTTP请求,获取相应应用的staging_task的路径。


/dea_ng/lib/dea/health_check 目录下各文件的作用简介

base.rb:初始化healthcheck的base类。

port_open.rb:通过EM来连接端口,来检查DEA相应的端口是否为打开状态

state_file_ready.rb:检查相应路径下文件中的状态信息。


/dea_ng/lib/dea/lifecycle 目录下各文件的作用简介

evcacuation_handler.rb:DEA做疏散应用并推出的事宜,主要是停止应用,发送应用的退出信息,转移应用的状态等。

shutdown_handler.rb:DEA做关闭操作,删除所有droplet的信息,停止所有任务的执行,并结束DEA进程的运行。

signal_handler.rb:捕获内核发送给该进程的信号,并做相应的处理,比如term,int,quit,usr1,usr2等。


/dea_ng/lib/dea/staging 目录下各文件的作用简介

admin_buildpack_downloader.rb: 通过指定url实现下载buildpack,通过Promise来完成。

buildpack_manager.rb:负责管理buildpack,包括下载,罗列以及删除等操作。

staging_env.rb:负责提供应用部署时所需要的系统环境变量。

staging_message.rb:提供打包droplet过程中所需要的有关应用的相关参数,比如:app_id,task_id,download_uri,upload_uri,buildpack_cache_upload_uri,buildpack_cache_download_uri等。

staging_task.rb:定义了staging任务,其中包含了staging过程中的多个关键步骤的实现,比如unpack_app,unpack_buildpack_cache,stage,pack_app,copy_out,save_droplet,log_upload_started,staging_info的串行实现等。

staging_task_registry.rb:主要负责记录staging_task,以task_id为键记录task的信息。

staging_task_workspace.rb:提供staging任务所需要的完整的工作空间,包括所需的众多目录,比如:workspace_dir,warden_staged_droplet,warden_unstaged_buildpack_cache, warden_staged_buildpack_cache, warden_cache, wardeb_unstaged_dir,warden_staged_dir,tmpdir,admin_buildpacks_dir等。


/dea_ng/lib/dea/starting 目录下各文件的作用简介

instance.rb:定义了应用实例的状态,以及应用状态的变迁,并配置了应用的启动,应用所需的环境,还有实现应用的启动。其中promise_droplet——download droplet , promise_container——setup container,promise_extract_droplet——extract droplet, promise_start——execute start script 等。还设置了应用在crash的状态下的处理机制,以及应用的资源采集。

instance_manager.rb:关于应用的创建,以及配置应用状态变迁的管理。

instance_registry.rb:负责应用记录的管理,包括新增应用在DEA处的记录,退出时的删除,还有定期处理crash的应用的记录。

running_env.rb: 提供启动应用时用来加载的环境变量。

start_message.rb:提供应用启动时所需的各项参数。

startup_script_generator.rb:负责生成应用的启动脚本,包括启动的脚本,加载环境变量等。

data_uri_generator.rb: 负责给应用的database_url环境变量加载值,作用未知。


/dea_ng/lib/dea/responders 目录下各文件的作用简介

dea_locator.rb:负责发布消息,以示dea的存在。

staging_locator.rb:负责发布消息,以示staging模块的存在。

staging.rb: 负责staging模块的订阅发布的开启与关闭。


关于作者:

孙宏亮,DAOCLOUD软件工程师。两年来在云计算方面主要研究PaaS领域的相关知识与技术。坚信轻量级虚拟化容器的技术,会给PaaS领域带来深度影响,甚至决定未来PaaS技术的走向。


转载请注明出处。

本文更多出于我本人的理解,肯定在一些地方存在不足和错误。希望本文能够对接触DEA_NG的人有些帮助,如果你对这方面感兴趣,并有更好的想法和建议,也请联系我。

我的邮箱:[email protected]
新浪微博: @莲子弗如清

你可能感兴趣的:(源码,cloud,dea,foundry,dea_ng)