# 后端开发经验-阶段性总结思考

作者：zhongling
原文：https://zhixia.pages.dev/posts/ai-backend-dev/
发布日期：2024-09-22
更新日期：2024-09-22
语言：zh

---


# 背景
做了大半年左右的后端开发后，总结下相关感受。

技术栈：Python/Nodejs + React

行业背景：LLM 应用， RAG， Agent

## 后端开发思路
后端关注面更广范，几乎要关注整个应用软件运行所需所有的环节： 运维，应用，业务，服务，UI 等。

其中核心工作流在于：充分理解需求，转换业务需求到系统的功能性设计及非功能指标设计。
* 功能设计上主要关注：数据结构，类包，业务模块，工作流等
* 非功能性关注：性能，并发，安全，稳定等

## 玩的是数据
数据算是核心中的核心了。所有的业务基础都是按照这个来的

### 关系型业务
mysql 或者 pg，选一个吧，这里我还没遇到两者特别大的差异的地方，因为我的业务场景里没那么复杂

这里主要考虑：表结构设计，索引设计。

如果到一定规模考虑 分区，分表，分库

实际业务中大多需要找一个 ORM 库来完成在应用里方便的操作。

如果有 Redis 或者其他异步复杂的事务处理，需要进一步考虑数据一致性。
### 非关系
Redis，Es，Mongodb，图数据库

日志相关的一般存放到 mongodb 或者es，由于他们在倒排索引的效果做的比较好，方便快速全文索引，海量存储。

Redis：内存数据库，来缓解在 mysql里不经常变动，又频繁查询的操作压力。当然他也可以做一些简单的消息中间件等

图数据库

在一些场景里需要做知识图谱，做关系，图数据库特别适合。这里核心是实体关系等三元组信息抽取，已有知识更新。得益于大模型这个第二大脑的配合，可以通过提示词让LLM帮我们去做实体抽取，三元组信息变得简单很多

### 小结
这块也是一个非常大的技术体系，往深走的话需要专题讨论。

我这边是入门不久，着重看了 Mysql 执行引擎的内容，B+ 索引的来由。练习了常用 SQL 语法（leetcode 50高频sql）

由于之前了解过大数据基础知识，所以对于我前端出身学习这块，难度不大。
## 一些中间件

* 消息中间件
几乎是必须的，做异步，服务结构等
* 任务队列
做性能，并发等
* 日志，错误处理等

## 微服务体系
很多公司其他基础模块都是基于微服务的方式提供的。系统扩充到一定程度肯定少不了微服务架构的梳理

得益于 Service Mesh 这种微服务2.0架构。做上层应用变得异常简单了。日志，监控，服务注册调用 等都在 SideCar里

我之前有过 Nodejs 接入微服务体系的经验，所以这块难度也不是特比大
## 计算机基础
* 计算机组成：cpu，gpu，硬盘，内存
* 操作系统：进程线程协程等，资源管理，IO管理：网络/文件
* 编译：前端：分词，语法分析，语法树，后端：机器平台生成

## 分布式-时间空间互换
这里我觉得是计算机性能上一个很重要的思路，在优先的单机资源下实现高复杂度计算的模式。大数据的基石 Hadoop也是这个核心思想。


## 核心竞争力
以前端为主要工作内容体系下，为什么要突破下后端开发的能力？

1. 生存需要：前端技术发展到一定程度，除非是往某个领域特定发展，但是很容易变成屠龙之术。
   * 我认为市场上需求, 复杂度大多还是后端
   * 即便作为独立开发者也需要后端更多
   * 本来技术上就不存在什么前端，后端，或者其他端。本来的角色应该是`软件开发者`，`问题解决者`存在
   * 一切都在变，你敢不变？
2. 当前AI大背景下，学习新知识，突破边界变得非常简单

所以当前这个环境，我的核心竞争力在于：强悍的工程能力，基于此的问题解决能力，基于此的产品运营的敏锐度
# 总结
在 AI 时代软件开发者可以很高效切换一些技术栈，但是一些基础的理论一定要掌握好，否则 ai 可能会把我们带歪。这些基础理论包括：计算机组成，计算机运行原理，现代操作系统，算法。还有就是上文里提出来的工程能力

最后我的观点是：不要过分在某个点上较真，能够达到自己的目标就是好的。


> 可以不屠龙，但是不能不掌握屠龙术
