云计算PaaS平台-OpenShift主要技术简介

每个云计算厂商都想依托一个平台打造自己的生态圈,吸引云应用开发者,以差异化的竞争优势从中胜出。PaaS作为一个应用平台,是云计算里重要的一环,其重要性和必要性自然不言而喻。

对于大多数开发者来说,它们当然关心计算、存储以及网络情况,但他们往往只是关心它们的性能参数,而不想了解它们是如何实现的。他们不想跟操作系统打交道,整日考虑为系统打补丁、做升级、防范病毒,以及处理多台机器之间的网络安全、防火墙等花时间。

他们希望的是:根据最终用户需求写程序,并发布。系统管理,以及大多数运维工作,都交给PaaS平台自动完成。

PaaS,正好可以满足他们的这一需求。使用PaaS后,不必再为服务器烦恼,不用关心服务器本身的性能优化,做好应用的性能优化即可。不用为服务器上的安全问题操心,做好应用本身的安全即可。也不用关心网络问题,需要禁用什么服务,多台机器之间如何连通。

这对于缺乏系统维护、管理,以及每次应用代码更新都要折腾很长时间,甚至应用需要临时下线才能升级的用户来说可是福音。

PaaS与应用开发者走得最近。PaaS与应用关系最亲密,因此与开发者打交道的机会也最多。PaaS不仅仅是代码托管,还要提供环境以便运行应用。做好安全工作、负载均衡、监控等,公有云的话,还需要很好的统计/报表,还有就是能够检查到潜在的问题,报告给开发者。

PaaS通过滤除虚拟机、操作系统和其他与应用程序开发不相关的多余细节,进一步简化了程序开发的过程,从而促使开发者的工作效率和灵活性得到很大提高,它的开发过程更加简单,也更容易集成现有项目到云平台上。

对于一些常用功能,如邮件、短信通知、全文查找,日志分析,消息队列等以服务的形式提供。开发者只要使用即可,不用自己实现,由专业团队管理维护,不用担心。


目前,PaaS平台受限于非标准框架,再加上缺乏对多种应用服务的支持能力,因此导致很多应用在部署时出现问题。包括红帽、VMware等在内的一些厂商希望通过开源PaaS来改善应用部署的效果,同时也为云计算环境提供一个开源的架构。

但困难重重,一方面在于PaaS平台本身配置部署的困难;另外在于PaaS平台锁定了语言环境、创建的对象及服务以及数据,而开发者不喜欢被锁定

----------------我是分隔线------------------

OpenShift是红帽提供的PaaS云计算平台,支持多种框架和语言,比如Java、PHP、Python和Ruby等,因此可以为云计算的开发人员提供更全面的功能集合。

OpenShift是开源的,而且目前开发者可以免费试用。开发者在使用过程中有什么不方便的或者需求不能满足的,可以给官方提建议;而企业则可以基于OpenShift搭建自己的私有云或者公有云。

使用OpenShift,你可以享受到:

  • 快速上传和部署应用代码;
  • 基于开发堆栈,不用担心应用被锁定;
  • 支持Java, Ruby, Node.js, Python, PHP等多种语言;
  • 十分容易的实现对应用的扩展。

下面简单介绍一下,在OpenShift中所使用到的主要技术。

一 Rails

实现broker+controller组件和Web控制台所用到的Web框架。

您并不一定要成为Rails高手,但至少您得会: 

  • 使用Rails创建一个”五分钟博客” 
  • 了解Rails生成的目录结构和文件 
  • 大概知道Rails有哪些“约定优于配置”

在OpenShift中broker组件主要使用Rails来实现配置,但主要业务逻辑却实现在controller组件。也就是说它们两者结合才算是一个Rails项目。 而Web控制台则是一个独立的Rails项目,在技术上主要向Broker结点发起REST请求。通过浏览器操作,比较符合非编程人员习惯,便于理解。如果你经常喜欢用命令行,则完全不用在浏览器上操作也能完成工作。

二 BIND 实现DNS

BIND系统由4个主要部分组成:

  • 域名服务器守护进程,它回答域名查询,名为named;
  • 解析库例程,它代表用户查询DNS服务器;
  • DNS的命令行界面:nslookup, dig 和 host;
  • 用于远程控制的程序,名为 rndc。


相关技术:

nsupdate 实现动态DNS的工具。使用简单:

    nsupdate $1
key $2 $3
update $4 $6 1 $5 $7
send
EOF

route53 (可选) -- 为了使用AWS上的Route 53来编写的动态DNS插件,允许在OpenShift使用AWS上的Route53 DNS服务来发布应用。

此外,还可选择使用avahi,本人对avahi也不熟悉,在这里引用网络上搜索到的解释。

Avahi 是 zeroconf 协议的实现。它可以在没有 DNS 服务的局域网里发现基于 zeroconf 协议的设备和服务。它跟 mDNS 一样。

三 HAProxy 负载均衡和端口转发

配置HTTP可用于“负载均衡”

配置TCP则可用于“端口转发”

在OpenShift中有3个地方与HAProxy相关:负载均衡,端口转发(可让用户直接操作mysql等服务,或者实现不同gear之间通信),还有就是scaling应用(创建应用时,可以选择是否scaling,默认为否)

HAProxy使用简单,在haproxy.cfg中的前端配置好监听address:port和要转发到后端service,运行haproxy -f  即可。

