# 版本发布说明

## Alluxio Enterprise AI 3.8

### 新功能

#### S3 API 高性能写入缓存

{% hint style="warning" %}
Experimental since AI 3.8
{% endhint %}

Alluxio 新增 S3 Put 操作写入缓存层，将写入延迟从约 50 毫秒降低到 10 毫秒以下，每个 Worker 可达 6 GB/s 并随 Worker 数量线性扩展。写入缓存支持完整的分块上传（MPU）操作，Worker 下线前会安全 drain 缓存，数据持久化到 UFS 后自动释放缓存空间。写入缓存路径策略通过动态配置管理，无需重启即可生效。

配置详情请参阅 [S3 写入缓存](/ee-ai-cn/performance/s3-write-cache.md)。

#### 优化 .safetensors 模型加载

Alluxio 在加载 `.safetensors` 模型时，将数千个小随机读取合并为大型顺序读取，性能达到 NVMe 本地磁盘速度的约 90%，比 AWS FSx Lustre 快高达 18 倍。通过符号链接访问的 `.safetensors` 文件与直接访问享有相同的优化效果。仅支持通过 FUSE 接口使用。

配置详情请参阅 [优化 AI 模型加载](/ee-ai-cn/performance/model-loading.md)。

#### Job Service 高可用性

多个 Coordinator 现在可共享同一个基于 etcd 的作业队列，消除了 Job Service 的单点故障。作业状态在 Coordinator 重启后得以保留——重启前的作业会自动恢复到等待队列，无需手动重新提交。某个 Coordinator 发生故障后，其他实例可在数秒内接管其作业。

配置详情请参阅 [Job Service](/ee-ai-cn/administration/managing-job-service.md)。

***

### 功能增强

#### FUSE 可靠性与性能

**hung 请求硬超时** — `alluxio.fuse.request.hard.timeout`（默认：禁用）在配置的时间后强制终止卡住的 FUSE 请求，并向调用方返回明确的错误。此前，来自缓慢或不可达 Worker 的 hung 读取会无限期阻塞 FUSE 挂载点，导致训练任务通过 NCCL 或框架级超时挂起，而非获得干净的错误。

**Colocated 部署的本地 Worker 优先** — `alluxio.user.replica.prioritize.local.worker`（默认：false）无需额外 RPC，直接将候选 Worker 列表重新排序，优先选择同节点 Worker。当 FUSE 客户端与 Alluxio Worker 运行在同一 Kubernetes 节点时，所有可本地服务的读请求将发往节点本地 Worker，消除缓存命中的跨节点网络流量。该属性在 AI-3.7 中不存在。

**并行目录操作** — `alluxio.fuse.parallel.dirops.enabled` 允许目录列举和元数据操作通过 FUSE 并行执行，提升扫描大型模型仓库的工作负载的元数据吞吐量。

**无中断 FUSE 热迁移** — 改进了日志、关闭顺序，并修复了在 FUSE 挂载热迁移到新集群时写入流可能失败的问题。

#### 安全

**Alluxio STS — AssumeRoleWithWebIdentity** — 实现完整的 AWS STS `AssumeRoleWithWebIdentity` 流程。OIDC 身份令牌（来自 Kubernetes Service Account、Okta、Keycloak 等 OIDC IdP）可与 Alluxio STS 端点交换，获取短期 Session 凭证。S3 客户端（Spark、Presto 或任何 SigV4 兼容客户端）可凭此以用户级身份认证到 Worker S3 API，无需自定义客户端 JAR。

**TokenAuthenticator — Worker S3 API 直接 OIDC** — STS 流程的轻量替代方案：客户端将 OIDC JWT 直接设置为 S3 Session Token（`X-Amz-Security-Token`）。Alluxio 直接验证 JWT，绕过 SigV4 签名校验。无需 STS 基础设施。

**S3 Gateway 独立 HTTPS 端口** — S3 Gateway 可在独立的 HTTPS 端口监听，与明文 HTTP 端口分离。两个端口可同时启用，支持从 HTTP 到 HTTPS 的平滑迁移。TLS 证书可在运行时轮换，无需重启 Gateway。

