当前位置: 首页 > news >正文

C++负载均衡远程调用学习之获取主机信息功能

目录

01Lars-lbAgentV0.2-赋值均衡数据结构关系分析

02 Lars-lbAgent0.2-host_info-load_balance-route_lb数据结构的定义

03Lars-lbAgentV0.2-proto协议的定义

04 Lars-lbAgentV0.2-route_lb与UDP server的关联

05 -Lars-lbAgentV0.2-route_lb与UDP server的关联

06Lars-lbAgentV0.2-route_lb更新host主机路由信

07Lars-lbAgentV0.2-route_lb获取host信息不存在

08 昨日回顾及agent获取host信息流程

09 Lars-LbAgentV0.2-Api获取主机信息-更新流程梳理

10 Lars-LbAgentV0.2-Api-load_balance模块更新主

11 Lars-LbAgentV0.2-Api目录结构创建

12 Lars-LbAgentV0.2-Api创建udp连接实现-lars-lbagent启动失败修正

13 Lars-LbAgentV0.2-Api-getHost请求实现

14 Lars-LbAgentV0.2-loadBalance-选择主机业务实现

15 Lars-LbAgentV0.3-api-get_hostAPI接口测试

16Lars-LbAgentV0.3-api-get_hostAPI流程总结

17 Lars-LbAgentV0.4-api-上报业务实现


01Lars-lbAgentV0.2-赋值均衡数据结构关系分析

# 七、Lars启动工具脚本

我们提供一个启动lars系统子系统和测试工具的一个脚本工具,`run_lars`

> Lars/run_lars

```shell
#!/bin/bash

LARS_REPORTER_PATH="./lars_reporter"
LARS_DNS_PATH="./lars_dns"
LARS_LBAGENT_PATH="./lars_loadbalance_agent"
LARS_WEB_PATH="./larsWeb"
LARS_API_EXAMPLE_PATH="./api/cpp/example"

usage()
{
    echo ""
    echo "=======启动子系统=========="
    echo "Usage ./run_lars [reporter|dns|lbagent|web|test]"
    echo

    echo "=======测试工具============"
    echo "Usage ./run_lars test gethost ModID CmdID"
    echo "Usage ./run_lars test getroute ModID CmdID"
    echo "Usage ./run_lars test report ModID CmdID IP Port 0|1  --- 0:SUCC, 1:OVERLOAD"
    echo "Usage ./run_lars test simulator ModID CmdID [errRate(0-10)] [queryCnt(0-999999)]"
    echo "Usage ./run_lars test qps ThreadNum"
    echo "Usage ./run_lars test example ModID CmdID"
    echo
}

if [ "$1" = "test" ]; then
    if [ "$2" = "gethost" ]; then
        $PWD/$LARS_API_EXAMPLE_PATH/get_host $3 $4 
    elif [ "$2" = "getroute" ]; then
        $PWD/$LARS_API_EXAMPLE_PATH/get_route $3 $4 
    elif [ "$2" = "report" ]; then
        $PWD/$LARS_API_EXAMPLE_PATH/report $3 $4 $5 $6 $7
    elif [ "$2" = "example" ]; then
        $PWD/$LARS_API_EXAMPLE_PATH/example $3 $4
    elif [ "$2" = "simulator" ]; then
        if [ $# -eq 4 ]; then
            $PWD/$LARS_API_EXAMPLE_PATH/simulator $3 $4 
        elif [ $# -eq 5 ]; then
            $PWD/$LARS_API_EXAMPLE_PATH/simulator $3 $4 $5
        elif [ $# -eq 6 ]; then
            $PWD/$LARS_API_EXAMPLE_PATH/simulator $3 $4 $5 $6
        else
            usage
        fi
    elif [ "$2" = "qps" ]; then
        $PWD/$LARS_API_EXAMPLE_PATH/qps $3
    fi
elif [ "$1" = "reporter" ]; then
    cd $LARS_REPORTER_PATH
    ./bin/lars_reporter
elif [ "$1" = "dns" ]; then
    cd $LARS_DNS_PATH
    ./bin/lars_dns
elif [ "$1" = "lbagent" ]; then
    cd $LARS_LBAGENT_PATH
    ./bin/lars_lb_agent
elif [ "$1" = "web" ]; then
    cd $LARS_WEB_PATH
    ./lars-web
elif [ "$1" = "help" ]; then
    usage
else
    usage
fi
```
 