更多配置策略可参考:http://haproxy.1wt.eu/download/1.4/doc/configuration.txt

四 Cgroups资源限制与隔离

通过设置cgroups可以对CPU, 内存,网络资源,硬盘等资源进行约束。更多介绍请参考官方文档:

Managing system resources on Red Hat Enterprise Linux 6

https://access.redhat.com/site/documentation/en-US/Red_Hat_Enterprise_Linux/6/html-single/Resource_Management_Guide/index.html

五 PAM 可插入式的身份验证模块

PAM是一种身份验证技术,而不是一种访问控制技术。也就是说,它不是解决“X用户有权限执行Y操作吗?”这样的问题,而是帮助解决了问题的前提“我怎么知道是真正的用户X?”

相关技术:
auth

kerberos

Kerberos和PAM类似,本身也是处理认证问题而不做访问控制。不过PAM是一种验证框架,而Kerberos是一种验证方法。它们往往一同使用,PAM用作封装,Kerberos是实际的实现。

Kerberos使用一个可信第三方(一台服务器)来完成整个网络的身份验证工作。不是让用户在其正在使用的机器上验证身份,而是让用户向kerberos服务提供自己的凭证(credential),它发给用户加密的凭证,用户把这个加密的凭证出示给其他服务,作为自己的身份证明。

除了kerberos外,OpenShift还提供了如下选择:

  • mongo
  • remote-user

OpenShift默认使用的认证用的是mongo,而不是Kerberos,但其原理差不多,可供参考。


身份验证:一般公司都有“门禁”,持有本公司的‘卡片’才能进去。也就是说经理、普通程序员、保洁人员等只要有‘卡片’就能进。

访问控制:能进这个门,但并不代表什么你都能做。什么人能做什么,经理、普通程序员、保洁人员等身份不同,做的事也不同。

* 访问控制列表?!

没有所谓的访问控制列表(ACL),创建用户,gear等的时候就已经对权限有了比较细致的设置了。

OpenShift在传统信息安全“加密、访问控制、审计、认证、授权认证”中目前除了‘加密’,我们可以看到都做得比较好。

----------------我是分隔线------------------

以下部分内容算不上是技术,只是OpenShift平台上使用到。为了湊字数,就把它们也算上吧。

六 tito 

tito - 通过它可快速将我们的git项目打包成rpm包,供下载安装。

使用它创建项目框架,简单了解即可:

       tito init #在git项目的基础上生成.spec配置模板文件

       tito tag [OPTIONS]

       tito build --test --rpm #根据.spec配置文件构建.rpm包

       tito build [OPTIONS]

       tito report

七 rpm

这似乎算不上是技术,不过还得啰嗦一下:尽管OpenShift大部分使用ruby语言实现的,但包管理器仍然使用redhat熟悉的rpm而不是gem。所以强烈不建议使用RVM, rbenv等来安装Ruby或者使用gem install xxx的形式来安装OpenShift组件,直接通过yum install xxx即可。

八 mcollective 

  尽管这也很重要,但主要是简单的使用,技术上难度不是很大,简单提一下即可。  

九 mongoid 

之前的项目没有使用ORM,而完全是自己实现的,真正是“想要什么就创建什么”。但这么做无论是创建,还是维护或者对于第三方使用者来说成本都比较高。后来使用了mongoid。mongoid是ruby世界里的一个gem,起到ORM的作用。

那么在数据库里到底存放着哪些数据呢?请我们来看看:

十 Apache

这也算?是的,Apache做为前端服务器经过适当配置,也能起到很大作用,比如:限制带宽、负载均衡、以及做一些安全处理。加载mod_rewrite模块,配置Rewirte规则可以实现URL的跳转,使URL 静态化。


文章到这也够长了,其它技术不说,并不代表它们并不重要。比如:selinux, iptables等。

似乎漏了点什么:我们上传的代码如何打包,解决依赖,如何运行,如何处理‘钩子’?答:请查看具体的cartridge如何实现。

----------------我是分隔线------------------

  PaaS需要提供云编程环境,因此就编程而言,开源有利于PaaS的推广,也有利于丰富平台上的应用。不过,但考虑到自身的利益,厂商采用开源与闭源的混合模式可能比较现实。

  PaaS还要提供丰富的开发工具给更多的应用开发者。从应用起步做PaaS更易成功,因为PaaS与应用更接近。


好了,文章最后我们来看看OpenShift的架构图。

其中,controller和node这两个子项目是核心,理解它们基本上你对整个PaaS平台就能一目了然了。整个PaaS平台大部分功能,都有现成解决方案,我们只要做选择并简单配置即可。而实际也正是这么做的,关键是如何将它们组织好,还有就是实现真正的业务逻辑。


官方文档之一:http://openshift.github.com/

官方网站:https://www.openshift.com/

源代码:https://github.com/openshift/

相关文档:https://access.redhat.com/knowledge/docs/OpenShift/  https://access.redhat.com/knowledge/docs/OpenShift_Enterprise/

部署安装我主要参考:http://www.krishnaraman.net/building-a-multi-node-openshift-origin-paas-from-source/ 不过坑比较多,请做好心理准备。


本文部分文字、图片来源于网络,本文采用知识共享“署名 3.0 中国大陆”许可协议授权。

在此感谢 http://writings.io



你可能感兴趣的:(PaaS,OpenShift)