屏幕截图2014-05-30下午1:37.33

SALSIFY智能工程博客

更安全的Rails控制台

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

更安全的Rails控制台\u Salsify.jpeg

Rails开发的好处和坏处之一是能够使用Rails控制台调试问题和检查数据。控制台通常用于生产环境,因为它是收集任何问题信息的最快方法。强大的功能带来巨大的责任:通过删除模型的所有记录来尝试重置本地开发人员环境的命令可以很容易地输入到生产控制台中。此外,使用可能未知的剪贴板数据(感谢“选择时复制”),任何带换行符的有效Ruby代码都将在粘贴后自动执行。任何意外或有意删除模型、排队等待事件和更新记录的用户都应了解其含义。在Salsify,我们结合使用开源和自制改进解决了此问题,并将其应用到方便的宝石.继续阅读了解更多!

阅读更多→

有植物学家的花式树木

通过基思·威廉姆斯2017年6月14日下午2:21:28

您是否曾经想要构建自己的计算器、查询语言,甚至网络浏览器?解析器和转换器对于这些应用程序和更多应用程序非常有用,多亏了像Salsify自己的植物学家这样的工具,您不需要成为编译器设计专家就可以使用它们。

阅读更多→

用余烬组织数据流

通过德弗斯塔尔马奇2017年4月11日下午1:38:23

使用Ember进行开发的最重要的核心原则之一是“数据向下,操作向上”。在各种Ember社区中,您可能会看到这个概念缩写为DDAU。DDAU的主要前提是数据应该向下流经您的组件层次结构(通过各种组件并可能被各种组件修改),而对所述数据的更改应通过操作通过该层次结构进行传播备份。

阅读更多→

阿夫罗历险记

通过蒂姆·帕金斯2016年6月13日上午8:11:57
作为我们最近采用的微服务体系结构的一部分阿夫罗作为一种数据序列化格式。在合并Avro的过程中,我们创建了一个用于定义Avro模式的Ruby DSL,开发了一个用于从Avro模式生成模型的gem,并在Rails中重新实现了一个Avro模式注册表。下面是我们如何做到这一点的。。。
这里有一个可能很熟悉的情况:在Salsify,我们正朝着微服务体系结构迈进。你也这样做了吗?你在考虑这样做吗?对于那些首先构建单片应用程序,找到了很好的市场适合度,然后需要扩展应用程序和团队的初创公司来说,这是一个非常常见的进展e已经有相当多的服务运行在原始的monolith之外,但几个月前,我们开始定义一个架构,以确定我们应该如何对monolith进行切分并构建新的核心服务。
当然,我们定义的体系结构的一部分是服务之间应该如何通信。对于同步通信,我们决定坚持使用讲JSON的HTTP REST API。对于异步通信,我们选择阿帕奇·卡夫卡.
我们评估了Kafka使用的几种数据序列化格式阿帕奇·阿夫罗,JSON,协议缓冲区阿帕奇节俭。对于异步通信,我们需要一种更紧凑、处理速度更快的数据格式。异步数据可能会保留更长时间,并且同一消息可能会由多个系统处理,因此版本处理非常重要。序列化系统还应提供验证和强键入等其他好处。
在这一点上,我应该指出,我们主要是一家Ruby商店。我们喜欢我们选择的富有表现力、动态的语言,因此选择过程中的一个重要因素是框架与Ruby的集成程度。根据本文的标题,哪一个选项是赢家并不奇怪。。。

阅读更多→

延迟作业队列公平性

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

但是,尽管运行后台作业具有所有优势,但在实际使用中,您仍然可能遇到需要深思熟虑处理的挑战性情况。可能出现的一类常见问题是在用户之间实现资源使用的公平性。

阅读更多→

SQL和ElasticSearch中的高效分页

通过乔希·西尔弗曼2016年4月20日上午10:06:37

许多web界面允许用户轻松地浏览大量数据集。实现获取这些页面的数据库查询对程序员来说也很容易,通常需要抵消极限对于SQL和从…起大小在弹性搜索的情况下。虽然这种方法对用户和程序员来说很容易,但是这种分页查询对于SQL、Elasticsearch和其他数据库引擎来说隐藏成本很高。

在Salsify,我们在实现一个功能时遇到了这个问题,该功能允许用户在一个大的、经过大量筛选和排序的集合中单步遍历记录。我们必须实现一个高效的分页解决方案,该解决方案可以在SQL和ES数据存储中工作。在这篇文章中,我们将介绍一种有趣的技术,使分页对数据集有效大型数据集的数据库。具体来说,我们将研究SQL中的实现,以及如何将此方法转换为Elasticsearch。

阅读更多→

好篱笆:使用CSS模块的邻里风格

通过丹·弗里曼2016年2月24日上午9:57:55

你有没有注意到没有人会写“我们如何命名X公司的Ruby变量“博客帖子?没有人会在黑客新闻的头版刊登“我结合了这两种方法命名策略,突然我的JavaScript就可以维护了!“然而,当谈到CSS时,开发人员都在关注命名策略。我们对本周流行的BEM、SMACSS、OOCSS、SUIT或任何其他大写字母表示赞赏。这是为什么?

阅读更多→

使用vim/tmux实现Ruby-on-Rails

通过丹尼尔·皮特2015年11月25日上午8:43:53



介绍


使用vim一直是我开发生涯中最大的生产力提升工具之一。我作为一名低级的系统管理员进入vim,因为它似乎是行业的工具。从那以后,我的知识不断增长,现在它几乎是我所有项目的首选编辑器。这篇文章将介绍我目前为Ruby on Rails开发所做的设置。我想他创造了大量令人惊叹的插件,所有这些插件都值得成为你日常工作流程的一部分。


阅读更多→

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

通过马休·克洛斯2015年11月5日上午8:15:00

分拣帽

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

我们需要一种使用可预测内存量对大文件进行排序的方法。像map reduce这样的大数据技术对于我们的数据规模来说是杀伤力过大。创建一个离线排序gem要做到这一点,结果是相当冒险的,这迫使我深入研究Ruby如何管理内存,最终需要一个专门的堆实现。

阅读更多→

延迟的工作人员池

通过乔尔特克尔2015年8月19日下午12:05:07

泳池派对在Salsify,我们在Heroku运行大部分基于Ruby on Rails的基础设施彪马网络工作者从Heroku 2X dynos到更强大的HerokuPX动态传感器并且看到了显著的性能改进:平均响应时间减少了51%,第99百分位响应时间减少了59%。在此基础上,我们做了一些运行内存/CPU密集型的实验延迟工作在PX dynos上,平均作业执行时间减少了43%,第99百分位作业执行时间减少了66%,这同样令人鼓舞。这是一个伟大的概念证明,但只有一个八核的PX dyno正在使用。为了以经济高效的方式将其投入生产,我们必须找出如何利用所有的核心在dyno上。

阅读更多→

最近的职位

    Baidu