坚信科学,分享技术

2018全新版本,未来在blog.54chen.com更新博客!

>>>尝试更加利于阅读的2014版科学院,以后都在新版上写。

Tag Archives: warden

cloud foundry之warden代码解读-part3

简介 cloudfoundry是vmvare推出来的开源PaaS平台,warden是其核心部分的资源管理容器,完成了各种资源分配的事情。 代码位置在: https://github.com/cloudfoundry/warden 根据part2里提到的过程,本节以create命令为例进行追踪。 调用过程: bin/warden-repl >> lib/warden/repl.rb >> Warden::Client >> warden.sock >> lib/warden/server.rb receive_request > process(request) > process_container_request(request, container) > base.rb > dispatch(request, &blk) > send(do_method, request, response, &blk) -> linux.rb > do_xxx > shell script 过程放大 一、进入repl命令行 …

Continue reading

Posted in 架构研究 | Tagged , | Leave a comment

cloud foundry之warden代码解读-part2

简介 cloudfoundry是vmvare推出来的开源PaaS平台,warden是其核心部分的资源管理容器,完成了各种资源分配的事情。 代码位置在: https://github.com/cloudfoundry/warden 代码结构 |-- em-warden-client 基于eventmachine的client 依赖 warden-client与warden-protocol 通过 unix socket来通讯 |-- warden 巨复杂的warden实现,大部分是shell脚本+ruby,还有两个c实现。 |-- warden-client 客户端驱动,提供与warden的阻塞式通讯client。依赖warden-protocol。其中的V1.rb对各自command进行解析之后的处理。这里有一个v1mode的概念, v1mode使用字符串,转为pb后与其他的一起使用protobuf。 `-- warden-protocol 依赖beefcake(protobuf library for Ruby)。protocol下有所有支持的pb生成格式。 小坑:ruby中的send方法 send其实就是动态地根据名字调用函数,传递后面的内容作为调用参数,api函数原型为: obj.send(symbol [, args...]) => obj 在V1.rb中,所能的convert_xxxx_request方法都是这样被调用到的。 专注warden实现 src下四个C程序: |-- clone 用来快速复制一个环境 夹杂一堆的shell在其中运行 …

Continue reading

Posted in 架构研究 | Tagged , | Leave a comment

cloud foundry之warden代码解读-part1

简介 cloudfoundry是vmvare推出来的开源PaaS平台,warden是其核心部分的资源管理容器,完成了各种资源分配的事情。 代码位置在: https://github.com/cloudfoundry/warden 这一部分也是我最想了解细节的地方,因为在一个paas平台中,资源的隔离才是最有价值的部分。 基础知识 rv = unshare(CLONE_NEWNS); unshare这个调用,可以把挂载的文件系统设置成只在新的挂载命名空间(mount namespace)中可见。 execvp(argv[0], argv); execvp()会从PATH 环境变量所指的目录中查找符合参数file 的文件名,找到后便执行该文件,然后将第二个参数argv传给该欲执行的文件。 shopt -s nullglob 设置shell环境变量nullglob的值为on,nullglob为on时对于通配符匹配时,若匹配不到时为空(相对应的为通配符本身)。 int stat(const char *restrict pathname, struct stat *restrict buf); 提供文件名字,获取文件对应属性。 build-essential软件包 作用是提供编译程序必须软件包的列表信息,也就是说编译程序有了这个软件包,它才知道 头文件在哪,才知道库函数在哪,还会下载依赖的软件包,最后才组成一个开发环境。 工具debootstrap 可以用于在系统的某个目录中安装一套基本系统,这个基本系统除了一些配置项外,与ubuntu安装程序在安装的第一阶段安装的内容基本相同。

Continue reading

Posted in 架构研究 | Tagged , | Leave a comment