Encore:让 Go 后端少折腾基础设施,把时间还给真正的产品
发布日期:
一个好框架的价值,不是让开发者多学一套术语,而是让用户想要的功能更快出现、让企业的系统更容易持续成长。ThingsPanel 最近开始引入的 Encore.go,正是这样一种值得关注的技术选择。
想象几个很普通的愿望。
你在阳台种了番茄,希望土壤太干时手机能提醒你;家里养了鱼,希望水温异常时有人第一时间知道;你开了一家咖啡馆,希望冷柜半夜断电后不是等到第二天才发现;你管理一座工厂,希望设备出现异常征兆时,维修人员能看到数据、收到告警,并找到问题发生的环节。
这些需求听起来并不复杂,甚至很有生活气息。
但如果把它们做成真正能长期使用的软件,背后会迅速出现一长串问题:设备怎样接入?数据存在哪里?接口怎样定义?不同功能怎样协作?告警如何触发?现场出了问题如何排查?程序怎样从开发电脑部署到客户环境?
用户只想解决一个问题,开发团队却可能需要先搭建半套基础设施。Encore 想改变的,正是这种局面。
一、Encore 是什么?它不只是另一个 Go Web 框架
如果把普通的 Web 框架比作一套好用的工具,Encore 更像是一套围绕后端应用构建的工作方式。
Encore 支持 Go 和 TypeScript。本文重点介绍 Encore.go:它让开发者在 Go 代码中声明 API、服务、数据库、消息事件、缓存、定时任务等资源,再利用框架的分析和工具链,把这些声明转化为可运行、可检查的应用模型。
理解 Encore,可以把它拆成三部分:
Encore.go 开源 SDK 与运行时:定义类型安全的 API、服务及基础设施资源,组织应用结构;少写重复接线代码,让项目规则更统一。
Encore CLI 与本地开发工具:启动应用及所需的本地资源,展示 API、调用链和架构关系;新人更快上手,开发和调试不必依赖一堆手工脚本。
可选的 Encore Platform:将应用模型用于 AWS / Google Cloud 环境的资源配置、部署和观测;减少云环境搭建与部署协作成本。
这里有一个非常重要的区别:Encore.go 的开源开发能力,开发团队也可以使用开源工具构建 Docker 镜像,并自行管理生产基础设施。
从定位上看,Gin、Echo 等框架主要帮助开发者处理 HTTP 路由、中间件等 Web 层工作;Encore 还进一步关心一个后端系统里的服务关系、资源依赖、本地开发、调试和交付链路。
所以,Encore 的吸引力不在于“又多了一个能写接口的框架”,而在于:它希望把过去散落在代码、配置、脚本和运维平台里的工作,组织成一套更容易理解和协作的工程体系。
参考:Encore 官方概览 https://encore.dev/docs · Encore.go https://encore.dev/go
二、一个简单需求,为什么会变成复杂工程?
假设我们要做一个“智能鱼缸”:水温低于设定值时发送提醒,并能在手机上查看过去一周的温度变化。从使用者的角度看,只需要两个功能:看数据、收提醒。从系统实现看,却至少涉及几件事:让传感器的数据通过 MQTT、HTTP 或其他接入方式到达平台;将不同设备上报的字段统一为可理解的温度、设备编号和时间;对外提供接口,让页面或 App 能查询当前状态和历史数据;将“温度越界”变成可处理的业务事件,触发相应的告警流程;保留日志与调用链,让管理员在提醒失败时知道卡在哪里;把这些能力稳定部署到实际服务器,并在后续版本中不断迭代。
Encore 并不负责直接理解每一种传感器的私有通信协议。那是设备接入平台和协议适配层的工作。Encore 更擅长的是接住这些业务需求后面的软件工程:API 怎样协作、数据库怎样连接、事件怎样分发、服务怎样被观察和部署。
这也是它与 ThingsPanel 很自然的结合点:ThingsPanel 面向设备、物模型、看板、告警和行业应用;Encore 面向支撑这些能力长期演进的后端工程体系。二者关注的层次不同,正好形成互补。
三、Encore 最令人心动的八个价值
1. 把基础设施需求写进代码,减少“代码与环境两张皮”
传统项目常见的问题是:代码里需要数据库、消息队列、缓存,但这些资源的创建、连接、权限和部署配置散落在其他地方。Encore 通过声明式资源模型,让应用代码能表达“我需要什么”。框架分析这些声明,形成服务、API 与基础设施的关系模型。对于开发者,这意味着少做一些重复配置;对于团队负责人,则意味着代码与实际资源之间的关系更容易梳理、审查和维护。这不是说数据库不用设计、运维工作全部消失,而是把一部分反复发生的工作变成可复用的规则。
2. Go API 更有章法,协作更容易
Encore.go 可以从普通 Go 函数定义类型安全的 API,并根据接口定义处理路由、校验及相关开发工具。当团队扩展到多个开发者、多个前端、多个业务模块时,一份清晰的接口契约,比“大家约定好就行”可靠得多。例如设备管理、告警管理、租户管理分别在做什么,谁能调用谁、请求和响应的结构是什么,都更容易被看见。最终受益者并不只是一线程序员。当接口结构更清晰时,新增功能、接入第三方系统、交接维护工作,都可能变得更可控。
3. 本地开发更像“启动一个完整系统”,而不是“拼装一个环境”
使用 Encore 的常见开发方式是运行 encore run。它可以依据应用声明启动服务,以及相应的本地数据库、消息系统等资源,并提供开发仪表盘,方便直接测试 API、查看调用链和数据交互。对小团队、学生、独立开发者尤其有吸引力:你可以把更多精力放在“这个功能有没有解决问题”,而不是“为什么同事的电脑能跑,我的电脑不行”。当然,某些本地资源仍依赖 Docker 等运行条件;方便的是不再需要为每个项目手工重复维护全部编排细节。
4. 用事件驱动,把复杂流程拆开,又不把业务拆乱
设想一台设备上报异常,需要同时完成:记录一条异常事件;更新平台上的设备状态;触发告警或通知;为后续报表留下统计依据。如果所有步骤都压在一个同步调用里,任何一个环节变慢,都可能拖慢整条链路。Encore 的类型化 Pub/Sub 能帮助开发者用事件组织异步协作,让不同服务按自己的职责处理消息。这很适合物联网,也适合订单支付后的通知、物流状态更新、用户注册后的任务处理等业务。需要强调:事件机制并不会自动解决一切可靠性问题。重复投递、幂等处理、数据一致性与失败补偿仍需认真设计。框架降低的是常见机制的接入成本,而不是替团队做完所有业务判断。
5. 出了问题,不再只能靠猜
“为什么报警没发出去?”“为什么这个接口突然变慢?”“数据到底经过了哪些服务?”在生产系统里,定位故障往往比写出新功能更耗时。Encore 的开发工具提供 API 浏览、架构视图和分布式调用追踪。一个请求经过哪些服务、调用了什么数据库操作、在哪里出错,可以更直观地观察。对于长期运营的设备管理平台,这类可观测性尤其值得投资:用户感受到的稳定,离不开开发团队快速发现和理解故障的能力。
6. 从一个小应用开始,也能为长期扩展留空间
今天你只有一个后台,明天可能增加设备服务、规则服务、通知服务,后天又要服务不同客户与地区。Encore 支持从单个服务开始,按明确的业务边界逐步组织多个服务;也可以支持模块化单体和微服务的不同演进方式。真正好的架构不是把每一项功能都独立成一个服务,而是让一个模块只对自己负责的业务承担责任,避免重复建设、交叉修改和职责混乱。从用户角度看,这种设计的价值是:需求增加时,产品可以更从容地演进,而不是每次都因为系统结构不清而大面积返工。
7. 上云有捷径,私有部署也有选择
选择框架时,企业常问一个问题:以后会不会被某一家平台绑住?Encore 的托管平台可以按应用声明在用户自己的 AWS / Google Cloud 账户里配置资源并部署应用;但使用 Encore.go 并不强制依赖托管平台。开源工具支持构建可自行部署的 Docker 镜像。这为不同团队留下选择:想减少云运维负担的团队,可以评估托管平台;需要自行掌控交付环境的团队,可以走自托管路线。选择权本身,就是一种长期价值。不过,自托管不意味着“零运维”。基础设施配置、数据库迁移、调度任务、监控和安全仍由部署团队承担;迁出 Encore SDK 本身也会有代码迁移成本。
8. 在 AI 辅助编程时代,清晰架构更有价值
AI 可以帮我们写代码,但写得快并不等于能稳定上线。如果一个项目的服务关系、数据库依赖和运行环境全靠口头约定,AI 也容易猜错。Encore 的应用模型、接口类型和本地验证工具,为开发者及 AI 编程助手提供更清晰的上下文和验证路径。人仍然负责业务设计、代码评审、安全和测试,但重复理解“系统是怎么连接起来的”这一步可以更轻松。当写代码越来越便宜,定义清楚系统、验证系统是否可靠,就越来越值钱。
为什么 Encore.go 与 Go 是一组有吸引力的搭档?
Go 本身适合编写网络服务:语言设计简洁,编译与交付方式清晰,goroutine 等并发机制便于组织大量相互独立的任务。对于需要长期处理数据请求、设备状态和业务事件的系统,这些特征很有实际意义。但 Go 解决的是怎样把程序写好,Encore 更进一步解决怎样把多个程序和它们依赖的资源组织好。二者组合的价值,不是给每一条请求施加魔法般的性能加速,而是让团队在获得 Go 工程特性的同时,减少自建接口规范、环境配置、服务接线和观测工具的重复负担。对于 ThingsPanel 这样的物联网平台,这个组合尤其符合长期演进的需要:底层继续依赖专业的设备协议和数据处理能力,上层业务服务则朝着职责清晰、易于调试、便于扩展的方向发展。真正的吞吐量、延迟和资源消耗,仍然要在具体部署与真实负载下验证。
四、从阳台到城市:Encore 能支持哪些有意思的应用?
Encore 不是只能出现在大型互联网公司的技术栈里。只要一个想法开始涉及接口、数据、事件和持续运行,它就可能发挥价值。常见场景包括:阳台种植、家庭温室,可以看光照和湿度、按条件提醒浇水,后端包括数据查询 API、任务调度、事件处理;鱼缸、宠物与家庭环境,可在水温或空气质量异常时及时提醒,需要状态服务、事件分发和通知流程;咖啡馆与连锁门店,可及时发现冷柜异常并统一查看多门店,需要门店服务、告警事件、租户与数据接口;冷链物流可追溯运输途中的温度异常,需要状态更新、业务事件和记录查询;工厂设备与能源管理可以监测设备趋势、管理故障处理流程,需要设备业务 API、规则协作和服务追踪;智慧楼宇和园区可以集中管理空调、水表、电表状态,需要业务模块协作、数据查询和定时分析;高校实验与创新项目可以从一个传感器实验逐步做成完整应用,需要本地开发、接口调试和模块化扩展;SaaS、会员系统、电商可快速验证想法,迭代订阅、订单和消息;AI 助手与智能工作流可把模型能力变成持续可用的产品服务。
这里的“可以支持”是指 Encore 具备相关通用后端构建能力,不是说这些行业应用由 Encore 一键生成,更不代表所有场景都已成为 ThingsPanel 的现成功能。比如在智慧农业、工业监控场景中,协议适配、物模型、设备控制和可视化,仍然需要 ThingsPanel 这样的物联网平台及具体业务实现来完成。这恰恰揭示了一个值得重视的趋势:优秀的通用后端工程框架,与有行业理解的应用平台结合,才能更快把技术变成用户真实可用的产品。
五、一个框架为什么值得信任?看看真实团队怎么用
评估技术不能只看产品首页的宣传词,还要看是否有团队把它用于持续运行的业务。Bookshop.org 从 Rails 走向 Go 服务。根据 Encore 官方客户案例,Bookshop.org 在转向 Go 的过程中遇到服务规范、基础设施和部署维护成本等问题,后来使用 Encore.go 与 Encore Platform 组织新系统。案例中提到团队通过这套组合显著减少 DevOps 工作,并改善应用迭代方式。它的关键启示是 Go 的简洁与 Encore 的工程约定可以相互补足。官方案例:https://encore.dev/customers/bookshop
Encore 官方披露,Groupon 在部分新项目中使用 Encore Platform 后,报告了约 3 倍开发速度提升、项目交付周期缩短约 90% 的结果。这里的数字来自特定团队、特定场景和 Encore 托管平台实践,不是对所有团队、所有 Encore.go 项目,更不是对 ThingsPanel 的效果承诺。官方案例:https://encore.dev/customers/groupon
真正值得关注的不是照搬别人节省了多少成本,而是共同的方向:当基础设施不再成为每次开发的阻碍,团队就能把注意力重新放回客户需求、产品体验和业务增长上。
六、为什么 ThingsPanel 选择 Encore.go?
ThingsPanel 的目标一直不只是“把设备连上网”。对设备厂商、系统集成商、企业客户来说,一个真正有价值的物联网平台,需要把设备接入、物模型、数据处理、告警、可视化与行业应用组织成可复用的交付链路。这也是 ThingsPanel 长期坚持的产品方向:用通用底座承载共性能力,再通过协议插件、设备模型和业务配置适配不同项目。
近期,ThingsPanel 开始在后端架构演进中引入 Encore.go。这项选择值得关注,因为它不是把现有业务推倒重来,而是希望把支撑这些业务的基础软件工程做得更清晰、更易协作、更便于持续迭代。我们看重的,并非 Encore 这个名称本身,而是它代表的几种能力。
对开发团队:少一点重复工程,多一点真实创新。设备平台常常要同时处理 API、数据库、告警流程、外部系统对接和多个业务模块。把通用 API 契约、服务依赖、基础设施声明、调用追踪纳入统一工程体系,有助于减少“新功能还没开始,就先得重做底座”的消耗。节省下来的精力,可以更集中地投入协议适配、设备管理体验、行业模板和现场交付细节。
对集成商:项目越做越多,经验应该越积越厚。集成商不怕做第一个项目,怕的是每接一个客户,都得从头整理接口、修改逻辑和调试环境。ThingsPanel 的协议插件、物模型和看板模板解决的是行业方案复用;Encore 希望强化的,是后端开发与服务协作的可复用性。两层能力结合,方向就很明确:今天为一类设备和一个场景完成的工作,应当尽可能成为下一次项目的起点,而不是只能在某个工程师的电脑里运行。
对设备厂商:软件不该成为硬件产品化的绊脚石。对传感器、控制器和网关厂商来说,硬件卖出后,客户很快还会问:能不能远程查看?有没有手机端?异常怎么提醒?能不能与我的系统对接?ThingsPanel 提供面向设备的接入与应用底座;Encore 带来的标准化后端工程思路,则有望帮助后续服务能力更稳妥地增加和维护。硬件销售只是一次交易,持续可用的软件服务才可能打开长期客户关系。
对企业用户:更容易维护、可持续演进,比一时功能多更重要。企业采购物联网平台时,往往更在意五年后的事情:新设备能否继续接入?系统怎样升级?问题如何定位?能否按要求部署在自己的环境?团队换人后还能不能维护?选择具备清晰接口、服务边界与可观测性思路的技术体系,能够为这些长期诉求提供更好的工程基础。但我们不会把“采用新框架”直接等同于“所有系统问题已经解决”。真正的可靠性,仍要由兼容性测试、负载验证、安全评审、部署验收和持续运维共同证明。
各司其职,而不是重复造模块。为了避免“有了新框架,就再造一套设备管理平台”的误区,ThingsPanel 的价值分工可以这样理解:ThingsPanel 的设备与行业能力负责协议接入、物模型、设备管理、规则与告警、可视化、行业场景配置;Encore.go 支撑的后端工程能力包括 API 与服务组织、资源声明、服务协作、事件流程、调试及可观测性基础;项目自身的部署与交付体系负责客户环境适配、数据迁移、容量规划、安全策略、升级与验收。清晰的职责边界,比单纯增加技术组件更重要。只有各层做好自己擅长的事,技术升级才会真正转化成产品升级。
七、如果你是客户,怎样判断这项技术选择有没有价值?
不需要先学会 Encore,也不必理解所有云原生术语。你可以从一次真实的试用或 PoC 中观察五件事:上手速度——从设备接入到看到第一张数据曲线,需要哪些步骤?功能迭代——增加一条业务规则、一个通知动作或一个接口,改动是否集中、清晰?问题定位——当数据、告警或接口异常时,能否快速追踪问题发生在哪一层?项目复用——设备模板、物模型、看板和业务逻辑,能否带到下一个相似项目?交付自主性——能否按自己的版本、服务器、网络与合规要求完成部署和维护?
这些问题,比“某个框架理论上能跑多快”更接近采购和使用者的实际利益。框架应该是产品体验的幕后功臣。你不需要每天感受到它的存在,但应该在需求变化时感受到更快的响应,在系统升级时感受到更好的可控性,在长期运营中感受到更低的沟通和维护负担。
八、几个值得提前说清的问题
Encore 是开源的吗?ThingsPanel 也是吗?Encore 的 SDK、CLI、编译器和运行时是开源的,项目使用 Mozilla Public License 2.0(MPL 2.0);其可选的托管平台是独立的商业服务。ThingsPanel 社区版采用 Apache License 2.0 开源许可。二者不是同一种许可证,具体分发与二次开发应分别遵守各自条款。
用 Encore 就必须把业务部署到国外云平台吗?不必。Encore.go 开源工具支持构建 Docker 镜像并自行部署。选择自托管时,需要自行配置相关基础设施和密钥等资源;数据库迁移和定时任务执行也不能假定由容器镜像自动完成。使用 Encore Platform 则主要针对 AWS 和 Google Cloud 的托管部署流程。
Encore 能直接接 MQTT、Modbus、PLC 吗?Encore 不是工业协议网关。设备接入与协议适配由专门的物联网能力承担。在 ThingsPanel 的场景中,Encore 的作用主要是组织业务 API、服务、事件及相关开发基础设施,而不是替代协议插件。
Encore 一定比 Gin 快吗?不能这么比较。Gin 等 Web 框架与 Encore 的覆盖范围不同。选择 Encore 的重点是工程组织与完整开发流程,而不是未经相同条件基准测试就声称 HTTP 性能一定更高。最终性能仍取决于代码、数据库、消息链路、部署资源和负载模型。
一个小项目也值得使用 Encore 吗?如果只是一个极其简单、没有外部基础设施的接口,直接用 Go 标准库或轻量 Web 框架可能已经足够。如果项目开始需要数据库、异步事件、多个业务模块和长期部署,Encore 的统一开发模型就更值得考虑。
九、真正的价值,不是把技术变复杂,而是把创造变简单
大多数人并不关心一个平台的后端究竟用了哪种框架。养鱼的人关心水温是否安全;门店老板关心冷柜出了问题能否及时知道;工厂负责人关心设备能否稳定运行;集成商关心项目能否按期交付并持续复用;企业管理者关心系统几年后是否仍能维护和扩展。技术的终点,始终是这些具体的人和具体的问题。
Encore 给 Go 开发者的启发是:一个团队不必把大量精力耗费在重复搭建后端基础设施上,可以用更清晰的工程方式做出稳定、可持续演进的产品。ThingsPanel 选择引入 Encore.go,也是沿着这个方向继续前进:一方面持续打磨设备接入、数据建模、可视化和行业应用,另一方面不断改善支撑产品演进的后端基础。
让技术细节更有章法,让设备连接更有价值,让每一个新的物联网想法都有更顺畅的落地路径。如果你正在寻找一个适合设备厂商、集成商或企业数字化项目的物联网应用底座,欢迎从真实设备和真实场景开始了解 ThingsPanel。与其只看一张架构图,不如亲自验证一条完整链路:接入设备 → 建立模型 → 展示数据 → 设置告警 → 复用方案。
了解更多:https://www.thingspanel.cn/ · https://docs.thingspanel.cn/zh-Hans/ · https://github.com/ThingsPanel
参考资料与说明
Encore 官方:What is Encore? https://encore.dev/docs
Encore.go 官方介绍 https://encore.dev/go
Encore 官方:Understanding Encore https://encore.dev/docs/understanding-encore
Encore.go:Defining Type-Safe APIs https://encore.dev/docs/go/primitives/defining-apis
Encore 官方:App Structure(单体、模块与微服务) https://encore.dev/docs/app-structure
Encore 官方:FAQ(开源、自托管与能力边界) https://encore.dev/docs/faq
Encore 官方:Build Docker Images(自托管注意事项) https://encore.dev/docs/self-host/build
Encore 官方:Bookshop.org 客户案例 https://encore.dev/customers/bookshop
Encore 官方:Groupon 客户案例 https://encore.dev/customers/groupon
ThingsPanel 产品文档 https://docs.thingspanel.cn/zh-Hans/





