跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像AI 生图工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
Javajava算法

微服务链路追踪实战:SkyWalking 与 Zipkin 架构对比及优化

分布式系统故障定位难?深入解析 SkyWalking 与 Zipkin 核心原理。通过字节码增强、上下文传播及采样算法对比,提供生产环境配置模板与性能调优方案。实测数据显示 SkyWalking 在 Java 场景下开销更低,Zipkin 多语言支持更优。结合电商全链路监控案例,给出选型决策树与最佳实践清单,帮助团队建立可观测性体系,实现分钟级故障排查。

人间失格发布于 2026/3/15更新于 2026/7/2633 浏览
微服务链路追踪实战:SkyWalking 与 Zipkin 架构对比及优化

微服务链路追踪实战:SkyWalking 与 Zipkin 架构对比及优化

1. 链路追踪:分布式系统的'X 光机'

在单体应用时代,定位问题就像在一个房间里找东西。而到了微服务架构,这变成了在一座结构复杂、房间众多的迷宫里寻宝。链路追踪(Distributed Tracing)就是为你照亮迷宫、绘制完整寻宝地图的'X 光机'。

1.1 从单体到微服务:排查困境的演变

在过往的电商微服务改造中,拆分前系统结构简单:1 个单体应用,1 个数据库,排查问题 grep 日志文件即可定位。

拆分后,系统变成了 28 个独立服务和 15 个数据库/中间件,排查问题需要在多个服务日志中手动拼接请求路径。

真实血泪教训:某次大促,订单创建失败率突然飙升到 15%。团队花了 6 个小时,通过用户反馈 → 查网关日志 → 查订单服务 → 查库存服务 → 查 Redis → 发现 Redis 连接池配置错误,才定位到问题。如果有链路追踪,这个过程可以缩短到 5 分钟。

1.2 链路追踪的核心价值矩阵

价值维度无链路追踪有链路追踪效率提升
故障定位小时级分钟级10-20 倍
性能分析猜测 + 压测精准火焰图5-8 倍
容量规划经验估算数据驱动3-5 倍
架构治理文档滞后实时拓扑可视化

2. 核心原理解析:Trace、Span 与上下文传播

2.1 基本概念:一次请求的完整'病历'

想象你去看病(发起一次请求):

  • Trace ID:你的病历号,全程唯一
  • Span:一次诊疗记录(挂号、看诊、化验、取药)
  • Parent Span ID:诊疗环节的先后关系
// Span 的核心数据结构(简化版)
public class TracingSpan {
    private String traceId; // 全局追踪 ID:b7b0c7f1d5a2b8c3
    private String spanId; // 当前跨度 ID:df8a4b2c
    private String parentSpanId; // 父跨度 ID:a3c5e7f9(null 表示根 Span)
    private String operationName; // 操作名:GET /api/orders/{id}
    private long startTime; 
      duration; 
     Map<String, String> tags; 
     List<Log> logs; 
    
        ;
        ;
        ;
}
// 开始时间:1625097600000 μs
private
long
// 耗时:150000 μs (150ms)
private
// 标签:{http.method=GET, http.status=200}
private
// 关键日志:[{time: xxx, event: "DB query start"}]
// 业务上下文
private
String
serviceName
=
"order-service"
private
String
serviceInstance
=
"order-01"
private
String
endpoint
=
"/api/orders/{id}"

2.2 上下文传播:Trace ID 的'接力赛'

Trace 信息如何在服务间传递?主要有三种模式:

  1. B3(Zipkin 标准):X-B3-TraceId、X-B3-SpanId、X-B3-ParentSpanId
  2. W3C TraceContext:traceparent、tracestate(OpenTelemetry 标准)
  3. SkyWalking:sw8 自定义头部

2.3 采样算法:平衡精度与开销的智慧

100% 采集所有请求?不现实!采样策略是关键:

恒定速率采样(适合大部分场景):

@Bean
public Sampler defaultSampler() {
    return Sampler.create(0.1f); // 10% 的请求会被追踪
}

自适应采样(生产环境推荐):

# application.yml - 自适应采样配置
resilience4j.tracing:
  adaptive-sampling:
    enabled: true
    base-rate: 0.01 # 基础采样率 1%
    rules:
      - when: error_occurred then: sample_rate = 1.0 # 出错时 100% 采样
      - when: response_time > 1000ms then: sample_rate = 0.5 # 慢请求 50% 采样
      - when: endpoint matches "/api/payments/**" then: sample_rate = 0.3 # 支付接口 30% 采样

