Otter-安装配置

article/2025/10/20 15:40:43

简介
OTTER是阿里巴巴公司为了解决杭州/美国机房数据间同步研发的一个开源软件。OTTER基于数据库增量日志解析,准实时同步到本机房或异地机房的mysql/oracle数据库,是一个分布式数据库同步系统。

工作原理图:

concept_jpeg

原理描述:

  1. 基于Canal开源产品,获取数据库增量日志数据。
  2. 典型管理系统架构,manager(web管理)+node(工作节点)

    1. manager运行时推送同步配置到node节点
    2. node节点将同步状态反馈到manager上
  3. 基于zookeeper,解决分布式状态调度的,允许多node节点之间协同工作.

一、准备前--otter配置流程

1、**otter名词解释:**

  • 数据源:读取的源实例信息,和写入的目标实例信息

  • 数据表:配置映射用的,用于配置,源实例,什么库,什么表,同步到目标什么库,什么表

  • canal:otter是做增量同步的,增量同步基于mysql的binlog日志,并且是row格式。这里需要配置你读取binlog的信息,和数据源里面的源实例信息可以说是同一个。

  • 通道配置: otter采用一个实例一个通道方式。一个实例可以多个配置多个库

  • pipeline:主要核心功能如下

  • (1)选择你的canal配置,读取哪个实例的binlog。

  • (2)选择整个同步是在哪个节点上进行,例如我们部署了三个node节点,可以由node1进行读取的操作,可以由node2进行目标实例写入操作。也可以同时放到一个节点上。

  • (3)binlog位置,默认不写就读最新位置的。

  • (4)高级配置里面有是否跳过DDL,传输模式,负载均衡算法等,一般保持默认即可。

  • **流程:**

  • (1)新增数据源,一般最少配置2个,一个读取的源库,一个目标

  • (2)数据表,配置映射关系,从哪里同步到哪里。

  • (3)Canal,配置读取binlog的信息

  • 上面步骤创建好后,我们就可以正式开始配置通道了

  • (4)创建通道

  • (5)创建pipeline

  • (6)创建表映射关系

  • (7)启动通道

2、下载包

otter的环境需要mysql ,jdk, zookeeper , node , manager,aria2

wget https://github.com/aria2/aria2/releases/download/release-1.30.0/aria2-1.30.0.tar.gz

wget https://github.com/alibaba/otter/releases/download/otter-4.2.17/manager.deployer-4.2.17.tar.gz

wget https://github.com/alibaba/otter/releases/download/otter-4.2.17/node.deployer-4.2.17.tar.gz

 wget https://raw.github.com/alibaba/otter/master/manager/deployer/src/main/resources/sql/otter-manager-schema.sql
 
 wget http://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.5.5/apache-zookeeper-3.5.5-bin.tar.gz

3、安装包

3.1 需要软件
需要软件:java,MYSQL5.x,manager,node,ZOOKEEPER,aria2
3.2MYSQL

mysql 、java 安装

java 安装

yum install java-1.8.0-openjdk.x86_64 -y

java -version

或者

查看当前系统是否已安装JDK

yum list installed |grep java

如果没有就选择yum库中的包进行安装,查看yum库中JDK列表

yum -y list java*

该命令执行后,会列出JDK版本,选择自己合适的进行安装

安装命令:

yum -y install java-1.8.0-openjdk*

 

mysql 安装

CentOS7 yum方式安装MySQL5.7

下载并安装MySQL官方的 Yum Repository

[root@localhost ~]# wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm

  使用上面的命令就直接下载了安装用的Yum Repository,大概25KB的样子,然后就可以直接yum安装了。

[root@localhost ~]# yum -y install mysql57-community-release-el7-10.noarch.rpm

  之后就开始安装MySQL服务器。

[root@localhost ~]# yum -y install mysql-community-server

  这步可能会花些时间,安装完成后就会覆盖掉之前的mariadb。

systemctl start  mysqld.service

此时MySQL已经开始正常运行,不过要想进入MySQL还得先找出此时root用户的密码,通过如下命令可以在日志文件中找出密码:

  grep "password" /var/log/mysqld.log
mysql> set global validate_password_policy=0;
mysql> set global validate_password_length=1;
ALTER USER 'root'@'localhost' IDENTIFIED BY 'new password';

