第3~4周:开源项目学习与使用 基础架构问题的解决之道 - davideuler/road-to-soft-design GitHub Wiki

本周练习的作用: 帮助学员养成结构化的思维习惯,掌握如何学习,使用开源项目的方法;

目标: 选择如下任何一个开源(如果有余力建议完成2个或以上),阅读官方文档,搭建项目,编写代码来掌握项目的使用。

要求: 找到官方使用说明文档,理解项目所解决的问题;(你可以充分利用Google, Github, Stackoverflow等等工具) 找到官方的(或者作者写的)架构文档,理解这个开源项目是如何解决该问题的,了解这个项目的主要功能列表(Feature List); 自行搭建这个开源项目,使得项目跑起来; 在实际的项目中使用此开源项目(确实找不到场景使用,请写出使用此开源项目的示例代码),代码提交到Github。

输出: Github或者自己的博客上输出此开源项目的介绍文档,包含项目在什么背景下产生的,项目解决了什么问题,如何解决这个问题的; 示例代码请放在gitlab的个人空间中;

1.配置管理(Apollo/Disconf)服务

部署起来Apollo/Disconf中的一个配置服务,将其用于项目中。 并在实际项目(选择一个所在团队的较小项目)的代码中集成配置服务,可以通过页面来管理开发、测试、线上环境的配置,并且在代码中实现配置变化的实时推送。

2.APM服务(Pinpoint/SkyWalking)

选择一个开源APM服务,部署服务,并集成到实际项目中。能够看到各个URL的稳定率数据(平均响应时间、稳定率),以及每一个URL请求的后台服务调用树;

3.作业管理/Job Scheduling

可选项目:(light-task-scheduler/elastic-job/xxl-job)

选择一个开源 Job Scheduling服务,了解其架构,部署服务,并且将开发过的自动任务改写成此框架能够执行的任务,达到集中管理任务,系统化管理任务的目的。 部署于框架上运行,可以通过Job Scheduling系统管理自动任务,并且查看自动任务的执行情况,以及执行日志。

一些典型的自动任务:自动发送邮件、自动同步不同数据存储系统的数据(比如Mongo/SQL Server的数据存到MySQL)、自动发送业务报表等;

4.消息队列 (Kafka/RabbitMQ)

搭建一个 Kafka/RabbitMQ服务,将项目中用到的适合异步处理的数据(比如要发送的短信/邮件/微信推送内容,要记录的日志内容),发送到消息队列中。 另外编写一个Job代码来监听消息队列中的数据,执行相应任务。

5.ETL数据导出

使用HData或者DataX把MongoDB中的 JourneySession/NodeLogs同步到MySQL中,每5分钟增量同步一次。 作业可以放到xxl-job中运行,或者 light-task-scheduler中运行。

6.时间序列数据库:系统/业务监控与可视化(Prometheus/Grafana/)

使用Prometheus记录业务或者系统的数据,并且使用 Grafana展现业务数据的变化趋势(比如 24小时线索流入数量,24小时跟进数量,下单量/支付量,URL请求量等,错误请求量)。 同时使用 Prometheus/Alert Manager配置告警规则,自动发送告警通知到企业微信,邮件。

https://prometheus.io/blog/ 使用场景

https://maxchadwick.xyz/blog/An-Alternate-Use-Case-For-Prometheus-Monitoring 使用场景

https://hynek.me/talks/prometheus/

https://studygolang.com/articles/10059

http://blog.yichicloud.com/%E5%BE%AE%E6%9C%8D%E5%8A%A1/monitoring-with-prometheus

https://prometheus.io/docs/instrumenting/pushing/

https://prometheus.io/docs/concepts/metric_types/