从监控到洞察:构建实时数据关联分析与根因定位系统

news2026/5/7 3:53:37
1. 项目概述与核心价值最近在折腾一个挺有意思的开源项目叫“Lokis Insight”。这个名字一听就很有北欧神话的味道Loki是诡计与智慧之神而“Insight”则是洞察力。所以这个项目本质上是一个旨在提供深度洞察、分析和可视化能力的工具或平台。它不是一个简单的数据报表工具而是更侧重于通过智能化的手段从复杂、多维的数据中挖掘出那些不易被察觉的模式、关联和异常就像Loki一样看穿表象直达核心。在实际工作中无论是运维监控、业务分析、安全审计还是产品体验优化我们都会面临海量的日志、指标和事件数据。传统的监控图表只能告诉你“发生了什么”比如CPU使用率高了、接口错误率飙升了。但“为什么会发生”、“哪些因素共同导致了这个问题”、“未来可能有什么风险”这些问题往往需要分析师花费大量时间在不同系统间反复横跳、关联查询才能得到模糊的答案。Lokis Insight 瞄准的正是这个痛点它试图构建一个统一的洞察引擎将数据聚合、关联分析、异常检测和根因定位的能力整合在一起让“洞察”这个过程变得更自动化、更智能化。这个项目适合谁呢如果你是运维工程师SRE/DevOps厌倦了在Grafana、Prometheus、ELK Stack之间手动关联告警如果你是业务分析师希望从用户行为数据中更快地发现转化漏斗的瓶颈或异常用户群体如果你是安全工程师需要从海量访问日志中快速定位潜在的攻击模式那么Lokis Insight所代表的技术思路和实现方案都值得你深入了解一下。它不一定是一个开箱即即用的全能产品但其架构设计和核心算法为我们构建自己的“数据洞察中心”提供了非常宝贵的参考。2. 整体架构设计与核心思路拆解2.1 核心设计哲学从“监控”到“洞察”的范式转变要理解Lokis Insight首先要跳出传统监控的思维定式。传统监控栈如TICK、Prometheus Grafana的核心是“指标Metrics”和“告警Alerting”。它们擅长回答“某个指标现在是否正常”以及“过去一段时间趋势如何”。但现代分布式系统的故障和业务问题往往是数十甚至上百个指标、日志、链路相互交织作用的结果。一个简单的接口超时背后可能是数据库连接池耗尽、某个下游服务抖动、缓存命中率下降、以及突发的流量高峰共同导致的。Lokis Insight的设计哲学是建立一个“关联上下文Contextual Correlation”和“因果推断Causal Inference”的引擎。它不再孤立地看待每一条数据而是试图构建一个动态的、包含拓扑关系的数据图谱。例如一个微服务调用链、一个Kubernetes Pod的所属关系、一个业务交易涉及的多个数据库表这些都是天然的关联上下文。项目会摄入这些拓扑元数据并在分析时将其作为关键维度。2.2 技术栈选型与权衡从项目名称和常见技术生态来看Lokis Insight很可能与Grafana Loki日志聚合系统有较深的渊源或集成。“Loki”在这里可能是一语双关既指神话人物也暗示了其作为日志分析洞察上层应用的身份。因此其技术栈大概率围绕云原生观测体系构建。一个合理的核心技术栈推测如下数据摄入层支持从多种来源拉取或接收数据。这包括时序数据Prometheus、InfluxDB、各类Exporter。日志数据Grafana Loki、Elasticsearch、Fluentd/Fluent Bit流。链路追踪Jaeger、Zipkin、OpenTelemetry。事件与变更数据Kubernetes Events、配置管理工具如Ansible的审计日志、CI/CD流水线事件。 这一层的关键是统一数据模型将不同来源、不同格式的数据映射到一个内部通用的“事件Event”或“实体Entity”模型上并打上统一的时间戳、标签Labels和关联ID。存储与计算层这里面临一个经典权衡——速度、成本与灵活性。项目可能采用混合架构热存储使用如Apache Druid、ClickHouse或经过优化的Elasticsearch用于存储近期如7天的高频明细数据和聚合结果支撑实时查询和交互式分析。冷存储/数据湖使用对象存储如S3配合Apache Iceberg或Delta Lake格式存储全量历史数据用于离线批量分析、模型训练和长期趋势回溯。流处理引擎使用Apache Flink或Apache Kafka Streams对摄入的数据流进行实时清洗、富化Enrichment、窗口聚合和复杂事件处理CEP这是实现实时异常检测和关联分析的核心。分析引擎层核心这是项目的“大脑”。关联分析引擎基于预定义的规则或动态学习的图谱将不同数据源的事件进行关联。例如当检测到某数据库的QPS突增时自动关联同一时间段内访问该数据库的微服务列表、以及这些微服务的错误日志。异常检测模块不仅仅是对单一指标做阈值判断。它会采用多种算法无监督学习如孤立森林Isolation Forest、局部异常因子LOF用于在没有标签的数据中发现未知模式的异常。有监督/半监督学习如果有历史故障数据可以训练模型识别特定故障模式。时序预测使用Prophet、LSTM等模型预测指标的未来走势将实际值与预测值的显著偏差视为异常。根因分析RCA模块这是终极目标。当异常被检测出后RCA模块会利用关联图谱、变更数据和历史事件通过概率图模型、决策树或其他可解释AIXAI技术计算导致该异常最可能的根本原因路径并按概率排序输出。可视化与交互层最终洞察结果需要直观呈现。它很可能提供一个类似Grafana但更专注于关联分析的UI。例如拓扑图动态展示服务、主机、容器之间的实时依赖关系和健康状态。事件时间线将告警、日志错误、部署事件等按时间轴排列一目了然地看到事件间的先后顺序和重叠。多维下钻分析从一个异常点出发可以按服务、机房、版本等多个维度下钻快速定位异常的影响范围。注意以上技术栈是基于常见实践和项目目标的合理推测。实际项目中团队可能会根据自身技术积累和场景复杂度进行裁剪或替换。例如初创团队可能先用Elasticsearch扛下所有后期再拆分也可能直接基于OpenTelemetry的标准来构建数据模型以获得更好的生态兼容性。2.3 架构带来的优势与挑战这种架构的核心优势在于洞察的深度和自动化程度。它能够将运维人员从“数据搬运工”和“关联苦力”中解放出来直接提供有指向性的分析结论。例如不再只是告警“API延迟P99升高”而是给出“API延迟P99升高根因分析显示有85%的概率是由于数据库实例DB-12的CPU使用率饱和导致该实例在10分钟前承载了来自‘订单服务v1.2’的流量激增”。然而挑战也同样巨大数据质量与一致性关联分析极度依赖数据标签的准确性和一致性。如果不同系统对“服务名”、“主机IP”的命名规则不统一关联就会失败。计算复杂度与性能实时关联海量数据流并进行复杂的图谱计算和机器学习推理对计算资源消耗极大。误报与可解释性算法可能产生“奇怪”的关联或根因建议如何让用户信任并理解这些结论是一个需要精心设计交互和解释机制的难题。3. 核心模块深度解析与实操要点3.1 统一数据模型的构建这是所有后续分析的基石。如果数据模型设计不好就像在沙地上盖楼。Lokis Insight的内部数据模型需要足够灵活以容纳各种观测数据。一个参考设计如下表所示字段名类型描述示例关键性timestampDateTime事件发生的时间戳必须高精度纳秒级2023-10-27T14:30:45.123456Z必选data_sourceString数据来源类型metric_prometheus,log_loki,trace_jaeger必选metric_name/log_message/span_nameString原始指标名、日志内容或跨度名http_request_duration_seconds条件必选labelsMapString, String键值对标签用于标识和关联实体{“service”: “order-api”, “pod”: “order-abc123”, “env”: “prod”}核心valueFloat/String指标数值或日志/事件的详细内容0.156,“ERROR: database connection timeout”条件必选entity_idString内部生成的实体唯一ID用于高效关联entity_svc_order_api推荐relation_edgesArray此实体与其他实体的关系边[{“type”: “calls”, “target”: “entity_svc_payment”}]高级特性实操要点与避坑指南标签规范化是生命线必须在数据摄入的最上游如通过OpenTelemetry Collector或统一的Agent就强制实施标签命名规范。建议采用类似Prometheus的标签风格小写蛇形命名如service_name,k8s_namespace。为所有关键实体服务、主机、容器、数据库定义一套必须包含的标签集。处理高基数标签要谨慎像user_id、request_id这样的标签基数极高如果直接作为标签存储会导致存储爆炸和查询性能骤降。正确的做法是将它们作为日志或事件的正文内容存储或者使用支持高基数的专用存储如ClickHouse并在通用标签中只存放其哈希值或聚合后的维度。实体ID的生成策略不要依赖容易变化的属性如Pod IP作为唯一标识。应该使用稳定的组合例如对于Kubernetes Pod可以用namespace/pod_name的哈希值对于服务可以用服务名环境。这个ID将在构建关联图谱时作为节点的唯一键。3.2 实时流处理与复杂事件处理CEP这是实现“实时洞察”的引擎。以Apache Flink为例一个简化的处理流水线可能如下// 伪代码示意Flink作业结构 DataStreamUnifiedEvent rawEventStream env .addSource(kafkaSource) // 从Kafka摄入原始事件 .map(new DataNormalizationMapper()) // 数据标准化统一格式和标签 .keyBy(event - event.getEntityId()) // 按实体ID分组 // 分支1: 实时指标聚合与异常检测 DataStreamAlert anomalyStream rawEventStream .process(new MetricWindowProcessFunction(5分钟)) // 5分钟滚动窗口 .flatMap(new AnomalyDetectionFunction(IsolationForest模型)); // 分支2: 关联图谱更新 DataStreamGraphUpdate graphUpdateStream rawEventStream .filter(event - event.getRelationEdges() ! null) .process(new GraphUpdateFunction(内存图状态)); // 分支3: 复杂事件模式匹配CEP PatternUnifiedEvent, ? errorPattern Pattern.UnifiedEventbegin(start) .where(event - event.getLogMessage().contains(ERROR)) .next(follow) .within(Time.seconds(10)); // 10秒内连续出现ERROR日志 CEP.pattern(rawEventStream.keyBy(...), errorPattern) .flatSelect(new PatternAlertFunction());核心环节与参数调优窗口选择对于监控场景滚动窗口Tumbling和滑动窗口Sliding最常用。窗口大小需要权衡太小则噪声大容易误报太大则检测延迟高。通常1分钟、5分钟是实时检测的常见窗口。对于业务指标可能需要1小时或1天的日级窗口。状态管理Flink的Keyed State用于维护每个实体的历史指标序列用于预测Operator State或Broadcast State可以用于存储全局的关联图谱或规则库。务必设置合理的状态存活时间TTL防止状态无限增长。背压处理在流量洪峰时如果下游存储如ClickHouse写入跟不上会导致Flink作业背压。解决方案包括启用Flink的检查点Checkpoint对齐优化、增加下游存储的批次写入缓冲、或者使用RateLimiter进行限流牺牲部分实时性保稳定。3.3 关联图谱的构建与查询关联图谱是洞察的“地图”。它用图数据库如Neo4j、Nebula Graph或内存中的图结构如JanusGraph on HBase来存储实体节点和关系边。图的构建通常有两种方式静态配置通过配置文件或API预先定义好系统架构的拓扑如服务A调用服务B服务B依赖数据库C。这种方式准确但维护成本高难以适应动态变化的环境如Kubernetes中Pod的频繁创建销毁。动态发现通过分析链路追踪Tracing数据、网络流量如eBPF或配置管理数据库CMDB的变更事件自动推断和更新实体间的关系。这是更理想的方式但技术复杂度更高。一个实用的混合策略是基础架构层如K8s集群、VPC、可用区的关系通过集群API动态发现。应用服务层的调用关系通过OpenTelemetry的链路数据自动生成。对于一些特殊的、无法自动发现的逻辑依赖如服务依赖某个特定的消息队列主题则通过注解或配置手动补充。图谱查询示例Neo4j Cypher语法当order-service发生错误时快速找出其直接和间接依赖的所有下游服务及数据库。MATCH path (src:Service {name:order-service})-[:CALLS|DEPENDS_ON*1..3]-(dst) WHERE src.alert_status ERROR RETURN dst.name, dst.type, relationships(path)这个查询能快速给出影响面分析是应急响应的利器。4. 从零搭建一个简易洞察系统的实操过程我们不可能完全复刻一个成熟的Lokis Insight但可以搭建一个具备其核心思路的简化版原型以理解其工作流程。这里我们用一个经典组合Fluentd Apache Flink Elasticsearch Grafana来实现日志的实时异常检测和简单关联。4.1 环境准备与组件部署目标监控一个Web应用Nginx的访问日志实时检测异常响应码如5xx的突增并与同一时间段的系统指标如CPU进行关联。架构图文字描述Nginx产生访问日志。Fluentd作为Agent收集日志并结构化然后发送到Kafka。Apache Flink消费Kafka中的日志和另一路系统指标由node_exporter产生经Prometheus remote write到Kafka进行流式关联分析。分析结果异常事件写回Kafka。Elasticsearch消费异常事件并索引。Grafana配置Elasticsearch数据源展示异常事件和关联图表。部署步骤部署Kafka集群使用docker-compose快速启动一个单节点的Kafka。# docker-compose-kafka.yml version: 3 services: zookeeper: image: wurstmeister/zookeeper ports: - 2181:2181 kafka: image: wurstmeister/kafka ports: - 9092:9092 environment: KAFKA_ADVERTISED_HOST_NAME: localhost KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181 KAFKA_CREATE_TOPICS: nginx_logs,node_metrics,anomaly_events执行docker-compose -f docker-compose-kafka.yml up -d配置Fluentd收集Nginx日志# fluentd.conf source type tail path /var/log/nginx/access.log pos_file /var/log/td-agent/nginx-access.log.pos tag nginx.access parse type nginx /parse /source filter nginx.access type record_transformer record host #{Socket.gethostname} log_type nginx_access timestamp ${time} # 解析出的时间 /record /filter match nginx.access type kafka2 brokers localhost:9092 topic_key nginx_logs default_topic nginx_logs format type json /format /match将Fluentd部署在Nginx服务器上并应用此配置。配置Prometheus和node_exporter确保node_exporter运行并在Prometheus配置中启用Remote Write到Kafka的插件需要额外组件如prometheus-kafka-adapter将node_cpu_seconds_total等指标写入node_metrics主题。这是一个简化示意实际可能需要使用VictoriaMetrics的vmagent等更擅长此功能的工具。编写Flink实时分析作业Java示例骨架public class LogMetricCorrelationJob { public static void main(String[] args) throws Exception { StreamExecutionEnvironment env StreamExecutionEnvironment.getExecutionEnvironment(); // 1. 消费Nginx日志 DataStreamJSONObject logStream env .addSource(new FlinkKafkaConsumer(nginx_logs, new JSONDeserializationSchema(), props)) .assignTimestampsAndWatermarks(...); // 2. 消费系统指标 DataStreamMetricEvent metricStream env .addSource(new FlinkKafkaConsumer(node_metrics, ..., props)) .assignTimestampsAndWatermarks(...); // 3. 日志流按主机响应码分组计算每分钟5xx错误数 DataStreamTuple2String, Integer errorCountStream logStream .filter(log - log.getInt(status) 500) .keyBy(log - log.getString(host)) .window(TumblingEventTimeWindows.of(Time.minutes(1))) .aggregate(new CountAggregateFunction()); // 4. 指标流按主机分组计算每分钟CPU使用率均值 DataStreamTuple2String, Double cpuUsageStream metricStream .filter(metric - node_cpu_seconds_total.equals(metric.getName()) idle.equals(metric.getLabel(mode))) .keyBy(metric - metric.getLabel(instance)) .window(...) .process(new CpuUsageCalculateFunction()); // 5. 双流关联将同一主机、同一时间窗口的错误数和CPU使用率关联起来 DataStreamCorrelationAlert alertStream errorCountStream .join(cpuUsageStream) .where(t - t.f0) // 主机名 .equalTo(t - t.f0) .window(TumblingEventTimeWindows.of(Time.minutes(1))) .apply((errorTuple, cpuTuple) - { if (errorTuple.f1 10 cpuTuple.f1 0.8) { // 阈值判断 return new CorrelationAlert(主机 errorTuple.f0 在时间窗口内5xx错误激增且CPU使用率过高, System.currentTimeMillis()); } return null; }) .filter(Objects::nonNull); // 6. 将告警事件写回Kafka alertStream.addSink(new FlinkKafkaProducer(anomaly_events, new AlertSerializationSchema(), props)); env.execute(Log-Metric Correlation Analysis); } }打包JAR并提交到Flink集群。部署Elasticsearch和Grafana使用Docker快速部署并在Grafana中配置Elasticsearch数据源创建一个面板查询anomaly_events索引中的数据。4.2 核心关联逻辑的实现细节上面的Flink作业中最关键的是双流关联Join和窗口Window的运用。为什么用Event Time使用事件时间EventTime而非处理时间ProcessingTime至关重要因为日志和指标从产生、收集、传输到处理会有延迟。使用事件时间并配合水印Watermark机制能保证即使数据乱序到达也能在正确的逻辑时间窗口内进行关联计算避免关联错误。水印策略对于日志和指标流我们可以根据数据中的timestamp字段提取事件时间。水印延迟需要根据数据源的最大乱序程度来设置例如WatermarkStrategy.EventforBoundedOutOfOrderness(Duration.ofSeconds(10))允许最多10秒的乱序。关联条件本例中我们使用了最简单的等值连接where/equalTo关联键是host主机名。在更复杂的生产环境中关联键可能是service_name、k8s_pod_name或者自定义的trace_id。4.3 结果验证与效果评估部署完成后你可以进行以下测试对Web服务器进行压力测试模拟产生大量5xx错误。同时使用stress命令人为拉高该服务器的CPU使用率。观察Grafana面板应该能看到在相应的时间点产生了关联告警事件。这个简易原型验证了“将不同数据源日志、指标在时间维度上进行关联分析”的核心思路。虽然它离真正的“根因分析”还有很远但已经实现了从孤立告警到初步关联洞察的跨越。5. 生产级部署的挑战、问题排查与优化实录将这样一个系统投入生产会遇到许多在原型阶段不曾遇到的问题。以下是一些典型的“坑”和解决思路。5.1 数据延迟与乱序导致关联失效问题现象Flink作业产出的关联事件总是比实际故障时间晚很多或者干脆漏掉了某些本应关联上的事件。排查思路检查水印生成在Flink作业的Source后添加一个ProcessFunction打印每条数据的事件时间和当前水印。观察水印是否正常推进。如果水印长时间不更新可能是某个数据分区的数据迟迟未到。dataStream.process(new ProcessFunctionEvent, Event() { Override public void processElement(Event value, Context ctx, CollectorEvent out) { LOG.info(“事件时间: {}, 当前水印: {}”, value.getTimestamp(), ctx.timerService().currentWatermark()); out.collect(value); } });检查Kafka消费延迟查看Flink作业监控中currentEmitEventTimeLag指标它表示当前处理的事件时间与系统时间的差值。如果这个值持续增长说明处理速度跟不上数据生产速度。核对各数据源时钟确保所有产生日志和指标的服务器Nginx服务器、node_exporter所在主机时间同步使用NTP。时间不同步是关联失败的常见元凶。解决方案适当调大水印的allowedLateness和窗口的sideOutputLateData让晚到的数据仍有补救机会但需评估对状态大小的冲击。对于延迟极高的数据源如某些批处理日志考虑将其与实时流分开处理采用Lambda架构在批处理层进行补偿关联。5.2 状态爆炸与检查点失败问题现象Flink作业运行一段时间后内存持续增长最终OOM内存溢出或者检查点Checkpoint持续超时失败。排查思路分析状态类型使用Flink Web UI或REST API查看作业的State Size。如果Keyed State巨大说明你的keyBy字段基数太高。例如如果你用user_id做key每个用户都维护一个状态内存必然爆炸。检查窗口状态滚动窗口在触发计算后默认会清理状态。但如果你使用了GlobalWindow或自定义触发器状态可能不会自动清理。检查点日志查看TaskManager日志看检查点失败的具体原因。常见原因是Barrier对齐时某个上游分区数据迟迟不来或者下游Sink写入外部系统如ES、Kafka太慢导致整个管道阻塞。解决方案优化Key设计避免使用超高基数字段作为Key。对于需要按高基数字段如request_id统计的场景考虑使用MapState存储一个小的聚合结果而不是为每个Key都创建一个完整的算子实例副本。设置状态TTL对于不需要永久保存的状态如最近一小时的去重集合务必配置State TTL。StateTtlConfig ttlConfig StateTtlConfig .newBuilder(Time.hours(1)) .setUpdateType(StateTtlConfig.UpdateType.OnCreateAndWrite) .setStateVisibility(StateTtlConfig.StateVisibility.NeverReturnExpired) .build(); valueStateDescriptor.enableTimeToLive(ttlConfig);调整检查点配置增大检查点间隔如从1分钟调到5分钟、使用增量检查点RocksDB状态后端、启用非对齐检查点Flink 1.12适用于反压严重的场景。优化Sink对于Elasticsearch Sink使用批量写入并调大批量大小和刷新间隔但要注意这会增加数据可见的延迟。确保ES集群有足够的处理能力。5.3 关联规则维护与误报治理问题现象系统运行初期产生大量告警但很多是无效或无关紧要的导致“告警疲劳”真正的关键问题反而被淹没。排查思路告警降噪分析告警事件将其分类。哪些是已知的、无害的波动如定时任务启动导致的CPU短暂升高哪些是真正的异常规则有效性评估回顾关联规则如“5xx错误10且CPU0.8”。这个阈值是否合理是否因业务时段如大促不同而需要动态调整解决方案实现告警收敛对同一实体如主机在短时间内产生的同类告警进行去重或合并只发送一条汇总告警。引入静默规则为已知的维护窗口或非关键业务时段配置静默规则在这些时间段内抑制告警。动态基线将简单的静态阈值升级为动态基线。例如使用该实体历史同期如上周同一时间的数据作为基线当前值超过基线一定比例如3个标准差才告警。这可以自动适应业务的周期性变化。告警分级与路由根据关联事件的严重程度如影响面大小、指标偏离程度进行分级P0/P1/P2/P3。P0告警直接电话通知P3告警仅发送到工单系统或聊天群。这需要将关联分析的结果进行二次评分。5.4 系统可观测性自省一个洞察系统自身也必须是高度可观测的。你需要监控这个监控系统本身。关键监控指标数据管道健康度吞吐量Kafka各主题的入队/出队速率Flink作业的numRecordsInPerSecond。延迟端到端延迟事件产生到洞察结果输出、Flink的currentEmitEventTimeLag。积压Kafka消费者组的LagFlink Source的pendingRecords。分析引擎健康度资源使用Flink TaskManager的CPU/内存使用率Elasticsearch的JVM堆内存使用率、CPU负载。错误率Flink作业的numRecordsOutErrors写入ES/Kafka的失败率。状态大小Flink作业的State Size增长趋势。建议为Lokis Insight系统本身建立一个独立的、轻量级的监控仪表盘将这些核心指标可视化。这样当你的洞察系统不“洞察”时你至少知道它卡在了哪个环节。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2590290.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…