yum 安装Mysql8.0

系统: CentOS 7(在CentOS 7中默认有安装MariaDB,这个是mysql的分支,一般来说还是使用自己安装的MySQL比较好)

1、下载并安装MySQL

wget -i -c https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm

下载到指定位置后,就可以执行安装了

yum -y install mysql80-community-release-el7-3.noarch.rpm
yum -y install mysql-community-server

启动MySQL

启动MySQL服务:systemctl start  mysqld.service

查看MySQL服务:systemctl status  mysqld.service

  mysqld.service

查看MySQL是不是开机自启,可以执行命令查看开机自启列表

1

systemctl list-unit-files|grep enabled

此时如果要进入MySQL得找出root用户的密码,输入命令

grep "password" /var/log/mysqld.log

得到密码后,登录mysql,输入命令

mysql -uroot -p

然后回车,提示你输入密码,记得不要输错,输入时密码是不显示的。登录成功如下图

此时,你需要给你的MySql重新设置密码,因为MySQL默认的就是必须修改密码后才能操作数据库。

ALTER USER 'root'@'localhost' IDENTIFIED BY 'Left@zuo123.';

设置密码的时候需要遵守MySQL密码设置规范,如果不符合规范是不能修改成功的。

如下图,我将密码设置为123456,它提示我 密码不符合规范

总之呢,我们先将密码设置成比较复杂的就好,比如 Abc@123...,先登录了再说。

如果想要设置简单好记的密码,可以修改密码设置规范,毕竟你不登录你就不能修改规范。

查看密码规范

SHOW VARIABLES LIKE 'validate_password%';

 

密码的长度是由validate_password_length决定的,而validate_password_length的计算公式是:

validate_password_length = validate_password_number_count + validate_password_special_char_count + (2 * validate_password_mixed_case_count)
这时候我们将密码设置规范修改一下:
set global validate_password.policy=0;
set global validate_password.length=1;

这时候就可以设置简单的密码了,比如123456

最后一步,设置允许远程连接。

如果直接使用命令:GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password'; 会提示一个语法错误,有人说是mysql8的分配权限不能带密码隐士创建账号了,要先创建账号再设置权限。也有的说8.0.11之后移除了grant 添加用户的功能。

创建新用户 admin

创建用户:CREATE USER 'admin'@'%' IDENTIFIED BY '123456';
允许远程连接:GRANT ALL ON *.* TO 'admin'@'%';
本人测试过,使用 update user set host = '%'  where user = 'root'; 也可以修改

 如果使用客户端连接提示了plugin caching_sha2_password错误,这是因为MySQL8.0的密码策略默认为caching_sha2_password

 使用命令修改策略

ALTER USER 'admin'@'%' IDENTIFIED WITH mysql_native_password BY '123456'; 

箭头指的两个用户是我修改过的

 然后关闭防火墙,测试连接成功!!

 

 

mysql配置:

    show variables like 'binlog_format'   #binlong 格式必须是row
    show variables like '%server_id%'     #必须有server_id,该参数跟数据库复制有关,详情看官网
    show variables like '%char%'   #字符集character_set_server 必须是utf8,否则配置数据源表验证不通过。

    #/ETC/MY.CNF
    [mysqld]  添加以下配置
    character-set-server=utf8   
    collation-server=utf8_general_ci
    binlog_format=row
    log-bin=mysql-bin
    server_id=1

sql_mode='ONLY_FULL_GROUP_BY,NO_AUTO_VALUE_ON_ZERO,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'


 3.3、Centos7安装Zookeeper 3.5.5步骤

1、下载zookeeper安装包

进入zookeeper官网选择下载链接如下: https://www-eu.apache.org/dist/zookeeper/

选择最新稳定版本3.5.5,选择下载apache-zookeeper-3.5.5-bin.tar.gz,文件说明:

1)apache-zookeeper-3.5.5.tar.gz  源码包

2)apache-zookeeper-3.5.5-bin.tar.gz  安装包

2、vim修改配置文件 /etc/hosts ,增加如下内容:

192.168.3.71   edu-provider-01

3、保存后,执行 /etc/init.d/network restart 使配置文件 hosts生效