02 Lars-lbAgent0.2-host_info-load_balance-route_lb数据结构的定义

**其他测试工具启动方式**

```bash
$ ./run_lars help

=======启动子系统==========
Usage ./run_lars [reporter|dns|lbagent|web|test]

=======测试工具============
Usage ./run_lars test gethost ModID CmdID
Usage ./run_lars test getroute ModID CmdID
Usage ./run_lars test report ModID CmdID IP Port 0|1  --- 0:SUCC, 1:OVERLOAD
Usage ./run_lars test simulator ModID CmdID [errRate(0-10)] [queryCnt(0-999999)]
Usage ./run_lars test qps ThreadNum
Usage ./run_lars test example ModID CmdID

```

03Lars-lbAgentV0.2-proto协议的定义

# 八、Lars优化建议

## 1) 量小的情况下过载发现太慢

对于一个小量服务, 假设一个窗口内(15s)匀速只有20次过程调用,如果远端过载, 则在已有策略上需要1succ 19err 几乎全失败才会感知

更严重的是,匀速<20次过程调用,即使全部失败也不可能达到过载条件

**优化:**

连续2个窗口内都没过载,但是这2个窗口内真实失败率都高于70%: 说明是小业务量,认为此节点过载

## 2) 某场景下节点过载发现太慢

04 Lars-lbAgentV0.2-route_lb与UDP server的关联

**场景回顾:**

远程服务mod的一台节点h已经挂了,但Lars系统一直没有将h节点判定为过载

**问题分析**

业务调用方的超时时间设置的是1秒,每次调用h节点都超时,即都消耗1秒,于是1秒才向Lb Agent上报一次状态

与此行为冲突的是,agent每隔15秒会重置所有正常节点的调用统计,15s内,agent仅收到15次对h节点调用错误的上报,即15个err,根本达不到h节点过载的条件,于是h节点在每个15s内都一直被Lars认为是正常的,永远无法被判定为过载

**结论**

05 -Lars-lbAgentV0.2-route_lb与UDP server的关联

**结论**

Lars的过载判定算法没有对节点调用耗时进行考虑

假设业务设置的调用超时时间为3秒,则业务方调用h节点失败消耗了3秒,并仅向Lars agent上报一个调用错误,`err + 1`

**优化:**

当调用节点失败,向上报状态要携带本次调用时间`timecost`(ms),Lb agent在收到调用失败的汇报时,会对失败个数根据`timecost`进行放大

具体是:

> ```
> errcnt = timecost / 100; errcnt = 1 if timecost = 0
> ```

于是乎,业务调用方调用h节点失败并消耗了1s,上报给Lb agent后,agent会认为h节点失败了1000ms/100 = 10次,会使挂掉的h更快达到过载条件

06Lars-lbAgentV0.2-route_lb更新host主机路由信

**本优化可以更快感知调用超时情况的过载**

## 3) 多线程分配如Dns、Report等 简单轮询改成一致性Hash算法

>  MurmurHash一致性hash

### 3.1 什么是一致性HASH

> 注: 本小结内容转载自:<https://www.wmathor.com/index.php/archives/1138/>

工程设计中常用服务器集群来设计和实现数据缓存,以下是常见的策略:

1. 无论是添加、查询还是删除数据,都先将数据的 id 通过哈希函数转换成一个哈希值,记为 key
2. 如果目前机器有 N 台,则计算 key%N 值,这个值就是该数据所属的的机器编号,无论是添加、删除还是查询操作,都只在这台机器上进行

请分析这种缓存策略可能带来的问题,并提出改进的方案。
 

07Lars-lbAgentV0.2-route_lb获取host信息不存在

#### A. 普通 Hash 算法

缓存策略的潜在问题是如果增加或删除机器时(N 变化)代价会很高,所有的数据都不得不根据 id 重新计算一遍哈希值,并将哈希值对新的机器数进行取模操作,然后进行大规模的数据迁移。  



#### B. 一致性Hash算法

​        为了解决这些问题,引入一致性哈希算法。假设数据的 id 通过哈希函数转换成的哈希值范围是 2的32次幂,也就是( 0,  2^32−1) 的数字空间中。我们将这些数字头尾相连,想象成一个闭合的环形,那么一个数字 id 在计算出哈希值之后认为对应到环中的一个位置上