采样策略性能对比(基于 100 万 QPS 压测):

策略采样率存储成本/天问题发现率CPU 开销推荐场景
恒定采样1%10GB65%0.8%一般业务
速率限制100QPS15GB78%1.2%高流量业务
自适应采样动态8-20GB92%1.5%生产环境
全量采样100%1TB+100%8.3%调试阶段

3. SkyWalking 深度解析:无侵入监控的艺术

3.1 架构全景:从 Agent 到 UI 的完整链路

(此处为架构图,展示 Agent 到 UI 的完整链路)

3.2 字节码增强:Java Agent 的魔法

SkyWalking 的核心技术是 Java Agent 的字节码增强。它通过在类加载时修改字节码,自动注入追踪逻辑:

// 简化的字节码增强示例
public class TracingTransformer implements ClassFileTransformer {
    @Override
    public byte[] transform(ClassLoader loader, String className, Class<?> classBeingRedefined, ProtectionDomain protectionDomain, byte[] classfileBuffer) {
        // 1. 过滤不需要增强的类
        if (!shouldTransform(className)) {
            return classfileBuffer;
        }
        // 2. 使用 ASM 操作字节码
        ClassReader cr = new ClassReader(classfileBuffer);
        ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS);
        ClassVisitor cv = new TracingClassVisitor(cw, className);
        cr.accept(cv, ClassReader.EXPAND_FRAMES);
        // 3. 返回增强后的字节码
        return cw.toByteArray();
    }
    
    private boolean shouldTransform(String className) {
        // 只增强业务相关类,跳过 JDK 和第三方库
        return className.startsWith("com/example/") && !className.contains("$"); // 跳过匿名内部类
    }
}

3.3 生产环境配置模板

agent.config - 生产环境推荐:

# 基础信息
agent.service_name=${SW_AGENT_NAME:order-service}
agent.instance_name=${SW_AGENT_INSTANCE:${HOSTNAME:order-service-01}}
# 采样配置
agent.sample_n_per_3_secs=${SW_AGENT_SAMPLE:200} # 每 3 秒采样 200 条
agent.force_sample_error=true # 错误强制采样
# 后端地址
collector.backend_service=${SW_AGENT_COLLECTOR_BACKEND_SERVICES:skywalking-oap:11800}
# 插件配置
plugin.springmvc.use_qualified_name_as_endpoint_name=true
plugin.toolkit.log.grpc.reporter.server_host=${SW_GRPC_LOG_HOST:skywalking-oap}
plugin.toolkit.log.grpc.reporter.server_port=${SW_GRPC_LOG_PORT:11800}
# 性能优化
plugin.jdbc.trace_sql_parameters=${SW_JDBC_TRACE_SQL_PARAMETERS:true}
plugin.jdbc.sql_parameters_max_length=${SW_JDBC_SQL_PARAMETERS_MAX_LENGTH:512}
# 缓冲区配置(根据内存调整)
buffer.channel_size=${SW_BUFFER_CHANNEL_SIZE:5}
buffer.buffer_size=${SW_BUFFER_SIZE:500}

OAP Server 配置 - application.yml:

cluster:
  selector: ${SW_CLUSTER:standalone}
  standalone:
    core:
      selector: ${SW_CORE:default}
      default:
        role: ${SW_CORE_ROLE:Mixed}
        restHost: ${SW_CORE_REST_HOST:0.0.0.0}
        restPort: ${SW_CORE_REST_PORT:12800}
        restContextPath: ${SW_CORE_REST_CONTEXT_PATH:/}
        gRPCHost: ${SW_CORE_GRPC_HOST:0.0.0.0}
        gRPCPort: ${SW_CORE_GRPC_PORT:11800}
storage:
  selector: ${SW_STORAGE:elasticsearch}
  elasticsearch:
    nameSpace: ${SW_NAMESPACE:""}
    clusterNodes: ${SW_STORAGE_ES_CLUSTER_NODES:elasticsearch:9200}
    user: ${SW_ES_USER:""}
    password: ${SW_ES_PASSWORD:""}
    indexShardsNumber: ${SW_STORAGE_ES_INDEX_SHARDS_NUMBER:2}
    indexReplicasNumber: ${SW_STORAGE_ES_INDEX_REPLICAS_NUMBER:1}
    dayStep: ${SW_STORAGE_DAY_STEP:1}
    superDatasetDayStep: ${SW_SUPERDATASET_STORAGE_DAY_STEP:-1}

