yar粗略使用记录
yar是鸟哥(laruence)开发的一个并行的RPC框架。据说sina weibo已经在大规模使用这个框架了。今天初步使用了下,觉得还是挺爽的一个工具。
什么情况适用这个工具呢?比如一般你有个微博这样的一个项目,这个项目的特点是有多个子项目组成,即有web版,手机客户端版,wap版等。
一般有这么多个子项目,且项目的页面逻辑是分开的,我们自然会建立多个项目,然后分拆给不同的人负责。
但是呢,这么多版本,它的功能实际都是相似的,比如必须都有个获取好友的功能,必须有个获取好友动态的接口,那么虽然这个接口的表现形式可能是不一样的,但是它的数据逻辑是一样的,如果使用MVC的分层模型来说,Controller和View层各个项目是不一样的,但是Model层实际上是完全相同的。那么怎么能让他们使用同样的model层呢?这个时候就想到了使用RPC。使用RPC就能让各个项目像访问自己的Model层一样访问RPC提供的服务了。换句话说,RPC可以提供业务数据的封装。这个对于公司来说,很爽。为毛呢?因为把业务数据一封装,写一篇足够完善的文档解释提供的rpc文章,这样招一批实习生就只要套套模板就能实现一个很完整的项目了。
需要考虑什么?但是呢?RPC本质上也是一个网络请求,既然是请求,对于效率来说,就需要考虑了。
首先,基于什么协议层来做网络传输呢,yar是基于http来做的。 其次,能不能多个请求并发呢?当然可以,yar实现了多个请求并发执行。这里就直接套用yar的文档例子做个演示:
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,
Yar_Concurrent_Client::call("http://host/api/", "some_method", array("parameters"), "callback", array(YAR_OPT_PACKAGER = "json"));
Yar_Concurrent_Client::call("http://host/api/", "some_method", array("parameters"), "callback", array(YAR_OPT_TIMEOUT=
//custom timeout Yar_Concurrent_Client::loop("callback", "error_callback"); //send the requests,
再其次,缓存
既然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服务程序,这个程序大致像这样:
有的人说我希望这个提供rpc的类是我自定义的,那么你就可以使用REQUEST将class参数传入进来,然后在服务端newREQUEST将class参数传入进来,然后在服务端newclass,再使用Yar_Server封装,这样就能加上签名验证,就能将所有的Model类作为rpc提供给客户端了。
4 客户端使用Yar_Client来调用服务端的rpc服务。
爬虫老崩溃咋整 ?retrying模块了解一下! retrying模块的学习 我们在写爬虫的过程中,经常遇到爬取失败的情况,这个时候我们一般会通过try块去进行重试,但是每次都写那么一堆try块,真的是太麻烦,所以今天就来说一个比较pythonic的模块,retrying.
YII2 rightJoin innerJoin leftJoin 关联查询一对多的数据后 结果缺少很多数据--大坑 --原因 是一对多关系被查询处理成了一对一的数量 --解决 给一对多的一数据中的id重命名接口 或者不要id 但是id一般都需要用于更新 删除等参数 购买阿里云服务器和其他相关服务都可以领取优惠券, 有的产品5折优惠哟, 领取方式:进入链接一键领取全部 注意, 领取的优惠券30天内有效,尽快使用:https://promotion.
相关文章
- 春节的10个传统习俗你知道多少?快用便签记录
- 记录一次 Arthas 使用
- mock js使用方法简单记录
- 每天首次登陆记录设备信息
- arthas使用示例:tt记录指定方法每次调用的入参和返回值
- C# 使用Log4Net记录日志(基础篇)
- 在云环境上使用SLF4J对Java程序进行日志记录
- C# 使用Log4Net记录日志(进阶篇)
- C# 使用Log4Net记录日志(基础篇)
- 使用工作流更新子记录
- Nginx安装学习使用具体记录
- 使用echart的雷达图的时候,如果文字越界的解决办法记录,标签文字自动换行
- gorm的使用以及错误记录
- ubuntu 系统问题记录
- Linux以及Android开发中的小技巧和长繁命令记录收集
- 时间记录:爱今天 APP 使用分享
- 时间记录 APP:爱今天脑图
- 刷题记录:NC16692[NOIP2001]求先序排列
- springboot单元测试采坑记录
- 【注解汇总】操作日志记录注解
- springboot如何使用log4j记录日志
- Osmread安装与pyproj导入名称CRS报错记录
- 使用$remote_user字段记录访问NGINX的用户