💠

💠 2024-11-18 14:23:50


方向需求

关于问题的解决方案

饿了么交易系统 5 年演化史

书籍

淘宝技术这十年 亿级流量网站架构核心技术

Topic

  1. 完整设计一个支持数十亿规模的用户系统
  2. 如何设计一个支持千万设备推送的消息系统
  3. 简单实现一个消息中间件保证消息不重复不丢失
  4. 如何设计供应链正逆向系统
  5. 如何设计财务对账系统

系统重构

知乎社区核心业务 Golang 化实践Python所开发的模块使用Go重写

场景:

思考点:


业务需求

Admol/SystemDesign: 系统设计面试:内幕指南

Global Burden of Disease

账号安全认证体系

被脱裤也不怕 - 反馈总结

消息推送

站内信: 站内信设计思路之己见(基于上百万用户)

延迟消息

手把手实现一条延时消息

千万级数据导入

场景: 将数据库外的千万或亿级Excel CSV txt等文件导入到数据库

思考点:

  1. 导入时 用户并发,数据库资源控制
    • 操作的频率, 导入的效率
  2. 应用层资源优化,JVM内存 CPU占用
    • 需要按实际导入端,考虑是经过JVM应用层处理,还是直接利用数据库的附属工具或机制
  3. 落库的类型和特点: NoSQL 或 关系型数据库

方案:

NoSQL

  • MongoDB
  • Elasticsearch

关系型数据库

  1. MySQL

  2. Clickhouse

  3. GreenPlum
    • copy 方式, 不经过应用端去做 数据解析和写入

千万级数据导出

场景: 数据库内大表输出为 csv,Excel

思考点:

  • 导出时 用户并发及数据库资源控制
    • 如何在应用层接入端去感知数据库的资源状态, 协同控制并发频率 (比如: 应用层接受到请求,参考数据库资源状态设置并发数和导出数据量的约束, 而不是设置抽象的限流策略)
  • 字段多且大存储高
    • 如何平衡数据导出效率 和 应用JVM投入资源
  • 使用独占长连接完整SQL查询数据库 和 共享连接查询分批SQL 的取舍 简单理解为分页和不分页
    • 独占连接: 完整SQL查询然后不关闭连接使用游标分批去数据库fetch数据, 最后汇总
    • 共享连接: SQL层加分页或者条件范围 查询小批结果集, 最后汇总

方案:

  • Java应用层面可以使用JDBC长连接 游标方式查询数据分批读写

商品秒杀

Seckill


数据需求

数据血缘方案

核心流程为 采集 解析 图计算 存储 展示

  • 采集: 依据数据库的类型 采集到完备的DML DDL语句(create select, insert,update), 例如MySQL可解析binlog Greenplum可解析审计日志 等等。
  • 解析: ANTLR4将SQL解析为AST,遍历得到每层子查询,每句SQL的有向图
  • 图计算: 将前文的若干有向图 合并为一个大图 得到复杂SQL 和 一批独立SQL 完整正确的图,从而得到完整的血缘关系(入度为0 源表,出度为0 目标表)
    • Gremlin Gephi
  • 存储: 图数据库存储以上解析出的全部的图,需考虑节点的唯一标识
  • 展示: 图查询,需前端解决海量节点数时的性能问题
  • 生命周期或快照: 从业务和存储上来看,此类数据会一直累积,最后图会成为垃圾堆,可监听删除类型的DDL,移除对应的节点和边。以及依据业务特点定期快照历史数据,重建图

Greenplum/Hive 血缘解析落地方案: 采集SQL,ANTLR4解析为AST 调试规则文件,解析合并图,存入Atlas,查询Atlas

讲讲元数据

汉字-拼音 处理

汉字转换拼音,首字母模糊搜索等功能。

汉字转拼音项目pinyin-plus开源

敏感词匹配

DFA Bloom过滤器

OCR

Optical Character Recognition

  • 云厂商 例如阿里云,腾讯云等。
  • tesseract