大数跨境

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

10 个常见的后端任务及其自动化方法 索引目录
2025-03-25
3
导读:在构建后端时,开发人员通常需要执行大量重复性任务,例如配置 API、处理服务发现和扩展基础设施。

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

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

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

让我们开始吧。


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

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

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




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!"
});



2.服务发现。

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

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

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

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

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



Encore 如何实现这一自动化?

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

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

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

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



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



另外,如果您需要从终端调用它,您可以将其复制为 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使用工具来自动管理和配置这些内容。Terraform或href="https://www.terraform.io/">AWS 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.

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

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



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

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



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

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

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





5. DevOps 自动化。

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

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

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



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 Explorer 来测试您的 API。



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


7. 预览环境。

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

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

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

  • 为临时环境复制生产级基础设施(数据库、队列、API)需要深厚的云专业知识。

  • 在不泄露生产数据的情况下植入测试数据需要精心的安排。

  • 确保与生产配置(安全规则、网络策略) 1:1 一致很容易出错。

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

Encore 如何实现这一自动化?

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

它们是在 Encore Cloud 上运行的免费、完全托管的开发环境。一旦连接到 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

您还可以通过运行以下命令将日志直接实时传输到您的终端: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 }) => {
// ...
},
);

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

类型安全的 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}!` };
},
);

您可以在文档中阅读有关类型安全 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)

✅ 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;

如果迁移失败(比如由于语法错误或模式冲突),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

第一次迁移通常定义初始表结构。当您在本地运行应用程序或将其部署到云时,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(样式)。


【声明】内容源于网络
0
0
索引目录
索引目录是一家专注于医疗、技术开发、物联网应用等领域的创新型公司。我们致力于为客户提供高质量的服务和解决方案,推动技术与行业发展。
内容 0
粉丝 0
索引目录 索引目录是一家专注于医疗、技术开发、物联网应用等领域的创新型公司。我们致力于为客户提供高质量的服务和解决方案,推动技术与行业发展。
总阅读0
粉丝0
内容0