10 个常见的后端任务及其自动化方法

2025-05-24

10 个常见的后端任务及其自动化方法

在构建后端时,开发人员通常需要执行许多重复性任务,例如配置 API、处理服务发现和扩展基础设施。

如果您可以自动解决大多数这些复杂问题会怎么样?

今天,我们将学习 10 个常见的后端任务以及如何使用 Encore 自动执行它们。

让我们开始吧。


使用云服务构建可扩展的应用程序通常会带来糟糕的开发人员体验,开发人员最终需要管理复杂的基础设施并执行重复性任务,从而降低他们的速度。

Encore通过提供一个开源后端框架(用于 TypeScript 和 Go)来帮助解决该问题,该框架可让您将基础设施定义为应用程序中的类型安全对象,从而将您的基础设施与应用程序代码统一起来。

✅ 高性能 Rust 运行时
✅ 无需 DevOps 经验
✅ 改进了分布式系统的类型安全性

Encore Cloud 后端开发工作流程

如果您有兴趣了解后端框架如何使用 Encore 的多线程 Rust 运行时在后台工作,请阅读文档

顺便说一句,Encore 是开源的,在 GitHub 上有 9.4k 个星。

明星安可⭐️

让我们详细讨论一下要点。


1.API通信。

API Communication是不同的应用程序如何使用 API(应用程序编程接口)相互通信并共享信息。

这就像在餐厅点菜一样,您的请求(order)发送到厨房(server),然后厨房将食物送回给您(response)。

在微服务中,进行可靠的 API 调用非常棘手。开发人员通常需要手动编写 HTTP 客户端等。

 

🎯 Encore 如何实现自动化?

使用 Encore,您无需手动设置服务之间的 HTTP 请求。相反,服务之间的 API 通信是通过将 API 调用视为常规函数调用来实现的。无需 HTTP 客户端,也无需自定义重试逻辑。

即使您使用多个服务,也能获得类似单体式架构的简洁开发体验。您只需导入要调用的服务 ~encore/clients ,然后像函数一样调用其 API 端点即可。

您可以获得函数调用的所有好处,例如:

✅ 编译时检查所有参数。✅
编辑器自动补全。✅
允许将代码划分为逻辑组件、服务和系统。

在下面的示例中,我们导入服务 hello 并 ping 使用函数调用来调用端点 hello.ping

import { hello } from "~encore/clients"; // import 'hello' service

export const myOtherAPI = api({}, async (): Promise<void> => {
  const resp = await hello.ping({ name: "World" });
  console.log(resp.message); // "Hello World!"
});

Enter fullscreen mode Exit fullscreen mode

如果您有兴趣了解,请阅读有关 API 调用的更多信息。

使用 Encore,API 通信就像调用同一代码库内的函数一样。


2.服务发现。

在微服务架构中,service discovery 即使服务的位置动态变化(当服务移动或扩大/缩小时),也能使服务自动定位并相互通信。

与所有组件都集中在一个地方的单片系统不同,微服务独立运行,通常在不同的服务器或容器上。

示例:在社交媒体平台上,当用户发布新更新时,平台需要通知不同服务(通知、分析等)上的关注者。如果某个服务迁移或重启,其他服务需要实时重新发现它。

手动管理这些依赖关系可能会导致配置错误和停机。

如果你有兴趣了解更多,那么 Middleware 编写的《什么是服务发现?完整指南 - 2025 版》是一个很好的起点。

中间件

 

🎯 Encore 如何实现自动化?

Encore 通过生成样板代码并自动设置必要的基础设施资源来改进服务发现。它还通过提供服务目录和 API 文档来提升开发者体验 (DX)。

Encore 无需维护服务注册表或硬编码依赖项,而是使用 Encore 应用程序模型 通过跟踪所有可用服务及其端点来自动生成服务目录。

您可以在本地开发仪表板中找到它。

您可以查看所有服务的摘要、特定服务的详细信息以及该服务所包含的端点类型。如果您在代码中添加了注释说明,注释也会相应显示。

仪表板中的服务

查看端点的详细信息时,您可以看到请求和响应对象。您甚至可以直接从服务目录中调用它。

端点的请求和响应对象

另外,如果您需要从终端调用它,您可以将其复制为 cURL。

复制为 curl 命令

您可以观看此视频以了解更多信息。


3.架构图。

在微服务架构中,了解服务的交互方式对于调试、扩展和性能优化至关重要。通常,团队手动创建和维护架构图,但随着系统的发展,这些架构图会变得过时。

