知乎社区核心业务Golang重构实践与经验分享
需积分: 9 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化实践不仅提升了知乎社区核心业务的性能和协作效率,还为其他团队提供了宝贵的重构经验和教训。
2024-05-31 上传
2021-09-11 上传
2023-09-09 上传
2023-07-14 上传
2023-09-08 上传
2023-04-17 上传
2023-06-11 上传
2023-06-01 上传
Saar
- 粉丝: 4
- 资源: 37
最新资源
- Java集合ArrayList实现字符串管理及效果展示
- 实现2D3D相机拾取射线的关键技术
- LiveLy-公寓管理门户:创新体验与技术实现
- 易语言打造的快捷禁止程序运行小工具
- Microgateway核心:实现配置和插件的主端口转发
- 掌握Java基本操作:增删查改入门代码详解
- Apache Tomcat 7.0.109 Windows版下载指南
- Qt实现文件系统浏览器界面设计与功能开发
- ReactJS新手实验:搭建与运行教程
- 探索生成艺术:几个月创意Processing实验
- Django框架下Cisco IOx平台实战开发案例源码解析
- 在Linux环境下配置Java版VTK开发环境
- 29街网上城市公司网站系统v1.0:企业建站全面解决方案
- WordPress CMB2插件的Suggest字段类型使用教程
- TCP协议实现的Java桌面聊天客户端应用
- ANR-WatchDog: 检测Android应用无响应并报告异常