yar粗略使用记录

简介:

yar是鸟哥(laruence)开发的一个并行的RPC框架。据说sina weibo已经在大规模使用这个框架了。今天初步使用了下,觉得还是挺爽的一个工具。

什么情况适用这个工具呢?

比如一般你有个微博这样的一个项目,这个项目的特点是有多个子项目组成,即有web版,手机客户端版,wap版等。

一般有这么多个子项目,且项目的页面逻辑是分开的,我们自然会建立多个项目,然后分拆给不同的人负责。

但是呢,这么多版本,它的功能实际都是相似的,比如必须都有个获取好友的功能,必须有个获取好友动态的接口,那么虽然这个接口的表现形式可能是不一样的,但是它的数据逻辑是一样的,如果使用MVC的分层模型来说,Controller和View层各个项目是不一样的,但是Model层实际上是完全相同的。那么怎么能让他们使用同样的model层呢?这个时候就想到了使用RPC。使用RPC就能让各个项目像访问自己的Model层一样访问RPC提供的服务了。换句话说,RPC可以提供业务数据的封装。这个对于公司来说,很爽。为毛呢?因为把业务数据一封装,写一篇足够完善的文档解释提供的rpc文章,这样招一批实习生就只要套套模板就能实现一个很完整的项目了。

需要考虑什么?

但是呢?RPC本质上也是一个网络请求,既然是请求,对于效率来说,就需要考虑了。

首先,基于什么协议层来做网络传输呢,yar是基于http来做的。

其次,能不能多个请求并发呢?

当然可以,yar实现了多个请求并发执行。这里就直接套用yar的文档例子做个演示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
function  callback( $retval , $callinfo ) {
      var_dump( $retval );
}
 
function  error_callback( $type , $error , $callinfo ) {
     error_log ( $error );
}
 
Yar_Concurrent_Client::call( "http://host/api/" , "some_method" , array ( "parameters" ), "callback" );
Yar_Concurrent_Client::call( "http://host/api/" , "some_method" , array ( "parameters" ));   // if  the callback is not specificed,
                                                                                // callback in loop will be used
Yar_Concurrent_Client::call( "http://host/api/" , "some_method" , array ( "parameters" ), "callback" , array (YAR_OPT_PACKAGER => "json" ));
                                                                                //this server accept json packager
Yar_Concurrent_Client::call( "http://host/api/" , "some_method" , array ( "parameters" ), "callback" , array (YAR_OPT_TIMEOUT=>1));
                                                                                //custom timeout
 
Yar_Concurrent_Client::loop( "callback" , "error_callback" ); //send the requests,
                                                            //the error_callback is optional
?>

再其次,缓存

既然Model层已经统一了,复用性这么高,那么缓存做在model层就很有用了,因为命中率很高嘛。

缓存yar可没有帮你做,但是我们基于yar做个通用的缓存是很容易的事情,比如你可以使用文件缓存做容灾处理,使用redis做内容缓存加速。

再再其次,安全

提供rpc的机器不能对外提供服务,需要使用签名机制,那么调用rpc的客户端就需要有个做签名的过程,提供rpc的服务端就需要有个解签名的过程。

那么可以这么搞:

意思就是做一个通用的SDK安装在客户端,然后各个项目调用这个SDK,这个SDK可以做什么事情呢?

1 RPC缓存

2 优化调用接口

3 做日志统计

4 做签名验证

怎么搭建?

步骤在github上都已经说很清楚了:

1 php安装yar扩展(可选择安装msgpack扩展)msgpack扩展是一个高效的二进制打包协议。rpc的服务端和rpc的客户端都需要安装这个扩展。

2 服务端写model类

3 服务端提供对外的rpc的api服务程序,这个程序大致像这样:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
class  API {
     /**
      * the doc info will be generated automatically into service info page.
      * @params
      * @return
      */
     public  function  api( $parameter , $option  = "foo" ) {
     }
  
     protected  function  client_can_not_see() {
     }
}
  
$service  = new  Yar_Server( new  API());
$service ->handle();
?>

有的人说我希望这个提供rpc的类是我自定义的,那么你就可以使用REQUESTclassnewREQUEST将class参数传入进来,然后在服务端newclass,再使用Yar_Server封装,这样就能加上签名验证,就能将所有的Model类作为rpc提供给客户端了。

4 客户端使用Yar_Client来调用服务端的rpc服务。

目录
相关文章
|
13天前
|
存储 关系型数据库 分布式数据库
PostgreSQL 18 发布,快来 PolarDB 尝鲜!
PostgreSQL 18 发布,PolarDB for PostgreSQL 全面兼容。新版本支持异步I/O、UUIDv7、虚拟生成列、逻辑复制增强及OAuth认证,显著提升性能与安全。PolarDB-PG 18 支持存算分离架构,融合海量弹性存储与极致计算性能,搭配丰富插件生态,为企业提供高效、稳定、灵活的云数据库解决方案,助力企业数字化转型如虎添翼!
|
11天前
|
存储 人工智能 搜索推荐
终身学习型智能体
当前人工智能前沿研究的一个重要方向:构建能够自主学习、调用工具、积累经验的小型智能体(Agent)。 我们可以称这种系统为“终身学习型智能体”或“自适应认知代理”。它的设计理念就是: 不靠庞大的内置知识取胜,而是依靠高效的推理能力 + 动态获取知识的能力 + 经验积累机制。
390 134
|
11天前
|
存储 人工智能 Java
AI 超级智能体全栈项目阶段二:Prompt 优化技巧与学术分析 AI 应用开发实现上下文联系多轮对话
本文讲解 Prompt 基本概念与 10 个优化技巧,结合学术分析 AI 应用的需求分析、设计方案,介绍 Spring AI 中 ChatClient 及 Advisors 的使用。
491 132
AI 超级智能体全栈项目阶段二:Prompt 优化技巧与学术分析 AI 应用开发实现上下文联系多轮对话
|
2天前
|
人工智能 移动开发 自然语言处理
阿里云百炼产品月刊【2025年9月】
本月通义千问模型大升级,新增多模态、语音、视频生成等高性能模型,支持图文理解、端到端视频生成。官网改版上线全新体验中心,推出高代码应用与智能体多模态知识融合,RAG能力增强,助力企业高效部署AI应用。
205 0
|
12天前
|
人工智能 Java API
AI 超级智能体全栈项目阶段一:AI大模型概述、选型、项目初始化以及基于阿里云灵积模型 Qwen-Plus实现模型接入四种方式(SDK/HTTP/SpringAI/langchain4j)
本文介绍AI大模型的核心概念、分类及开发者学习路径,重点讲解如何选择与接入大模型。项目基于Spring Boot,使用阿里云灵积模型(Qwen-Plus),对比SDK、HTTP、Spring AI和LangChain4j四种接入方式,助力开发者高效构建AI应用。
489 122
AI 超级智能体全栈项目阶段一:AI大模型概述、选型、项目初始化以及基于阿里云灵积模型 Qwen-Plus实现模型接入四种方式(SDK/HTTP/SpringAI/langchain4j)
|
5天前
|
存储 JSON 安全
加密和解密函数的具体实现代码
加密和解密函数的具体实现代码
234 136
|
23天前
|
机器学习/深度学习 人工智能 前端开发
通义DeepResearch全面开源!同步分享可落地的高阶Agent构建方法论
通义研究团队开源发布通义 DeepResearch —— 首个在性能上可与 OpenAI DeepResearch 相媲美、并在多项权威基准测试中取得领先表现的全开源 Web Agent。
1574 87