![12-murmurHash_1](/Users/apple/Nustore%20Files/%E6%88%91%E7%9A%84%E5%9D%9A%E6%9E%9C%E4%BA%91/%E8%AF%BE%E7%A8%8B%E7%A0%94%E5%8F%91/Lars/%E8%AE%B2%E4%B9%89/pictures/12-murmurHash_1.png)

08 昨日回顾及agent获取host信息流程

​        接下来,想象有三台机器也处于这样一个环中,这三台机器在环中的位置根据机器 id 计算出的哈希值来决定。那么一条数据如何确定归属哪台机器呢?首先把该数据的 id 用哈希值算出哈希值,并映射到环中的相应位置,然后顺时针找寻离这个位置最近的机器,那台机器就是该数据的归属。例如,下图有一个数据 m,计算其 hash 值后映射到环上,那么他的归属就是 2 号机器.

![13-murmurHash_2](/Users/apple/Nustore%20Files/%E6%88%91%E7%9A%84%E5%9D%9A%E6%9E%9C%E4%BA%91/%E8%AF%BE%E7%A8%8B%E7%A0%94%E5%8F%91/Lars/%E8%AE%B2%E4%B9%89/pictures/13-murmurHash_2.png)


​        普通 hash 求余算法最为不妥的地方就是在有机器的添加或者删除之后会照成大量的对象存储位置失效,这样就大大的不满足单调性了。下面来分析一下一致性哈希算法是如何处理的.

09 Lars-LbAgentV0.2-Api获取主机信息-更新流程梳理

##### a. 结点(机器)删除

​        以上面的分布为例,如果 Node2(机器 2)出现故障被删除了,那么按照顺时针迁移的方法,Hash 值属于图中红色片段的所有数据将会被迁移到 Node3(机器)中,这样仅仅是红色的一段映射位置发生了变化,其它的对象没有任何的改动。如下图:

![14-murmurHash_3](/Users/apple/Nustore%20Files/%E6%88%91%E7%9A%84%E5%9D%9A%E6%9E%9C%E4%BA%91/%E8%AF%BE%E7%A8%8B%E7%A0%94%E5%8F%91/Lars/%E8%AE%B2%E4%B9%89/pictures/14-murmurHash_3.png)

##### b. 结点(机器)添加        



​        如果往集群中添加一个新的节点 NODE4,通过对应的哈希算法得到 KEY4,并映射到环中,如下图:

![15-murmurHash_4](/Users/apple/Nustore%20Files/%E6%88%91%E7%9A%84%E5%9D%9A%E6%9E%9C%E4%BA%91/%E8%AF%BE%E7%A8%8B%E7%A0%94%E5%8F%91/Lars/%E8%AE%B2%E4%B9%89/pictures/15-murmurHash_4.png)

10 Lars-LbAgentV0.2-Api-load_balance模块更新主

按照顺时针迁移的规则,数据 Hash 值处于红色段的数据被迁移到了 Node4 中,其它对象还保持这原有的存储位置。通过对节点的添加和删除的分析,一致性哈希算法在保持了单调性的同时,数据的迁移时间达到了最小,这样的算法对分布式集群来说是非常合适的,避免了大量数据迁移,减小了服务器的的压力.

​        

##### c. 一致性哈希算法优化

​        其实上面的一致性哈希函数还存在一个很大的问题,我们说 Hash 函数是输入的样本量很大的时候,其输出结果在输出域上是均匀分布的,但是这里假如只有三个输入,就很难保证分布是均匀的,有可能产生下图所示的分布,就导致负载极其不均衡

![16-murmurHash_5](/Users/apple/Nustore%20Files/%E6%88%91%E7%9A%84%E5%9D%9A%E6%9E%9C%E4%BA%91/%E8%AF%BE%E7%A8%8B%E7%A0%94%E5%8F%91/Lars/%E8%AE%B2%E4%B9%89/pictures/16-murmurHash_5.png)

​        更加优化的一致性哈希算法引入了虚拟节点机制,即对每一台机器产生多个结点,称为虚拟节点。具体做法可以在机器 ip 或主机名的后面增加编号或端口号来实现。假设一台机器有 1000 个虚拟节点,3 台机器就有 3000 个结点,3000 个结点映射到哈希域上就相对比较均匀了.

11 Lars-LbAgentV0.2-Api目录结构创建

