当前位置: 首页 > article >正文

业务日志设计

        当一个项目足够大的时候,我们需要将统计系统完全独立出去,那么就无法避免数据采集的问题,我们可以在业务触发处增加log日志来记录当前变化的原始数据,提供统计系统进行采集

        设计一个统计系统的日志记录机制时,主要需要考虑日志的结构、数据存储方案、查询效率和系统扩展能力。

一、日志设计

1.日志结构
  • 时间戳 : 记录事件发生的时间。
  • 业务系统标识: 标识记录来源于哪个业务系统。
  • 事件类型: 描述业务中发生的具体事件(例如:创建、更新、删除)。
  • 用户标识: 记录哪个用户触发了事件(如果适用)。
  • 事件详情: 事件的具体内容,可以是 JSON 格式,包含更多关键信息(如影响的数据、变更的值等)。
  • 状态: 事件的状态,如成功、失败等。
2.日志存储形式
  • 批量写入:
    • 为了提高性能,可以使用批量写入的方式,将多个日志记录合并后一起写入数据库。
  • 异步处理:
    • 主业务流程中的日志记录操作可以异步进行(例如,通过消息队列),避免对主流程的性能影响。

二、数据库选择

1.NoSql数据库
  • MongoDB:
    • 特别适合存储 JSON 格式的日志记录,灵活的文档模型能很好地应对结构变化。
    • 自带水平扩展能力,适合大规模日志数据存储。
    • 虽然 MongoDB 不支持传统的 SQL JOIN,但可以通过手动查询、$lookup 聚合管道等方式实现关联查询(引用)。
  • Elasticsearch:
    • 适合进行复杂的查询和分析,良好的全文搜索功能。
    • 实时数据分析能力强,能快速从海量日志中检索信息。
    • 适合用于构建实时的监控和统计系统。
​​​2.系型数据库
  • PostgreSQL:
    • 功能强大的关系数据库,支持 JSON 数据类型,可以存储灵活的日志记录。
    • 适合需要复杂查询和强一致性的场景。
  • MySQL:
    • 传统的关系型数据库,支持高并发读写。
    • 可以通过使用合适的分区策略来处理大规模日志。
3.数据库对比
  • MongoDB vs MySQL:
    • 如果应用需要处理非结构化数据、灵活的数据模型和高并发的写入,MongoDB 是更好的选择。MySQL 的结构化数据模型在特定情况下可能会造成性能瓶颈。
  • PostgreSQL vs MySQL:
    • PostgreSQL 通常在处理复杂查询、支持高级功能(例如窗口函数、CTE、JSONB 等)方面超越 MySQL。如果需要复杂的数据分析,大型项目通常倾向于使用 PostgreSQL
  • MongoDB vs Elasticsearch:
    • 如果你的应用程序需要存储、更新和处理柔性数据结构,并且需要一些基本的查询能力,MongoDB 可能更合适。
    • 如果你的需求主要集中在快速搜索、分析和实时数据处理,Elasticsearch 可能是更合适的选择。

三、据采集与分析

  • 数据采集:
    • 使用ETL(提取、转换、加载)工具或自定义脚本,定期将日志数据从数据库或消息队列中提取到统计系统中。
  • 统计分析:
    • 使用数据分析工具(如 Apache Spark、Presto 等)进行批量数据处理和分析。
    • 对于实时统计需求,可以直接从日志数据库(如 Elasticsearch)进行查询和分析

四、性能和扩展

  • 设计日志收集系统时,请考虑日志的写入性能和查询性能。
  • 随着数据量的增加,监控性能,并基于需求进行扩展(如读写分离、增加节点、分区等)。

五、ETL工具推荐

1.Apache Nifi
  • 特点: 一个易于使用、强大的数据处理和分发工具,支持实时数据流处理。
  • 优点: 可视化的数据流设计界面,支持多种数据源和目标,能够处理数据流的路由、转换和操作。
  • 官网: Apache NiFi
  • 与 PHP 的结合: 可通过 REST API 与 PHP 集成。您可以使用 PHP 发出 API 请求来管理数据流、启动流程等操作。
  • 推荐方式: 创建一个 PHP 应用,使用 cURL 或其他 HTTP 客户端库与 Nifi 的 REST API 进行交互。
