Redis设计与实现第16章 -- Sentinel 总结1(初始化、主从服务器获取信息、发送信息、接收信息)
Sentinel是Redis的高可用解决方案:由一个或多个Sentinel实例组成的Sentinel系统可以监视任意多个主服务器,以及这些主服务器属下的所有从服务器,被监视的主服务器进入下线状态时,自动将下线主服务器属下的某个从服务器升级为新的主服务器,然后由新的主服务器替代已下线的主服务器继续处理命令请求。
16.1 启动并初始化Sentinel
当一个Sentinel启动的时候,需要执行5个步骤
16.1.1 初始化服务器
Sentinel本质上只是一个运行在特殊模式下的Redis服务器,所以启动Sentinel的第一步,就是初始化一个普通的Redis服务器。
区别在于部分功能Sentinel并不会使用,比如不会载入RDB和AOF文件,不会使用数据库和键值对方面的命令、不会使用事务/脚本命令;复制命令在Sentinel内部可以使用,发布和订阅里Publish命令只能在Sentinel内部使用;文件事件处理器和时间事件处理器也同理。
16.1.2 使用Sentinel专用代码
将一部分普通Redis服务器使用的代码替换成Sentinel专用代码,比如,普通Redis服务器使用redis.h/REDIS_SERVERPORT常量的值作为服务器端口,而Sentinel则使用REDIS_SENTINEL_PORT常量作为服务器端口。前者的默认值是6379,后者的默认值是26379
其次,普通Redis服务器使用redis.c/redisCommandTable作为命令表,Sentinel使用sentinel.c/sentinelcmds作为命令表。
16.1.3 初始化Sentinel状态
服务器会初始化一个sentinel.c/sentinelState结构,这个结构保存了服务器里所有和Sentinel功能有关的状态
struct sentinelState {uint64_t current_epoch; //当前纪元 用于实现故障转移;//保存了所有被这个sentinel监视的主服务器//字典的键是主服务器的名字//字典的值则是一个指向sentinelRedisInstance结构的指针dict *masters;//是否进入了TILT模式?int tilt;//目前正在执行的脚本的数量int running_scripts;//进入TILT模式的时间mstime_t tilt_start_time;//最后一次执行时间处理器的时间mstime_t previous_time;//一个EIEO队列,包含了所有需要执行的用户脚本list *scripts_queue;
}sentinel;
16.1.4 初始化Sentinel状态的masters属性
masters字段记录了所有被Sentinel监视的主服务器的相关信息,字典的key是被监视主服务器的名字;value是对应的sentinelRedisInstance结构。
每个sentinelRedisInstance结构(实例结构)代表一个被Sentinel监视的Redis服务器实例,可以是主服务器、从服务器或另一个Sentinel
typedef struct sentinelRedisInstance
//标识值,记录了实例的类型,以及该实例的当前状态int flags;
//实例的名字
//主服务器的名字由用户在配置文件中设置
//从服务器以及Sentinel的名字由Sentinel自动设置//格式为ip:port,例如"127.0.0.1:26379"char *name;
// 实例的运行 IDchar *runid;
//配置纪元,用于实现故障转移uint64_t config_epoch;
//实例的地址sentinelAddr *addr;
//SENTINEL down-after-milliseconds选项设定的值
//实例无响应多少毫秒之后才会被判断为主观下线(subjectively down)mstime_t down_after_period;
//SENTINEL monitor<master-name><IP><port><quorum>选项中的quorum参数
//判断这个实例为客观下线(objectively down)所需的支持投票数量int quorum;
//SENTINEL parallel-syncs<master-name><number>选项的值
//在执行故障转移操作时,可以同时对新的主服务器进行同步的从服务器数量int parallel_syncs;
//SENTINEL failover-timeout <master-name><ms>选项的值
//刷新故障迁移状态的最大时限mstime_t failover_timeout;
}sentinelRedisInstance;
addr属性是一个指向sentinelAddr结构的指针,保存着实例的IP地址和端口号。
masters字典的初始化是根据被载入的Sentinel配置文件来进行的
16.1.5 创建连向主服务器的网络连接
Sentinel将称为主服务器的客户端,可以向主服务器发送命令,会创建2个异步网络连接:
-
命令连接:专门向主服务器发送命令,并接收命令回复
-
订阅连接:订阅主服务器的_sentinel_:hello频道
为了不丢失频道的任何信息,必须要有订阅连接
16.2 获取主服务器信息
Sentinel默认会以每十秒一次的频率,通过命令连接向被监视的主服务器发送INFO命令,并通过分析INFO命令的回复来获取主服务器的当前信息。
根据run_id域和role域记录的信息,Sentinel将对主服务器的实例结构进行更新;主服务器返回的从服务器信息,将会被用于更新主服务器实例结构的salves字典,这个字典记录了主服务器属下从服务器的名单。字典的key是由Sentinel自动设置的从服务器名字,格式为ip:port;字典的value是从服务器对应的实例结构。
主服务器实例结构的flags属性的值是SRI_MASTER,而从服务器实例结构的flags属性的值是SRI_SLAVE。主服务器实例结构的name的值是用户使用Sentinel配置文件设置的,而从服务器实例结构的name属性的值则是Sentinel根据从服务器的IP地址和端口号自动设置的。
16.3 获取从服务器信息
当Sentinel发现主服务器有新的从服务器出现时,会为这个新的从服务器创建相应的实例结构,还会创建连接到从服务器的命令连接和订阅链接。
创建命令连接后,默认10秒一次通过命令连接向从服务器发送INFO命令,得到下面信息:
-
从服务器的运行 ID run_id
-
从服务器的角色 role
-
主服务器的IP地址 master_host,以及主服务器的端口号master_port
-
主从服务器的连接状态master_link_status
-
从服务器的优先级slave_priority
-
从服务器的复制偏移量slave_repl_offset
16.4 向主服务器和从服务器发送信息
会以默认2秒一次的频率,通过命令连接向所有被监视的主服务器和从服务器发送命令
PUBLISH _sentinel_:hello "<s_ip>,<s_port>,<s_runid>,
<s_epoch>,<m_name>,<m_ip>,<m_port>,<m_epoch>"
向服务器的_sentinel_:hello频道发送了一条信息,由多个参数组成,其中s_开头的是Sentinel本身的信息,以m_开头的是主服务器的信息,如果正在监视的是主服务器,这些参数就是该主服务器的信息;如果监视的是从服务器,这些参数就是从服务器正在复制的主服务器的信息。
s_epoch表示Sentinel当前的配置纪元,m_epoch表示主服务器当前的配置纪元。
16.5 接收来自主服务器和从服务器的频道信息
当Sentinel与一个主服务器或从服务器建立起订阅连接之后,Sentinel就会通过订阅连接,向服务器发送以下命令,
SUBSCRIBE _sentinel_:hello
每个与Sentinel连接的服务器,Sentinel既通过命令连接向服务器的_sentinel_:hello
频道发送信息,又通过订阅连接从服务器的_sentinel_:hello
频道接收信息。
对于监视同一个服务器的多个Sentinel来说,一个Sentinel发送的信息会被其他Sentinel接收到,这些信息会被用于更新其他 Sentinel对发送信息 Sentinel 的认知也会被用于更新其他Sentinel对被监视服务器的认知。
当一个Sentinel从该频道收到一条信息时,Sentinel会对这条信息进行分析,提取出信息中的Sentinel IP地址,Sentinel端口号、Sentinel运行ID等8个参数,并进行检查:
-
如果信息中记录的Sentinel运行ID和接收信息的Sentinel的运行ID相同,这条信息就是本身发送的,丢弃
-
否则,根据收到的信息,对相应主服务器的实例结构进行更新
16.5.1 更新sentinels字典
Sentinel为主服务器创建的实例结构中的sentinels字典保存的是除了该Sentinel本身,所有同样监视这个主服务器的其他Sentinel的资料:字典的key是其中一个Sentinel的名字,格式是ip:port;字典的value是键对应Sentinel的实例结构。
当目标Sentinel收到源Sentinel发来的信息时,会从信息中分析并提取出源Sentinel的相关参数和源Sentinel正在监视的主服务器的参数,并且在自己的Sentinel状态的masters字典里查找对应的主服务器实例结构,检查主服务器实例结构的sentinels字典里,源Sentinel的实例是否存在。
-
如果源Sentinel的实例结构存在,对源Sentinel的实例结构进行更新
-
如果不存在,说明源Sentinel是刚刚开始监视主服务器的,目标Sentinel会为源Sentinel创建一个新的实例结构,并且添加到sentinels字典里。
masters字段记录了所有被Sentinel监视的主服务器的相关信息,主服务器的信息包含了其他正在监视该主服务器的Sentinel信息。也就是说监视同一个主服务器的多个Sentinel是可以互相自动发现的。
16.5.2 创建连向其他Sentinel的命令连接
当Sentinel通过频道信息发现一个新的Sentinel时,它不仅会为新Sentinel在sentinels字典中创建相应的实例结构,还会创建一个连向新Sentinel的命令连接,而新Sentinel也同样会创建连向这个Sentinel的命令连接,最终监视同一主服务器的多个Sentinel将形成相互连接的网络:Sentinel A有连向Sentinel B的命令连接,而Sentinel B也有连向Sentinel A的命令连接。
使用命令连接相连的各个Sentinel可以通过向其他Sentinel发送命令请求来进行信息交换。
Sentinel之间不会创建订阅连接:因为Sentinel需要通过接收主服务器或从服务器发送的频道信息来发现未知的新Sentinel,所以才需要建立订阅连接;相互已知的Sentinel只需要通过命令连接来通信就足够了
相关文章:
Redis设计与实现第16章 -- Sentinel 总结1(初始化、主从服务器获取信息、发送信息、接收信息)
Sentinel是Redis的高可用解决方案:由一个或多个Sentinel实例组成的Sentinel系统可以监视任意多个主服务器,以及这些主服务器属下的所有从服务器,被监视的主服务器进入下线状态时,自动将下线主服务器属下的某个从服务器升级为新的主…...
ChatGPT科研应用、论文写作、课题申报、数据分析与AI绘图
随着人工智能技术的飞速发展,ChatGPT等先进语言模型正深刻改变着科研工作的面貌。从科研灵感的激发、论文的高效撰写,到课题的成功申报,乃至复杂数据的深度分析与可视化呈现,AI技术均展现出前所未有的潜力。其实众多科研前沿工作者…...
OceanBase数据库系列之:基于docker快速安装OceanBase数据库,基于linux服务器快速部署OceanBase数据库
OceanBase数据库系列之:基于docker快速安装OceanBase数据库,基于linux服务器快速部署OceanBase数据库 一、docker快速安装OceanBase数据库下载OceanBase数据库镜像查看镜像启动OceanBase数据库查看OceanBase数据库是否启动成功 二、基于linux部署OceanBa…...
无星的微前端之旅(四)——qiankun线上服务代理到本地
这个方式其实是我在上家公司的时候体验过,觉得确实很有意思。 所以这里来逆推一下实现方式。 解决了什么痛点 1.开发一个模块,需要启动2-3个项目 在微前端的开发过程中,如果我们要在主应用中看效果,我们至少需要启动一个主应用&am…...
鸿蒙进阶篇-Stage模型、UIAbility
“在科技的浪潮中,鸿蒙操作系统宛如一颗璀璨的新星,引领着创新的方向。作为鸿蒙开天组,今天我们将一同踏上鸿蒙基础的探索之旅,为您揭开这一神奇系统的神秘面纱。” 各位小伙伴们我们又见面了,我就是鸿蒙开天组,下面让我们进入今…...
快速上手:如何开发一个实用的 Edge 插件
在日常浏览网页时,背景图片能够显著提升网页的视觉体验。如果你也想为自己的浏览器页面添加个性化背景图片,并希望背景图片设置能够持久保存,本文将介绍如何通过开发一个自定义Edge插件来实现这一功能。我们将涵盖保存背景设置到插件选项页&a…...
java缓存技术点介绍
1. 缓存(Cache): • 缓存是指用于存储数据的临时存储区域,以便快速访问。在Java中,缓存通常用于存储频繁访问的对象、结果集或其他数据。 2. 缓存命中率(Cache Hit Ratio): • 缓存命…...
【单片机毕业设计12-基于stm32c8t6的智能称重系统设计】
【单片机毕业设计12-基于stm32c8t6的智能称重系统设计】 前言一、功能介绍二、硬件部分三、软件部分总结 前言 🔥这里是小殷学长,单片机毕业设计篇12-基于stm32c8t6的智能称重系统设计 🧿创作不易,拒绝白嫖可私 一、功能介绍 ----…...
音视频流媒体直播/点播系统EasyDSS互联网视频云平台介绍
随着互联网技术的飞速发展,音视频流媒体直播已成为现代社会信息传递与娱乐消费的重要组成部分。在这样的背景下,EasyDSS互联网视频云平台应运而生,它以高效、稳定、便捷的特性,为音视频流媒体直播领域带来了全新的解决方案。 1、产…...
3dtile平移子模型以及修改 3D Tiles 模型的模型矩阵z平移
第一段代码:应用平移变换到子模型 这段代码的目的是获取子模型的变换矩阵,并将其平移 10 个单位。 if (submodel) {// 获取当前子模型的变换矩阵let transform submodel.transform// 创建一个向上的平移矩阵,平移 10 个单位let translation…...
JavaScript中类数组对象及其与数组的关系
JavaScript中类数组对象及其与数组的关系 1. 什么是类数组对象? 类数组对象是指那些具有 length 属性且可以通过非负整数索引访问元素的对象。虽然这些对象看起来像数组,但它们并不具备真正数组的所有特性,例如没有继承 Array.prototype 上…...
【机器学习】机器学习学习笔记 - 监督学习 - 逻辑回归分类朴素贝叶斯分类支持向量机 SVM (可分类、可回归) - 04
逻辑回归分类 import numpy as np from sklearn import linear_modelX np.array([[4, 7], [3.5, 8], [3.1, 6.2], [0.5, 1], [1, 2], [1.2, 1.9], [6, 2], [5.7, 1.5], [5.4, 2.2]]) y np.array([0, 0, 0, 1, 1, 1, 2, 2, 2])# 逻辑回归分类器 # solver:求解器&a…...
Python脚本文件开头两行#!/usr/bin/python和# -*- coding: utf-8 -*-的作用
Linux环境下,Python脚本代码文件,比如test.py,文件的第一行一般要指定解释器,使用Linux的Shebang的形式指定,第二行一般指定编码格式。 首行指定解释器工具,使用方式如下: # 第1种方式&#x…...
使用PyQt5开发一个GUI程序的实例演示
一、安装Python 下载安装到这个目录 G:\Python38-32 安装完成有这些工具,后面备用: G:\Python38-32\Scripts\pyrcc5.exe G:\Python38-32\Scripts\pyuic5.exe 二、PyQt环境配置 pip install PyQt5 pip install pyqt5-tools 建议使用国内源,…...
3d扫描建模产品开发-三维扫描检测蓝光检测
现当下,汽车制造、航空航天,还是消费电子、医疗器械,三维扫描检测与蓝光技术正以前所未有的精度和效率,推动着产品从概念到实物的快速转化。 三维扫描技术,简而言之,就是通过激光、结构光(如蓝…...
多线程——01
1. 进程/任务 process/task 进程是操作系统对一个正在运行的程序的一种抽象,换言之,可以把进程看做程序的一次运行过程 每个进程想要执行,都需要消耗一定的系统资源(硬件资源) 1)进程在系统中的作用 a…...
Makefile中-D选项定义预编译处理宏
1.简单示例假设我们有一个简单的 C 程序main.c,内容如下: #include <stdio.h> #ifdef DEBUGvoid print_debug_info() {printf("This is debug information.\n");} #elsevoid print_debug_info() {} #endif int main() {print_debug_info();printf("Prog…...
NAPI杂记
NAPI和tasklet区别:NAPI是利用的软中断NET_RX_SOFTIRQ实现, tasklet是利用TASKLET_SOFTIRQ实现 另外文章说NAPI主要是采用轮询,可以减少中断触发次数。do_softirq里面是开中断执行的啊? 中断处理函数关闭中断开始处理。如果此时…...
006 MATLAB编程基础
01 M文件 MATLAB输入命令有两种方法: 一是在MATLAB主窗口逐行输入命令,每个命令之间用分号或逗号分隔,每行可包含多个命令。 二是将命令组织成一个命令语句文集,使用扩展名“.m”,称为M文件。它由一系列的命令和语句…...
使用Alpine镜像作为基础镜像的Dockerfile配置
配置阿里 apk源: /etc/apk/repositories: https://mirrors.aliyun.com/alpine/v3.13/main alpine-v3.13-community安装包下载_开源镜像站-阿里云 或者使用命令 sed -i sdl-cdn.alpinelinux.orgmirrors.aliyun.comg /etc/apk/repositories dockerfil…...
RAG (Retrieval Augmented Generation) 检索增强和生成
1 RAG技术简介 1.1 RAG技术概述 RAG(Retrieval Augmented Generation) 是一种结合了检索(Retrieval)和生成(Generation)的技术,旨在通过利用外部知识库来增强大型语言模型(LLMs&am…...
Figma入门-约束与对齐
Figma入门-约束与对齐 前言 在之前的工作中,大家的原型图都是使用 Axure 制作的,印象中 Figma 一直是个专业设计软件。 最近,很多产品朋友告诉我,很多原型图都开始用Figma制作了,并且很多组件都是内置的,…...
039集——渐变色之:CAD中画彩虹()(CAD—C#二次开发入门)
(来左边儿 跟我一起画个龙,在你右边儿 画一道彩虹 ~~~~~~~~~~~ ) 效果如下: namespace AcTools {public class Class1{public Wform.Timer timer;//定时器需建在类下面public static DateTime startTime;[CommandM…...
MTK主板_小型联发科安卓主板_行业智能终端主板基于联发科方案
MTK安卓主板是一款小巧而高效的科技产品,其尺寸仅为43.4mm x 57.6mm。采用了先进的联发科12nm制程工艺,这款主板搭载四核或八核64位A53架构的CPU,主频高达2.0GHz,不但保证了出色的计算能力,还实现了超低功耗的特点。系…...
Arrays.copyOfRange(),System.arraycopy() 数组复制,数组扩容
Arrays.copyOfRange() 当需要将数组中的 长度扩容时, 数组复制 使用 需要用到Arrays 类提供的的 参数解析 * param original the array from which a range is to be copied * param from the initial index of the range to be copied, inclusive * param to the final ind…...
Docker for Everyone Plus——No Enough Privilege
直接告诉我们flag在/flag中,访问第一小题: sudo -l查看允许提权执行的命令: 发现有image load命令 题目指明了有rz命令,可以用ZMODEM接收文件,看到一些write up说可以用XShell、MobaXterm、Tabby Terminal等软件连接上…...
ElasticSearch学习笔记把:Springboot整合ES(二)
一、前言 上一篇文章中我们学习了ES中的Term级别的查询,包括 term、terms、terms_set、rang等,今天我们使用Java代码实现一遍上述的查询。 二、项目依赖 POM <?xml version"1.0" encoding"UTF-8"?> <project xmlns&q…...
Linux系统之iotop命令的基本使用
Linux系统之iotop命令的基本使用 一、iotop命令介绍二、iotop命令的使用帮助2.1 安装iotop2.2 iotop命令help帮助信息2.3 iotop命令选项解释 三、 iotop命令的基本使用四、iotop使用注意事项 一、iotop命令介绍 iotop 是一个类似于 top 的命令行工具,但它专注于显示…...
根据合约地址判断合约协议的方法
判断合约协议之前,需要了解一下什么是ERC165协议: ERC165 是以太坊中用于标准化接口检测的协议,由 Fabian Vogelsteller 在 2018 年创建 ,其核心内容主要包括以下方面: 接口定义 单一函数接口:ERC165 协议…...
什么是sfp,onu,为什么PON(俗称“光猫”)模块使用SC光纤接口
在现代网络设备中,我们经常会看到SFP或SFP接口的身影,这些接口有时被简称为光口,但这个称呼并不严谨。有些厂商则称之为多功能口或多用途口,然而这对于不了解的人来说可能还是一头雾水。SFP,即Small Form-Factor Plugg…...
链表?->?(以尾插法说明,附头插法)
这篇文章做一些关于初学链表的一些问题的解答。 我知道有些朋友只是需要一份完整的关于链表的代码,我会附在后面,大家直接划到最后就好。 一、创建链表 (1 相信所有搜索过链表创建的朋友都看过这样一行: struct Line* head (struct Line…...
11.29周五F34-Day10打卡
文章目录 1. 问问他能不能来。解析答案:【解析答案分析】【对比分析】【拓展内容】2. 问题是他能不能做。解析答案:【解析答案分析】3. 问题是我们能否联系得上她。(什么关系?动作 or 描述?)解析答案:【解析答案分析】【对比分析】4. 我们在讨论是否要开一个会。解析答案:…...
【项目日记】仿mudou的高并发服务器 --- 实现HTTP服务器
对于生命,你不妨大胆一点, 因为我们始终要失去它。 --- 尼采 --- ✨✨✨项目地址在这里 ✨✨✨ ✨✨✨https://gitee.com/penggli_2_0/TcpServer✨✨✨ 仿mudou的高并发服务器 1 前言2 Util工具类3 HTTP协议3.1 HTTP请求3.2 HTTP应答 4 上下文解析模块…...
【SpringBoot问题】IDEA中用Service窗口展示所有服务及端口的办法
1、调出Service窗口 打开View→Tool Windows→Service,即可显示。 2、正常情况应该已经出现SpringBoot,如下图请继续第三步 3、配置Service窗口的项目启动类型。微服务一般是Springboot类型。所以这里需要选择一下。 点击最后一个号,点击Ru…...
Ubuntu20.04运行LARVIO
文章目录 1.运行 Toyish 示例程序2.运行 ROS Nodelet参考 1.运行 Toyish 示例程序 LARVIO 提供了一个简化的toyish示例程序,适合快速验证和测试。 编译项目 进入 build 文件夹并通过 CMake 编译项目: mkdir build cd build cmake -D CMAKE_BUILD_TYPER…...
数字化转型背景下,高职院校计算机网络应用的革新策略
在当今信息化时代,计算机网络已经成为高职院校教育不可或缺的一部分,它不仅极大地丰富了教育资源,提高了交流的便捷性,还催生了多样化的教学模式。对于高职院校来说,加强计算机网络应用的建设不仅是顺应时代潮流的必然…...
mysql 里面的主表和子表是什么?如何创建主表和子表的关系
在MySQL数据库中,主表和子表的概念是基于表间关系的。它们通常通过外键约束来建立联系,这种关系有助于维护数据的完整性和一致性。以下是对MySQL中主表和子表的详细解释: 主表(父表) 定义:主表,…...
工程企业的成本管理系统软件应该有哪些特点?
工程企业的成本管理系统软件需要兼顾工程项目的复杂性和动态性,其功能特点应服务于成本核算、监控、优化与分析全生命周期管理,以下是关键特点: 一、核心功能特点 1. 全生命周期成本管理 覆盖范围: 从项目立项、投标、预算编制&…...
【前端开发】实战:课表安排(HTML + JavaScript + Vue3 + Vant)
后端开发 主要定义了三个核心部分:每周周期(WeekDays)、每天节次(TimeLessons) 和 每天节次详情(Details) 每周周期(WeekDays) 存储了每周的七天(通常是从周一…...
nodejs建立TCP服务器端和TCP客户端之间的连接
TCP服务器端,看名字也知道是建立在服务器上面的 //获取模块 const net require(net); //创建server服务器 const servernet.createServer(); //与客户端建立连接 server.on(connection,function(socket){console.log(客户端与服务器连接已经建立);//socket是客户端…...
Pytorch使用手册-What is torch.nn really?(专题九)
我们建议将本教程作为 notebook 而不是脚本运行。要下载 notebook(.ipynb)文件,请点击页面顶部的链接。 PyTorch 提供了精心设计的模块和类,如 torch.nn、torch.optim、Dataset 和 DataLoader,帮助你创建和训练神经网络。为了充分利用这些工具的强大功能并根据你的问题进…...
ADAM优化算法与学习率调度器:深度学习中的关键工具
深度学习模型的训练效果离不开优化算法和学习率的选择。ADAM(Adaptive Moment Estimation)作为深度学习领域中广泛应用的优化算法之一,以其高效性和鲁棒性成为许多任务的默认选择。而学习率调度器则是优化算法的“助推器”,帮助训…...
黑马2024AI+JavaWeb开发入门Day03-Maven-单元测试飞书作业
视频地址:哔哩哔哩 讲义作业飞书地址:飞书 作业比较简单,随便写了写 package org.example;import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.ju…...
TouchGFX设计模式代码实例说明
一)Model - View - Presenter (MVP) 模式在 TouchGFX 中的应用 1)Model(模型): 模型代表应用程序的数据和业务逻辑。例如,在一个简单的计数器应用中,模型可以是一个包含计数器当前值的类。 class CounterModel { pri…...
Docker扩容操作(docker总是空间不足)
Docker扩容操作(docker总是空间不足) 1、df二连,一共也就70g,总是占满93%以上。所以需要移动到其他目录上 查看docker镜像和容器存储目录的空间大小 du -sh /var/lib/docker/2、停止docker服务 systemctl stop docker3、首先创建目录并迁移 # 首先创…...
ELK Fleet JAVA LOG收集与展示教程
目录 elastic-fleet架构 Elastic Agent的优势 Fleet JAVA日志收集流程 1.注册Fleet Sever 2.创建JAVA代理收集策略Agent Policy 3.添加集成 integration 4.调整Java log输出格式 5.添加Elastic Agent 6.添加Ingest 7.创建数据视图 8.其他Policy nginx-policy syst…...
【Python网络爬虫笔记】2-HTTP协议中网络爬虫需要的请求头和响应头内容
1 HTTP 协议整理 HTTP(Hyper Text Transfer Protocol)即超文本传输协议,是用于从万维网(WWW)服务器传输超文本到本地浏览器的传送协议,直白点儿,就是浏览器和服务器之间的数据交互就是通过 HTT…...
TiDB 调度概述
PD 是 TiDB 集群的管理模块,同时也负责集群数据的实时调度。本文档介绍一下 PD 的设计思想和关键概念。 场景描述 TiKV 集群是 TiDB 数据库的分布式 KV 存储引擎,数据以 Region 为单位进行复制和管理,每个 Region 会有多个 Replica…...
MySQL的Json类型数据操作方法
前言 MySQL在5.7增加了json类型数据,项目中最近有在使用。直接使用JSONObject或者JSONArray类型的时候会报以下的异常。发现需要将Java实体字段设置为String类型,然后需要的时候自己转换为JSONObject或者JSONArray。使用很不方便,经研究发现…...
论文笔记(五十九)A survey of robot manipulation in contact
A survey of robot manipulation in contact 文章概括摘要1. 引言解释柔顺性控制的概念:应用实例: 2. 需要接触操控的任务2.1 环境塑造2.2 工件对齐2.3 关节运动2.4 双臂接触操控 3. 接触操控中的控制3.1 力控制3.2 阻抗控制3.3 顺应控制 4. 接触操控中的…...