知乎社区核心业务Golang重构实践与经验分享

需积分: 9 0 下载量 158 浏览量 更新于2024-07-09 收藏 7.21MB PDF 举报
"这篇文档是知乎社区核心业务从Python向Golang转型的实践分享,由知乎的杜旭撰写。在面对Python运行效率和资源占用、多人协作与维护成本的问题时,知乎选择了用Golang进行重构。Golang因其并发优势、执行效率、公司内部的基础组件生态、静态类型支持、多个人协作的便利性以及较低的学习成本和开发效率,成为了替换Python的优选。通过重构,知乎成功节省了超过80%的服务器资源,并降低了多人协作开发的成本,使得Golang成为公司内部推荐的语言。在重构过程中,遵循了写接口、单元测试、开发者验证、QA验证等步骤,并在实践中积累了一些关键的经验,如避免重构和优化同步进行、尽早进行静态代码检查、谨慎处理RPC降级和 Panic & Recover 的使用等。" 本文档主要讲述了以下几个知识点: 1. **重构背景**:在面临Python运行效率低下和资源消耗大的问题时,以及随着团队扩大,多人协作和维护成本增加,知乎决定对核心业务进行重构。 2. **选择Golang的原因**: - **并发优势**:Golang拥有强大的并发处理能力,能有效利用多核处理器。 - **执行效率**:相比Python,Golang编译后的代码运行速度更快。 - **公司内部生态**:Golang在知乎内部有成熟的基础组件支持。 - **静态类型**:静态类型的引入降低了多人协作时的错误率。 - **学习成本与开发效率**:虽然Golang相对Python有学习曲线,但其简洁的语法提高了开发效率。 - **工程师偏好**:Golang的设计理念和特性得到了工程师们的认可。 3. **重构成果**:通过重构,知乎成功地减少了80%以上的服务器资源占用,同时降低了多人协作的开发成本,Golang在知乎内部的地位得以提升。 4. **重构过程**:整个重构过程包括编写接口、单元测试、开发者验证、QA验证以及在办公环境中逐步部署和验证。 5. **实践经验**: - **避免重构与优化并行**:在重构期间,应避免同时进行性能优化,以免引入复杂性。 - **静态代码检查**:早期进行静态代码检查有助于发现潜在问题。 - **RPC降级策略**:在必要时,应该有计划地降低RPC服务的级别,以确保系统的稳定性。 - **Panic与Recover的使用**:虽然不推荐频繁使用,但在某些特定场景下,Panic与Recover可以提供有效的异常处理。 - **Goroutine与Future**:利用Goroutine进行并发处理,配合Future设计模式,可以更好地管理异步任务。 - **Golang调用Python**:在某些场景下,可能需要在Golang中调用Python代码,以充分利用既有Python资产。 6. **总结**:这次Golang化实践不仅提升了知乎社区核心业务的性能和协作效率,还为其他团队提供了宝贵的重构经验和教训。