例如,在正常运行时间监控系统中,各种服务负责处理状态检查、通知和分析。实时架构图可以更轻松地跟踪这些服务的连接方式以及如何响应事件。

 

🎯 Encore 如何实现自动化?

始终保持最新的架构图可帮助工程师快速识别服务依赖关系、潜在瓶颈以及整个系统的数据流。

Encore 提供了一种称为的可视化工具,Flow可让您始终了解整个系统的最新视图,帮助您推理微服务架构并确定哪些服务相互依赖以及它们如何协同工作。

✅ 在瓶颈发展成大问题之前将其追踪。✅
立即揭示其依赖关系的性质和规模。✅
实时自动更新,以在您更改代码时反映您的架构。

它可以在 本地开发仪表板 和 云环境的Encore Cloud 仪表板中访问。

在本地开发时,Flow 会在您更改代码时实时自动更新,以反映您的架构。对于云环境,它会在每次部署时自动更新。

在下面的示例中, login 服务依赖于 user 和 authentication 服务。虚线箭头表示对某个主题的发布或订阅。此处, payment 表示向该 payment-made 主题发布内容,并 email 订阅该主题。

流动安可

正如我之前所说,它是实时更新的。在下面的示例中, 服务payment-made 中引入了该主题的新订阅,然后又将其删除user 。

安可流可视化工具

您可以将鼠标悬停在某个服务或 PubSub 主题上,即可立即显示其依赖关系的性质和规模。

从下图中,我们可以注意到,它对 login 数据库进行查询,并向服务的两个端点发出请求 user ,同时向 authentication 服务的一个端点发出请求。

突出显示依赖项

假设我们正在构建一个正常运行时间监控系统,当您的网站出现故障时它会通知您,以便您可以在用户注意到之前修复它。

这是自动生成的后端架构图,其中白框表示服务,黑框表示 Pub/Sub 主题。

后端架构图

您可以观看此视频以了解更多信息。


4. 本地和云环境的基础设施配置。

Infrastructure provisioning是设置和管理应用程序运行所需的 IT 资源(例如服务器、数据库和网络)的过程。

开发人员经常需要手动配置数据库、消息队列和 API 网关等云资源。

例如,如果您正在构建一个实时聊天应用程序,则需要配置数据库、WebSocket 服务器和负载均衡器。在不同环境(开发、预发布、生产)之间手动管理这些组件会增加额外的开销。

Infrastructure automation正在使用工具自动管理和配置这些内容。TerraformAWS CloudFormation等工具可让您将基础设施定义为代码 (IaC)。

使用 IaC,您只需一个命令即可启动相同的开发、测试和生产环境。Pulumi就是这样一款现代 IaC 工具,它使用您熟悉的编程语言,例如 JavaScript 或 Python。

但是使用 IaC,您仍然必须手动编写数千行 terraform 代码来实现基础设施自动化,这是一项艰巨的工作。

 

🎯 Encore 如何实现自动化?

Encore 允许您在应用中将基础设施定义为类型安全的对象,从而将基础设施与应用程序代码统一起来。Encore 可以通过解析应用程序代码来自动化基础设施的配置。

// Define a PostgreSQL database in one line of code

import { SQLDatabase } from "encore.dev/storage/sqldb";

const db = new SQLDatabase("userdb", {migrations: "./migrations"});
// ... use db.query to query the database.
Enter fullscreen mode Exit fullscreen mode

Encore Cloud 可自动在所有环境和所有主要云提供商中配置所有必要的基础设施,而无需更改应用程序代码。

✅ 跨云提供商工作,无需锁定供应商。✅
无需编写 Terraform 或管理特定于云的配置。

基础设施配置

该方法将开源后端开发框架与基于 SaaS 的云自动化平台 ( Encore Cloud) 相结合。这种组合提供了类似 PaaS 的部署简便性和强大的开发人员生产力功能,同时保持在您自己的云帐户 (AWS/GCP) 中运行所有内容的灵活性。

下面是架构图,可以帮助您了解其幕后工作原理。

它是如何工作的

例如PaaS,它完全自动化了基础设施和云部署。

与 一样IaC,它允许您使用自己的云提供商和强大的基础设施服务(如 Kubernetes),但不需要 Terraform 的任何手动开销和复杂性。

与传统的 PaaS 不同,Encore Cloud 不会托管您的应用程序。您的基础架构保留在您自己的 AWS 或 GCP 帐户中,因此您永远不会失去控制。

最好的paas

查看文档以了解有关自动化基础设施配置的信息。

Encore 团队还发布了一篇有趣的博客,介绍如何设计算法云基础设施配置系统。


