From 9cc5ff664242982421c5768ea2c0c0b963b65f6e Mon Sep 17 00:00:00 2001 From: duorameng <2997944583@qq.com> Date: Thu, 9 Jul 2026 20:25:39 +0800 Subject: [PATCH] feat(tasks): refactor tiny_log streaming compression to use ZSTD with zstd: prefix --- internal/services/tasks/tiny_log.go | 8 ++++---- internal/utils/compress.go | 19 +++++++++++++++++++ 2 files changed, 23 insertions(+), 4 deletions(-) diff --git a/internal/services/tasks/tiny_log.go b/internal/services/tasks/tiny_log.go index f4d0792..6d85b25 100644 --- a/internal/services/tasks/tiny_log.go +++ b/internal/services/tasks/tiny_log.go @@ -265,8 +265,8 @@ func (l *TinyLog) CompressAndCleanup() (string, error) { b64Writer := base64.NewEncoder(base64.StdEncoding, &buf) // 使用 Pool 优化压缩 - zw := utils.GetZlibWriter(b64Writer) - defer utils.PutZlibWriter(zw) + zw := utils.GetZstdWriter(b64Writer) + defer utils.PutZstdWriter(zw) // 获取文件大小 stat, err := f.Stat() @@ -295,7 +295,7 @@ func (l *TinyLog) CompressAndCleanup() (string, error) { } } - // 流处理: 文件 -> Zlib -> Base64 -> 缓冲区 + // 流处理: 文件 -> Zstd -> Base64 -> 缓冲区 if _, err := io.Copy(zw, f); err != nil { return "", err } @@ -308,7 +308,7 @@ func (l *TinyLog) CompressAndCleanup() (string, error) { return "", err } - return buf.String(), nil + return "zstd:" + buf.String(), nil } // ReadLastLines 返回日志的最后 n 行 diff --git a/internal/utils/compress.go b/internal/utils/compress.go index 832a50a..2aa42ba 100644 --- a/internal/utils/compress.go +++ b/internal/utils/compress.go @@ -31,6 +31,25 @@ func PutZlibWriter(zw *zlib.Writer) { zlibWriterPool.Put(zw) } +var zstdEncoderPool = sync.Pool{ + New: func() interface{} { + zw, _ := zstd.NewWriter(nil) + return zw + }, +} + +// GetZstdWriter 从对象池中获取 zstd 写入器并定向到 w +func GetZstdWriter(w io.Writer) *zstd.Encoder { + zw := zstdEncoderPool.Get().(*zstd.Encoder) + zw.Reset(w) + return zw +} + +// PutZstdWriter 将 zstd 写入器还回对象池 +func PutZstdWriter(zw *zstd.Encoder) { + zstdEncoderPool.Put(zw) +} + var ( zstdEncoder *zstd.Encoder zstdDecoder *zstd.Decoder