不涉及其他语言和工具,我们就从PHP本身来说说如何实现服务治理。本猿已经写好了服务治理https://github.com/CrazyCodes...治理什么?这个专业术语很容易发现,被治理的就是服务,服务就是我们的项目。管理这些服务解决方案称为服务治理。现在服务器上有四个服务,分别是UserServiceShopServiceGoodsServiceLiveService。我们称这些服务为服务提供者(都是提供内部服务的应用),调用服务应用。我们称他们为服务消费者,比如User-ApiShop-ApiGoods-ApiLive——ApiService是对内服务,Api是对外服务的图片来源http://blog.csdn.net/suifeng3……服务治理的问题是如何管理这四个服务,如何让它们对外服务,如何监控服务基于流程的实现在实现服务治理之前,需要了解以下知识点:thriftrpcswoolethrift可以暂时理解为一种可以用来调用其他开发语言。一种无需了解底层网络技术即可在远程计算机程序上请求服务的协议。RPC协议假定存在某种传输协议,例如TCP或UDP,以在通信程序之间承载信息数据。在OSI网络通信模型中,RPC跨越传输层和应用层。RPC使开发包括网络分布式多道程序在内的应用程序变得更加容易。RPC采用客户端/服务器模型。请求者是客户端,服务提供者是服务器。首先,客户端调用进程向服务进程发送带有进程参数的调用消息,然后等待回复消息。在服务器端,进程一直处于休眠状态,直到调用消息到达。当调用消息到达时,服务器获取流程参数,计算结果,发送回复消息,然后等待下一个调用消息。最后客户端调用进程收到回复消息,得到处理结果,然后调用继续执行。服务之间的通信可以通过RPC通信,当然也可以选择UDP等swoolePHP圈的跨世纪产品。之所以使用它是因为Swoole本身就支持RPC通信,所以本章我们使用SwooleRpc的方式来实现消费者与服务提供者之间的通信,是RPC通信服务治理中非常重要的一环。需要让消费者A无感知的调用服务商A、B、C。当然,这在实际情况中是不可能的。根本不在一个内存空间,我们需要自己模拟这个用法$userSerivce=$client->client('UserService');$result=$userSerivce->getUserInfo(['user_id'=>100]);var_dump($结果);消费者中没有UserService,也没有getUserInfo方法。这些都在服务提供商的应用中。怎么称呼他们?首先用php的__call方法拦截一个不存在的方法publicfunction__call($name,$arguments){$client=newClientRpc($this->serviceName);$response=$client->send($this->serviceName,$name,$arguments);返回(json_decode($response,true));}拿到之后调用自己写的send方法,swoole出来classClientRpc{protected$client;公共函数__construct($service_name,$centerConfig){$this->client=new\swoole_client(SWOOLE_SOCK_TCP);$center=Dispatcher::loadBalance($service_name,$centerConfig);$this->client->connect($center['ip'],$center['port'],0.5);}publicfunctionsend($service,$action,$arguments){$request=newRequest();$request->setService($service);$request->setAction($action);$request->setParameters($arguments[0]);//将参数重新整理成自己想要的格式,最后转成json发送给服务商$this->client->send(json_encode((array)$request));返回$this->client->recv();}publicfunction__destruct(){$this->client->close();取消设置($this->client);}}感谢周孟康[https://mengkang.net/]
