Screen_Shot_2014-05-30_at_1.37.33_PM

智能工程博客

为高吞吐量服务伸缩延迟作业

通过Tafadzwa Pasipanodya2019年9月3日上午8:14:29

多租户SaaS中经常面临的一个挑战是确保每个租户公平地分享平台的资源。在Salsify,我们必须在我们的拖延工作基于后台任务执行基础设施。因为我们的客户有不同的用例,他们倾向于运行不同复杂度和大小的任务。随着时间的推移,我们制定了租户公平的工作预留策略,这使得我们的工作系统很难扩大,甚至不可能扩大。在这篇文章中,我将讨论我们如何通过扩展Delayed Job来解决租户公平问题。

阅读更多→

更安全的轨道控制台

通过蒂莫西苏2018年2月5日下午1:49:06

一个更安全的Rails

Rails开发的优点和缺点之一是能够使用Rails控制台调试问题和检查数据。控制台通常在生产环境中使用,因为它是收集任何问题信息的最快方法。强大的功能带来了巨大的责任:通过删除模型的所有记录试图重置本地开发人员环境的命令可以很容易地输入到生产控制台。此外,对于可能未知的剪贴板数据(由于“copy-on-select”),任何带有换行符的有效Ruby代码在粘贴时会自动执行。任何删除模型、排队事件和意外或有意更新记录的用户都应该知道其中的含义。在Salsify,我们已经解决了这个问题,结合了开源和自制的改进,并把它们变成了一个方便的工具宝石继续阅读,了解更多!

阅读更多→

在Avro冒险

通过蒂姆·珀金斯2016年6月13日上午8:11:57
作为我们最近采用的微服务架构的一部分Avro作为数据序列化格式。在合并Avro的过程中,我们创建了一个用于定义Avro模式的Ruby DSL,开发了一个用于从Avro模式生成模型的gem,并在Rails中重新实现了Avro模式注册表。我们是怎么做到的……
下面的情况可能很熟悉:在Salsify,我们正在向微服务体系结构迈进。你也这样做过吗?你想这么做吗?对于初创公司来说,这是一个很常见的过程,他们首先构建了一个整体的应用程序,发现了非常适合市场,然后需要扩展应用程序和团队。在Salsify,我们已经有相当多的服务在原来的整体之外运行,但几个月前,我们开始定义一个架构,我们应该如何打破整体并构建新的核心服务。
自然,我们定义的体系结构的一部分就是服务应该如何彼此通信。对于同步通信,我们决定坚持使用使用JSON的HTTP REST api。对于异步通信,我们选择Apache卡夫卡
我们评估了几种可以在Kafka中使用的数据序列化格式。主要的竞争者是Apache AvroJSON协议缓冲区Apache节俭.对于异步通信,我们想要一种更紧凑、处理速度更快的数据格式。异步数据可能存在的时间更长,相同的消息可能由多个系统处理,因此版本处理很重要。序列化系统还应该提供额外的好处,如验证和强类型。
在这一点上,我应该说明我们主要是一个Ruby商店。我们喜欢自己选择的富有表现力的动态语言,所以选择过程中的一个重要因素是框架与Ruby的集成程度。从这篇文章的标题来看,哪个选项会胜出并不令人惊讶……

阅读更多→

延迟作业队列公平

通过罗伯特•考夫曼2016年5月23日下午1:06:13
在Salsify,我们使用拖延工作广泛用于处理异步任务。这对我们来说很有效,因为这意味着我们可以更快地完成网络请求,从而产生响应更快的web应用程序,同时将非紧急任务转移到后台任务中。在大多数情况下,延迟作业(和类似的作业排队机制,如Resque芹菜等)提供一个简单而高效的方法来运行后台工作,确保完成后台工作,并提供一个框架来扩展您的计算资源以处理预期的工作负载。除此之外,这些框架还为动态扩展资源创造了直接的机会,以处理工作负载的峰值。例如,我们使用一个名为HireFire以基于排队的工作动态扩展延迟作业工作池。也就是说,我们可以满足工作量变化的需求,同时保持我们的托管成本合理。

但是,尽管运行后台作业有这些优点,但在实际使用中,您仍然可能遇到需要仔细处理的具有挑战性的情况。可能出现的一类问题是在用户之间实现资源使用的公平性。

阅读更多→

使用vim/tmux的Ruby on Rails

通过丹尼尔饶舌的人2015年11月25日上午8:43:53



介绍


在我的开发生涯中,使用vim一直是最有效的提高生产率的方法之一。我进入vim是作为一个低级的系统管理员,因为它似乎是交易的工具。从那里,我的知识增长,现在它是我选择的编辑几乎所有的项目。这篇文章将介绍我目前的Ruby on Rails开发设置。我想给@tpope一个巨大的欢呼,他创造了大量令人惊叹的插件,所有这些插件都值得成为你日常工作的一部分。


阅读更多→

追求可扩展的Ruby离线排序:Ruby内存管理的冒险

通过马修交叉2015年11月5日上午8:15:00

分院帽

在Salsify,我们的许多客户定期将大量的表格产品数据导入系统。在导入过程的不同部分处理此数据之前,需要对其进行排序。由于我们在Heroku上运行,内存是一种稀缺资源。对这些任意大的表格数据文件进行排序需要非常小心。一次性将所有数据读入内存会导致执行时间非常长,因为Ruby垃圾收集器的压力会增加,并且会占用同一系统上的其他进程的内存。

我们需要一种方法来使用可预测的内存量对大文件进行排序。像地图简化这样的大数据技术对于我们的数据规模来说是过度的。创建一个线下的宝石这样做是相当冒险的,迫使我深入研究Ruby如何管理内存,最终需要专门的堆实现。

阅读更多→

最近的帖子

    Baidu