本文章为专栏系列文章推荐进入专栏按顺序阅读
应用名就相当于我们开发的一组服务的一个统一名字,在我们项目规划中比如我们计划一个名称为Mall的应用,里边包含了OrderServer和ExpressServer。而且应用名必须是唯一的,通常情况下应用名对应了名字空间,比如PHP的命名空间。
上边提到的OrderServer和ExpressServer就是服务所在的进程名。这个可能从概念上可能有点儿不好理解。Server代表的是一个独立的程序,我们发布时至少要给绑定一个ip和定义端口。在Server中实现了相关的功能接口。这个就体现了微服务的独立性。
Servant是服务提供者。也就是他实现了具体的接口,真正实现我们所需要的业务代码。那他实现了哪儿给他规定的接口呢?这个我们后续会说到的很重要的文件 *.tars 通常情况下他在PHP中对应一个类名或者在golang中对应一个struct名称。这个名称是我们在tars文件中规定的interface名称。
以上设计的好处就是从3个方面来尽量避免服务的冲突。因为tars使用名字路由的方式所以不难理解其中为什么不能发布APP.Server.Servant串完全相同的应用。
这部分官方文档写的比较完整,对于所有服务端的开发套路都是一样的。
任何代码的本地调试都是非常有必要的。一般,像对于go语言和c++的服务本地调试就非常方便。查看服务项目目录中有没有conf文件有的话直接
./服务名称 --config=xxx.conf
#如果没有可执行权限先 sudo chmod a+x 服务名称#
其他语言的启动也大同小异。
对于PHP语言没有生成微服务项目的脚手架我们得自己来创建项目目录和文件,有一个入口文件。一般是index.php他的内容页比较固定,是为了启动swoole 中的Server。启动的命令一般是
php index.php --config=config.conf start
这里的config参数是配置文件的路径。在PHP文件中配置文件需要自己创建,文件的内容有以下几种方式可以找到,当然你可以复制我在本教程中的内容进行修改。
服务的部署我们会在后续说明,先来说下加入部署后如何获取配置文件:
如果你的tars框架安装在/usr/local/app中那么服务可以在目录
/usr/local/app/tars/tarsnode/data/
中找到。在这个目录里能够看到 应用名.服务名的目录。进入后可以看到一个conf目录,在conf目录中有
应用名.服务名.config.conf
文件下载到本地即可。如果名称不同一般在conf文件中只有一个文件。
tars的客户端开发比较简单。拿到服务开发者创建的tars文件生成使用tars2xxx就可以生成相应语言的客户端。注意需要配置是否是客户端的字段。比如PHP需要修改文件中的withServant为false
...
'withServant' => false,
...
既然是微服务那客户端调用的时候就需要知道服务的ip和端口。之前我们说过tars可以更具服务的名称进行自动寻址并且可以负载均衡。那么这儿其实有两种方式:
第一种方式使用通信器(Communicator)来自动寻址,这样我们就不用关心具体的ip和port信息。通信器在相应代码客户端生成时就包含了我们直接调用就可以了,非常方便;
第二种方式就是指定ip和port,当然你可以指定服务部署的多个节点的ip和port,框架会自动容灾切换。
当然两种方式使用起来都非常方便,使用第二种方式如果你的服务节点非常多你可能需要在客户端调用方维护一个路由表,稍微麻烦。但是从实践来看觉得直接指定ip和port的方式调用上稍微要快一点,应该是少了通信器寻址的过程。