4、上传下载好的 apache-zookeeper-3.5.5-bin.tar.gz 包到 /usr/local/src 目录下

5、执行 tar -zxvf /usr/local/apache-zookeeper-3.5.5-bin.tar.gz 解压tar包

6、进入解压好的目录中创建 data 和 logs文件夹,命令如下:

[root@localhost apache-zookeeper-3.5.5-bin]#   cd /usr/local//apache-zookeeper-3.5.5-bin/

[root@localhost apache-zookeeper-3.5.5-bin]#   mkdir data

[root@localhost apache-zookeeper-3.5.5-bin]#   mkdir logs

7、进入conf文件夹,并拷贝一份.cfg文件并编辑,编辑后的结果如图,保存

[root@localhost apache-zookeeper-3.5.5-bin]# cd conf/
[root@localhost conf]# cp zoo_sample.cfg zoo.cfg
[root@localhost conf]# vim zoo.cfg

 

请注意:edu-provider-01名称为hosts文件中输入的内容

8、进入data文件夹,创建myid文件,并输入1,保存

[root@localhost conf]# cd ../data/
[root@localhost data]# vim myid

请注意: 这里输入的1 是zoo.cfg文件中server.1的1

9、编辑profile文件,并加入zookeeper的环境变量

[root@localhost data]# vim /etc/profile

10、执行 命令使profile文件生效

[root@localhost data]# source /etc/profile

11、防火墙中添加允许zookeeper访问的端口,并重启防火墙

[root@localhost data]# firewall-cmd --permanent --zone=public --add-port=2181/tcp
[root@localhost data]# firewall-cmd --permanent --zone=public --add-port=2888/tcp
[root@localhost data]# firewall-cmd --permanent --zone=public --add-port=3888/tcp
[root@localhost data]# systemctl restart firewalld.service
12、启动 zookeeper服务并测试是否正常启动

[root@localhost data]# cd /usr/local/src/apache-zookeeper-3.5.5-bin/bin/
[root@localhost bin]# ./zkServer.sh start

图片说明已经正常启动,还可以使用jps命令查看,是否有 QuorumPeerMain

13、如果想要关闭执行stop命令

[root@localhost bin]# ./zkServer.sh stop

  

3.4、aria2 安装

下载解压aria2 到/usr/local/aria2/aria2-1.15.2(目录没有统一好,因为之前装了一个新版本1.33.1,在编译时要GCC>4.7 )

    [root@master aria2-1.15.2]# ./configure
    [root@master aria2-1.15.2]# make
    [root@master aria2-1.15.2]# make install
    #########标准源码安装三部曲############
    [root@master aria2-1.15.2]# aria2c -v    
  或者YUM 安装

 [root@test6 ~]# yum install epel-release
[root@test6 ~]# yum install aria2 -y
  

3.5、manager安装
  1 下载sql文件并导入
     wget https://raw.github.com/alibaba/otter/master/manager/deployer/src/main/resources/sql/otter-manager-schema.sql
     source otter-manager-schema.sql
  2 下载安装包
     wget https://github.com/alibaba/otter/releases/download/v4.2.15/manager.deployer-4.2.15.tar.gz
     tar xzvf manager.deployer-4.2.15.tar.gz -C /usr/local/otter-manager
  3 修改配置文件otter.properties

cat otter.properties |grep -v ^#|grep -v ^$


      otter.zookeeper.cluster.default = zk地址:2181
      otter.domainName =本机IP地址
      otter.database.driver.url = jdbc:mysql://IP:3306/otter
      otter.database.driver.username = 用户名
      otter.database.driver.password = 密码 //otter管理节点需要使用数据库,这里设置的是连接这台数据库的用户名密码

例:

  4 启动manager

./bin/startup.sh

PS:manager 编译时间大约需要1分钟

检查日志:cat logs/manager.log

  5 manager启动测试
    访问地址 http://IP:8080/login.htm,初始密码为:admin/admin

用浏览器打开http://172.18.1.97:8088/ 

默认情况下,进去的是匿名账户,只有只读查看的权限,登录为管理员才可以有操作权限,管理员账号为admin/admin(otter自带)。

