Linux运维:MySQL中间件代理服务器,mycat读写分离应用实验

news2024/11/15 3:50:39

Mycat适用的场景很丰富,以下是几个典型的应用场景:

1.单纯的读写分离,此时配置最为简单,支持读写分离,主从切换

2.分表分库,对于超过1000万的表进行分片,最大支持1000亿的单表分片

3.多租户应用,每个应用一个库,但应用程序只连接mycat,从而不改造高程序本身,实现多租户化报表系统,借助于mycat的分表能力,处理大规模报表的统计。

4.替代hbash,分析大数据,作为海量数据实时查询的一种简单有效方案,比如100亿条频繁查询的记录需要在3秒内查询出来结果,除了基于主键的查询,还可能存在范围查询或其他属性查询,此时mycat可能是最简单有效的选择。

mycat长期路线图:

强化分布式数据库中间件的方面的功能,使之具备丰富的插件、强大的数据库只能优化功能、全面的系统监控能力、以及方便的数据运维工具,实现在线数据扩容、迁移等高级功能进一步挺进大数据计算领域,深度结合spark stream和storm等分布式实时流引擎,能够完成快速的巨表关联、排序、分组聚合等OLAP方向的能力,并集成一些热门常用的实时分析算法,让工程师以及DBA们更容易用mycat实现一些高级数据分析处理功能不断强化Mycat开源社区的技术水平,吸引更多的IT技术专家,使得Mycat社区成为中国的Apache,并将mycat推到Apache基金会,称为国内顶尖开源项目,最终能够让一部分志愿者成为专职的mycat开发者。

mycat可以简单概括为:

一个彻底开源的,面向企业应用开发的大数据集群。

支持事务、ACID、可以替代mysql的加强版数据库

一个可以视为mysql集群的企业级数据库,用来替代昂贵的oracle集群

一个融合内存缓存技术、Nosql技术、HDFS大数据的新型SQL Server

结合传统数据库和新型分布式数据仓库的新一代企业级数据库产品

一个新颖的数据库中间件产品

mycat部署:

mycat安装目录结构说明:

bin:mycat命令,启动,重启,停止等运行目录

catlet:catlet为mycat的一个扩展功能

conf:mycat配置信息

lib:mycat引用的jar包,mycat是java开发的

logs:日志文件,包括mycat启动的日志和运行的日志

version.txt:mycat版本说明

mycat的常用配置文件:

mycat的配置文件都在conf目录里面,介绍以下几个常用的文件:

server.xml:mycat软件本身相关的配置文件,设置账号,参数等

schema.xml:mycat对应的物理数据库和数据库表的配置,读写分离,高可用,分布式策略定制,节点控制

rule.xml:mycat分片(分库分表)规则配置文件,记录分片规则列表,使用方法等

mycat日志:

mycat的日志文件都在logs目录里面*

wrapper.log:mycat启动日志

mycatl.log:mycat详细工作日志

mycat的读写分离实验

1. 环境准备及架构

mycat服务器上不能装mysql。客户端与mysql主从服务器安装mysql:

主机Node1作为客户端

主机Node2作为mycat服务器,不能装MySQL

主机Node3作为mysql主服务器

主机Node4作为mysql从服务器

客户端登录mycat访问的是mycat服务器,通过mycat服务器后台调取mysql服务器的数据。主记录写数据,从记录读数据。

架构如图:

2. 初始化环境

systemctl stop firewalld #防火墙

setenforce 0 #核心防护

3. 部署主从复制,客户端搭建mysql数据库

Node3主,Node4从。Node1客户端

数据库的安装参考我前面的博客,这里在数据库安装完成的前提下只做主从复制:数据库的安装(与主从复制原理与实现)

Node3开启二进制日志:

[root@Node3 ~]#:vim /etc/my.cnf
......
server-id=30
log-bin=/data/mysql/mysql-bin
#创建路径
[root@Node3 ~]#:mkdir /data/mysql -p
#修改权限
[root@Node3 ~]#:chown -R mysql.mysql /data
#重启
[root@Node3 ~]#:systemctl restart mysqld
[root@Node3 ~]#:systemctl status mysqld
● mysqld.service - MySQL Server
   Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)
   Active: active (running) since 三 2024-07-10 15:10:33 CST; 6s ago
     Docs: man:mysqld(8)