​        为了解决这种数据倾斜问题,一致性哈希算法引入了虚拟节点机制,即对每一个服务节点计算多个哈希,每个计算结果位置都放置一个此服务节点,称为虚拟节点。具体做法可以在服务器ip或主机名的后面增加编号来实现。例如上面的情况,可以为每台服务器计算三个虚拟节点,于是可以分别计算 “Node A#1”、“Node A#2”、“Node A#3”、“Node B#1”、“Node B#2”、“Node B#3”的哈希值,于是形成六个虚拟节点:

![17-murmurHash_6](/Users/apple/Nustore%20Files/%E6%88%91%E7%9A%84%E5%9D%9A%E6%9E%9C%E4%BA%91/%E8%AF%BE%E7%A8%8B%E7%A0%94%E5%8F%91/Lars/%E8%AE%B2%E4%B9%89/pictures/17-murmurHash_6.png)



> 更加详细的一致性hash介绍参考: <https://www.jianshu.com/p/92588bbe8a22>
 

12 Lars-LbAgentV0.2-Api创建udp连接实现-lars-lbagent启动失败修正

13 Lars-LbAgentV0.2-Api-getHost请求实现

14 Lars-LbAgentV0.2-loadBalance-选择主机业务实现

15 Lars-LbAgentV0.3-api-get_hostAPI接口测试

16Lars-LbAgentV0.3-api-get_hostAPI流程总结

17 Lars-LbAgentV0.4-api-上报业务实现

相关文章:

C++负载均衡远程调用学习之获取主机信息功能

目录 01Lars-lbAgentV0.2-赋值均衡数据结构关系分析 02 Lars-lbAgent0.2-host_info-load_balance-route_lb数据结构的定义 03Lars-lbAgentV0.2-proto协议的定义 04 Lars-lbAgentV0.2-route_lb与UDP server的关联 05 -Lars-lbAgentV0.2-route_lb与UDP server的关联 06Lars…...

C++ 适配器模式详解

适配器模式&#xff08;Adapter Pattern&#xff09;是一种结构型设计模式&#xff0c;它允许不兼容的接口之间能够协同工作。 概念解析 适配器模式的核心思想是&#xff1a; 接口转换&#xff1a;将一个类的接口转换成客户希望的另一个接口 兼容性&#xff1a;使原本由于接…...

2025.5.5总结

今日感悟&#xff1a;这假期就这样结束了&#xff0c;玩了一次滑板&#xff0c;打扫了一次租房&#xff0c;出去逛了一次街&#xff0c;看完了一本书&#xff0c;追了一部剧。既没有家人&#xff0c;也没有能一同畅饮的同学&#xff0c;更没有对象&#xff0c;显得确实有些孤独…...

数据链路层(MAC 地址)

目录 一、前言&#xff1a; 二、以太网&#xff1a; 三、MAC 地址的作用&#xff1a; 四、ARP协议&#xff1a; 一、前言&#xff1a; 数据链路层主要负责相邻两个节点之间的数据传输&#xff0c;其中&#xff0c;最常见数据链路层的协议有 以太网&#xff08;通过光纤 / 网…...

kotlin 05flow -从 LiveData 迁移到 Kotlin Flow 完整教程

一 从 LiveData 迁移到 Kotlin Flow 完整教程 LiveData 长期以来是 Android 架构组件中状态管理的核心&#xff0c;但随着 Kotlin Flow 的成熟&#xff0c;Google 官方推荐将现有 LiveData 迁移到 Flow。本教程基于官方文章并扩展实践细节&#xff0c;完成平滑迁移。 一、为什…...

PostgreSQL 的 pg_ls_waldir 函数

PostgreSQL 的 pg_ls_waldir 函数 pg_ls_waldir 是 PostgreSQL 中用于列出预写式日志(WAL)目录内容的重要函数&#xff0c;特别适用于 WAL 文件管理和数据库恢复场景。 一、函数基本说明 语法 pg_ls_waldir() RETURNS SETOF text功能 返回 WAL 目录中所有文件的名称集合在…...

形式化数学——Lean求值表达式

作为学习 Lean 的程序员&#xff0c;最重要的是理解求值的工作原理。求值是求得表达式的值的过程&#xff0c;就 像算术那样。例如&#xff0c;15 - 6 的值为 9&#xff0c;2 (3 1) 的值为 8。要得到后一个表达式的值&#xff0c;首先将 3 1 替换为 4&#xff0c;得到 2 4&…...