注:默认情况下是没有channel的,因为笔者的环境已经配置了在单向同步的,所以有显示一个channel。

manager启动之后,需要配置使用的zk、canal、node等地址、端口等信息。

zk配置

node配置

 

 

 端口建议不要修改。

机器添加完成以后,机器管理的列表中第一列就是nid(这个就是到时候要保存到node/conf/nix文件中的值),如下:

 

上述三种类型的节点配置完成后,manager前期的配置就完成了。

manager配置完成之后,需要先启动相应的node节点,node节点启动之后,就可以配置真正的同步任务了。

node配置

首先cd NODE_HOME/conf

echo 1 > nid

node配置文件otter.properties(可以默认,不用做任何修改)如下:

cat otter.properties 
# otter node root dir
otter.nodeHome = ${user.dir}/../
## otter node dir
otter.htdocs.dir = ${otter.nodeHome}/htdocs
otter.download.dir = ${otter.nodeHome}/download
otter.extend.dir= ${otter.nodeHome}/extend## default zookeeper sesstion timeout = 60s
otter.zookeeper.sessionTimeout = 60000## otter communication pool size
otter.communication.pool.size = 10## otter arbitrate & node connect manager config
otter.manager.address = IP:1099

启动node

cd NODE_HOME/bin

./startup.sh

 more node.log
Java HotSpot(TM) 64-Bit Server VM warning: ignoring option PermSize=96m; support was removed in 8.0
Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=256m; support was removed in 8.0
Java HotSpot(TM) 64-Bit Server VM warning: UseCMSCompactAtFullCollection is deprecated and will likely be removed in a future release.
5:13:09.364 [main] INFO com.alibaba.otter.node.deployer.OtterLauncher - INFO ## the otter server is running now ......

此时再查看manager控制台的机器管理,可以发现机器状态为已启动,如下:

manager/node都启动之后,就可以真正开始配置同步任务了。

例:

同步任务配置 

分为下列几个步骤(不熟悉术语概念的建议回到页首重新review下):

1、添加canal

 

 

 点位可以通过在主库执行show master status和select unix_timestamp()得到。

 

2、添加数据源

 设置主库和从库的数据源

 

3、添加同步表

 

 

 

4、添加channel

 

 

5、添加pipeline

 pipeline里面主要选择节点和canal。

6、添加映射关系

 

 

7、启动同步

 

注意:默认会同步ddl,对于分库分表同步到从库的时候,建议不要同步ddl以及跳过ddl。

插入数据试试看吧。。。。

otter同步异常问题排查与监控

笔者一开始启动后,确实报错了,如下:

TODO,等后续梳理确保都可重复执行之后,再补充。

otter简单性能测试

创建了一个简单的表使用mysqlslap进行测试。

注:我们因为环境受限,zk、manager、node、mysql主从均在一台服务器上,配置为16c/8GB阿里云服务器,无swap。

