以NATS为主线的CloudFoundry原理

       本文将试图以CloudFoundry中的消息组件NATS为主要线索,以在CF中广泛使用的并发和网络编程框架EventMachine为侧重,来串联整个CF主线功能的工作原理,力求能用简单直接的方式描述出较多的架构细节和系统设计。


需要准备的知识:

EventMachine(EM)的基础知识和使用方法,可以参考不久前的介绍Research on EventMachine

关于NATS源码级别的介绍,可以参考我们之前的这篇文章:Research on NATS


一、以NATS为线索部署CloudFoundry的更多细节


我们之前曾写过一系列的基于dev_setup的安装与部署文章:

Part 1、单节点安装:

http://blog.csdn.net/resouer/article/details/7939952

Part 2、基于Iaas进行多节点部署:
http://blog.csdn.net/resouer/article/details/8010756


在上述文章的描述中,我们其实已经可以看到NATS在我们部署CF时所扮演的关键角色。没错,是否跟NATS沟通顺畅,也是我们检验各个组件正常工作的重要标准之一。所以,我们在这里着重解决两个问题:

1、如何以模板为基础安装CF集群

2、如何为这个集群实现LB和Custom Domain?


回忆一下我们之前的工作步骤:

  1. 先按照Step A安装单节点CF的VM
  2. 使用该VM做模板,克隆出所需数目的VM
  3. 用NATS把每一个安装了完整CF的VM连接起来
  4. 进行一些其他配置
  5. 分别启动所需的组件

好了,在上面文章的基础上,我们这次提供一个更加清晰的部署策略:(后面的版本组件会不断增加,但是这里的思想是确定的)

Nginx Load Balancer:使用Nginx为Router做负载均衡,绑定LB到*yourdomain.com

Router:作为LB的server,3个节点

Cloud Controller:2个节点,共享文件系统和配置数据库

Health Manager:与CC共用2节点

DEA:3个节点,数量根据应用不同而不同,一般根据资源需求动态添加

Service Gateway:1个节点,不支持集群,一种服务需要一个Gateway

Service Node:2个节点,根据需求可动态添加,一般一种服务1~2个节点

NATS:轻量级不支持集群,只能在单节点上

其他:服务工具类组件,打包组件,用户控制组件各1-2节点(图中未画出,具体类似于service_lifecycle的各个节点)





接下我们需要到这些节点中做下面的简单工作:

1、login到每个VM中,比如CloudController

2、找到./devbox/config/cloud_controller.yml中nats://nats:nats@172.17.4.219:4222

3、修改该IP为NATS的IP,

4、对其它的node做这项工作,然后启动该节点上需要的那几个组件即可(../vcap_dev start xxx xxx ...)


然后是一些额外的配置工作,包括:

1、配置CC的external_url,以及CC和HM的共享文件和数据库(参见Part 2里的说明以及 Step 5. Other things TODO部分)

2、多个service node的编号

3、单独启动nats节点上的nats-server服务

4、Custom Domain、Muti-router与Nginx LB的配置


需要重点补充下4 的操作。在Part 2 里我们提到过:在你的IaaS层的网络功能里把*.yourdomain.com绑定到这个LB上。这样所有对该URL的访问会首先经过该LB(当然该LB也可以是个Nginx集群)。

而在前面的额外配置中,api.yourdomain.com已经分配给CC了。其实CloudFoundry之所以能解析api.yourdomain.com到你的CC,靠的是Router的路由功能,这在后面的原理部分会详细说明。

所以,当你执行vmc targert api.yourdomain.com时,你的request实际上是这样转发的:

vmc target api.yourdomain.com -> LB -> LB选择某一个Router -> Router选择某一个CloudController



二、以NATS和EM为主线的CloudFoundry源码导读


1、NATS



这里我们关注的问题有两个:
1、NATS客户端的生命周期与组件的运行关系如何?
2、NATS是否负责处理CF中所有管理类消息的中转?


首先强烈学习官方的README:https://github.com/derekcollison/nats

阅读源码的话,请重点关注server,connection,sublist这几个部分,动手实验的时候使用nats-server -c "your_config_file"来用自己新写的配置文件启动nats server。具体的参数表在这里:

https://github.com/derekcollison/nats/blob/master/lib/nats/server/options.rb#L10


NATS作为CF的神经网络,负责者组件之间的通讯和交互工作:

NATS基于 Topic
发布者以 Topic 发送消息
订阅者订阅特定 Topic
  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值