......

Node4开启二进制日志:

 同理,与Node3一样,只需要修改一个server-id

[root@Node4 ~]#:vim /etc/my.cnf
server-id=40
log-bin=/data/mysql/mysql-bin
#创建路径
[root@Node4 ~]#:mkdir /data/mysql -p
#修改权限
[root@Node4 ~]#:chown -R mysql.mysql /data
#重启,查看状态
[root@Node4 ~]#:systemctl restart mysqld
[root@Node4 ~]#:systemctl status mysqld
● mysqld.service - MySQL Server
   Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)
   Active: active (running) since 三 2024-07-10 15:14:02 CST; 11s ago
     Docs: man:mysqld(8)
......

Node3操作:登录数据库,查看节点,添加一个用户test并授权:

[root@Node3 ~]#:mysql -uroot -pabc123    #用户名和密码(可以不遵守密码策略!但要现修改密码策略)
......
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 |      154 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
mysql> grant replication slave on *.* to test@'192.168.114.%' identified by 'Admin@123';
Query OK, 0 rows affected, 1 warning (0.00 sec)

Node4操作:作为从,指定主服务器:

[root@Node4 ~]#:mysql -uroot -pabc123
mysql> CHANGE MASTER TO
    ->  MASTER_HOST='192.168.114.30',
    ->  MASTER_USER='test',
    ->  MASTER_PASSWORD='Admin@123',
    ->  MASTER_PORT=3306,
    ->  MASTER_LOG_FILE='mysql-bin.000001',
    ->  MASTER_LOG_POS=154;
Query OK, 0 rows affected, 2 warnings (0.01 sec)

#启动
mysql> start slave;
Query OK, 0 rows affected (0.00 sec)

#查看状态,两个线程yes。
mysql> show slave status\G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.114.30
                  Master_User: test
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000001
          Read_Master_Log_Pos: 449
               Relay_Log_File: Node4-relay-bin.000002
                Relay_Log_Pos: 615
        Relay_Master_Log_File: mysql-bin.000001
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
......

测试主从:

把一个准备好的数据库文件导入到Node3主服务器中,看从服务器是否同步!

[root@Node3 ~]#:mysql -uroot -pabc123 -e "show databases"
mysql: [Warning] Using a password on the command line interface can be insecure.
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
[root@Node3 ~]#:mysql -uroot -pabc123 < hellodb_innodb.sql 
mysql: [Warning] Using a password on the command line interface can be insecure.
[root@Node3 ~]#:mysql -uroot -pabc123 -e "show databases"
mysql: [Warning] Using a password on the command line interface can be insecure.
+--------------------+
| Database           |
+--------------------+
| information_schema |
| hellodb            |
| mysql              |
| performance_schema |
| sys                |
+--------------------+

主上有了hellodb数据库文件:

查看从是否同步:

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| hellodb            |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.00 sec)

#查看一个数据表teachers
mysql> select * from hellodb.teachers;
+-----+---------------+-----+--------+
| TID | Name          | Age | Gender |
+-----+---------------+-----+--------+
|   1 | Song Jiang    |  45 | M      |
|   2 | Zhang Sanfeng |  94 | M      |
|   3 | Miejue Shitai |  77 | F      |
|   4 | Lin Chaoying  |  93 | F      |
+-----+---------------+-----+--------+

#从上也同步了主上创建的test用户
mysql> select user,host from mysql.user;
+---------------+---------------+
| user          | host          |
+---------------+---------------+
| test          | 192.168.114.% |
| mysql.session | localhost     |
| mysql.sys     | localhost     |
| root          | localhost     |
+---------------+---------------+
4 rows in set (0.00 sec)

已同步!

4. 安装mycat

Node2

准备一个mycat安装包。在我的/data/下,这个是自己建的一个目录。

创建一个目录/apps/解压到该目录下:

