跳到主要内容

Software Engineering

后端开发工程师

后端开发工程师负责产品中“会记住事情”的那一部分。数据模型、API、事务、后台任务、授权,以及依赖方不再响应时系统的表现,都落在这条边界的这一侧。本指南说明这门学科涵盖哪些内容、什么情况下值得配置专职后端工程师,以及这个角色如何嵌入现有的开发团队。

后端开发工程师具体做什么?

后端开发工程师负责构建并运维应用的服务端:数据模型、供其他系统调用的 API、每次都必须成立的业务规则、脱离用户请求发生的异步与定时任务,以及决定谁可以看到什么的授权逻辑。这一角色要对并发访问下的正确性负责,对依赖方缓慢或不可用时的行为负责,也要对系统上线之后仍然可诊断负责。

后端工作与多数其他工程方向的根本差别在于:它持有状态,而状态的寿命长于写出它的那个版本。界面缺陷发布一个修正版本就算修好了;而一个写错数据的缺陷,会在代码修复很久之后仍留下需要定位和修补的残迹。正是这种不对称,让有经验的后端工程师在某些地方格外谨慎——金额、不可逆的操作、任何修改记录而不只是读取记录的动作——这份谨慎是一项资格,而不是效率低。

第二个难点在于,服务器很少一次只处理一个请求。孤立看明显正确的逻辑,一旦两个调用方同时执行、客户端重试了服务端其实已经处理过的请求、或者一次网络调用既不成功也不失败而是干脆不再回应,就会变成错的。围绕交错执行、隔离级别、加锁、幂等与超时进行推理,是后端的日常工作,而它在缺失的那一天之前一直是不可见的。

随着可用基础设施的扩展,这一角色的边界也在扩大。托管队列、对象存储、多副本数据库和第三方 API,意味着后端工程师如今做出的决策不只决定运行哪些函数,也决定运营成本和故障排查的速度。此外,API 本身也是一个产品,它的使用方无法随叫随到地重新部署,这让契约设计成为一项长期承诺,而不是实现细节。

判断是否需要

团队在什么情况下需要这项能力

服务端工作往往由离得最近的人顺手承担,直到某件事让这种安排变得昂贵。下面这些压力,通常就是把后端工程从“大家分担的事”变成“专职角色”的转折点。

  • 数据模型已经成为瓶颈

    新功能不断要求再加一个可空字段、在旁边再挂一张对照表,或者写一条连接五张表才能回答一个简单业务问题的查询。表结构会悄悄积累妥协,等到数据的形状明显不对时,它上面已经承载着生产数据,改动就变成了一个迁移项目。

  • 并发缺陷开始出现

    重复的订单、与自身流水对不上的余额、被两条各自以为是唯一写入方的路径同时更新的记录。这类故障与负载相关,很少能在开发机上复现,而且几乎不可能由一个只按单个请求思考的人可靠地修好。

  • API 已经有了你无法控制的使用方

    用户迟迟不肯升级的移动端、合作方的集成、另一个团队负责的内部服务。一旦契约有了部署范围之外的使用方,改动就需要版本管理、废弃策略和兼容性考量——而一个当初为了内部方便而设计的接口,纠正起来会非常昂贵。

  • 故障排查靠猜

    某处变慢了或者出错了,而手上的证据只是一张显示“它变慢了或出错了”的仪表盘。没有请求链路追踪、结构化日志、有意义的指标和跨服务关联,每一次故障处理都会变成“上线一个看起来合理的改动,然后看看会怎样”。

  • 某个流程现在必须可证明是正确的

    支付、计费、库存、薪资发放、受监管的记录——凡是“大致正确”即等于错误的地方。这些流程需要在设计阶段就纳入事务边界、幂等、对账和审计轨迹,而在一个自然生长起来的流程上事后补齐,要比一开始就有意识地构建困难得多。

这个领域

