2025年4月

项目规划

项目规划

原文链接:https://aping-dev.com/index.php/archives/13/

1. 主体流程

1.1. 前期调研

  • 体验竞品功能,形成对竞品的初步认知。
  • 结合可用资源(如已有的 API)确定产品需实现的功能。
  • 列出功能的利弊,形成功能调研文档。

1.2. 概要设计

  • 列出功能点,描述总体流程。
  • 使用流程图、时序图、架构图、交互图进行说明。
  • 实现基础框架和各模块之间的交互接口。

1.3. 详细设计

  • 将各模块功能分配给负责人,必要时进一步调研并给出详细设计。
  • 细化各功能点,列出多种实现方案及其利弊。
  • 涉及产品决策时,需及时与产品沟通。
  • 调用第三方接口时,需充分调研其行为。
  • 设计数据库表时,根据 SQL 语句设计索引,并使用 EXPLAINSHOW PROFILES 等进行验证。
  • 涉及状态转换时,绘制状态图并考虑各种状态冲突。
  • 考虑各种异常情况,如并发、程序崩溃、数据库错误、消息队列消息丢失等,并设计相应的重试机制和幂等处理。
  • 在操作资源前,判断资源是否存在、状态是否正常等。

1.4. 技术评审

  • 各模块负责人完成详细设计后,进行技术评审,讨论实现方案,及时发现方案的不足。
  • 模块负责人需提前准备方案的利弊分析,并参考评审意见形成最终决策。
  • 交流时,需从基本信息开始讲述,不假设参与者已知相关内容。

1.5. 开发

  • 开发过程中注意抽象相似的函数或模块,避免重复改动,便于后续开发。
  • 遵循约定的编程规范。
  • 设计变动时,及时同步更新文档,方便协作。

1.7. 代码 Review

  • 代码 Review 是一项辛苦的工作,需感谢提出意见的同事。

1.8. 测试

  • 单元测试:使用 Python 的 unittest.TestCase 对各个单元进行测试,保持测试代码的整洁。
  • 模块自测:包括接口参数、功能、内部逻辑测试,可使用 Postman 进行 API 测试,保持测试代码的整洁。
  • 交叉测试
    1. 了解对方模块的功能,通过文档或面谈。
    2. 自行设计,比较与模块负责人的差异,审视彼此的缺陷考虑,有助于提升。
    3. 模块负责人修复交叉测试的 Bug 后,需对涉及的接口进行回归测试,防止引入新的 Bug。
  • 集成测试:对整个系统进行测试,确保各模块协同工作正常。

1.9. 上线

  • 项目打包、部署,进行灰度上线。

1.10. 内测

  • 专门的测试人员对上线项目进行测试,及时发现问题。

1.11. 公测 & 运营

  • 向用户提供优惠活动,吸引用户体验并反馈问题。
  • 产品经理撰写文案,介绍产品特点、优势,为产品造势。

1.12. 项目回顾

  • 总结项目中的良好实践,形成经验积累,在未来项目中推广。

2. 并行流程

2.1. 人力预估

  • 对投入的人力进行大致估计,随着项目进展,可能需要调整。

2.2. 行为规范

  • 提前告知开发人员需遵循的规范,包括:
    • 编程规范,如编码风格约定。
    • 各类文档撰写规范,包括需求文档、实现文档、接口文档、测试文档等。

2.3. 进度预估

  • 包括总体项目完成时间、各阶段完成时间、各模块负责人对各自模块完成时间的预估,及时发现风险点。

2.4. 资源申请

  • 申请所需资源,如域名、运维机器、配额等。

2.5. 进度对齐

  • 在约定的时间点进行进度对齐,及时发现风险点。

监控系统评估和推荐