[root@Node2 data]#:mkdir /apps
[root@Node2 data]#:tar xf Mycat-server-1.6.7.4-release-20200105164103-linux.tar.gz -C /apps/
[root@Node2 data]#:cd /apps/
[root@Node2 apps]#:ls
mycat
#添加环境变量,也可以做软链接。目的是能够补全命令,而不必使用绝对路径
[root@Node2 apps]#:echo "PATH=/apps/mycat/bin:$PATH" > /etc/profile.d/mycat.sh
[root@Node2 apps]#:source /etc/profile.d/mycat.sh

启动mycat:

[root@Node2 apps]#:mycat
#只有以下参数
Usage: /apps/mycat/bin/mycat { console | start | stop | restart | status | dump }
[root@Node2 apps]#:mycat start
Starting Mycat-server...
#查看状态:
[root@Node2 apps]#:mycat status
Mycat-server is running (8372).
is running启动起来了

mycat安装成功!成功启动!

使用客户端Node1登录mycat测试:

-u用户名

-p密码,默认123456

-h主机,是Node2,我的ip为192.168.114.20

-P端口号,默认8066

[root@Node1 ~]#:mysql -uroot -p123456 -h192.168.114.20 -P8066
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.6.29-mycat-1.6.7.4-release-20200105164103 MyCat Server (OpenCloudDB)

Copyright (c) 2000, 2023, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show databases;
+----------+
| DATABASE |
+----------+
| TESTDB   |
+----------+
1 row in set (0.00 sec)

mysql> 

 TESTDB虚表。客户端访问mycat是虚表。

5. 修改mycat配置文件使其与后端mysql主从服务器联系

进入/apps/mycat/conf/下。配置文件,修改server.xml文件,45行取消注释,修改一个端口号为3306,客户端不用指定8066端口号了,直接指定用户,密码,主机即可。

[root@Node2 apps]#:cd /apps/mycat/conf/
[root@Node2 conf]#:vim server.xml
......
<property name="serverPort">3306</property> <property name="managerPort">9066</property> 
<property name="idleTimeout">300000</property> <property name="bindIp">0.0.0.0</property>
<property name="dataNodeIdleCheckPeriod">300000</property>
<property name="frontWriteQueueSize">4096</property> <property name="processors">32</property>
......

修改schema配置参数,文件清空,把下面配置复制进去,注意修改IP地址:

[root@Node2 conf]#:vim schema.xml
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
        <schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1"></schema>
        <dataNode name="dn1" dataHost="localhost1" database="hellodb" />
        <dataHost name="localhost1" maxCon="1000" minCon="10" balance="1"
                writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
                <heartbeat>select user()</heartbeat>
                <writeHost host="host1" url="192.168.114.30:3306" user="root" password="Admin@123">
                 <readHost host="host2" url="192.168.114.40:3306" user="root" password="Admin@123"/>
                </writeHost>
        </dataHost>
</mycat:schema>

解释:

#dataNode:表存储到哪些节点,多个节点用逗号分隔。节点为下文dataNode设置的name

#dataNode标签: 定义mycat中的数据节点,也是通常说的数据分片,也就是分库相关配置

#database: 物理数据库中数据库名,该属性用于定义该分片属性哪个具体数据库实例上的具体库

#balance: 均衡负载的方式

#writeType: 写入方式

#host:用于标识不同实例,一般 writeHost 我们使用*M1,readHost 我们用*S1。
#url:后端实例连接地址。Native:地址:端口 JDBC:jdbc的url
#user:后端存储实例需要的用户名字
#password:后端存储实例需要的密码

重启并查看状态:会先开一下,如果有问题,还会再关闭,可以多看一下是否真正的起来

[root@Node2 conf]#:mycat restart
Stopping Mycat-server...
Stopped Mycat-server.
Starting Mycat-server...
[root@Node2 conf]#:mycat status
Mycat-server is running (8863).
[root@Node2 conf]#:mycat status
Mycat-server is running (8863).
[root@Node2 conf]#:mycat status
Mycat-server is running (8863).

