zoukankan      html  css  js  c++  java
  • 知乎在线部分的技术架构

    知乎在线部分的技术架构

    作者:姚钢强
    链接: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

  • 相关阅读:
    initctl 创建自己的JOB
    TortoiseXX 与TotalCommander (TC)的图标问题
    eclipse 与 tomcat 的那些路径
    把函数视为对象
    序列增量赋值的一个谜题: +=
    __new__ 和 __init__ 的区别
    Python 中 is 与 == 区别
    Flask 2.0.1 changes
    flask run 与 DispatcherMiddleware 不兼容处理
    waitress 部署 flask服务
  • 原文地址:https://www.cnblogs.com/lsgxeva/p/10578281.html
Copyright © 2011-2022 走看看