2.Apache Airflow
  • 特点: 一个调度工作流的工具,可以编排 ETL 任务。
  • 优点: 高度灵活,可扩展的工作流管理,支持定时和依赖性任务管理。
  • 官网: Apache Airflow
  • 与 PHP 的结合: 可以通过 Airflow 的 REST API 来调度任务,您可以使用 PHP 发送 API 请求来管理 DAG(有向无环图)和任务执行。
  • 推荐方式: 使用 PHP 创建自动化脚本来调用 Airflow API,推进 ETL 流程
3.Singer
  • 特点: 采用“音乐”协议的开源工具,专注于数据提取和加载。
  • 优点: 易于扩展和构建,提供许多预构建的连接器,可以通过编写 TAP 和 TARGET 轻松集成。
  • 官网: Singer | Open Source ETL
  • 与 PHP 的结合: Singer 的 TAP 和 TARGET 可以用任何编程语言实现,包括 PHP。您可以编写 Singer 的目标应用程序来提取数据并加载到目标位置。
  • 推荐方式: 使用 PHP 实现自己的 Singer TAP 或 TARGET。
4.阿里云 DataWorks
  • 中文支持: 阿里云的 DataWorks 是一个大数据开发和管理平台,整个界面和文档均为中文。
  • 特点: 提供丰富的数据集成、处理和分析功能,适合生产环境。
  • 与 PHP 集成: 阿里云的 DataWorks 可以通过 API 进行集成。您可以在 PHP 程序中使用阿里云的 API 调用数据工作流和任务。
  • 推荐方式: 使用 PHP 代码调用 DataWorks 的 REST API,以启动作业或管理工作流。
5.DataX (阿里巴巴开源)
  • 中文支持: DataX 是阿里巴巴开源的 ETL 工具,相关文档和社区交流多为中文。
  • 特点: 适合大规模数据的实时和离线同步,支持多种数据源和目标。
  • 与 PHP 集成: DataX 是一个命令行工具,因此可以通过 PHP 调用所在服务器中对应的执行命令。也可以在定期任务中结合 PHP 与 DataX 进行数据迁移。
  • 推荐方式: 创建 PHP 脚本,使用 exec() 或 shell_exec() 来运行 DataX 任务。


http://www.kler.cn/a/471566.html

相关文章:

  • Three.js - 打开Web 3D世界的大门
  • 快速入门Spring Cloud Alibaba,轻松玩转微服务
  • 【Qt】QtConcurrent
  • 51单片机——中断(重点)
  • 更换WordPress主题的基础知识及注意事项
  • pytorch中nn.Conv2d详解及参数设置原则
  • # Java 发送电子邮件示例
  • 『SQLite』常见函数的使用
  • `http_port_t
  • 『SQLite』常见日期时间函数的使用
  • java项目之旅游网站的设计与实现(源码+文档)
  • 网络分析与监控:阿里云拨测方案解密
  • ETCD渗透利用指南
  • 【Python】Flask报错:TimeoutError: QueuePool limit of size 10...以及日常bug处理
  • PyCharm简单调试
  • 【计算机组成原理课程设计】:实验0 ROM仿真、实验1 验证74L181运算和逻辑功能、实验2 运算器 2、实验 3 跑马灯、实验4 模拟微程序实现指令
  • swagger导出json
  • rabbitmq——岁月云实战笔记
  • C# async和await
  • Dexcap复现代码数据预处理全流程(四)——demo_clipping_3d.py
  • 东土科技参股广汽集团飞行汽车初创公司,为低空经济构建新型产业生态
  • 面向对象的思维hong
  • Ubuntu22.04 离线安装:gcc、make、dkms、build-essential
  • 模式识别-Ch3-贝叶斯估计
  • QT给端口扫描工程增加线程2
  • 【JavaWeb】2. 通用基础代码