5. DevOps 自动化。

DevOps 自动化为软件开发生命周期的每个阶段提供了清晰明确的方案。它改进了 CI/CD 流水线、部署流程和监控任务。

假设一个快速发展的电子商务平台,正在经历频繁的部署和基础设施变更。DevOps 团队难以跟上手动配置资源、配置管理和部署流程的步伐。这可能会导致不一致、部署失败和停机。

JenkinsGitHub ActionsGitLab CI等工具有助于 CI/CD。此外,Kubernetes 还可以自行管理应用程序的扩展和负载平衡,从而处理容器编排。

DevOps 工作流程

 

🎯 Encore 如何实现自动化?

Encore 提供开源工具来帮助您与云基础设施集成、处理部署和监控。

无论您是使用 Docker 进行自托管还是使用Encore Cloud,它都可以在 AWS 和 GCP 上的您自己的云中完全自动配置和管理基础设施。

这种方法显著降低了使用 Kubernetes 和 Pub/Sub 等可扩展、生产就绪型云服务所需的 DevOps 专业知识水平。由于应用程序代码是基础设施需求的真实来源,因此它可以确保所有环境中的基础设施始终与应用程序的当前需求保持同步。

Encore 提供内置的 DevOps 工具:

✅ 基础设施跟踪和审批工作流程
✅ 自动最小特权 IAM✅
成本分析仪表板
✅ 用于扩展基础设施的 Encore Terraform 提供商

所以,是的,你实际上几乎不需要任何 DevOps 经验。

您可以在文档中阅读有关 DevOps 自动化的更多信息。


6.API 文档。

所有开发人员都同意 API 文档很重要,但维护它的努力不可避免地会导致文档变得陈旧和过时。

想象一下,您正在集成一个 API,却发现文档已过期、端点缺失、请求参数不匹配、错误代码不正确。这不仅会让您感到沮丧,还会浪费大量时间进行调试,并导致您与 API 提供商之间不必要的反复沟通。

假设一个社交媒体平台的公共 API,开发人员经常添加新功能或修改现有端点。每次手动更新文档都会花费更长时间,而且容易出错。

保持 API 文档保持最新是开发人员常见的痛点。

 

🎯 Encore 如何实现自动化?

使用 Encore 的本地开发仪表板,可以自动为您的所有 API 端点生成 API 文档。

当您修改 API 时,文档会动态更新。

这是由 Encore 的静态分析提供支持的,它直接从您的应用程序代码处理您的 API 定义,确保文档始终与最新的实现保持同步。

API 文档

它还提供了一个 API Explorer 来测试您的 API。

API 探索器

API 文档是服务目录的一部分(我们在服务发现中介绍过),但我将此部分分开,因为它们涵盖不同的方面。


7.预览环境。

Preview environments 代表为每个 PR 创建的单独临时部署。这些部署是生产环境的忠实副本,涵盖所有微服务、数据库和依赖项。

它允许开发人员在将更改合并到主分支之前在隔离环境中测试更改。

然而,手动设置它们往往会成为 DevOps 的噩梦。

  • 为临时环境复制生产级基础设施(数据库、队列、API)需要深厚的云专业知识。
  • 在不泄露生产数据的情况下播种测试数据需要精心的协调。
  • 确保与生产配置(安全规则、网络策略) 1:1 一致很容易出错。

如果没有预览环境,在共享暂存环境中进行测试可能会破坏其他功能。而且,为每个 PR 手动配置 AWS 资源(EC2、RDS、VPC)需要花费数天时间。

 

🎯 Encore 如何实现自动化?

当您使用 Encore 构建后端应用程序时,激活预览环境所需的唯一设置是 连接您的 GitHub 帐户,您将立即获得预览环境的好处。

它们是在 Encore Cloud 上运行的免费、完全托管的开发环境。连​​接到 GitHub 后,推送代码将自动触发部署。

GitHub 集成

每次提交时预览环境

您无需担心编排、集成、清理或实施任何单独的监控。它内置了分布式跟踪和关键性能指标检测功能。

得益于 Neon 的数据库分支功能,它还自动附带预填充的测试数据。您可以在文档中阅读更多内容。

您也可以在云仪表板中跟踪部署进度。

成功部署

云部署


8.可观察性。

Observability从高层次上讲,它被定义为使用外部输出来评估系统内部状态的过程。

想象一下,你的应用一夜之间爆红,流量激增。起初一切似乎都很好,直到结账请求开始失败,用户开始报告错误。如果没有适当的可观察性,你将一无所知,难以查明问题所在。