3.4 性能特性与调优

SkyWalking 性能实测数据(8 核 16G 服务器,Java 11,QPS=5000):

场景平均延迟P99 延迟CPU 使用率内存增长网络带宽
无 Agent45ms120ms38%--
Agent(默认)48ms135ms42%120MB2Mbps
Agent(调优后)47ms128ms41%100MB1.5Mbps

关键调优参数:

# JVM 参数优化
-javaagent:/path/to/skywalking-agent.jar
-Dskywalking.agent.service_name=your-service
# 缓冲区优化
-Dskywalking.agent.buffer.channel_size=3
-Dskywalking.agent.buffer.buffer_size=300
# 采样优化
-Dskywalking.agent.sample_n_per_3_secs=100
-Dskywalking.agent.force_sample_error=true
# 日志优化
-Dskywalking.logging.level=INFO
-Dskywalking.logging.file_name=skywalking.log

4. Zipkin 深度解析:简洁优雅的多语言方案

4.1 架构设计:模块化的简洁之美

(此处为架构图,展示模块化架构)

4.2 Spring Cloud Sleuth 集成实战

Maven 依赖配置:

<dependencies>
    <!-- Spring Boot 基础 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <!-- Sleuth + Zipkin -->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-sleuth</artifactId>
        <version>3.1.0</version>
    </dependency>
    <!-- Zipkin Reporter -->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-sleuth-zipkin</artifactId>
        <version>3.1.0</version>
    </dependency>
    <!-- 数据库追踪 -->
    <dependency>
        <groupId>io.zipkin.brave</groupId>
        <artifactId>brave-instrumentation-jdbc</artifactId>
        <version>5.13.2</version>
    </dependency>
</dependencies>

application.yml 完整配置:

spring:
  application:
    name: order-service
  sleuth:
    # 采样配置
    sampler:
      probability: 0.1 # 10% 采样率
      rate: 100 # 每秒最多 100 条
    # 上下文传播
    propagation:
      type: B3 # 使用 B3 格式
    # Baggage(自定义上下文传递)
    baggage:
      remote-fields: userId,orderId,traceId
    correlation:
      enabled: true
      fields: userId,orderId
    # 日志集成
    log:
      slf4j:
        enabled: true
        whitelist-mdc-keys: traceId,spanId,userId
  zipkin:
    base-url: http://zipkin:9411
    sender:
      type: web
      encoder:
        type: JSON_V2
    # 连接配置
    connect-timeout: 5000ms
    read-timeout: 10000ms
    compression:
      enabled: true
management:
  tracing:
    sampling:
      probability: 0.1
    baggage:
      correlation:
        enabled: true
    export:
      zipkin:
        endpoint: ${spring.zipkin.base-url}/api/v2/spans
        connect-timeout: 5s
        read-timeout: 10s

4.3 手动埋点与自定义追踪

虽然 Sleuth 提供了自动埋点,但复杂业务场景需要手动控制:

@Service
@Slf4j
public class OrderService {
    private final Tracer tracer;
    private final OrderRepository orderRepository;

    public OrderService(Tracer tracer, OrderRepository orderRepository) {
        this.tracer = tracer;
        this.orderRepository = orderRepository;
    }

    @Transactional
    public Order createOrder(CreateOrderRequest request) {
        // 1. 创建根 Span
        Span orderSpan = tracer.nextSpan()
                .name("create-order")
                .tag("user.id", request.getUserId())
                .tag("order.amount", request.getAmount().toString())
                .kind(Span.Kind.SERVER)
                .start();
        try (Tracer.SpanInScope ws = tracer.withSpanInScope(orderSpan)) {
            log.info("开始创建订单,用户:{}", request.getUserId());
            // 2. 验证库存(子 Span)
            Span checkSpan = tracer.nextSpan()
                    .name("check-inventory")
                    .tag("product.id", request.getProductId())
                    .tag("quantity", String.valueOf(request.getQuantity()))
                    .kind(Span.Kind.CLIENT)
                    .start();
            boolean inStock;
            try (Tracer.SpanInScope cs = tracer.withSpanInScope(checkSpan)) {
                inStock = inventoryService.checkStock(
                        request.getProductId(), request.getQuantity()
                );
                checkSpan.tag("in.stock", String.valueOf(inStock));
            } finally {
                checkSpan.finish();
            }
            if (!inStock) {
                orderSpan.tag("error", "out_of_stock");
                orderSpan.annotate("库存不足");
                throw new InventoryException("库存不足");
            }
            // 3. 创建订单
            Order order = new Order();
            order.setUserId(request.getUserId());
            order.setProductId(request.getProductId());
            order.setAmount(request.getAmount());
            // 4. 保存到数据库(自动追踪)
            order = orderRepository.save(order);
            // 5. 发送事件
            kafkaTemplate.send("order.created", order.getId());
            orderSpan.tag("order.id", order.getId());
            orderSpan.tag("status", "created");
            return order;
        } catch (Exception e) {
            // 6. 记录异常
            orderSpan.error(e);
            orderSpan.tag("error.type", e.getClass().getSimpleName());
            throw e;
        } finally {
            // 7. 结束 Span
            orderSpan.finish();
        }
    }