CREATE TABLE `otter_test_table1` (
`id` int(11) NOT NULL,
`name` varchar(100) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=gbk;

测试100w条插入

 mysqlslap --defaults-file="/etc/my.cnf.57" --concurrency=50 --iterations=1 --create-schema=otter_test --query="insert into otter_test_table1 values(FLOOR(0 + (RAND() * 10000000)),'name93923') ON DUPLICATE KEY UPDATE name='wifeufwuwwu'" --number-of-queries=1000000 -uroot -p123456 -P3307 -h127.0.0.1

延迟、tps等如下:

 

测试2000w条插入

mysqlslap --defaults-file="/etc/my.cnf.57" --concurrency=100 --iterations=1 --create-schema=otter_test --query="insert into otter_test_table1 values(FLOOR(1000000 + (RAND() * 100000000)),'namefwei8388dfe88827d7f8fjfjweifiwewifeweuwewuweuewuweuuusyfyeywewew23') ON DUPLICATE KEY UPDATE name='wifeufwuwwu'" --number-of-queries=20000000 -uroot -p123456 -P3307 -h127.0.0.1

延迟、tps、cpu、io等待等如下:

 

 

 

可以看出后面基本上都在io等待了,一般来说数据库服务器io等待持续到10%之后,系统就很慢了,所以总体来说,如果不做太多的字段重命名、二次处理,otter性能本身还是不错的。

otter高可用

对外开源部分HA这一块基本上没有比较完善的。对于canal连接到db主从切换,可以参考:https://www.cnblogs.com/f-zhao/p/7681960.html,已经讲到位了。如果是半同步模式或者基于GTID的话,没有必要回退60s。

在otter中配置canal的主从切换依赖于groupKey,后面测了会补充。

 

其他参考

https://wenku.baidu.com/view/930a5723227916888586d70b.html 

https://github.com/alibaba/otter/wiki/Faq

https://my.oschina.net/dxqr/blog/524795

http://shift-alt-ctrl.iteye.com/blog/2399603

 

 

 

 


http://chatgpt.dhexx.cn/article/cAPTUlYT.shtml

相关文章

Otter入门简介

一、Otter简介 1.1 otter是什么? otter 译意: 水獭,数据搬运工 语言: 纯java开发 定位: 基于数据库增量日志解析,准实时同步到本机房或异地机房的mysql/oracle数据库. 一个分布式数据库同步系统。Ottter是…

2.Otter原理介绍

Introduction 项目介绍 名称:otter [ɒtə(r)] 译意: 水獭,数据搬运工 语言: 纯java开发 定位: 基于数据库增量日志解析,准实时同步到本机房或异地机房的mysql/oracle数据库. 工作原理 image 原理描述&…

斐波那契数列输出的C语言实现

斐波那契数列输出的C语言实现 1.流程图 2.代码实现 #include <stdio.h>#define num1 0//第一项 #define num2 1//第二项int Fibonacci_Sequence(int num_n1, int num_n2, int times_0,int times_already)//num_1为第n-2位数&#xff0c;int num_n2为第n-1位数&#xf…

蓝桥杯入门训练Fibonacci数列 C语言

Fibonacci数列 C语言 问题描述 Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1。 当n比较大时,Fn也非常大,现在我们想知道,Fn除以10007的余数是多少。 输入格式 输入包含一个整数n。 输出格式 输出一行,包含一个整数,表示Fn除以10007的余数。 说明: 在本题中…

C语言 计算斐波那契数列

C语言 计算斐波那契数列 前言 在学习C语言的道路上多次遇到了求斐波那契数列的问题&#xff0c;今天来总结一下我所知道的几种思想方法。方法一&#xff1a;循环 使用斐波那契数列的推导式&#xff0c;通过循环将每一个值保存到数组fib中。需要说明的是&#xff0c;这里的fi…

c语言数组的斐波那契数列

c语言数组的斐波那契数列 核心思想&#xff1a;后一项是前一项的和 a[i]a[i-1]a[i-2]&#xff1b; 题干 转换为代码 #include<stdio.h> int main() {int i,n,a[20]{1,1};scanf("%d",&n);if(n<2)printf("%d",1);else{for(i2;i<n;i)a[i]a…

C语言数组之斐波那契数列

目录 一、斐波那契数列是什么&#xff1f; 二、代码展示 1.斐波那契数列 2.冒泡排序 总结 一、斐波那契数列是什么&#xff1f; 斐波那契数列指的是这样一个数列&#xff1a;1、1、2、3、5、8、13、21、34、……在数学上&#xff0c;斐波那契数列以如下被以递推的方法定义…

斐波那契数列c语言实现 每行五个输出

斐波那契数列 指的是这样一个数列&#xff1a; 0 1 1 2 3 5 8 13 21 34 55 89 144 233… 这个数列从第3项开始&#xff0c;每一项都等于前两项之和。 设计思路&#xff0c;考虑到数列是从第三项开始呈现规律&#xff0c;故将前两项先定义&#xff0c;第三项设为变量。 后续通过…

斐波那契数列C语言实现

斐波那契数列(Fibonacci) 斐波那契数列&#xff08;意大利语: Successione di Fibonacci)&#xff0c;又称黄金分割数列、费波那西数列、费波拿契数、费氏数列&#xff0c;指的是这样一个数列&#xff1a;0、1、1、2、3、5、8、13、21、……在数学上&#xff0c;斐波纳契数列以…

斐波那契数列C语言

1.斐波那契数列是指这样一个数列&#xff1a;1&#xff0c;1&#xff0c;2&#xff0c;3&#xff0c;5&#xff0c;8&#xff0c;13&#xff0c;21&#xff0c;34&#xff0c;55&#xff0c;89..... 这个数列从第3项开始&#xff0c;每一项都等于前两项之和。 主要思想&#…

斐波那契数列C语言设计步骤,斐波那契数列c语言函数

(C语言)用递归方法编写CSS布局HTML小编今天和大家分享斐波那契数列的函数 用递归方法编写CSS布局HTML小编今天和大家分享斐波那契数列的函数&#xff0c;返回值为长整型。斐波那契数列的#include long func(long n) { if(n0||n1)return n; else return func(n-1)func(n-2); } m…

C语言斐波那契数列

斐波那契数列&#xff08;Fibonacci sequence&#xff09;&#xff0c;又称黄金分割数列&#xff0c;因数学家莱昂纳多斐波那契&#xff08;Leonardo Fibonacci&#xff09;以兔子繁殖为例子而引入&#xff0c;故又称为“兔子数列”&#xff0c;指的是这样一个数列&#xff1a;…

斐波那契数列【C语言实现】

1. 定义&#xff1a; 斐波那契数列&#xff08;Fibonacci sequence&#xff09;&#xff0c;又称黄金分割数列&#xff0c;因数学家莱昂纳多斐波那契&#xff08;Leonardo Fibonacci&#xff09;以兔子繁殖为例子而引入&#xff0c;故又称为“兔子数列”&#xff0c;指的是这样…

【C语言】斐波那契数列

一.斐波那契数列是什么&#xff1f; 斐波那契数列&#xff08;Fibonacci sequence&#xff09;&#xff0c;又称黄金分割数列&#xff0c;因数学家莱昂纳多斐波那契&#xff08;Leonardo Fibonacci&#xff09;以兔子繁殖为例子而引入&#xff0c;故又称为“兔子数列”&#xf…

用C 语言实现斐波那契数列

斐波那契数列&#xff08;Fibonacci sequence&#xff09;&#xff0c;又称“黄金分割”数列&#xff0c;比如这样一个数列&#xff1a;1&#xff0c;1&#xff0c;2&#xff0c;3&#xff0c;5&#xff0c;8&#xff0c;13&#xff0c;21&#xff0c;34&#xff0c;55&#xf…

免费且好玩的API接口

其实很多小伙伴都在寻找一些免费的好用的API接口&#xff0c;下面就来介绍一些好用的并且稳定的API接口吧。 1.聚合数据 聚合数据网站提供的接口可以说是非常的多&#xff0c;并且很多都是免费使用&#xff0c;虽然有次数的限制&#xff0c;但是用来进行简单的测试或者日常使…

分享笔趣阁、宜搜等小说免费API接口

背景 因为有一些js基础&#xff0c;开始是想学python的爬虫的&#xff0c;后来觉得python爬虫没用。因为我是想用爬虫去爬一些api接口的。爬虫真的太low了……有点鸡肋&#xff08;勿喷&#xff09; 然后为了爬api接口&#xff0c;我就去学抓包&#xff0c;2天速成&#xff0…

几个免费API接口分享,调用完全不限次数...

点击上方蓝色“终端研发部”&#xff0c;选择“设为星标” 学最好的别人&#xff0c;做最好的我们作者 : ishxiao 来源&#xff1a;blog.csdn.net/ishxiao/article/details/53839061 各类无次数限制的免费API接口整理&#xff0c;主要是聚合数据上和API Store上的一些&#xff…

快速拥有自己的网易云免费API接口

操作简单&#xff0c;快速拥有自己的网易云api接口。 https://binaryify.github.io/NeteaseCloudMusicApi/#/?id%e6%ad%8c%e6%89%8b%e7%83%ad%e9%97%a850%e9%a6%96%e6%ad%8c%e6%9b%b2 此链接为网易云开发接口文档&#xff0c;拥有自己的api后就可以结合它进行令人兴奋的操作…

超百个免费api接口,分享给你

API&#xff08;应用程序编程接口&#xff09; API&#xff08;Application Programming Interface&#xff0c;应用程序接口&#xff09;是一些预先定义的函数&#xff0c;或指软件系统不同组成部分衔接的约定。目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程…