主流监控系统
├── 老牌监控系统
│   ├── Zabbix         ← 仍然活跃,适合传统架构
│   ├── Nagios         ← 已过时,扩展性差
│   ├── Cacti          ← 图形展示强,功能有限
│   ├── Ganglia        ← 偏 HPC,基本没人用了
│   ├── Grafana        ← 可视化工具,不是监控系统本身
│
├── 新一代监控系统
│   ├── Open-Falcon    ← 国产经典,可替代但不再活跃开发
│   ├── Nightingale    ← Falcon 的升级版,支持 PromQL,国产强推荐
│   ├── Prometheus     ← 云原生主流,生态活跃,标准事实
│   ├── VictoriaMetrics← 高性能时序数据库,Prometheus 替代或后端
│   ├── Thanos         ← Prometheus 的水平扩展方案
│   ├── Cortex         ← 类似 Thanos,多租户 Prometheus 集群
│   ├── Loki           ← 日志聚合系统,与 Prometheus/Grafana 配合使用
│   ├── Alertmanager   ← Prometheus 告警模块
│   ├── Telegraf       ← 数据采集工具,支持输出 Prometheus/InfluxDB
│   ├── Vector         ← 数据管道,采集/转换/转发日志和指标
│   ├── Datadog        ← 商业化 SaaS,开箱即用,价格不低
│   ├── Grafana Cloud  ← Grafana 官方 SaaS,集成 Prom/Loki/Tempo 等

推荐搭配组合(按场景)

| 场景 | 推荐方案 |
|----------------|------------------------------------------------|
| 自建轻量 | Prometheus + Grafana + Alertmanager |
| 传统运维系统 | Zabbix / Nightingale + Categraf |
| 云原生/Kubernetes | Prometheus + Thanos/Cortex + Loki/Tempo |
| 日志+指标一体化 | Vector + Prometheus + Loki |
| SaaS 省心部署 | Datadog / Grafana Cloud |

了解主流网络数据采集技术和框架工具,如Selenium/Puppeteer/PhantomJS/Scrapy等

主流的网络数据采集(Web Scraping)技术和框架工具主要用于从网页自动提取数据。以下是几种常见的工具及其特点:


1. Selenium

适用场景:动态页面抓取(JS渲染)、自动化测试
特点

  • 主要用于自动化浏览器操作,如模拟用户输入、点击、滚动等。
  • 支持多种浏览器(Chrome、Firefox、Edge等)。
  • 适用于爬取依赖 JavaScript 渲染的网页。
  • 可结合 WebDriver 进行无头浏览(Headless 模式)。

缺点

  • 运行效率较低,比直接解析 HTML 或使用异步框架慢。
  • 需要安装浏览器驱动(如 ChromeDriver)。

适用语言:Python、Java、C#、JavaScript 等


2. Puppeteer

适用场景:无头浏览器抓取、截图、网页自动化
特点

  • 由 Google 开发,专为控制 Chrome/Chromium 设计。
  • 支持无头模式,执行速度比 Selenium 快。
  • 适用于爬取动态加载数据的网站。
  • 可以用来生成 PDF、截取网页截图、自动填写表单等。

缺点

  • 仅支持 Chromium 浏览器,不支持其他浏览器。
  • 需要 Node.js 环境。

适用语言:JavaScript/TypeScript


3. PhantomJS(已停止维护)

适用场景:早期的无头浏览器爬虫
特点

  • 早期的无界面 WebKit 浏览器,支持 JavaScript 渲染。
  • 可以用于网页截图、测试、抓取动态网页内容。
  • 由于 Puppeteer 和 Headless Chrome 出现,PhantomJS 已被淘汰。

适用语言:JavaScript


4. Scrapy

适用场景:大规模数据采集、高效爬虫
特点

  • Python 爬虫框架,异步高效,适用于大规模数据抓取。
  • 内置强大的爬取调度、数据清洗、持久化存储功能。
  • 可扩展性强,支持中间件、自定义代理、Cookies 处理等。
  • 适用于结构化数据采集,如电商、新闻网站等。

缺点

  • 不支持 JavaScript 渲染(需结合 Selenium 或 Splash)。
  • 学习曲线较高,适合有一定爬虫经验的开发者。

