CloudBridge服务简单入门

487 查看

CloudBridge是SAE开发的VPN服务,开发者通过OpenVPN 客户端连接到CloudBridge之后,可以像使用本地服务一样使用SAE内网的一些服务,目前只有独享型MySQL可以只用。

1.CloudBridge介绍

1 SAE CloudBridge整体架构

CloudBridge包括了从外到内、内部以及从内到外的网络控制和安全隔离,从下图中可以看到,Controler负责各应用和资源间的网络流控制,而Forwarder则负责实际的代理转发。与某些IaaS中SDN不同的是,CloudBridge不依赖于特殊网络设备而实现在OS层,并且主要负责L2以上网络流控制。目前,项目中涉及VPC部分的Data Connection仍在开发中。完成后,将可以提供一套跨企业内外网的PaaS网络解决方案。
CloudBridge

2 服务限制

用户连接CloudBridge之后,CloudBridge中做了隔离,用户只能操作自己应用的数据。
CloudBridge对用户的带宽做了限制,带宽大小跟用户等级有关。

2.CloudBridge简单入门
由于该服务刚刚上线不久,相信很多小伙伴都很喜欢,但是又苦于没有教程。其实官方文档已经非常详细了,我这里只是在造个轮子而已。

1 初始化CloudBridge服务

非常简单,登陆你的SAE控制台,切换到CloudBridge服务,点击初始化即可。然后在控制台还可以查看accesskey和secretkey,待会有用。
cloudbridge

2 Window客户端

下载openVPN客户端,但是在国内呢,总是有一股神秘的力量阻挡着我们。这个不用担心,SAE的CloudBridge控制台已经可以下载了,我这里也会提供相应的安装包。不多说,下载后直接安装,我这里使用的是Window10测试,好了之后会在电脑桌面出现OpenVPN GUI客户端图标。
直接右键选择管理员打开,这时你可以在右下角任务栏看到openVPN的图标。但是右键点击却发现并没有connect的选项,这是为什么呢?
openVPN
原因就是没有配置文件,这时就要下载并且导入配置文件。

3 导入配置文件

在CloudBridge的控制台面板,下载配置文件,并且重新命名为client.ovpn,然后放到你的openVPN的安装目录下的config文件夹里面。这时你再右键一下即可出现connect选项

4 连接CloudBridge

很简单,点击connect选项,在弹出的对话框中输入用户名密码,用户名为应用的accesskey,密码为应用的secretkey,点击确定即可出现连接成功的提示。
CloudBridge
好了,现在你就已经成功连接上了CloudBridge服务,尽情使用吧。我们这里演示一下操作独享型MySQL服务。

3.独享型MySQL

1 新建MySQL实例

登陆SAE的控制台,切换到MySQL的面板,选择独享型MySQL。根据需要,初始化相应配置,这里选择微型的一主一从的实例
独享型MySQL

2 创建账号

初始化后SAE不会帮我们创建数据库账号,需要手动创建,该账号待会就是拿来连接使用的。
独享型mysql

3 创建数据库

同样,我们需要创建数据库,并且绑定用户,设置权限。
独享型mysql
好了,现在你就已经把SAE的独享型MySQL搬到你的本地环境中了,尽情使用吧。

4.使用CloudBridge连接独享型MySQL

1 MySQL控制台操作

这个需要你电脑上有安装MySQL。使用cmd切换到MySQL的bin目录,然后就可以使用常规命令连接独享型MySQL了
独享型MySQL连接
注意连接的时候那个主机是在控制台写着的,每个人的都不一样,然后端口是12150,用户名密码就是你刚才创建的账号。

做增删改查操作:
QQ截图20150915162234

QQ截图20150915162242

QQ截图20150915162420

2 Navicat操作

这个也是很简单,在控制台找到实例地址和端口,然后用你设置的账号和密码登陆即可。不过要注意的是,在连接的时候从库是只能查询的。
QQ截图20150915162606

插入和查询操作
QQ截图20150915162749

QQ截图20150915162908
可以看到,在连接从库的时候只能进行查询操作,而主库都可以

3 PHP程序操作

当然,数据库最好的还是使用程序来操作,当你做完了CloudBridge连接之后就相当于把独享型MySQL搬到了你的本地中。我写了一个类来操作:

/**
*    SAE RDS本地操作类
*    @data         2015-09-15
*     @author     summer
*     @site         http://www.xtwind.com
*     @e-mail     wenghang1228@me.com
*/
class SaeRds{
    /**
    *    定义主库实例名称
    */
    private $masterName = null;

    /**
    *    定义从库实例名称
    */
    private $slaveName = null;

    /**
    *    定义数据库用户名
    */
    private $username = null;

    /*
    *    定义数据库密码
    */
    private $password = null;

    /*
    *    定义数据库名
    */
    private $dbName = null;

    /**
    *    全构造函数
    */
    public function __construct($masterName = null, $slaveName = null, $username = null, $password = null){
        $this->masterName = $masterName;
        $this->slaveName = $slaveName;
        $this->username = $username;
        $this->password = $password;
    }

    /**
    *    魔术设置
    *     @param     string $name     属性名
    *     @param     string $value     属性值
    *     @throws Exception
    *     @return void
    */
    public function __set($name, $value){
        if(property_exists(get_class(), $name)){
            $this->$name = $value;
        }else{
            throw new Exception("Property not exists");    
        }
    }

    /**
    *    魔术调用
    *     @param     string     $name     变量名
    *     @return string
    */
    public function __get($name){
        return $this->$name ?: false;
    }

    /**
    *    获取主库PDO实例
    *     @throws Exception
    *     @return PDO
    */
    public function getMaster(){
        if(isset($this->masterName)){
            return $this->connect($this->masterName);
        }
        throw new Exception("Master not defined");    
    }

    /**
    *    获取从库PDO实例
    *     @throws Exception
    *     @return PDO
    */
    public function getSlave(){
        if(isset($this->slaveName)){
            return $this->connect($this->slaveName);
        }
        throw new Exception("Slave not defined");    
    }

    /**
    *    数据库连接
    *     $param     string $db 连接的数据库实例名称
    *     @throws Exception
    *     $return PDO
    */
    private function connect($db){
        if(!$this->username | !$this->password | !$this->dbName){
            throw new Exception("Some message not defined");
        }
        $dsn = 'mysql:host='.$db.'.rds.sae.sina.com.cn;dbname='.$this->dbName.';port=12150';
        return new PDO($dsn,$this->username,$this->password);
    }
}
然后测试用例:

/**
*    @example     测试
*/
$t = new SaeRds();
try{
    $t->masterName = 'yourmastername';
    $t->slaveName = 'yourslavename';
    $t->dbName = 'summer';
    $t->username = 'yourusername';
    $t->password = 'yourpassword';
    
    $sql = 'select * from sum_user';
    $ret = $t->getMaster()->query($sql)->fetchAll();
    var_dump($ret);
}catch(Exception $e){
    var_dump($e->getMessage());
}        

可以得到如下的结果:
QQ截图20150915172341

总结
感谢SAE提供这么优秀的平台!
作者博客:夏天的风
原文地址:CloudBridge服务简单入门