基本概念
一般把云计算分成三种: IaaS(Infrastructure as a Service), PaaS(Platform as a service) 还有 SaaS(Software as a Service)。
IaaS: 最典型的是 AWS(Amazon Web Service) 还有国内的阿里云。公司在大规模地使用 AWS,我自己也开了两个 AWS 的 EC2(弹性计算云,虚机)。这种云的特点是弹性计算、丰富的API(AWS更是做到了 full features,国外的 scalar 用 AWS 的 API 构建了基于 Farm, Role等概念的抽象管理)。它们通常也会提供一些 PaaS 服务,比如 AWS 提供的 关系型数据库服务 RDS,还有存储、cdn等等。 leader 说,公有云是未来,然也。
PaaS: IaaS 比较像 VPS,用户面对的是 OS,登录进去可以随便搞,灵活。PaaS 就比较专业了,针对不同功能的资源需求,定向提供服务,比如上面提到的数据库啊、存储啊。国内的 PaaS 还有 Bae, Sae, Jae(京东) 等。它们的主服务是提供 App 的运行环境,它给你一些限制条件,你的代码符合条件就可以上传,然后就可以在上面运行。它们也会提供类似上面说的PaaS,比如数据库。 据说 Sae 上入驻的主要是微博中的小游戏之类的应用。
SaaS: 这个就更专业、粒度更小了,网上举例都用邮箱来说,我也不是很了解。
IaaS 由于面对的主要是 OS,很容易与 VPS(如 Digital Ocean) 混淆。其实只要没啥需求变动,他们用起来确实差不多,都是计算资源。不同的是,IaaS 的弹性计算可以按使用量收费、可以动态地、方便地 scale 各种计算资源(CPU, NetWork, Ram…),并且提供丰富的 API 让用户更自由地操作自己的计算资源。
这两年 docker 热,又催生了另外一种云 CaaS(Container as a Service)。很多时候我们并不需要一个完整的 OS,而是需要一个运行环境,比如一个网站只需要服务器、数据库之类的环境能跑起来就行了。此外,镜像能够方便地保证运行环境的可定制、可复制、可分发,用到 CI/CD(持续集成 持续交付)很有益处。
CI
-
Jenkins 默认是创建了一个 jenkins用户,在这个用户下跑服务,如果想在 root 下跑(更方便控制),在安装的时候就要注意了。我用的默认的方式,在 jenkins 用户下创建 ssh key 不好使,jenkins 没有权限访问我的 repo。几经周折找到了解决办法:生成 ssh key 的时候,passphrase 留空。什么原因不知道,stackoverflow 上还有其他人也是这么解决的。
-
Jenkins 用线程池处理所有程序员抛过来的task,随着任务增多,一方面CPU紧张,一方面硬盘也会越来越挤(产生大量的build文件)。如果一个节点不够,可以再配几个 slave。像 Hadoop 一样,节点通过 ssh 通信,不过slave可以不必安装 Jenkins了,但 java 和build环境要搭。
-
至于 build,以 c 为例,repo的代码中有 makefile之类的文件,Jenkins master 或 slave 一般也自带的 make 工具。那么在 Jenkins 的 task 对应的配置中,在 build 那儿写几个 shell 命令就可以了。其他语言也类似。也就是说,build工具是在 Jenkins master 或 slave 中搭建好的,Jenkins 用脚本来调 build 工具去 build。