    /**
     * 异步任务追踪
     */
    @Async
    public CompletableFuture<Void> processOrderAsync(String orderId) {
        // 获取当前 Trace 上下文
        TraceContext context = tracer.currentSpan().context();
        return CompletableFuture.supplyAsync(() -> {
            // 在新线程中恢复上下文
            try (Tracer.SpanInScope ws = tracer.withSpanInScope(
                    tracer.newChild(context).name("async-process").start())) {
                log.info("异步处理订单:{}", orderId);
                // 业务逻辑...
                return null;
            } finally {
                tracer.currentSpan().finish();
            }
        });
    }
}

5. 性能对比与选型指南

5.1 综合对比分析

维度SkyWalkingZipkin选型建议
采集方式字节码增强(无侵入)SDK 埋点(需代码改动)存量系统选 SkyWalking,新系统可评估
多语言支持Java 为主,其他有限全面支持(Java、Go、Python 等)多语言技术栈选 Zipkin
性能开销低(3-5% CPU)中(5-8% CPU)性能敏感选 SkyWalking
部署复杂度中(需 OAP Server)低(单 jar 包)快速启动选 Zipkin
功能完整性丰富(APM、拓扑、日志)专注链路追踪需要完整可观测性选 SkyWalking
社区生态Apache 项目,国内活跃Twitter 开源,全球生态国内项目选 SkyWalking

5.2 性能实测数据

测试环境:

  • 服务器:4 核 8G * 3 节点
  • 微服务:Spring Boot 2.7 + Java 11
  • 压测:JMeter,100 并发线程
  • 数据量:模拟 100 万次调用

性能对比结果:

指标无追踪SkyWalkingZipkin结论
吞吐量 (QPS)10,0009,7009,200SkyWalking 性能更优
平均延迟45ms48ms68msSkyWalking 延迟增加更少
P99 延迟120ms135ms180msSkyWalking 更稳定
CPU 使用率35%41%48%SkyWalking 开销更小
内存增长-+120MB+220MBSkyWalking 更省内存
网络带宽-1.5Mbps2.8MbpsSkyWalking 网络开销更小

5.3 生产环境选型决策树

(此处为选型决策树)

6. 企业级实战:电商全链路监控方案

6.1 架构设计示例

某电商平台实际架构(日订单量 300 万+):

(此处为电商全链路监控架构)

6.2 关键配置模板

SkyWalking 生产配置:

# docker-compose.yml
version: '3.8'
services:
  # Elasticsearch
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.16.2
    environment:
      - discovery.type=single-node
      - "ES_JAVA_OPTS=-Xms4g -Xmx4g"
      - xpack.security.enabled=false
    ports:
      - "9200:9200"
    volumes:
      - es_data:/usr/share/elasticsearch/data
  # SkyWalking OAP
  skywalking-oap:
    image: apache/skywalking-oap-server:8.9.0
    depends_on:
      - elasticsearch
    environment:
      - SW_STORAGE=elasticsearch
      - SW_STORAGE_ES_CLUSTER_NODES=elasticsearch:9200
      - JAVA_OPTS=-Xms4g -Xmx4g
    ports:
      - "11800:11800" # gRPC
      - "12800:12800" # HTTP
  # SkyWalking UI
  skywalking-ui:
    image: apache/skywalking-ui:8.9.0
    depends_on:
      - skywalking-oap
    environment:
      - SW_OAP_ADDRESS=http://skywalking-oap:12800
    ports:
      - "8080:8080"

Zipkin 生产配置:

# zipkin-server 配置
management:
  metrics:
    export:
      prometheus:
        enabled: true
  endpoint:
    health:
      show-details: always
    metrics:
      enabled: true
