【七牛弯区课堂】Ruby服务间通信模式

Ruby是计算机语言中的绅士,如果要用一个词来形容,那一定是优雅,有这么一位Rubyist,他的座右铭是“写优雅的程序,做一个优雅的人”,他是来自七牛小伙伴“薄荷”的Co-founder兼CTO谢文威(英文名Vincent)。薄荷的核心系统完全基于Ruby构建,关于Ruby服务间通信模式,他在“七牛弯区课堂”给Ruby爱好者们做了一次分享。

上图是薄荷App服务划分的例子,各子系统(服务)间需要进行各种通信,主要通信种类如下。

一、A服务需要使用B服务的一些数据 共享数据库



应用场景:用户的年龄、性别、身高和体重等数据存储在账号子系统中,其它子系统经常需要使用这些数据。

处理方式:共享数据库

App2直接建立连接访问 App1的数据库。这种方式的优点是性能较好,避免了接口处理和消息封装种种开销,适用于通信特别频繁或者数据量特别大的场合。薄荷的账号和会话数据即采取这种方案。但是,该方式导致服务间有很强的耦合,App2对App1的数据结构有紧密的依赖,导致App1的实现难以变更。

共享数据库方法:

ActiveRecord支持多数据库配置有一些注意的事项:

  • 可以使用关联,不支持join,不支持事务
  • 测试数据最好使用factory_girl
  • 为避免数据混乱,只有一个服务可写

共享模型使用

  • gem model
  • git submodule

二、A服务需要B服务提供某个计算结果 请求结果(同步)



应用场景:计算预算热量需要使用复杂的数学模型,它放在记录子系统中实现,别的系统需要用到相关的数据时,通过一种通信机制拿到计算结果。

处理方式:HttpAPI Call和RPC

1)Http API Call

这是最常见的一种通信方式,服务实现方案成熟可靠,具有服务边际简单清晰的特点,同时适用于外部和内部,但内部调用性能不够好。

使用Http API注意事项

  • 访问安全控制,使用ip限制,token校验等
  • 避免调用层次过深,超时机制
  • Http Client选择(Http Client特别多,主要分为以下几类)

薄荷目前typhoeus和faraday用的较多,原因是:typhoeus底层基于curl,性能比较好,并且支持并行,用异步API的方式,比较可靠,不用担心多线程问题。

2)RPC(Remote Procedure Call)

主要特点:

  • 长连接,避免每次通信创建网络连接,性能较好
  • 对http、消息协议更高效
  • 多种跨语言RPC方案,如thriftmsgpack_rpc

RPC管理

性能上有一定优势,需要权衡其复杂度,复杂度在于服务实现方案和管理方法。

  • 服务端并发模式
  • 高可用方案,可用HAProxy
  • 平滑部署

RPC的用法比较少见,更多地用于跨多语言的团队,当公司使用多种语言且需要很好地整合时,RPC则是一种比较成熟的方案。

三、A服务需要B服务处理一项任务 请求任务处理(异步)



应用场景:在购物模块里面,一个订单发生支付后,需要给用户推送一些信息,比如发短信、邮件和手机推送等。发送消息可能需要比较长的时间才能完成,请求方不需要等待处理结果。

处理方式:消息队列

1)传统消息队列系统RabbitMQ/Active MQ

MQ可以有降低服务之间耦合度,通常用于服务之间的异步处理(传统MQ有更丰富的处理机制),传统MQ ruby服务实现方案,可以参考sneakers, hutch, rack-ampq, rack-rabbit。

2)在单个应用内部常常使用基于redis的轻量消息队列

resque&sidekiq

3)sidekiq-postman

它是Vincent写的一个gem,基于sidekiq轻量消息队列解决方法,简单实用,可以跨应用请求sidekiq任务处理,以下是其核心代码:

四、A服务发生某件事,通知B和C进行处理 订阅和通知



应用场景:比如账号基本信息,基于性能考虑,在子系统中存储了用户名副本。当用户名在账户子系统中发生变化时,需要通知其它子系统更新。

处理方式:消息队列

Sidekiq-driver 是Vincent正在写的基于sidekiq轻量订阅和通知解决方法的gem,大家可以尽情期待这个项目的开源。

【七牛弯区课堂】是七牛为广大开发者提供的技术实践分享课堂,后续将定期邀请各技术社区的专家进行分享。以上内容即是Ruby China社区在“七牛弯区课堂”的处女作。欢迎各技术社区的小伙伴来【七牛弯区课堂】分享实践心得,也感谢各位为技术社区所贡献的力量。

时间: 2024-11-05 14:30:53

【七牛弯区课堂】Ruby服务间通信模式的相关文章

服务间通信

浅谈服务间通信[MQ在分布式系统中的使用场景] https://www.cnblogs.com/mokafamily/p/9061322.html 解决的问题 一项技术的产生必然是为了解决问题而生,了解了一项技术解决的问题,就能够很轻松的理解这项技术的设计根本,从而更好地理解与使用这项技术. 消息中间件和RPC从根本上来说都是为了解决分布式系统的服务间通信问题,我们的服务从最初的单体应用发展到SOA架构到现在的微服务架构,必不可少的就是服务间通信,但从最初的设想,服务间通信仅仅就是一次请求响应调