适用语言:Python


对比总结

| 工具/框架 | 适用场景 | 语言 | 是否支持动态页面 | 运行效率 | 适用规模 |
|---|---|---|---|---|---|
| Selenium | 自动化测试、动态网页抓取 | 多种 | ✅ | 较慢 | 小规模 |
| Puppeteer | 无头浏览器爬取、自动化 | JS/TS | ✅ | 较快 | 中等 |
| PhantomJS(淘汰) | 早期无头浏览器爬取 | JS | ✅ | 较慢 | 小规模 |
| Scrapy | 高效爬取静态网页 | Python | ❌(需扩展) | 高 | 大规模 |

如果需要爬取动态网页(如 AJAX、Vue、React 生成的内容),建议使用 PuppeteerSelenium
如果目标网站是静态 HTML,Scrapy 更高效,适合大规模数据采集。

下面是 Scrapy、Puppeteer 和 Selenium 的安装及简单使用示例。


1. Scrapy

安装

Scrapy 需要 Python 环境(推荐 Python 3.8+)。安装方式:

pip install scrapy

创建 Scrapy 爬虫

  1. 创建 Scrapy 项目
scrapy startproject my_scraper
cd my_scraper
  1. 生成爬虫
scrapy genspider example example.com
  1. 编辑 spiders/example.py
import scrapy

class ExampleSpider(scrapy.Spider):
    name = "example"
    allowed_domains = ["example.com"]
    start_urls = ["https://example.com"]

    def parse(self, response):
        title = response.css("title::text").get()
        yield {"title": title}
  1. 运行爬虫
scrapy crawl example

2. Puppeteer

安装

Puppeteer 需要 Node.js 环境,安装方法:

npm install puppeteer

使用 Puppeteer 采集网页数据

创建 puppeteer_scraper.js

const puppeteer = require('puppeteer');

(async () => {
    const browser = await puppeteer.launch();
    const page = await browser.newPage();
    await page.goto('https://example.com');

    // 获取标题
    const title = await page.title();
    console.log(`Title: ${title}`);

    await browser.close();
})();

运行 Puppeteer 爬虫

node puppeteer_scraper.js

注意:Puppeteer 默认会下载 Chromium,如需使用已有的 Chrome 浏览器:

npm install puppeteer-core

然后在 launch() 时指定可执行路径:

const browser = await puppeteer.launch({ executablePath: '/path/to/chrome' });

3. Selenium

安装

Selenium 需要 webdriver,例如 ChromeDriver:

pip install selenium

然后下载 ChromeDriver 并确保它与 Chrome 版本匹配:下载地址

使用 Selenium 采集网页数据

创建 selenium_scraper.py

from selenium import webdriver

# 配置 WebDriver(确保 chromedriver 在 PATH 中)
driver = webdriver.Chrome()

# 访问网页
driver.get("https://example.com")

# 获取标题
title = driver.title
print("Title:", title)

# 关闭浏览器
driver.quit()

运行 Selenium 爬虫

python selenium_scraper.py

无头模式(不弹出浏览器)

from selenium.webdriver.chrome.options import Options

options = Options()
options.add_argument("--headless")  # 无头模式
driver = webdriver.Chrome(options=options)

工具对比

| 工具 | 适用场景 | 语言 | 动态内容支持 | 运行速度 | 适用规模 |
|---|---|---|---|---|---|
| Scrapy | 静态网页爬取 | Python | ❌ | 高 | 大规模 |
| Puppeteer | 动态网页爬取 | JavaScript/Node.js | ✅ | 中 | 中等 |
| Selenium | 自动化测试、动态爬取 | Python/Java | ✅ | 低 | 小规模 |

推荐选择:

  • Scrapy:适用于 大规模数据采集(如新闻、电商)。
  • Puppeteer:适用于 前端渲染的网站(如 Vue/React)。
  • Selenium:适用于 需要模拟用户行为 的情况(如登录、点击)。