跳到本文

计算与网络

Yaoploy

应用副本调度与就绪入口发布

Yaoploy 把完整应用声明落实到当前受管节点:分配副本、准备镜像、启动前台进程,并在应用就绪后更新公开入口。它分别报告进程状态与入口状态,让操作者能够区分“已经启动”“可以接收工作”和“入口已经登记”。

将应用镜像部署为服务 维护者声明镜像、副本目标与服务名称。节点接收完整分配计划,应用初始化完成后通知就绪,再把实际监听端点同步到入口。

用完整声明描述应用的期望

一份应用声明包含名称、镜像和目标副本数,还可以选择私有 TCP 监听或公共 HTTP 服务。每次设置提交完整内容,省略旧字段就是移除相应选择;把副本设为零则保留声明并表达停止意图。

控制端持久保存完整声明和不可变只读镜像。节点代理接收完整分配计划,在一致的运行环境中准备镜像并启动进程。公开 HTTP 应用还要经过两次确认:应用先通知自己已经就绪,Server 再核对当前计划、镜像与会话,才将合格端点写入 Yaogress。

Server、Agent、应用和 Yaogress 的交互时序,按分配、启动、就绪报告和完整服务登记的顺序展开。
应用报告就绪后,才发布公共入口以公开 HTTP 监听应用为例:Server 下发计划,Agent 核验镜像并交付监听端口,应用完成初始化后通知就绪。Server 还要核对当前计划、镜像和会话,才向 Yaogress 提交完整服务。

应用接入从一个清楚的运行入口开始

应用交付完整镜像,并以 /app/run 作为前台入口。程序从 /app 工作目录运行,不能依赖交互式 shell、隐式环境变量或另一个守护进程替它维持生命。业务配置与所需材料应明确随运行环境提供。

接收网络请求的应用复用代理交付的监听 socket,并在依赖、路由或数据初始化真正完成后发送就绪通知。没有监听需求的 Worker 则以进程运行承担任务,不应为了进入网关而制造无意义的 HTTP 接口。

  1. 交付可运行内容

    把入口、依赖与配置关系准备完整,明确进程如何正常结束以及退出前需要完成哪些业务清理。

  2. 声明副本与入口

    提交完整应用声明,选择 Worker、私有 TCP 或公共 HTTP 所需的实际能力。

  3. 接收工作前报告就绪

    使用已继承的监听对象,在当前进程完成初始化后发送一次有效通知。公共入口由控制端继续核对并同步。

副本在当前受管范围内收敛

节点身份来自控制连接实际使用的 IPv4。注册后还需订阅分配计划,持续接收后续安排,才成为当前受管成员;心跳、订阅和当前会话共同维持该关系。同一地址重新进入时保持节点身份,但用新会话替代旧会话。

调度保留合适的现有分配、移除超额部分,再向可用节点补足缺口,每个受管节点最多运行一个同名应用实例。失联成员退出后可以立即安排替代,旧节点上的进程可能仍然执行,因此副本目标不构成全局执行互斥。

三种应用形态
形态启动与就绪入口行为
任务型应用(Worker)前台子进程存活后视为就绪不分配监听入口。
私有 TCP接收节点交来的网络监听对象,再发出就绪信号协议由应用选择。
公共 HTTP使用同样的监听与就绪过程把合格端点同步为一份完整服务记录。

让应用确认自己可以接收工作

节点代理取得完整镜像并核对内容,挂载只读应用目录后启动前台程序。配置通过明确目录传入,材料相对应用工作目录读取,输出保留在控制台。应用使用共同的节点运行环境,彼此是共享 root 管理员权限的互信进程。

监听应用直接接收已经绑定端口的网络监听对象(socket),无需先探测空闲端口再重新绑定。它完成初始化后,通过独立管道发送一次就绪通知并关闭管道。只有当前活子进程的完整通知才有效,旧进程迟到的消息不能重新发布端点。

  1. 准备

    接收并核验镜像,准备挂载与应用输入。

  2. 启动

    绑定实际监听端口,将对应网络对象交给前台子进程。

  3. 就绪

    应用完成初始化,发送完整的一次性通知。

  4. 监督

    退出或失败先撤回就绪,清理完成后按当前分配重试。

执行状态与入口状态各自清楚

每个公共应用在 Yaogress 网关中对应一条稳定服务记录,统一保存域名规则与当前合格后端。端点必须匹配当前应用、镜像、节点会话和已经采用的计划。没有就绪后端时,期望入口就是移除该服务。

服务登记发生冲突时,不会只发布可用的部分域名或部分后端。执行状态与网关同步状态分别展示:应用进程可以就绪而入口仍待处理;登记完全相等也还不能证明一次真实 HTTP 请求已经成功。

当前 Agent 会话、该应用已采用的分配和当前 Ready 实例汇合为 Server 的端点资格检查,然后更新服务注册。
从本地就绪到可发布端点Server 只接纳当前认证会话与 NodeId 下、该应用分配已采用且实例仍 Ready 的端点。采纳序号须达到该 App 最近一次分配变更,并匹配当前 App、Image 与 listen;无关应用的计划变化不应改变该端点的资格。登记之后,公网路由与业务请求仍需独立验证。
读懂当前观察
观察准确含义范围
已分配(Assigned)当前期望分配的数量当前受管成员
运行 / 就绪观察到活进程/符合计划的就绪实例当前有效会话
网关已同步完整服务登记与当前期望相等注册配置,非请求成功率

发布后,按同一应用逐层定位问题

调查一次发布时,先核对持久声明中的镜像与副本目标,再查看当前节点会话和已经采用的分配计划,最后对应到活子进程与入口登记。相同应用名称并不足以串起这些事实;旧会话、旧镜像或旧计划的就绪消息都不能证明当前发布完成。

若进程已就绪但入口未同步,应检查完整服务登记的冲突与同步结果;若登记已经一致,则用实际 HTTP 请求核对目的端点和应用响应。把这两段工作分开,可以避免为修复一个入口冲突而无依据地重启应用。

  • 准入条件:当前计划下的活进程已就绪

    应用、镜像、节点会话与已采用计划均匹配,才允许该端点进入当前公共服务的后端集合。

  • 不成立的保证:副本数等于全网同时执行数

    失联节点退出当前受管范围后,原进程仍可能存活。需要排他效果的业务应自行维护授权或去重。

  • 继续核对:入口记录与期望相等

    这说明登记同步结果,实际连接、请求处理和业务输出仍需相应观察。

在重连和替换时保持清楚的责任

子进程退出,包括正常退出,都会撤回就绪并进入受控重试。清理失败时仍保留原工作,阻止同一应用的冲突启动。控制连接丢失并不能证明远端进程已停;业务授权、重复抑制、独占写入和外部持久数据由应用负责。

设计中的验证从两个相同节点环境出发,检查实际监听端口接收请求、就绪端点传播、子进程重启、失联重入与控制端重启。声明与镜像应可恢复,成员与分配则从新会话重建;这些仍需对应实验记录支持。