辛德蕾拉|写了多年软件,我在软件性能上学到的 4 点教训( 三 )
四、从性能的基础出发能简化架构我发现的另一个观点是 , 相对于从指定的功能级别开始优化 , 从内核开始高性能设计可以最终极大地简化软件项目的体系架构 。
在我们编写 Sorbet 之前 , Stripe 进行了一些内部 Ruby 代码的静态分析 , 该分析是 Sorbet 整体分析(全局常量解析)有限的一小部分 。 这些代码分析由 Ruby 实现 , 构建在 Parser gem 之上 , 性能比 Sorbet 明显慢得多 , 并且由于 Ruby 的 GVL 限制 , 使得并行化非常有很大的挑战性 。 为解决并行化问题 , 我们最终使用基于fork的并行化构建了一个日趋复杂的缓存解决方案 , 只是为了保持运行时间在可接受的范围内 。 由于大大提高基准性能以及简化了系统内部并行性 , Sorbet 能够完胜那写没有使用缓存策略的系统 。
有一个普遍的现象是:尝试为速度较慢的系统提升性能通常会增加系统复杂性 , 例如复杂的缓存系统、分布式系统或为进行详细的增量计算而设计的明细记录系统 。 这些功能都会增加复杂性 , 可能引入新类型的 bug , 还会增加额外的开销成本 , 系统性能会下降甚至更糟 , 从而使问题进一步加剧 。
如果从一开始软件性能就够快 , 可能根本不需要这些附加中间层就可获得可接受的总体性能 , 而且相同的性能水平下 , 软件系统架构也会简单很多 。
以 Sorbet 为例 , 虽然我们确实使用了一些缓存策略 , 而且 Sorbet 的 LSP 服务在执行增量重新类型检查时有些复杂 , 但是与我所熟悉的使用同类类型检查器的系统相比 , 我们的系统还是要简单很多 。 我们能获得这种简单性在很大程度上是因为 Soebet 的基本性能本身就不错;Sorbet 不必费时费力地保存工作中间结果 , 因为它通常可以很快地就能完成工作 。
Sorbet 一个非常好的特性是它的缓存格式不存在向前或向后兼容的问题:Sorbet 的发行版本可以获取自己版本 git commit 的 sha1 值 , 并且会忽略其他不同发行版本生成的缓存文件 。 这一决定意味着缓存格式可以非常简单和轻量级 , 并且我们不必担心数据迁移或者兼容性问题 。 当然 , 缺点就是每次我们在发布一个版本时 , 因为启用时暂未加载使用缓存数据 , 用户会短暂地感觉到软件性能有所降低 , 这一现象会在新的缓存加载成功后消失 。 由于缓存仅仅保存几秒钟 , 并且软件冷启动时间仍小于 20 秒 , 因此我们认为这是一个可以接受的折中方案 , 因为它带来了简单性的同时也降低了 bug 发生概率 。
相比之下 , 我有几个朋友在 Dropbox 公司从事 MyPy 的部署工作 , 它们在未加载缓存启动运行系统时 , 可能需要十分钟甚至更长的时间 。 这种巨大的性能差异意味着他们使用着完全不同的算法设计 , 并且不得不去更加担心何时以及当前是否可以使缓存失效 , 这就增加了性能维护的复杂性 , 而这些我们都能完全避免 。
随着 Stripe 的 monorepo 的持续增长 , 仅仅依赖 Sorbet 的原始性能是远远不够的 , 我希望 Sorbet 最终会支持更加复杂的缓存以及增量执行;原始性能强并不是万能的 。 但是 , 一定要在给定规模水平下讨论这个问题 , 具体问题具体分析 , 这一点很重要 。 通过基本简单地设计就可以达到像 Sorbet 这样的性能水平 , 所以我们不要低估这种基本性能设计所带来的收益 。
总结我相信 , 我们在设计和构建软件时常常会低估性能带来的影响 。 在软件设计时 , 我们已经习惯于遵从工具或者标准库的固定选择 , 而忽略一些因素对软件性能的影响 , 也不会考虑这么做是否值得 。
到 2020 年 , Sorbet 软件仍然可以运行的很流畅 , 响应也很快 , 因此我们之前付出的努力都是值得的 。 你印象中有哪些软件 , 因为其优越的性能让你感到震惊 , 并大大提高了你的生产力?你能说出几个吗?
【辛德蕾拉|写了多年软件,我在软件性能上学到的 4 点教训】
推荐阅读
- 丽酱每日分享|刘备秘密给曹丕写了一封信,专家:真是罕见的虚伪!,曹操死后
- 楚天都市报|这是什么神仙爱情?瘫痪35年的妻子,为丈夫写了一封长信却没有告诉他
- 辛德蕾拉|简单好用的电脑录屏软件,自媒体或日常使用必备,内附破解注册机
- 辛德蕾拉|华为手机,荣耀手机2020年9月3日批发报价
- 英雄联盟|云顶S3,星守女团十连胜吃鸡!锤海盗灭狙神,辛德拉点名秒杀
- 辛德蕾拉|博文科技公司获得“360推广”2018年最具影响力奖
- 伦纳德|对阵掘金,老里弗斯为何经常掏出小纸条来看?纸条上都写了什么?
- 趣头条|《信条》烧脑到反人类吗?也许是未来的诺兰回到过去,写了一个流水线故事
- 雲悦舒爱|却写了一本烂书,毒害中国女子两千年,她是中国古代十大才女之一
- 辛德蕾拉|百世集团首次实现跨境电商“9710”出口业务落地