七牛大数据平台的演进与大数据分析实践--转

原文地址:http://www.infoq.com/cn/articles/qiniu-big-data-platform-evolution-and-analysis?utm_source=infoq&utm_medium=popular_widget&utm_campaign=popular_content_list&utm_content=homepage 七牛大数据平台的演进与大数据分析实践 (点击放大图像) 图 1 大数据生态体系 看着图 1 大家可能会感到熟悉,又或者会

七牛对用户使用webp图片格式的使用建议

Qiniu 七牛问题解答 Chrome浏览器是可打开WebP格式的.可是并非全部的浏览器都支持webp格式,比如360.ie等浏览器是不支持的. WebP格式,谷歌(google)开发的一种旨在加快图片载入速度的图片格式.图片压缩体积大约仅仅有JPEG的2/3.并能节省大量的server带宽资源和数据空间.Facebook Ebay等知名站点已经開始測试并使用WebP格式. 但WebP是一种有损压缩.相较编码JPEG文件,编码相同质量的WebP文件须要占用很多其它的计算资源. Chrome浏览器

基于云开发开发 Web 应用(五):关于七牛的一些问题

关于七牛 在第一篇文章中,我提到,项目的自动部署是放在 now.sh 上,以方便预览.但出于用户体验和速度的考虑,我们选择了国内的七牛云作为页面的承载.不过,七牛毕竟是一个对象存储,而不是一个专业的 Static Hosting 业务,在使用上出现了不少问题. 七牛的 Bucket 名规则 和绝大多数的云计算厂商一样,七牛也使用了 Bucket 来作为存储的单元. 由于这个项目要挂 Linux.cn 的二级域名,于是我便让老王(@wxy)创建了一个 Bucket,绑定域名,并通过七牛自带的权限控

七牛融合 CDN 管理服务上线,携手 oschina 社区送券福利升级!

为解决单一CDN存在的质量.稳定性.服务不透明等问题,七牛特别推出融合CDN管理服务,全面覆盖各种宽带线路的同时,真正做到对CDN有控制能力的整合,以及全面的监控与分析.帮助开发者根据使用场景选择最优的加速线路,在用户之前发现问题,并及时解决问题,确保体验的流畅不间断. 马上体验,请点击这里 借此之机,七牛特携手Ruby China社区,给大家派送福利,放送七牛价值200元现金券30张.见者有份,先到先得. 最后,感谢广大开发者一直以来对七牛的支持,七牛也将继续努力,不断完善产品,为大家提供功能

七牛国内首推鉴黄服务,6-8月 免费用

作为移动互联网行业最为热门的创业领域,在过去的几年中,移动社交类App和UGC类App大量涌现,因此在尽力确保产品定位差异化的同时,打造健康的社交生态也成为这些App能得以获得长期发展的关键.然而,由于这类App每天生成的图片信息量通常很大,并且有大量的色情图片混杂其中,所以高效准确地鉴别和剔除这些淫秽色情信息成为一项十分艰巨的任务. 基于此,七牛云携手专注于图像识别技术的图普科技推出了图片鉴黄服务(nrop),帮助七牛用户有效判断保存在七牛云的图片是属于色情.性感还是正常,并给出判断的分数,分

从七牛服务下载PDF文件

/** * 从七牛下载PDF文件 * @param request * @param response * @param exhiId * @throws MalformedURLException */ @RequestMapping("/loadCanZhanHan") public void downloadNet(HttpServletRequest request, HttpServletResponse response,String exhiId) throws Malf

UEditor+七牛,实现图片直连上传

最近做的项目,涉及到使用富文本编辑器,我选择了百度的UEditor.同时,我们的图片放在七牛云存储上.关于这两者间的集成,我写下一些个人的经验,与大家分享. 图片上传方案 目前来说,Web端基于七牛等云存储的图片上传方式分为以下两种: 1. 上传图片至服务端,再将数据转发至七牛. 通过服务端接受用户上传的内容,同时可以对内容进行有效性审核,拒绝不合规范的内容,然后从服务端将内容上传至七牛. 这种方法可以有效控制并记录用户提交的内容,但同时也增加了服务器的运行压力. 2. 直接上传图片至七牛,然后

QiniuUpload- 一个方便用七牛做图床然后插入markdown的小工具

最近一段时间有用markdown做笔记,其他都好,但是markdown插入图片挺麻烦的,特别是想截图之后直接插入的时候.需要首先把图片保存了,然后还要上传到一个地方生成链接才能插入.如果有个工具可以直接上传图片或者截图生成markdown可以用的链接就好了.所以决定自己下班后写一个,不过自己挺菜的,也就能用,代码完全是渣不能看...在这里把自己的思路还有其中遇到的问题记录一下. 首先需要选一个图床,我选了七牛,主要是一个是有免费的空间,加上提供了SDK,这样就能写程序上传了.语言挑了C#,因为感