获得实时洞察和详细记录,以便您可以识别瓶颈并更快地进行调试,这将使您的工作变得更加轻松,尤其是在意外流量期间。

如果您有兴趣了解更多信息,《可观察性原则指南:意义、实际实施和最佳实践》是一个不错的起点。

 

🎯 Encore 如何实现自动化?

Encore 提供内置可观察性,无需任何额外设置。它会自动跟踪所有后端服务的日志、追踪信息和指标。

✅ Encore 提供分布式跟踪来跟踪您的应用程序和基础设施中的请求。

与使用跟踪通常需要进行的密集检测相反,Encore 会自动捕获所有环境中整个应用程序的跟踪。独特的是,这意味着您甚至可以在本地开发中使用跟踪来帮助调试和加快迭代。

您可以访问大量信息,例如堆栈跟踪、结构化日志记录、HTTP 请求、网络连接信息、API 调用、数据库查询等等。更多信息请参阅文档

安可分布式追踪

 

✅ 它为每项服务提供常见应用程序级指标的自动仪表板。

为您的应用定义自定义指标也非常简单。定义完成后,自定义指标会自动显示在云仪表板的指标页面上。

您还可以将指标发送到第三方服务(例如 Datadog、Grafana),而不是云提供商的监控服务。阅读文档

关键指标重演

 

✅ Encore 内置了对 Logging 的支持,它将自由格式的日志消息与结构化且类型安全的键值对相结合。这使得计算机更容易解析、分析和索引。

您只需将其添加到模块中:import log from "encore.dev/log";

然后, 您可以调用任何日志记录函数(例如 error、、 或 )  来发出日志消息。warninfodebugtrace

const logger = log.with({is_subscriber: true})
logger.info("user logged in", {login_method: "oauth"}) // includes is_subscriber=true
Enter fullscreen mode Exit fullscreen mode

您还可以通过运行以下命令将日志直接实时传输到终端:encore logs --env=prod。请参阅文档了解更多信息

本地开发仪表板将所有这些功能结合在一起,实现了可观察性的自动化。这样,开发人员就可以专注于真正重要的事情。


9.验证传入请求

API request validation是检查客户端请求与规定的 API 规范是否一致的过程。

如果没有适当的验证,您的应用程序可能会处理不完整或恶意的数据,从而导致意外行为、昂贵的调试甚至泄露敏感信息。

例如,在支付处理 API 中,传入请求必须包含有效的支付详细信息,例如卡号、有效期、CVV 码。如果这些字段缺失或格式不正确,可能会出现严重问题。

在多个端点验证此类请求很重要,但我们可以使这个过程更容易。

 

🎯 Encore 如何实现自动化?

Encore.ts 直接使用原生 TypeScript 类型来验证传入的请求,让您兼得简洁的 TypeScript 语法和运行时模式验证的优势。这意味着您的 API 在运行时和编译时都是类型安全的。

Encore.ts 可以轻松定义组合来自不同来源的数据的 API 端点:一些字段来自请求主体,其他字段来自查询参数,一些来自 HTTP 标头。

这是一个例子。

import { Header, Query, api } from "encore.dev/api";

interface Request {
  // Optional query parameter. Parsed from the request URL.
  limit?: Query<number>;

  // Custom header that must be set. Parsed from the HTTP headers.
  myHeader: Header<"X-My-Header">;

  // Required enum. Parsed from the request body.
  type: "sprocket" | "widget";
}

export const myEndpoint = api<Request, Response>(
  { expose: true, method: "POST", path: "/api" },
  async ({ limit, myHeader, type }) => {
    // ...
  },
);
Enter fullscreen mode Exit fullscreen mode

您可以在文档中阅读有关验证传入请求的更多信息,包括支持的验证类型和基于值的规则。

🎯 类型安全的 API。

Encore.ts 还确保了类型安全的 API,无需任何额外设置。Encore.ts 中的 API 本质上是普通async函数,其请求和响应数据类型定义为 TypeScript 接口。

⚡ 它会自动生成必要的设置,这意味着no boilerplate

⚡ 它分析您的代码以检测请求和响应模式,自动验证传入的请求。

要定义 API 端点,我们需要使用 模块api 中的函数 encore.dev/api 。Encore.ts 会在编译时生成必要的样板代码。以下是示例。

// inside the hello.ts file
import { api } from "encore.dev/api";

export const ping = api(
  { method: "POST" },
  async (p: PingParams): Promise<PingResponse> => {
    return { message: `Hello ${p.name}!` };
  },
);
Enter fullscreen mode Exit fullscreen mode