杰理-AC696音箱linein无法插入检测

杰理-AC696音箱linein无法插入检测 阻值选用1k&#xff0c;原公版原理图上68k,导致内部上拉电压一直不能掉下来&#xff0c;软件一直无法检测到。...

zst-2001 历年真题 程序设计语言

程序设计语言1 b 程序设计语言2 c 程序设计语言3 a 程序设计语言4 b中解释语言可以用高级语言编写 c优化 d反了 a 程序设计语言5 c 程序设计语言6 重复就是循环 b 程序设计语言7 a 程序设计语言8 c就是malloc&#xff0c;动态扩展数组&#xff0c;和类型没什…...

VirtualBox调整虚拟机内存和CPU

当我们配置的虚拟机内存或CPU不足以支撑开发需要时&#xff0c;需要及时调整内存和CPU大小。调整前如果虚拟机在运行&#xff0c;需要先关机。 下面的步骤是居于VirtualBox 6.1版本&#xff0c;不同版本的操作界面会有些许差异。 1.选中要调整的虚拟机&#xff0c;点击设置 2…...

SpringMVC框架详解与实践指南

文章目录 一、三层架构与MVC模型1. 三层架构2. MVC模型 二、SpringMVC入门案例1. 环境搭建2. 核心配置3. 编写Controller 三、执行流程与组件分析四、RequestMapping注解五、请求参数绑定1. 基本类型与对象绑定2. 嵌套对象与集合绑定 六、中文乱码解决方案(前端传到后端)1. Str…...

C语言 ——— 函数

目录 函数是什么 库函数 学习使用 strcpy 库函数 自定义函数 写一个函数能找出两个整数中的最大值 写一个函数交换两个整型变量的内容 牛刀小试 写一个函数判断一个整数是否是素数 写一个函数判断某一年是否是闰年 写一个函数&#xff0c;实现一个整型有序数组的二分…...

