> ## Documentation Index
> Fetch the complete documentation index at: https://docs.akria.net/llms.txt
> Use this file to discover all available pages before exploring further.

# Day 28 | 毕业设计路线与筹备

> 理清思路，准备迎接终极全栈实战

<Info>
  **今日目标**：在进入最后的 48 小时冲刺前，我们需要把前四周零散的知识点缝合在一起。今天我们要学习如何进行 **“架构设计”**，并为明天的毕业大项目做好本地环境和心理建设。
</Info>

## <span style={{ display: 'inline-flex', alignItems: 'center', gap: '8px' }}><Icon icon="book" size={26} color="#059669" /> 学习内容 (30 mins)</span>

在写任何代码之前，先画图。架构图是沟通的语言。

<AccordionGroup>
  <Accordion title="毕业设计架构：Hybrid-Monitor (15 mins)" icon="map">
    **我们要构建一个微缩版的企业级监控系统。**

    * **DB 层 (SQL)**: 存储任务配置、采集到的信号结果、用户信息。这是**数据的归宿**。
    * **Control Plane (Python/FastAPI)**:
      * 作为“大脑”。
      * 负责处理复杂的业务逻辑（如鉴权、数据聚合）。
      * 对外提供 RESTful API。
    * **Data Plane (Go)**:
      * 作为“执行器” (Agent)。
      * 部署在边缘节点，负责高频采集数据。
      * 与大脑通讯，上报数据。
    * **Infrastructure (Shell/Docker)**:
      * 负责一键拉起所有环境。
  </Accordion>

  <Accordion title="为什么采用这种混合架构？ (15 mins)" icon="diagram-project">
    **思考题：全用 Python 或全用 Go 行不行？**

    * **全 Python**: Agent 端内存占用大，部署依赖多。如果部署在几千台机器上，资源浪费严重。
    * **全 Go**: Web 开发虽然可以，但 ORM 和 Web 框架不如 Python 的生态（SQLAlchemy/FastAPI）那么开发迅速、灵活。
    * **混合架构**:
      * **Python** 处理 **低频、复杂** 的控制逻辑。
      * **Go** 处理 **高频、简单** 的计算逻辑。
      * 取长补短，这是现代架构的精髓。
  </Accordion>
</AccordionGroup>

***

## <span style={{ display: 'inline-flex', alignItems: 'center', gap: '8px' }}><Icon icon="code" size={26} color="#059669" /> 任务清单 (90 mins)</span>

今天没有重代码任务，重点是**自测**与**环境准备**。

<Steps>
  <Step title="技能自测清单">
    请逐一检查，如果有不确定的，请立刻点击链接回去复习：

    * [ ] **Shell**: 能编写带参数的脚本，并用 `curl` 调用 API。 (详解见 [Day 05](/training/30daystudy/day-05))
    * [ ] **SQL**: 能设计包含主键、外键和索引的表结构。 (详解见 [Day 09](/training/30daystudy/day-09))
    * [ ] **Python**: 能使用 `requests` 抓取数据，并熟练使用 `json` 处理。 (详解见 [Day 13](/training/30daystudy/day-13))
    * [ ] **FastAPI**: 能编写包含 `POST` 和 `GET` 的接口。 (详解见 [Day 17](/training/30daystudy/day-17))
    * [ ] **Go**: 能使用 `sync.WaitGroup` 和 `Channel` 处理并发。 (详解见 [Day 24](/training/30daystudy/day-24))
  </Step>

  <Step title="环境大清洗与准备">
    请在你的本地开发机上执行以下命令，确保明天的开发环境无误。这是一个“神圣”的仪式。

    <CodeGroup>
      ```bash 环境检查 theme={null}
      # 1. 确保 Docker 正常运行且 MySQL 可用
      docker ps | grep mysql
      # 如果没有，请重新运行 Day 01 的启动命令

      # 2. 确保 Python 环境就绪 (使用 3.9+)
      python3 --version
      pip3 install fastapi uvicorn requests sqlalchemy pymysql aiomysql

      # 3. 确保 Go 环境就绪 (使用 1.18+)
      go version
      go env -w GOPROXY=https://goproxy.cn,direct

      # 4. 创建毕业设计专属工作目录
      # 按照正规工程结构创建
      mkdir -p ~/final-project/{master,agent,scripts,deploy}
      cd ~/final-project
      tree .
      ```
    </CodeGroup>

    **验证步骤**：

    1. 运行 `python3 -c "import fastapi; print(fastapi.__version__)"` 确保不报错。
    2. 运行 `go run` 打印一个 "Hello Project"。
  </Step>
</Steps>

***

## <span style={{ display: 'inline-flex', alignItems: 'center', gap: '8px' }}><Icon icon="lightbulb" size={26} color="#059669" /> 脑力体操 (30 mins)</span>

<CardGroup cols={1}>
  <Card title="设计挑战：数据应该怎么流？" icon="arrows-rotate">
    **情景**：如果 Agent 采集网络断了，数据该怎么办？

    **选择 A**: 丢弃数据。
    **选择 B**: 缓存在本地内存，连上后再发。
    **选择 C**: 写入本地文件，连上后再发。

    * **分析**:
      * 对于监控系统，实时性第一。如果是昨天的 CPU 负载数据现在才发过来，价值很低。通常选择 **A (丢弃)** 或 **B (有限内存缓存)**。
      * 如果是 **计费日志**，则必须选择 **C (本地持久化缓冲)**，绝不能丢。
    * **结论**: 架构设计没有绝对的对错，只有 **Trade-off (通过权衡做取舍)**。
  </Card>
</CardGroup>

***

## <span style={{ display: 'inline-flex', alignItems: 'center', gap: '8px' }}><Icon icon="file" size={26} color="#059669" /> 今日产出物</span>

* `~/final-project/` 目录结构
* 准备好的开发环境

***

## <span style={{ display: 'inline-flex', alignItems: 'center', gap: '8px' }}><Icon icon="github" size={26} color="#059669" /> 明日预告</span>

<Tip>
  **Next Step**: 明天我们将进入 **Week 5 Day 29**，正式开始从 0 到 1 编写 **Master (Python)** 和 **Agent (Go)** 的代码。请养精蓄锐！
</Tip>

***

<CardGroup cols={2}>
  <Card title="回到目录" href="/training/30daystudy/week-4">
    查看完整进度
  </Card>

  <Card title="项目启动: 需求分析" href="/training/30daystudy/day-29">
    Day 29 | 综合项目需求分析
  </Card>
</CardGroup>
