腾讯的开源微服务架构Tars快速上手
Posted 舟头煮酒东风醉
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了腾讯的开源微服务架构Tars快速上手相关的知识,希望对你有一定的参考价值。
关于Tars,腾讯的github Tars项目里是这样介绍的:“Tars是基于名字服务使用Tars协议的高性能RPC开发框架,同时配套一体化的服务治理平台,帮助个人或者企业快速的以微服务的方式构建自己稳定可靠的分布式应用。”
我用了一些时间对这个框架进行了学习和使用验证,下面是一些上手经验。
Tars官方没有提供docker镜像来方便使用者实验或者在Windows环境上开发。这里推介一下本人制作的Tars docker镜像:https://hub.docker.com/r/tangramor/docker-tars 。使用docker容器的好处是不需要自己再费劲编译和部署了,而且在各种不同环境下能够获得一致的Tars环境。
举例说明:
开发服务端
首先使用docker命令启动容器,这里我们可以用
tangramor/tars-master
或者tangramor/docker-tars
:docker run -d -it --name tars -p 8080:8080 -v /c/Users/tangramor/Workspace/tars_data:/data tangramor/tars-master
这个命令启动了
tangramor/tars-master
容器 tars 并将本地的一个目录/c/Users/tangramor/Workspace/tars_data
挂载为容器的 /data 目录,同时它还把 8080 端口暴露出来了。然后我们可以在宿主机的
/c/Users/tangramor/Workspace/tars_data
目录下看到有两个子目录被创建出来了:log、tars,前者是resin的日志目录,后者里面是Tars各系统进程的日志目录。同时/c/Users/tangramor/Workspace/tars_data
目录下还有各个需要手动部署的 Tars 子系统的部署 tgz 包,我们参考 安装框架普通基础服务 来安装这些服务。运行
docker exec -it tars bash
进入容器 tars,cd /data
进入工作目录,参考官方的 服务开发 文档,开发 TestApp.HelloServer,其中 testHello 方法修改如下:int HelloImp::testHello(const std::string &sReq, std::string &sRsp, tars::TarsCurrentPtr current) { TLOGDEBUG("HelloImp::testHellosReq:"<<sReq<<endl); sRsp = sReq + " World!"; return 0; }
然后将编译完成的 HelloServer.tgz 部署到 tars-master 容器或者 docker-tars 容器里。
开发PHP客户端
C++的客户端可以参考官方的 客户端同步/异步调用服务。注意如果要把C++的客户端部署到 tars-node 容器里,那么不要混用 minideb 标签和 latest、php7 标签的镜像,因为会有依赖问题。
这里主要讲一下PHP的客户端开发与部署。
首先使用docker命令启动php7标签的容器,这里我们可以用tangramor/tars-node:php7
:docker run -d -it --name tars-node --link tars:tars -p 80:80 -v /c/Users/tangramor/Workspace/tars_node:/data tangramor/tars-node:php7
这个命令启动了
tangramor/tars-node:php7
容器 tars-node 并将本地的一个目录/c/Users/tangramor/Workspace/tars_node
挂载为容器的 /data 目录,同时它连接了命名为 tars 的服务端容器,还把 80 端口暴露出来了。我们可以在宿主机的
/c/Users/tangramor/Workspace/tars_node
目录下看到有三个子目录被创建出来了:log、tars 和 web。前两个都是日志目录,最后一个在容器中被链接为/var/www/html
,也就是Apache服务器的根目录。并且在 web 目录下可以看到 phpinfo.php 文件。我们使用浏览器访问 http://127.0.0.1/phpinfo.php (linux、mac)或 http://192.168.99.100/phpinfo.php (windows)就可以看到PHP的信息页面了。我们从宿主机的
/c/Users/tangramor/Workspace/tars_data/TestApp/HelloServer
目录里找到Hello.tars
文件,将它拷贝到宿主机的/c/Users/tangramor/Workspace/tars_node/web
目录下。运行
docker exec -it tars-node bash
进入容器 tars-node,cd /data/web
来到web目录,然后执行wget https://raw.githubusercontent.com/Tencent/Tars/master/php/tarsclient/tars2php.php
把tars2php.php
文件下载到本地。然后执行php tars2php.php Hello.tars "TestApp.HelloServer.HelloObj"
,我们可以在 web 目录下看到 TestApp 目录被创建出来,TestApp/HelloServer/HelloObj
目录下是生成的PHP的客户端文件。在 web 目录下再创建一个
composer.json
文件,内容如下:{ "name": "demo", "description": "demo", "authors": [ { "name": "Tangramor", "email": "tangramor@qq.com" } ], "require": { "php": ">=5.3", "phptars/tars-assistant" : "0.2.1" }, "autoload": { "psr-4": { "TestApp\\": "TestApp/" } } }
然后运行
composer install
命令,vendor
目录被创建出来了。这表明我们可以在PHP文件里使用 autoload 来加载 phptars。在 web 目录下新建index.php
文件,内容如下:<?php require_once("./vendor/autoload.php"); // 指定主控 $host = "tars"; $port = 20001; $start = microtime(); try { $servant = new TestApp\HelloServer\HelloObj\Hello($host, $port); $in1 = "Hello"; $intVal = $servant->testHello($in1,$out1); echo "服务器返回:".$out1; } catch(phptars\TarsException $e) { // 错误处理 echo "Error: ".$e; } $end = microtime(); echo "<p>耗时:".($end - $start)." 秒</p>";
在宿主机上使用浏览器访问 http://127.0.0.1/index.php (linux、mac)或 http://192.168.99.100/index.php (windows),如果没有意外,页面应该返回类似下面的内容:
服务器返回:Hello World! 耗时:0.051169 秒
Tars的主节点和子节点的部署与注册、发现、伸缩是有一个自己的机制的,官方的文档有些语焉不详(其实官方文档的改进空间很大……),后面有时间我再写写这块。
以上是关于腾讯的开源微服务架构Tars快速上手的主要内容,如果未能解决你的问题,请参考以下文章