6. 主从服务器创建一个root用户给mycat连接并授权

在主上创建好一个root用户后,从服务器也就同步了。

[root@Node3 ~]#:mysql -uroot -pabc123
......
mysql> GRANT ALL ON *.* TO 'root'@'192.168.114.%' IDENTIFIED BY 'Admin@123';
Query OK, 0 rows affected, 1 warning (0.01 sec)

在从上查看用户:同步过来了

[root@Node4 ~]#:mysql -uroot -pabc123
......
mysql> select user,host from mysql.user;
+---------------+---------------+
| user          | host          |
+---------------+---------------+
| root          | 192.168.114.% |
| test          | 192.168.114.% |
| mysql.session | localhost     |
| mysql.sys     | localhost     |
| root          | localhost     |
+---------------+---------------+
5 rows in set (0.01 sec)

主从两台服务器开启通用日志:都需要开通:

mysql> set global general_log=1;
Query OK, 0 rows affected (0.00 sec)

7. 测试读写分离

两台服务器实时(tail -f 日志文件)检测日志文件,在/var/lib/mysql/下有一个与主机名同名的日志文件:

主:Node3.log

从:Node4.log

监控:主服务器监控写操作,从服务器监控读操作:在主从服务器上实时查看通用日志

使用Node1客户端访问mycat,插入一条数据到表teachers。再查看表数据。观察主从的日志变化,是否在主上能看得到写操作,在从上能看得到读的操作。进而实现读写分离试验。

客户端登录mycat服务器:不需要端口号了

[root@Node1 ~]#:mysql -uroot -p123456 -h192.168.114.20
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 73
Server version: 5.6.29-mycat-1.6.7.4-release-20200105164103 MyCat Server (OpenCloudDB)

Copyright (c) 2000, 2023, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> 

客户端登录mycat,进入数据库TESTDB:查看teachers表,查看表结构,插入数据,再查看数据

[root@Node1 ~]#:mysql -uroot -p123456 -h192.168.114.20
......
mysql> show databases;
+----------+
| DATABASE |
+----------+
| TESTDB   |
+----------+
1 row in set (0.00 sec)
#进入数据库
mysql> use TESTDB
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
#查看数据
mysql> select * from teachers;
+-----+---------------+-----+--------+
| TID | Name          | Age | Gender |
+-----+---------------+-----+--------+
|   1 | Song Jiang    |  45 | M      |
|   2 | Zhang Sanfeng |  94 | M      |
|   3 | Miejue Shitai |  77 | F      |
|   4 | Lin Chaoying  |  93 | F      |
+-----+---------------+-----+--------+
4 rows in set (0.01 sec)
#查看结构
mysql> desc teachers;
+--------+----------------------+------+-----+---------+----------------+
| Field  | Type                 | Null | Key | Default | Extra          |
+--------+----------------------+------+-----+---------+----------------+
| TID    | smallint(5) unsigned | NO   | PRI | NULL    | auto_increment |
| Name   | varchar(100)         | NO   |     | NULL    |                |
| Age    | tinyint(3) unsigned  | NO   |     | NULL    |                |
| Gender | enum('F','M')        | YES  |     | NULL    |                |
+--------+----------------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)
#插入数据
mysql> insert into teachers values(5,'zs',18,'M');
Query OK, 1 row affected (0.03 sec)
mysql> select * from teachers;
+-----+---------------+-----+--------+
| TID | Name          | Age | Gender |
+-----+---------------+-----+--------+
|   1 | Song Jiang    |  45 | M      |
|   2 | Zhang Sanfeng |  94 | M      |
|   3 | Miejue Shitai |  77 | F      |
|   4 | Lin Chaoying  |  93 | F      |
|   5 | zs            |  18 | M      |
+-----+---------------+-----+--------+
5 rows in set (0.00 sec)

查看主从日志:

主服务器日志:写入操作:

[root@Node3 ~]#:tail -f /var/lib/mysql/Node3.log

 从服务器日志:读取操作:

 [root@Node4 ~]#:tail -f /var/lib/mysql/Node4.log

