notes.billmill.org

这是一篇关于使用“无聊”代码处理 10 亿网络请求的文章,主要内容如下:

  • 项目背景:作者作为美国政府的承包商,参与了 Medicare 计划比较网站的重新设计,该网站每年帮助数十万名 Medicare 受助人购买医疗保险计划,经过约一年的开发后发布。
  • 设计理念:作者在构建系统时遵循“保持尽可能无聊”的理念,选择了经过验证的技术,如 PostgreSQL、Golang 和 React。
  • 技术细节

    • PostgreSQL:系统的基础数据库,用于存储各种数据。
    • Golang:作者在构建项目时使用 Golang,它在构建时和运行时都能高效运行,易于部署,新开发者也能快速上手,但其文档生成存在问题。
    • React:虽然存在一些批评,但在为政府构建基础设施时,考虑到要让尽可能多的人使用应用,选择了 SPA 架构和 React,尽管后来出现了一些性能问题。
    • 模块化后端:将后端分为三个大型模块,每个模块都有自己的 PostgreSQL 数据库,通过 gRPC 进行通信,分别负责药品定价、计划搜索和受益人的信息。
    • gRPC:后端服务通过 gRPC 相互通信,与 Web 客户端通过 grpc-gateway 通信,虽然有一些优点,但工具方面存在一些痛点。
  • 其他方面

    • 严格的向后兼容性:遵循严格的向后兼容性要求,只添加字段,不删除字段,对数据库也采取类似的做法。
    • 分面搜索:通过在索引良好的计划表上构建 SQL 查询字符串来实现分面搜索,注重业务需求而不是复杂的代码。
    • 数据库相关:包括数据库的创建、ETL 过程、模型使用和测试,作者在测试方面犯了一个错误,应该使用实时数据库而不是定期维护的模拟数据。
    • 其他工具:有一个 CLI 工具,用于执行各种实用功能,还可以通过 Slack 命令从 Splunk 生成图表。
    • 日志记录:每个请求都有一个请求 ID,用于跟踪日志,使用 zerolog 记录日志。
    • 文档:将 markdown 文档转换为关于系统工作原理的书籍,获得了良好的效果。
    • 运行时集成:客户经常要求添加浏览器运行的查询,作者建议将其改为构建时请求,但客户未接受。

总之,作者通过选择合适的技术和遵循良好的设计原则,成功地构建了一个处理大量网络请求的系统,并在团队合作和其他方面取得了良好的成果。

阅读 10
0 条评论