/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的人有些帮助,如果你对这方面感兴趣,并有更好的想法和建议,也请联系我。