实现了mycat读写分离!

---end---

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

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

相关文章

【多线程】生产者消费者模型(代码实现)

文章目录 生产者消费者模型介绍生产者消费者模型的特点基于BlockingQueue的生产者消费者模型 生产者消费者模型介绍 生产者消费模型是一种常见的多线程编程模式&#xff0c;广泛应用于解决并发编程中的数据共享和任务调度问题。在该模型中&#xff0c;我们将生产数据并放入缓冲…

“都市绿洲,健康生活新纪元“ —全方位打造高科技多功能智慧健康园

咸宁&#xff0c;这座被誉为"桂花之乡"和"华中康养区"的城市&#xff0c;如同一朵绽放在湖北东南的璀璨明珠。这里桂花飘香&#xff0c;温泉涌动&#xff0c;将自然的馈赠与人文的智慧完美融合。漫步在咸宁&#xff0c;你会被满城金黄的桂花树所吸引&#…

SCSA第四天

ASPF FTP --- 文件传输协议 Tftp --- 简单文件传输协议 FTP协议相较于Tftp协议 ---- 1&#xff0c;需要进行认证 2&#xff0c;拥有一套完整的命令集 用户认证 防火墙管理员认证 ---- 校验登录者身份合法性 用户认证 --- 上网行为管理中的一环 上网用户认证 --- 三层认证…

QImage显示图片像素

在Qt中&#xff0c;QImage 类是用来表示和处理图像的。如果你想查看或显示一个图片的像素数据&#xff0c;你可以使用 QImage 提供的方法来访问这些数据。以下是一些基本的方法来获取和显示图片的像素信息&#xff1a; 获取图像的像素格式&#xff1a; 使用 QImage::format() …

redis相关知识记录

redis基本数据类型 Redis⽀持五种主要数据结构&#xff1a;字符串&#xff08;Strings&#xff09;、列表&#xff08;Lists&#xff09;、哈希表&#xff08;Hashes&#xff09;、集合&#xff08;Sets&#xff09;和有序集合&#xff08;Sorted Sets&#xff09;。这些数据结…

springboot 旅游导航系统-计算机毕业设计源码69476

目 录 第 1 章 引 言 1.1 选题背景 1.2 研究现状 1.3 论文结构安排 第 2 章 系统的需求分析 2.1 系统可行性分析 2.1.1 技术方面可行性分析 2.1.2 经济方面可行性分析 2.1.3 法律方面可行性分析 2.1.4 操作方面可行性分析 2.2 系统功能需求分析 2.3 系统性需求分析…

Flutter——最详细(Table)网格、表格组件使用教程

背景 用于展示表格组件&#xff0c;可指定线宽、列宽、文字方向等属性 属性作用columnWidths列的宽度defaultVerticalAlignment网格内部组件摆放方向border网格样式修改children表格里面的组件textDirection文本排序方向 import package:flutter/material.dart;class CustomTa…

c#调用c++ dll库报错System.BadImageFormatException

System.BadImageFormatException:“试图加载格式不正确的程序。 (异常来自 HRESULT:0x8007000B)” 1. dll需要选择release模式进行编译 2.选择相同位数&#xff0c;比如x64平台&#xff0c;c#也需要x64 3.不要设置c#不支持的函数供调用 比如&#xff1a; c可以输出到控制台…

Lumos学习王佩丰Excel第四讲:排序与选择

一、排序 1、简单排序&#xff1a;不要选中一列排序&#xff0c;不然只是局部排序&#xff0c;其他数据都会发生错乱。 2、多条件排序 3、2003版本中超过3个排序条件时如何处理&#xff1a;从最后一个条件到第一个条件倒着按照要求依次排序。 4、按颜色排序 5、自定义排序次序…

洛谷P10716【MX-X1-T4】「KDOI-05」简单的字符串问题(扩展kmp+set+二分+扫描线树状数组)

题目 思路来源 小羊肖恩 题解 羊神这个做法tql&#xff0c;当时只是机械地写&#xff0c;过了之后再想想&#xff0c;才觉得确实是nb 先扩展kmp&#xff08;Z函数&#xff09;预处理出来数组&#xff0c;记z[i]为i往后可以和前缀匹配的最大长度 对于每个询问(p,cnt)&#x…