您可以在文档中阅读有关类型安全 API 的更多信息。


10.数据库迁移。

Database migration(也称为schema migration)是在数据库之间移动数据、元数据和模式的过程。

管理跨环境的数据库模式变化可能很困难,特别是在协调迁移和应用程序更新时。

假设有一个电商平台,您需要在 products 表中添加一个新列来支持产品变体。在开发、测试和生产环境中手动应用此更改可能会导致问题,并且肯定会比平时花费更长的时间。

如果您有兴趣了解更多信息,请查看Prisma 的数据库迁移是什么。

 

🎯 Encore 如何实现自动化?

Encore 将 SQL 数据库视为逻辑资源,并原生支持 PostgreSQL,从而简化了数据库迁移。它使用 change-based迁移功能。

✅ Encore 自动应用up迁移。每次 up 迁移按顺序运行,体现出自上次迁移以来数据库架构的变更。

Down回滚更改时仍需要手动执行迁移。

✅ Encore 维护一个schema_migrations跟踪应用迁移的表,这提高了开发、登台和生产环境之间的一致性。

database=# \d schema_migrations
          Table "public.schema_migrations"
 Column  |  Type   | Collation | Nullable | Default
---------+---------+-----------+----------+---------
 version | bigint  |           | not null |
 dirty   | boolean |           | not null |
Indexes:
    "schema_migrations_pkey" PRIMARY KEY, btree (version)
Enter fullscreen mode Exit fullscreen mode

✅ Encore 支持流行的 ORM(Prisma、Drizzle、Sequelize)和迁移框架(Atlas)。如果您的 ORM 或工具能够通过标准 SQL 驱动程序连接到数据库或生成 SQL 迁移文件,那么它可以轻松地与 Encore 配合使用。

示例:SQLDatabase 允许您创建一个命名数据库并检索其连接字符串。您选择的 ORM 或迁移框架可以使用此连接字符串来建立数据库连接。

import { SQLDatabase } from "encore.dev/storage/sqldb";

// Initialize a named database with migration directory
const SiteDB = new SQLDatabase("siteDB", {
  migrations: "./migrations",
});

// Retrieve the connection string for ORM use
const connStr = SiteDB.connectionString;
Enter fullscreen mode Exit fullscreen mode

如果迁移失败(比如由于语法错误或模式冲突),Encore 将回滚迁移并中止部署。

迁移文件存储在 migrations 服务包内的目录中。

/my-app
├── encore.app                       // ... other top-level project files
└── todo                             // todo service
    ├── migrations                   // database migrations (directory)
    │   ├── 1_create_table.up.sql    // first migration file
    │   └── 2_add_field.up.sql       // second migration file
    ├── todo.ts                      // todo service code
    └── todo.test.ts                 // tests for todo service

Enter fullscreen mode Exit fullscreen mode

第一次迁移通常定义初始表结构。当您在本地运行应用程序或将其部署到云端时,Encore 会自动按顺序应用所有待处理的 up迁移。

查看文档以获取有关数据库迁移、处理错误、连接数据库等的分步指南。


您还可以使用 Encore 做更多的事情:

  • Automated testing- 内置测试工具,可让您使用各种测试运行器轻松测试应用程序。
  • Automated IAM- 通过解析您的代码生成最小权限 IAM 策略来自动化安全最佳实践。
  • Deployment automation (Replay)- Railway 无法知道您已将新图像推送到容器注册表,但 Encore 可以使用 Railway 的 GraphQL API 在将新图像推送到注册表时触发新的部署。

为了避免篇幅过长,我不会涵盖所有主题,因此请查看文档以获取完整的详细信息。

如果您打算开始使用 Encore,请查看其SAAS 入门模板。它包括 Next.js(前端)、Encore.ts(后端)、Clerk(身份验证)、Stripe(支付)、Tailwind 和 Shadcn(样式)。


呼!内容好多啊。

后端开发非常复杂。我希望这些能够自动化你的一些重复性工作。

如果您有任何问题或反馈,请在评论中告诉我。

祝你今天过得愉快!下次再见 :)

你可以在anmolbaranwal.com
查看 我的作品 感谢阅读!🥰
叽叽喳喳 GitHub 领英

结尾挥手告别的 GIF

文章来源:https://dev.to/anmolbaranwal/10-common-backend-tasks-and-how-to-automate-them-4c79
PREV
用简单的 JavaScript 就能实现 15 件奇妙的事情🤯
NEXT
完整的 Python 路线图 2023 ❤️ 在 GITHUB 上赞助我 ❤️ 查看全新完整的 Python 路线图 2024