**PEM 证书支持** — 所有 Alluxio 服务端和客户端连接（包括 etcd TLS）现在支持多级 CA PEM 证书。此前仅完全支持 JKS/PKCS12 密钥库。

**授权决策缓存** — 授权决策以可配置 TTL 缓存，降低同一用户频繁访问相同路径时的热路径延迟。

#### 动态配置

AI-3.7 修改大多数配置属性需要重启集群。AI-3.8 引入基于 etcd 的动态配置系统，以下内容可在运行时修改，无需重启即可在所有 Worker 和客户端生效：

| 可动态修改的内容         | 说明                    |
| ---------------- | --------------------- |
| 缓存配额和 TTL        | 按路径配置的配额和过期时间         |
| 优先级驱逐策略          | 优先驱逐哪些数据              |
| 路径映射 / FUSE 路径配置 | 虚拟路径重映射               |
| 副本规则             | 哪些文件获得额外副本            |
| 作业元数据存储          | 所有 load/free/pin 作业状态 |
| 访问日志和审计日志配置      | 无需重启调整日志详细程度          |
| 写入缓存过滤策略         | 哪些 S3 路径使用写入缓存        |

**CLI：** `alluxio config dynamic set/get/edit`\
**REST API：** `GET/PUT /api/v1/config/dynamic`

需要 etcd。不支持无 etcd 的单节点或非 HA 部署。

***

### Bug 修复

| Bug                        | AI-3.7 中的影响                  |
| -------------------------- | ---------------------------- |
| Coordinator 在高并发下阻塞        | 大量并发客户端请求时 Coordinator 可能无响应 |
| `alluxio fs free` 挂起       | 对大目录执行 `free` 可能无限期挂起        |
| S3 并发读写数据损坏                | 同时读写同一 S3 对象可能产生数据损坏         |
| Worker 客户端连接泄漏             | 特定错误条件下 Worker 客户端未归还连接池     |
| UfsConnectivityMonitor NPE | UFS 短暂不可用时 Worker 连接检查可能崩溃   |
| 写入缓存中对不存在前缀的 S3 list       | 返回 500 而非空列表                 |
| S3 rename 文件未找到            | 对近期写入文件的 rename 操作偶发失败       |
| 写入缓存列举大目录 OOM              | 超过 10 万对象的目录列举操作可能耗尽堆内存      |
| 异步预取缓存竞争条件                 | buffer 处理中的竞争可能返回错误数据        |
| 父子 UFS 挂载冲突                | 可同时挂载父路径和子路径，导致未定义行为         |

***

### 不兼容变更

**动态配置需要 etcd** — 新的动态配置功能需要 etcd。无 etcd 的单节点或非 HA 部署无法使用动态配置。

***

### 新增配置属性

| 属性                                              | 默认值                    | 说明                                                         |
| ----------------------------------------------- | ---------------------- | ---------------------------------------------------------- |
| `alluxio.fuse.request.hard.timeout`             | -1（禁用）                 | 超时后强制终止 hung FUSE 请求                                       |
| `alluxio.user.replica.prioritize.local.worker`  | false                  | 优先将读请求路由到同节点 Worker                                        |
| `alluxio.worker.s3.authenticator.classname`     | `PassAllAuthenticator` | 设置为 `TokenAuthenticator` 或 `AlluxioIamAuthenticator` 以启用认证 |
| `alluxio.worker.s3.authorization.enabled`       | false                  | 启用按用户 S3 授权                                                |
| `alluxio.worker.s3.authorization.cache.enabled` | true                   | 缓存授权决策                                                     |
| `alluxio.worker.s3.http.port`                   | —                      | S3 独立 HTTP 端口（与 HTTPS 端口分离）                                |
| `alluxio.fuse.parallel.dirops.enabled`          | —                      | 启用并行 FUSE 目录操作                                             |


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://documentation.alluxio.io/ee-ai-cn/release-notes.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