zipkin:
  storage:
    type: elasticsearch
    elasticsearch:
      hosts: http://elasticsearch:9200
      index: zipkin
      date-separator: '-'
      index-shards: 5
      index-replicas: 1
      search:
        enabled: true
      self-tracing:
        enabled: false # 生产环境关闭自追踪
  collector:
    kafka:
      bootstrap-servers: kafka:9092
      topic: zipkin

6.3 监控指标与告警

关键监控指标:

  1. 成功率监控:
-- 服务调用成功率
SELECT service_name, COUNT(CASE WHEN status='success' THEN 1 END) * 100.0 / COUNT(*) as success_rate
FROM spans
WHERE timestamp > now() - INTERVAL '5 minutes'
GROUP BY service_name
HAVING success_rate < 99.5 -- 低于 99.5% 告警
  1. 慢查询监控:
# SkyWalking 告警规则
rules:
  - name: endpoint_slow
    expression: endpoint_slow / endpoint_all > 0.1
    period: 10
    silence-period: 5
    message: 端点 {name} 慢调用比例超过 10%
    tags:
      level: WARNING
  1. 错误率监控:
# Prometheus 告警规则
- alert: HighErrorRate
  expr: |
    sum(rate(trace_span_count{status="error"}[5m])) by (service) / sum(rate(trace_span_count[5m])) by (service) > 0.05
  for: 2m
  labels:
    severity: critical
  annotations:
    summary: "服务 {{ $labels.service }} 错误率超过 5%"

7. 故障排查与性能优化

7.1 常见问题排查指南

问题现象可能原因排查步骤解决方案
UI 无数据Agent 未启动1. 检查进程 2. 查看 Agent 日志确认-javaagent 参数位置
Trace 不完整采样率过低1. 检查采样配置 2. 验证传输链路调整采样率,检查网络
高延迟存储压力大1. 检查 ES 健康度 2. 监控 IOPS优化索引,扩容集群
内存溢出Buffer 设置过大1. 分析 heap dump 2. 调整 Buffer 大小减少 buffer.channel_size

7.2 性能优化实战

存储优化 - Elasticsearch 索引策略:

PUT _ilm/policy/zipkin_policy
{
  "policy": {
    "phases": {
      "hot": {
        "actions": {
          "rollover": {
            "max_size": "50gb",
            "max_age": "1d"
          }
        }
      },
      "warm": {
        "min_age": "2d",
        "actions": {
          "shrink": {
            "number_of_shards": 1
          }
        }
      },
      "delete": {
        "min_age": "7d",
        "actions": {
          "delete": {}
        }
      }
    }
  }
}

网络优化 - gRPC 调优:

# SkyWalking Agent 网络优化
agent.grpc.channel_check_interval=30
agent.grpc.upstream_timeout=30
agent.grpc.channel_keepalive_time=30
agent.grpc.channel_keepalive_timeout=10
# 异步上报,避免阻塞业务线程
agent.buffer.channel_size=5
agent.buffer.buffer_size=300

8. 总结与未来展望

8.1 核心结论

  1. SkyWalking 优势:无侵入、性能开销小、功能全面,适合 Java 技术栈和对性能敏感的场景。
  2. Zipkin 优势:多语言支持好、部署简单、生态成熟,适合混合技术栈和快速落地。
  3. 生产建议:大型 Java 项目优先考虑 SkyWalking,微服务技术栈多样时选择 Zipkin。

8.2 未来趋势

  1. OpenTelemetry 标准化:逐渐成为行业标准,SkyWalking 和 Zipkin 都已支持 OTLP 协议。
  2. eBPF 技术:无侵入监控的新方向,有望实现零性能开销的链路追踪。
  3. AIOps 集成:结合机器学习算法,实现智能根因分析和故障预测。

8.3 最佳实践清单

✅ 一定要做的:

  • 生产环境启用采样策略(建议 1-10%)
  • 配置完整的告警规则(成功率、延迟、错误率)
  • 定期清理过期数据(保留 7-30 天)
  • 监控追踪系统自身健康度

❌ 一定要避免的:

  • 全量采样(除非调试环境)
  • 在业务代码中硬编码 Trace 逻辑
  • 忽略跨线程上下文传递
  • 存储无限期保留导致成本失控

技术没有银弹,只有合适的选择。链路追踪是微服务可观测性的基石,但工具本身不是目的,快速定位和解决问题才是核心价值。希望本文的实战经验能帮助你在复杂的分布式系统中,建立清晰的'上帝视角'。