洛谷 P9007 [入门赛 #9] 最澄澈的空与海 (Hard Version)

这道题可不入门。 [Problem Discription] \color{blue}{\texttt{[Problem Discription]}} [Problem Discription] 给定 n n n&#xff0c;求有多少组 ( x , y , z ) (x,y,z) (x,y,z) 满足&#xff1a; x − y z n ! x-\dfrac{y}{z}n! x−zy​n! x − y z n ! n \dfrac{x-y…...

Java基础学完,继续深耕(0505)Linux 常用命令

昨天休息了一天&#xff0c;没有写csdn 昨天和今天把Linux大概学了一下。总结一下常用命令&#xff0c;总结的不全。 Linux目录结构 / 是所有目录的顶点 目录结构像一颗倒挂的树 注意&#xff1a;/itheima 是绝对路径&#xff0c;是指根目录 / 下的itheima目录 itheima…...

详解 FFMPEG 交叉编译 `FLAGS` 和 `INCLUDES` 的作用

FLAGS 和 INCLUDES这两行是 Android NDK 编译时的编译器选项&#xff0c;用于控制代码生成、优化、调试、安全性和头文件搜索路径。下面逐项详解&#xff1a; 1. FLAGS 详解&#xff08;编译器选项&#xff09; FLAGS 定义了传递给 C/C 编译器&#xff08;如 clang 或 gcc&…...

DGI数据治理框架的最佳实践

以下是针对DGI数据治理框架的最佳实践推荐&#xff0c;结合其核心理念与实际应用场景&#xff0c;帮助组织高效落地数据治理&#xff0c;释放数据价值。 一、组织架构与角色分工 最佳实践1&#xff1a;建立清晰的数据治理委员会 • 实践要点&#xff1a; • 由高层领导&#…...

C++类与对象深度解析:从基础到应用

目录&#xff1a; 1. 类的基本概念与定义1.1 类的定义与访问限定符1.2 实例化与对象内存布局1.3 this指针 2.类的默认成员函数2.1 构造函数与析构函数详解构造函数析构函数 2.2 拷贝构造函数2.3 赋值运算符重载运算符重载 3. 初始化列表4.类型转换5. 静态成员6.友元和内部类6.1…...

JGQ611Ⅱ数据采集电除雾器实验装置

JGQ611Ⅱ数据采集电除雾器实验装置 一.实验目的 1.掌握电除雾器的结构特征与工作原理。 2.测定风压、风速、电压、电流板间距等因素对酸雾去除效率的影响。 3.测定电除雾器的工作效率。 二.技术指标 1.电场电压&#xff1a;0&#xff5e;20KV&#xff08;可调&#xff09;。 2.…...

如何判断cgroup的版本?

在 Linux 系统中&#xff0c;判断当前使用的 cgroup 版本&#xff08;v1 还是 v2&#xff09;可以通过以下几种方法&#xff1a; 方法一&#xff1a;查看挂载点&#xff08;最直接&#xff09; mount | grep cgroup输出分析 cgroups v1&#xff1a;存在多个以 cgroup 开头的…...

基于 Spark 和 Hadoop 的空气质量数据分析与预测系统

基于 Spark 和 Hadoop 的空气质量数据分析与预测系统 文章目录 基于 Spark 和 Hadoop 的空气质量数据分析与预测系统引言项目目标技术栈数据来源系统核心功能1. 用户认证与管理2. 数据总览3. 空气质量分析4. 词云图5. AQI 预测 项目结构预览关键代码分享1. Flask 主文件&#x…...

qt csv文件写操作

实例1&#xff1a; QStringList header; header << "1" << "2"; QStringList footer; footer << "Here is a footer"; QStringList strList; strList << "one" << "two" <&l…...

Java 反射

反射 反射的概述 获取class对象的三种方式 代码实现 package myreflect1;public class MyReflectDemo1 {public static void main(String[] args) throws ClassNotFoundException {//1.第一种方式//全类名&#xff1a;包名类名//最为常用Class clazz1 Class.forName("…...

Spring-使用Java的方式配置Spring

目录 前言 一、使用Java配置Spring 前言 使用纯Java的配置方式&#xff0c;在SpringBoot中随处可见&#xff0c;是必须要学习的 一、使用Java配置Spring 配置Spring有多种方式&#xff0c;我们现在要完全不使用Spring的xml配置了&#xff0c;全权交给Java来做&#xff01; J…...

cudaMalloc函数说明

cudaMalloc函数说明 cudaError_t cudaMalloc(void** devPtr, size_t size);参数说明 devPtr (输出参数): 类型为 void**&#xff0c;即指向指针的指针。函数执行成功后&#xff0c;*devPtr 将被赋值为 GPU 内存的起始地址。例如&#xff1a;若分配一个 float 数组&#xff0c;需…...

路由协议(静态路由、RIP、OSPF、BGP)

目录 静态路由 RIP OSP BGP 总结 静态路由 定义&#xff1a;由网络管理员手动配置的路由。它不会自动更新&#xff0c;除非管理员手动修改。 特点&#xff1a; 简单&#xff1a;配置简单&#xff0c;适合小型网络。安全&#xff1a;不会与其他路由器交换路由信息&#x…...

基于 HTML5 的贪吃蛇小游戏实现

一、引言 在 Web 开发的世界中&#xff0c;利用 HTML、CSS 和 JavaScript 构建有趣的互动游戏是一项充满乐趣和挑战的任务。本文将详细介绍一个基于 HTML5 的贪吃蛇小游戏的实现过程&#xff0c;通过对代码的解析&#xff0c;带你了解如何打造一个经典的贪吃蛇游戏&#xff0c…...

学习Linux的第二天

如何在Linux环境下做开发 Linux的一些基操 Tips&#xff1a;平常最表层的是命令行模式&#xff0c;最多见这个默认叫做命令行模式 Vi操作是什么意思呢 就是在提示符输入vi a.c 是可以创建一个a.c这个文件并进入这个输入模式 按i可以输入代码 要退出的时候按esc 再按:(冒号…...

rollout 是什么:机器学习(强化学习)领域

rollout 是什么:机器学习(强化学习)领域 指从特定初始状态开始,按照某个策略或模型进行一系列动作和状态转移,直到达到终止状态或预定时间步数 。比如: 迷宫任务:强化学习代理在迷宫中,从起始点出发,按某策略(如随机选方向走)进行移动,直到找到出口或达到最大移动…...

MATLAB人工大猩猩部队GTO优化CNN-LSTM多变量时间序列预测

本博客来源于CSDN机器鱼&#xff0c;未同意任何人转载。 更多内容&#xff0c;欢迎点击本专栏目录&#xff0c;查看更多内容。 目录 0 引言 1 数据准备 2 CNN-LSTM模型搭建 3 GTO超参数优化 3.1 GTO函数极值寻优 3.2 GTO优化CNN-LSTM超参数 3.3 主程序 4 结语 0 引言…...

android-ndk开发(3): 连接设备到开发机

android-ndk开发(3): 连接设备到开发机 2025/05/05 1. 术语解释 用来写代码的电脑&#xff0c; 我叫做开发机。 我打心底认为 Windows, Linux, macOS 都是 PC&#xff0c; 但是有些人不这么认为&#xff0c; 那就还是叫开发机。 android 手机能运行 app&#xff08;众所周知…...

谷歌最新推出的Gemini 2.5 Flash人工智能模型因其安全性能相较前代产品出现下滑

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…...

Kubernetes排错(七)-节点排错

1、节点 Crash 与 Vmcore 分析 kdump 介绍​ 目前大多 Linux 发新版都会默认开启 kdump 服务&#xff0c;以方便在内核崩溃的时候, 可以通过 kdump 服务提供的 kexec 机制快速的启用保留在内存中的第二个内核来收集并转储内核崩溃的日志信息(vmcore 等文件), 这种机制需要服务…...

《架构安全原则》解锁架构安全新密码

The Open Group最新发布的《架构安全原则》标准中文版为企业架构、技术架构、解决方案架构以及安全架构领域的专业人员提供了一套系统化、可落地的安全设计准则。这一权威文件旨在帮助组织在数字化转型的复杂环境中构建既安全又敏捷的架构体系&#xff0c;其内容与TOGAF标准、N…...

生物化学笔记:神经生物学概论10 运动节律的控制 运动时脑内活动 运动系统疾病及其治疗(帕金森、亨廷顿)

运动节律的控制 运动时脑内活动 运动系统疾病及其治疗 口服多巴胺无法穿越“血脑屏障”&#xff0c;进不到脑子里去&#xff0c;其前体(原材料)能进入血脑屏障。一直吃药&#xff0c;机体会偷懒。另一方面&#xff0c;会影响脑子其他部分。 损毁也只能暂时解决&#xff0c;黑质…...

DDR在PCB布局布线时的注意事项及设计要点

一、布局注意事项 控制器与DDR颗粒的布局 靠近原则&#xff1a;控制器与DDR颗粒应尽量靠近&#xff0c;缩短时钟&#xff08;CLK&#xff09;、地址/控制线&#xff08;CA&#xff09;、数据线&#xff08;DQ/DQS&#xff09;的走线长度&#xff0c;减少信号延迟差异。 分组隔…...

Paramiko源码深入解析

Paramiko是一个基于Python的SSHv2协议实现库&#xff0c;支持远程命令执行、文件传输&#xff08;SFTP&#xff09;和安全隧道功能。以下是对其源码的深入解析&#xff0c;涵盖核心模块、关键流程及实现细节。 1. 核心模块与结构 Paramiko的源码结构围绕SSH协议的各个层次设计…...

音频感知动画新纪元:Sonic让你的作品更生动

前言 在现代肖像动画领域,如何精准地控制画面中的焦点,确保声音和画面完美契合,已成为了一个十分值得探索的话题。于是,Sonic 方法应运而生,这种创新的音频感知技术,旨在让肖像动画中的焦点能够与音频内容同步,从而提升整体的沉浸感和表现力。在ComfyUI 中实现这一功能…...

uniapp开发06-视频组件video的使用注意事项

uniapp开发-视频组件video的使用注意事项&#xff01;实际项目开发中&#xff0c;经常会遇到视频播放的业务需求。下面简单讲解一下&#xff0c;uniapp官方提供的视频播放组件video的常见参数和实际效果。 1&#xff1a;先看代码&#xff1a; <!--视频组件的使用展示-->…...

英伟达语音识别模型论文速读:Fast Conformer

Fast Conformer&#xff1a;一种具有线性可扩展注意力的高效语音识别模型 一、引言 Conformer 模型因其结合了深度可分离卷积层和自注意力层的优势&#xff0c;在语音处理任务中取得了出色的性能表现。然而&#xff0c;Conformer 模型存在计算和内存消耗大的问题&#xff0c;…...

利用jQuery 实现多选标签下拉框,提升表单交互体验

在 Web 开发中&#xff0c;表单设计常常需要支持用户选择多个选项的场景。传统的多选框或下拉菜单在处理大量选项时&#xff0c;可能会影响界面美观和操作便捷性。这时&#xff0c;多选标签下拉框就成为了一种优雅的解决方案。本文将详细介绍如何通过 HTML、CSS 和 jQuery 实现…...

基于 HTML 和 CSS 实现的 3D 翻转卡片效果

一、引言 在网页设计中&#xff0c;为了增加用户的交互体验和视觉吸引力&#xff0c;常常会运用一些独特的效果。本文将详细介绍一个基于 HTML 和 CSS 实现的 3D 翻转卡片效果&#xff0c;通过对代码的剖析&#xff0c;让你了解如何创建一个具有立体感的卡片&#xff0c;在鼠标…...

【阿里云大模型高级工程师ACP学习笔记】2.9 大模型应用生产实践 (下篇)

特别说明:由于这一章节是2025年3月官方重点更新的部分,新增内容非常多,因此我不得不整理成上、下两篇,方便大家参考。 学习目标 备考阿里云大模型高级工程师ACP认证的这部分内容,旨在深入理解大模型应用在安全合规方面的要求,掌握模型部署相关要点,提升实际操作和应对复…...

MVC、MVP、MVVM三大架构区别

1、MVC架构 M&#xff08;Model&#xff09;&#xff1a;主要处理数据的存储、获取、解析。 V&#xff08;View&#xff09;&#xff1a;即Fragement、Activity、View等XML文件 C&#xff08;Controller&#xff09;&#xff1a;主要功能为控制View层数据的显示&#xff0c;…...

期末代码Python

以下是 学生信息管理系统 的简化版代码示例&#xff08;控制台版本&#xff0c;使用文件存储数据&#xff09;&#xff0c;包含核心功能&#xff1a; 1. 定义学生类 class Student: def __init__(self, sid, name, score): self.sid sid # 学号 self.name name # 姓名 self.s…...

ecat总线6000段定义

1ecat总线 不适合新手学习&#xff0c;我复习用的。 can和ecat是一家的&#xff0c;就跟C和C的关系。 参考CIA402定义 2 PDOr⬇️ 主站发送到终端伺服。 有4组&#xff0c;0x1600 3 PDOt⬆️ 伺服驱动器发送到主站。 我记得有4组&#xff0c;但这款伺服只有2组。 4 速度模…...

数据管理能力成熟度评估模型(DCMM)全面解析:标准深度剖析与实践创新

文章目录 一、DCMM模型的战略价值与理论基础1.1 DCMM的本质与战略定位1.2 DCMM的理论基础与创新点 二、DCMM模型的系统解构与逻辑分析2.1 八大能力域的有机关联与系统架构2.2 五级成熟度模型的内在逻辑与演进规律 三、DCMM八大能力域的深度解析与实践创新3.1 数据战略&#xff…...

Python精进系列:random.uniform 函数的用法详解

目录 &#x1f50d; 一、引言&#x1f4cc; 二、函数定义与参数说明✅ 函数定义⚙️ 参数说明 &#x1f9ea; 三、使用示例1️⃣ 生成单个随机数2️⃣ 生成多个随机数3️⃣ 生成二维坐标 &#x1f3af; 四、应用场景&#x1f9ea; 模拟实验&#x1f4ca; 数据采样&#x1f3ae;…...

观察者模式(Observer Pattern)

&#x1f9e0; 观察者模式&#xff08;Observer Pattern&#xff09; 观察者模式是一种行为型设计模式。它定义了一种一对多的依赖关系&#xff0c;使得当一个对象的状态发生变化时&#xff0c;所有依赖于它的对象都会得到通知并自动更新。通常用于事件驱动的编程场景中。 &am…...

【论文阅读】Joint Deep Modeling of Users and Items Using Reviews for Recommendation

Joint Deep Modeling of Users and Items Using Reviews for Recommendation 题目翻译&#xff1a;利用评论对用户和项目进行联合深度建模进行推荐 原文地址&#xff1a;点这里 关键词&#xff1a; DeepCoNN、推荐系统、卷积神经网络、评论建模、协同建模、评分预测、联合建模…...

webpack 的工作流程

Webpack 的工作流程可以分为以下几个核心步骤&#xff0c;我将结合代码示例详细说明每个阶段的工作原理&#xff1a; 1. 初始化配置 Webpack 首先会读取配置文件&#xff08;默认 webpack.config.js&#xff09;&#xff0c;合并命令行参数和默认配置。 // webpack.config.js…...