核心能力

  • API 设计

    选择资源边界、错误语义、分页、过滤与版本策略,让一份契约能够熬过它自己的使用方。好的 API 设计在很大程度上是“决定不暴露什么”的功夫,因为每返回一个字段,都可能成为调用方将来依赖的东西。

  • 数据建模

    把业务领域表达成一种让非法状态难以出现的形状——约束、外键、唯一性和恰当的范式化——并且清楚什么时候反范式化是有意为之的性能决策,而不是失误。这也包括为已经很大、已经在用的表规划结构变更。

  • 事务与隔离级别

    知道事务该从哪里开始、到哪里结束,某个隔离级别究竟保证了什么,以及在它之下仍然可能出现哪些异常。在事务之外执行的“读—改—写”序列,是生产系统中最常见的静默数据损坏来源之一。

  • 并发与幂等

    把操作设计成执行两次、同时执行或中途被打断时都表现正确。幂等键、乐观锁、把唯一约束当作最后一道防线,以及对“哪些操作可以安全重试”有明确立场。

  • 故障处理

    每一次对外调用都设超时,只在重试安全的地方使用带退避与抖动的重试,熔断、有损降级和背压。真正重要的判断,是提前决定依赖不可用时系统应当怎么做,而不是在事故当中才现场得出答案。

  • 异步与定时任务

    用队列、消费者和定时作业把工作移出请求路径,然后处理由此带来的问题:顺序、重复投递、毒消息、死信处理,以及“一夜之间积压起来的队列该怎么办”这个运维问题。

  • 缓存

    决定什么可以缓存、缓存多久、如何失效——并且坦率承认失效策略才是全部难点所在。这也包括识别出某个缓存其实是在掩盖一条本应被修好的查询。

  • 可观测性

    带关联标识的结构化日志、描述用户可感知行为而不仅是机器健康度的指标、分布式链路追踪,以及绑定在人们真正在意的症状上的告警。检验标准是:一个不熟悉这套系统的工程师,能否只凭系统已经输出的信息诊断出一个新出现的故障。

  • 安全与授权

    身份认证与会话处理、在数据访问处而不是在界面上强制执行的授权模型、参数化查询、密钥管理,以及对个人数据的谨慎处理。破坏力最大的服务端安全事件,多数是普通的授权疏漏,而不是精巧的漏洞利用。

背景

技术生态

以下列出的是后端工程领域的常用技术。这描述的是该学科在业界的普遍实践,并非对某位工程师技能的说明——在后端工作中,可迁移的知识集中在数据建模、并发与故障行为上,这些东西在不同运行时之间的迁移成本,远低于框架语法。

语言与运行时

  • Java
  • Go
  • Python
  • Node.js
  • C#
  • Kotlin
  • Ruby
  • PHP
  • Rust

服务端框架

  • Spring Boot
  • Django
  • FastAPI
  • NestJS
  • Express
  • Laravel
  • Rails
  • ASP.NET Core

数据存储

  • PostgreSQL
  • MySQL
  • MongoDB
  • Redis
  • Elasticsearch
  • ClickHouse
  • DynamoDB

API 与集成

  • REST
  • GraphQL
  • gRPC
  • OpenAPI
  • WebSockets
  • Webhooks

消息与后台任务

  • Kafka
  • RabbitMQ
  • Amazon SQS
  • NATS
  • Celery
  • Temporal
  • Sidekiq

可观测性

  • OpenTelemetry
  • Prometheus
  • Grafana
  • Jaeger
  • Sentry
  • Datadog

测试与交付

  • Testcontainers
  • pytest
  • JUnit
  • k6
  • Docker
  • GitHub Actions

Working model

这个角色如何与您的团队协作

工程师在您的团队内部工作,遵循您的优先级和标准。日常开发方向由您掌握,Talent.ID 负责雇佣关系。下面的分工就是全部安排。

由您掌握

  • 产品
  • 业务优先级
  • 路线图
  • 架构
  • 冲刺优先级
  • 工程标准
  • 日常技术协作

