知乎在线部分的技术架构

知乎在线部分的技术架构

 

作者:姚钢强
链接:https://www.zhihu.com/question/314356555/answer/625772570
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

知乎截至 2019 年 1 月的数据:

  • 用户数:2.2 亿
  • 话题数: 27 万
  • 问题数: 3000 万
  • 回答数: 1.3 亿

以下内容全部基于 2019.1 之前情况

简述下知乎在线部分的技术架构,先看下整体的架构图,整体比较清晰不再赘述。

知乎在线架构

  1. 微服务架构,知乎从 11 年就开始了微服务的探索,尝试过 protocol buffersAvroThrift,最终在 16 年确认使用 Thrift,同时使用 Consul 和 HAProxy 作为注册中心和负载均衡。是在 14 年确认的这套微服务架构,并且稳定使用到了现在。所以大家不要问为什么不使用 gRPC 了。
  2. 云平台,知乎有自己的内部研发的 ZAE ,绝大部分的在线业务容器在 15 年就已经全部跑在了 Docker 里,现在我们 HBase 和 Kafka 也是跑在容器里的。我们最开始使用的是Mesos 做的资源调度,现在已经切换到了 Kubernetes 。
  3. 部署平台,知乎的部署平台是与 ZAE 在一起的, 基于 Jenkins 搭建的自动集成,在 MR(Gitlab) 阶段自动使用 SonarQube 进行静态代码检查。部署分为测试环境,办公室环境,金丝雀1(灰度单个容器),金丝雀2(灰度 20% 流量),生产环境(100% 流量上线)。如果金丝雀阶段出现错误,会自动进行回滚操作。
  4. 监控,我们主要基于 GrafanaOpenTracingGraphite 等搭建了监控系统。同时自研了 Halo 可以方便的是业务方观测到服务之间的依赖关系、响应时间(P95, P99, P999)、错误数。同时也进行了新技术的尝试,目前在业务容器监控使用了Prometheus 。
  5. 存储,主要是 MySQLRedisHBase;正在调研 TiDB,目前有一套生产集群上线准备给「已读」服务使用。
  6. 消息队列,早期使用自研的 Sink,目前使用 Kafka,同时提供在 Kafka 的基础上包装了Beanstalkd 作为任务队列方便业务进行使用。
  7. 编程语言,PythonGolangJavaRust。目前 Golang 使用比较广泛,Python 使用场景逐渐变少。Java 在一些算法项目和商业系统中有使用。搜索系统使用的 Rust 重写 Lucene,现并在此基础上重写了类 ES 的集群化搜索引擎。架构师 会去 做分享。
  8. 目前已经搭建好完备的测试环境,会在 Q2 投入使用。
  9. 现在已经搭建了多机房,目前重要的业务都是异地多活。

总结:

  1. 勇于探索新的技术,例如早期的微服务(11 年)和容器化(15年)。
  2. 在开源技术可以满足的前提下,尽量不自造轮子,从而使项目可以持续维护。
  3. 知乎技术上一直崇尚工具化、自动化,例如我们的部署平台,监控,报警系统等,不管是平台还是业务方,都没有专职的运维人员。
  4. 整体来说知乎的平台化(我不是做平台的)一直做得很统一,比较少出现业务方自造一套轮子的情况,但是也不排斥业务方的尝试。

感谢知乎优秀的技术平台工程师,给我们业务方带来这么好的基础设施。:-D

 

==================== End

 

posted @   lsgxeva  阅读(1730)  评论(0编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
历史上的今天:
2018-03-22 将网卡更改为混杂模式
2018-03-22 Linux 网桥配置命令:brctl
2018-03-22 mysql之 mysql数据库压力测试工具(mysqlslap)
点击右上角即可分享
微信分享提示