Dify工作流中的变量聚合节点

一.定义 变量聚合节点&#xff08;原变量赋值节点&#xff09;负责整合不同分支的输出结果&#xff0c;确保无论哪个分支被执行&#xff0c;其结果都能通过一个统一的变量来引用和访问。这在多分支的情况下非常有用&#xff0c;可将不同分支下相同作用的变量映射为一个输出变量…

esp32硬件电路设计

ESP-IDF 入门指南 | 乐鑫科技 (espressif.com) ESP32-DevKitC V4 入门指南 - ESP32 - — ESP-IDF 编程指南 v5.1 文档 (espressif.com)

matlab仿真 模拟调制(上)

&#xff08;内容源自详解MATLAB&#xff0f;SIMULINK 通信系统建模与仿真 刘学勇编著第五章内容&#xff0c;有兴趣的读者请阅读原书&#xff09; 1.幅度调制 clear all ts0.0025; %信号抽样时间间隔 t0:ts:10-ts;%时间矢量 fs1/ts;%抽样频率 dffs/length(t); %fft的频率分…

Linux进程间通信:匿名管道 命名管道

Linux进程间通信&#xff1a;匿名管道 &命名管道 一、进程间通信目的二、什么是管道三、匿名管道创建3.1 系统调用原型3.2 匿名管道创建 四、内核创建匿名管道过程五、匿名管道性质5.1 匿名管道的4种特殊情况5.2 匿名管道的5种特性5.3 测试源代码 六、命名管道6.1 创建命名…

高中数学:立体几何-基本立体图形分类

一、常见空间几何体 二、多面体 1、棱柱 2、棱锥 3、棱台 4、相关关系 三、旋转体 1、圆柱 2、圆锥 3、圆台 4、球

LLM 模型压缩之一 | APT

0. 资源链接 论文: APT: Adaptive Pruning and Tuning Pretrained Language Models for Efficient Training and Inference. 项目: https://github.com/ROIM1998/APT 1.背景动机 现有的大模型压缩加速存在以下问题&#xff1a; PEFT: 可以低成本为下游任务微调&#xff0c;…

游戏AI的创造思路-技术基础-蒙特卡洛树搜索(1)

本篇介绍蒙特卡洛树搜索算法&#xff0c;AlphaGo用于围棋计算的应用就是基于蒙特卡洛树搜索研发的~~~ 目录 1. 定义 2. 发展历史 3. 公式和函数 3.1.算法的公式和函数 3.2. Python实现公式和函数 4. 运行原理 4.1. 运行原理 4.2. 各步骤用Python代码 5. 优缺点和缺陷的…

免费听书TV版v1.0.1

使用非常稳定流畅&#xff0c;UI界面设计美观简洁&#xff0c;纯净无广。资源虽然不是特别多&#xff0c;但是日常听书还是可以满足需求。 完全免费&#xff0c;操作简单方便&#xff0c;安装即用&#xff0c;没有任何限制。 可以适配遥控器操作&#xff0c;OK键开启或关闭语…

适配各种IT场景的零信任沙箱

在当今数字化时代&#xff0c;网络安全威胁层出不穷&#xff0c;传统的安全防御策略已难以应对日益复杂的网络攻击。零信任与沙箱技术的结合&#xff0c;作为一种新兴的安全防护策略&#xff0c;正逐渐受到企业和组织的青睐。本文将深入探讨零信任结合沙箱技术所能解决的问题及…

【智能算法改进】一种混合多策略改进的麻雀搜索算法

目录 1.算法原理2.改进点3.结果展示4.参考文献5.代码获取 1.算法原理 【智能算法】麻雀搜索算法&#xff08;SSA&#xff09;原理及实现 2.改进点 精英反向学习策略 将精英反向学习策略应用到初始化阶段, 通过反向解的生成与精英个体的选择, 不仅使算法搜索范围得到扩大, 提…