由 Talent.ID 负责

  • 雇佣关系
  • 薪资发放
  • 员工福利
  • 人才管理
  • 持续的员工关系

合作如何一步步展开

示例场景

实际协作大致是这样

这是一个假设场景,用于说明协作方式如何落地。它并不描述 Talent.ID 的客户或已完成的项目。

挑战
某个工程团队一边维护着不断扩大的 API 面,一边背着一个吸收了多年产品变化的数据模型。特定链路上的查询性能在下降,后台任务需要重做,而团队若不暂停已经承诺的路线图交付,就无法着手处理其中任何一项。
做法
追加的后端工程能力融入团队既有的工作方式——他们的服务归属边界、他们的评审标准、他们的部署流程,以及他们已经确定的架构方向。优先级仍然由内部决定,追加的能力从同一个待办列表中领取工作,而不是另开一条独立的流程。
为团队带来什么
团队获得处理结构性工作的余地,同时保持交付节奏。关于数据模型、API 契约和系统方向的决定,仍然掌握在对产品负责的工程师手中。

常见问题

常见问题

后端开发工程师和平台工程师有什么区别?
后端开发工程师构建产品所依赖的应用逻辑与数据模型;平台工程师构建应用团队部署所用的基础设施与内部工具——集群、流水线、环境、可观测性底座。两者在容器化和云服务上有交叠,功底扎实的后端工程师通常也能运维自己构建的东西,但两者不能互相替代:把平台的全部责任交给一位后端开发工程师,往往会产出只适合一个服务、其他人都不好用的基础设施。
后端开发工程师需要很深的数据库功底吗?
需要到能设计一套合理的表结构、读懂执行计划、有意识地建索引、理解事务行为为止。这已经是一条实打实的门槛,很多候选人并不能达到。复制拓扑、存储引擎调优、分片策略和复杂的恢复规划,才是数据库专家真正的价值所在;运行着高负载集群的团队,通常需要两种人,而不是让一个人在两边被拉扯。
评估候选人时,语言本身有多重要?
不如围绕它的生态重要。并发、数据建模和故障行为是持久的知识,它们在可比的运行时之间迁移时摩擦不大。迁移得慢的是对某个生态的惯例和运维工具链的熟悉度——所以合作周期短、或者运行时比较冷门时,语言经验应当加重权重;而在主流技术栈上有时间适应时,权重可以降低。
后端开发工程师应当为自己构建的东西承担值班吗?
在团队的运作模式支持的前提下,是的——需要承担自身设计后果的工程师,往往会做出更好的设计。关键在于这是团队一致执行的规范,并且配有让值班变得合理的可观测性与操作手册,而不是事后附加到某些个人头上的期待。
什么时候专职后端开发工程师比全栈开发工程师更合适?
当产品的难点位于界面之后时。高写入量、复杂的领域规则、多个集成、受监管的流程和严格的可靠性目标,都会回报在数据建模和分布式行为上的深度。而当服务端主要是直白的读写、产品的分量在界面上时,全栈的广度通常人均产出更高。
后端工作需要什么级别的工程师?
取决于已经定下来多少。在既定的表结构、服务划分和测试方式之内实现接口,非常适合中级工程师。而确立数据模型、划定服务边界或主导一次拆分,则需要真正承担过这类选择后果的人,因为选错的代价是慢慢支付的,而且很少可逆。
后端开发工程师如何与现有的工程团队协作?
日常协作对象是您的团队:您的架构、您的代码评审、您的服务归属模型和您的冲刺优先级。日常的开发优先级和技术决策由您的团队掌握。在技术团队扩展的模式下,落在 Talent.ID 这一侧的是雇佣关系——薪资发放、员工福利、人才管理,以及与员工之间持续的关系。

告诉我们您的团队需要什么

描述一下缺口——工作内容、技术栈、团队的运作方式——我们会告诉您能支持到什么程度。如果这不是我们能帮上忙的事情,我们会直说。