我们为何决定进行大改写

主要观点:软件工程师在职业生涯中会面临何时进行重大重写的问题,对于小程序一般不值得长时间思考,而对于大型程序则很难做出明智决定。文中以 Channable 的核心数据处理系统重写为例,探讨了何时适合进行全面重写及重写过程中的原则和经验。
关键信息

  • 从 Spark 迁移的决策不易,需新旧系统并行进化,重写需考虑诸多因素,如架构错误、需求变化、工具选择等。
  • Channable 重写的原因包括早期对未来需求的错误预测、成功重写作业调度系统的经验等,技术上发现无需分布式文件系统、集群等。
  • 重写过程遵循避免功能蔓延、早期测试关键假设、将项目分解为依赖树、原型验证等原则,快速将新代码投入生产, opportunistically 实现新功能,用黑盒测试确保行为一致,从开始构建指标等。
    重要细节
  • 早期错误预测导致系统设计不合理,如过度追求处理大数据集而选择 Spark。
  • 重写过程中对 Postgres 和 Haskell 等核心技术进行了测试和验证。
  • 项目分解为独立可并行的部分,如存储层和计算层,先完成存储层重写并测试。
  • 利用原型验证设计想法,如探索 Haskell 的强类型系统。
  • 新旧系统并行运行,通过黑盒测试确保结果一致,构建性能指标系统。
  • 先优化单核心性能,后添加并行支持,最终新系统性能更优。
阅读 16
0 条评论