参考链接

  1. SkyWalking 官方文档
  2. Zipkin 官方文档
  3. OpenTelemetry 规范
  4. Elasticsearch ILM 指南

目录

  1. 微服务链路追踪实战:SkyWalking 与 Zipkin 架构对比及优化
  2. 1. 链路追踪:分布式系统的“X 光机”
  3. 1.1 从单体到微服务:排查困境的演变
  4. 1.2 链路追踪的核心价值矩阵
  5. 2. 核心原理解析:Trace、Span 与上下文传播
  6. 2.1 基本概念:一次请求的完整“病历”
  7. 2.2 上下文传播:Trace ID 的“接力赛”
  8. 2.3 采样算法:平衡精度与开销的智慧
  9. application.yml - 自适应采样配置
  10. 3. SkyWalking 深度解析:无侵入监控的艺术
  11. 3.1 架构全景:从 Agent 到 UI 的完整链路
  12. 3.2 字节码增强:Java Agent 的魔法
  13. 3.3 生产环境配置模板
  14. 基础信息
  15. 采样配置
  16. 后端地址
  17. 插件配置
  18. 性能优化
  19. 缓冲区配置(根据内存调整)
  20. 3.4 性能特性与调优
  21. JVM 参数优化
  22. 缓冲区优化
  23. 采样优化
  24. 日志优化
  25. 4. Zipkin 深度解析:简洁优雅的多语言方案
  26. 4.1 架构设计:模块化的简洁之美
  27. 4.2 Spring Cloud Sleuth 集成实战
  28. 4.3 手动埋点与自定义追踪
  29. 5. 性能对比与选型指南
  30. 5.1 综合对比分析
  31. 5.2 性能实测数据
  32. 5.3 生产环境选型决策树
  33. 6. 企业级实战:电商全链路监控方案
  34. 6.1 架构设计示例
  35. 6.2 关键配置模板
  36. docker-compose.yml
  37. Elasticsearch
  38. SkyWalking OAP
  39. SkyWalking UI
  40. zipkin-server 配置
  41. 6.3 监控指标与告警
  42. SkyWalking 告警规则
  43. Prometheus 告警规则
  44. 7. 故障排查与性能优化
  45. 7.1 常见问题排查指南
  46. 7.2 性能优化实战
  47. SkyWalking Agent 网络优化
  48. 异步上报,避免阻塞业务线程
  49. 8. 总结与未来展望
  50. 8.1 核心结论
  51. 8.2 未来趋势
  52. 8.3 最佳实践清单
  53. 参考链接
  • 免费图片AI生成工具免费生成了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
  • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
  • 100+免费在线小游戏爽一把
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • 基于 AI 大模型与 Playwright 的 Web UI 自动化测试实践
  • Virt A Mate (VAM) v1.22 中文汉化整合
  • Python AI 大模型部署指南:本地运行、API 服务与 Docker 封装
  • 浏览器 WebRTC 隐私泄露风险及关闭方法
  • C++ 特殊类设计与类型转换
  • GitHub Copilot 四种工作模式区别:Agent、Ask、Edit、Plan
  • RAG 技术深度解析:低成本替代微调实现 AI 升级
  • AI Agent 搭建全流程实战指南
  • AI 赋能原则 10 解读:政府 2.0 与人类生产力新时代
  • Java 中 Integer 对象比较陷阱解析
  • Stable Diffusion 底模与 VAE 搭配指南:提升生成质量的核心策略
  • Java 并发核心:单例、生产者消费者、定时器与线程池实战
  • 基于 LLaMA-Factory 的 DeepSeek-R1 模型微调实战指南
  • 机器人算法十年演进:从规则驱动到具身认知
  • C++ 类型转换:从基础到四种核心强制转换方式
  • Jenkins 自动化部署指南:从 Git 拉取代码并部署至 Nginx
  • AI 变现核心逻辑:为何掌握工具不等于拥有商业认知
  • Spring Web MVC 入门:从概念到实践
  • 大模型架构解析:Attention is all you need 论文详解
  • 基于大语言模型的需求依赖检测新方法:LEREDD 的高精度与鲁棒性

相关免费在线工具

  • Keycode 信息

    查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online

  • Escape 与 Native 编解码

    JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online

  • JavaScript / HTML 格式化

    使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online

  • JavaScript 压缩与混淆

    Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online