⾃动化运维利器Ansible-基础

news2024/11/18 12:45:23

Ansible基础

  • 一、工作原理
  • 二、快速入门
    • 2.1 测试所有资产的网络连通性
    • 2.2 发布文件到被管理节点(资产)
  • 三、资产(被管理节点)
    • 3.1 静态资产
      • 3.1.1 自定义资产
      • 3.1.2 自定义资产的使用
      • 3.1.3 资产选择器
  • 四、Ansible Ad-Hoc 命令
    • 4.1 模块类型
      • 4.1.1 command & shell 模块
      • 4.1.2 copy模块
      • 4.1.3 yum_repsitory模块
      • 4.1.4 yum 模块
      • 4.1.5 user模块

按顺序食用,口味更佳
( 1 ) ⾃动化运维利器Ansible-基础
( 2 ) ⾃动化运维利器 Ansible-Playbook
( 3 ) ⾃动化运维利器 Ansible-变量
( 4 ) ⾃动化运维利器AnsiblePlaybook的任务控制
( 5 ) ⾃动化运维利器 Ansible-Jinja2
( 6 ) ⾃动化运维利器 Ansible-最佳实战

一、工作原理

Ansible 是⼀个 IT ⾃动化⼯具。它能配置系统、部署软件、编排更复杂的 IT 任务,如连续部署或零停机时间滚动更新。

Ansible ⽤ Python 编写,尽管市⾯上已经有很多可供选择的配置管理解决⽅案(例如 Salt、Puppet、Chef等),但它们各有优劣,⽽Ansible的特点在于它的简洁。

让 Ansible 在主流的配置管理系统中与众不同的⼀点便是,它并不需要你在想要配置的每个节点上安装⾃⼰的组件。同时提供的另⼀个优点,如果需要的话,你可以在不⽌⼀个地⽅控制你的整个基础架构
在这里插入图片描述

  • 在ANSIBLE 管理体系中,存在"管理节点" 和 “被管理节点” 两种⻆⾊。
  • 被管理节点通常被称为"资产"
  • 在管理节点上,Ansible将 AdHoc 或 PlayBook 转换为Python脚本。并通过SSH将这些Python 脚本传递到被管理服务器上。在被管理服务器上依次执⾏,并实时的将结果返回给管理节点

二、快速入门

Ansible的安装非常简单,此处不再做说明了


管理节点:

  • 172.18.0.2

被管理节点(资产):

  • 172.18.0.3
  • 172.17.0.4

管理节点 和 被管理节点之间的节点已经打通 SSH 信任关系。

2.1 测试所有资产的网络连通性

ansible all -i 172.18.0.3,172.18.0.4 -m ping

172.18.0.4 | SUCCESS => {
 "ansible_facts": {
 "discovered_interpreter_python":
"/usr/bin/python"
 },
 "changed": false,
 "ping": "pong"
}
172.18.0.3 | SUCCESS => {
 "ansible_facts": {
 "discovered_interpreter_python":
"/usr/bin/python"
 },
 "changed": false,
 "ping": "pong"
}

注意 -i 参数后⾯接的是⼀个列表(List)。因此当为⼀个被管理节点时,我们后⾯⼀定要加⼀个英⽂逗号(,),告知是List

2.2 发布文件到被管理节点(资产)

touch /tmp/a.conf
ansible all -i 172.18.0.3,172.18.0.4 -m copy -a
"src=/tmp/a.conf dest=/tmp/a.conf"

src(source) 源地址,dest(destination)目标地址


参数解释:

  • all 在 ansible 中称为资产选择器。就是匹配资产(-i 参数指定的清单) 中的⼀部分。

    此处的all -i 172.18.0.3,172.18.0.4 指的是匹配-i 参数指定的清单(172.18.0.3,172.18.0.4)的所有资产。

  • -i 指定Ansible 的资产,也就是被管理服务器。
  • -m 指定要运⾏的模块,例如上述的 ping 模块和 copy 模块。

    模块为ansible提供的,也可以是社区开源的模块。

  • -a 指定模块的参数,模块 ping 没有指定参数, 模块 copy指定了 src 和 dest 参数。

三、资产(被管理节点)

在实际场景中,ansible要管理的服务器往往要多得多。依然使用 -i 参数后⾯⼀个个追加IP显然不合乎常理。

Ansible的资产,主要分为静态资产和动态资产,此处先介绍静态资产。

3.1 静态资产

在 Ansible 中,静态资产(static assets)指的是那些在运行时不会发生变化的资源或配置文件。这些资产通常是预先定义好的,并且在整个 Ansible 运行过程中保持不变。

静态资产本身是⼀个文本文件,⼀个格式类似INI的文件,默认情况下,Ansible的资产⽂件位于 /ect/ansible/hosts,安装方式不同可能没有该文件,手动创建即可。

静态资产可以包括但不限于以下几类:

库存文件(Inventory Files):库存文件定义了目标主机及其分组信息。这些文件是静态的,除非手动修改,否则在 Ansible 运行过程中不会发生变化。

INI格式:
[webservers]
web1.example.com
web2.example.com

yaml格式:
all:
  children:
    webservers:
      hosts:
        web1.example.com:
        web2.example.com:

变量文件(Variable Files):变量文件包含可以在 playbook 中使用的变量定义。这些文件通常也是静态的,除非手动修改。

app_name: myapp
app_port: 8080

模板文件(Template Files):模板文件用于生成配置文件或其他文本文件。这些模板文件通常是静态的,但在运行时会被 Ansible 渲染成最终的配置文件。(后边介绍)

角色(Roles):角色是一组相关的任务、文件、模板和变量的集合。角色文件夹中的内容通常是静态的,除非手动修改。
Playbook 文件:Playbook 文件定义了一组任务,这些任务将在目标主机上执行。Playbook 文件通常是静态的,除非手动修改。

3.1.1 自定义资产

上述提到的INI格式文件静态资产可以进行自定义,下⾯给出⼀个⾃定义的静态资产实例,然后再具体解释其含义。

cat inventory.ini
1.1.1.1
2.2.2.2
3.3.3.[1:15]
aimyon36.com
ztmy.com
aimyon[05:09].com    //aimyon05.com ....aimyon09.com

[web_servers]
192.168.1.2
192.168.1.3
192.168.1.5

[dbdb_servers]
192.168.2.2
192.168.2.3
192.168.1.5

[alldb_servers]
[alldb_servers:children]
dbdb_servers
web_servers
  • Ansible 的资产⽂件中,可以以IP地址的形式或者主机名(如果使用主机名须配置hosts的映射)的形式存在。
  • Ansible 的资产若连续,可以使⽤[stat:end] 的形式去表达。
  • 可以将服务器按照业务场景定义成组,⽐如dbdb_servers 和web_servers
  • 组和组之间可以存在继承关系,⽐如dbdb_servers 和web_servers 同时继承 alldb_servers 组

3.1.2 自定义资产的使用

ansible all -i inventory.ini ... 
  • -i 参数用来指定资产。
  • 通过 -i 参数指定⾃定义资产的位置即可(可以是全路径,也可以是相对路径)。

列举出所有资产

ansible all -i inventory.ini --list-hosts

 hosts (29):
 1.1.1.1
 2.2.2.2
 3.3.3.1
 ...略...

列举出选定资产

ansible web_servers -i inventory.ini --listhosts
 hosts (3):
 192.168.2.2
 192.168.2.3
 192.168.1.5

-i 是指定要进行匹配的资产
web_servers 是匹配指定的资产中属于web_servers这个组的资产

3.1.3 资产选择器

有时操作者希望只对资产中的⼀部分服务器进⾏操作,而不是资产中所有服务器。此时可以使⽤ Ansible 的PATTERN资产选择器。

基本语法格式

  • ansible PATTERN -i inventory -m module -a argument

选择⼀台或者多台服务器

ansible 1.1.1.1 -i inventory.ini --list-hosts
 hosts (1):
 1.1.1.1

ansible aimyon36.com -i inventory.ini --listhosts
 hosts (1):
 aimyon36.com
 
ansible 1.1.1.1,2.2.2.2 -i inventory.ini --listhosts
 hosts (2):
 1.1.1.1
 2.2.2.2

选择⼀组服务器

ansible web_servers -i inventory.ini --list-hosts
 hosts (3):
 192.168.1.2
 192.168.1.3
 192.168.1.5

使用*匹配

ansible 3.3.3.1* -i inventory.ini --list-hosts
 hosts (7):
 3.3.3.13
 3.3.3.10
 3.3.3.11
 3.3.3.12
 3.3.3.14
 3.3.3.15
 3.3.3.1

使⽤逻辑匹配

ansible 'web_servers:db_servers' -i inventory.ini --list-hosts //web_servers 和 dbdb_servers 的并集
 hosts (5):
 192.168.1.2
 192.168.1.3
 192.168.1.5
 192.168.2.2
 192.168.2.3

ansible 'web_servers:&db_servers' -i inventory.ini --list-hosts //web_servers 和 dbdb_servers 的交集
 hosts (1):
 192.168.1.5

ansible 'web_servers:!db_servers' -i inventory.ini --list-hosts //在 web_servers 中,但是不在 db_servers 中
 hosts (2):
 192.168.1.2
 192.168.1.3

四、Ansible Ad-Hoc 命令

Ansible Ad-Hoc其实是⼀个概念性的名字,是相对于写Ansible playbook 来说的.类似于在命令⾏敲⼊shell命令和 写shell scripts两者之间的关系。可以⽤于执⾏⼀些临时命令。

如果希望敲⼊⼀些命令去比较快的完成⼀些事情,⽽不需要将这些执⾏的命令特别保存下来, 这样的命令就叫做 ad-hoc 命令。

Ansible提供两种⽅式去完成任务,⼀是 ad-hoc(临时) 命令,⼀是写Ansible playbook(剧本)。前者可以解决⼀些简单的任务, 后者解决较复杂的任务,⽐如做配置管理或部署。

命令格式

  • ansible pattern [-i inventory] -m module -a argument
  • pattern 资产选择器
  • -i 指定资产清单⽂件的位置
  • -m 指定本次Ansible ad-hoc 要执⾏的模块。可以类别成SHELL 中的命令。
  • -a 模块的参数. 可以类⽐成SHELL 中的命令参数

快速入门部分介绍的就是ad-hoc命令,快速入门部分已经介绍了通过ansible筛选出指定的资产进行相应操作,但在实际操作上,我们希望使用到文件传输,修改,服务安装等操作。因此需要引入模块进行操作。

4.1 模块类型

Ansible 模块分三种类型: 核⼼模块(core module)、附加模块(extra module)及用户⾃定义模块(consume module)。

核⼼模块是由Ansible 的官⽅团队提供的。附加模块是由各个社区提供的。例如: OPENSTACK 社区、DOCKER 社区等等。
当核⼼模块和附加模块都⽆法满⾜你的需求时,⽤户可以⾃定义模块。
默认情况下,在安装Ansible 的时候, 核⼼模块和附加模块都已经安装而⽆需⽤户干预。

Ansible 的核⼼模块和附加模块,数量有3000+ 。这样庞⼤的模块数量,对于任何⼀个接触Ansible 的⼈都不可能将其完全记住、掌握使⽤。 因此能够顺利使⽤Ansible 的帮助⽂档,对我们来说是很有必要的。Ansible 的帮助⽂档,由它本身提供的命令ansible-doc 实现。

常用帮助命令

列举出所有的核⼼模块和附加模块

  • ansible-doc -l

查询某个模块的使⽤⽅法

  • ansible-doc modulename

查询某个模块的使⽤⽅法,⽐较简洁的信息

  • ansible-doc -s modulename

4.1.1 command & shell 模块

command & shell 两个模块都是在远程服务器上去执⾏命令。command模块是ad-hoc的默认模块,在执⾏ad-hoc时,若不指定模块的名字则默认使⽤此模块。

ansible all -i hosts -a "echo 'hello'"
172.18.0.4 | CHANGED | rc=0 >>
hello
172.18.0.3 | CHANGED | rc=0 >>
hello

ansible all -i hosts -m shell -a "echo 'hello'"
172.18.0.4 | CHANGED | rc=0 >>
hello
172.18.0.3 | CHANGED | rc=0 >>
hello

shell 模块可以执⾏SHELL 的内置命令和 特性(⽐如管道符)。
command 模块⽆法执⾏SHELL 的内置命令和特性。

4.1.2 copy模块

copy 模块的主要⽤于管理节点和被管理节点之间的⽂件拷⻉。

常用参数

  • src 指定拷⻉⽂件的源地址
  • dest 指定拷⻉⽂件的⽬标地址
  • backup 拷⻉⽂件前,若原⽬标⽂件发⽣了变化,则对⽬标⽂件进行备份
  • woner 指定新拷⻉⽂件的所有者
  • group 指定新拷⻉⽂件的所有组
  • mode 指定新拷⻉⽂件的权限

copy 管理节点上的 nginx.repo 到被管理节点上

 ansible webservers -i hosts -m copy -a "src=./nginx.repo dest=/etc/yum.repos.d/nginx.repo

copy 前, 在被管理节点上对原⽂件进⾏备份

ansible all -i hosts -m copy -a "src=./nginx.repo dest=/etc/yum.repos.d/nginx.repo backup=yes"

copy ⽂件的同时对⽂件进⾏⽤户及⽤户组设置

ansible all -i hosts -m copy -a "src=./nginx.repodest=/etc/yum.repos.d/nginx.repo owner=nobody group=nobody"

copy ⽂件的同时对⽂件进⾏权限设置

ansible all -i hosts -m copy -a "src=./nginx.repo
dest=/etc/yum.repos.d/nginx.repo mode=0755"

4.1.3 yum_repsitory模块

主要用于向被管理节点添加yum仓库源。

常⽤参数

  • name 仓库名称,就是仓库⽂件中第⼀⾏的中括号中名称,必须的参数。
  • description 仓库描述信息,添加时必须的参数
  • baseurl yum存储库 “repodata” ⽬录所在⽬录的URL,添加时必须的参数。它也可以是多个URL的列表。
  • file 仓库⽂件保存到被管理节点的⽂件名,不包含 .repo。默认是 name 的值。
  • state preset 确认添加仓库⽂件, absent 确认删除仓库⽂件。
  • gpgcheck 是否检查 GPG yes|no, 没有默认值,使⽤/etc/yum.conf 中的配置。

添加 epel 源

 ansible dbservers -i hosts -m
yum_repository -a "name=epel
baseurl='https://download.fedoraproject.org/pub/epel/$releasever/$basearch/' 
description='EPEL YUM repo'"
172.18.0.3 | CHANGED => {
 "ansible_facts": {
 "discovered_interpreter_python":
"/usr/bin/python"
 },
 "changed": true,
 "repo": "epel",
 "state": "present"
 }

删除epel源

ansible dbservers -i hosts -m yum_repository -a "name=epel state=absent"
172.18.0.3 | CHANGED => {
 "ansible_facts": {
 "discovered_interpreter_python":
"/usr/bin/python"
 },
 "changed": true,
 "repo": "epel",
 "state": "absent"
}

4.1.4 yum 模块

等同于 Linux 上的YUM 命令, 对远程服务器上RPM包进⾏管理。

常用参数

  • name 要安装的软件包名, 多个软件包以英⽂逗号(,) 隔开
  • state 对当前指定的软件安装、移除操作(present installed latest absent removed)
    • present 确认已经安装,但不升级
    • installed 确认已经安装
    • latest 确保安装,且升级为最新
    • absent 和 removed 确认已移除

安装⼀个软件包

ansible webservers -i hosts -m yum -a
"name=nginx state=present"

ansible webservers -i hosts -m yum -a
"name=nginx state=latest"

ansible webservers -i hosts -m yum -a
"name=nginx state=installed"

安装⼀个软件包组

ansible webservers -i hosts -m yum -a
"name='@Development tools' state=present"

4.1.5 user模块

⽤于在被管理节点上对⽤户进⾏管理。

常⽤参数

  • name 必须的参数, 指定⽤户名
  • password 设置⽤户的密码,这⾥接受的是⼀个加密的值,因为会直接存到 shadow, 默认不设置密码
  • update_password 假如设置的密码不同于原密码,则会更新密码. 在 1.3 中被加⼊
  • home 指定⽤户的家⽬录
  • shell 设置⽤户的 shell
  • comment ⽤户的描述信息
  • create_home 在创建⽤户时,是否创建其家⽬录。默认创建,假如不创建,设置为 no。2.5版本之前使⽤ createhome group 设置⽤户的主组
  • groups 将⽤户加⼊到多个其他组中,多个⽤逗号隔开。默认会把⽤户从其他已经加⼊的组中删除。
  • append yes|no 和 groups 配合使⽤,yes 时,不会把⽤户从其他已经加⼊的组中删除
  • system 设置为 yes 时,将会创建⼀个系统账号
  • expires 设置⽤户的过期时间,值为时间戳,会转为为天数后,放在 shadow 的第 8 个字段⾥
  • generate_ssh_key 设置为 yes 将会为⽤户⽣成密钥,这不会覆盖原来的密钥
  • ssh_key_type 指定⽤户的密钥类型, 默认 rsa, 具体的类型取决于被管理节点
  • state 删除或添加⽤户, present 为添加,absent 为删除;默认值 present
  • remove 当与 state=absent ⼀起使⽤,删除⼀个⽤户及关联的⽬录,⽐如家⽬录,邮箱⽬录。可选的值为: yes/no

创建⽤户并设置密码

pass=$(echo "123456" | openssl passwd -1 -stdin)
ansible all -i hosts -m user -a "name=foo password=${pass}"

创建⽤户 yangge, 并且为其创建密钥对,并且密钥类型为:ecdsa

ansible all -i hosts -m user -a "name=yangge
generate_ssh_key=yes ssh_key_type=ecdsa"

创建⽤ tom, 并且设置其有效期到 2020年4⽉15⽇, 加⼊到组db_admin 中, 不改变⽤户原有假如的组。

 ansible dbservers -i hosts -m user -a
"name=tom expires=$(date +%s -d 20200415)
gorups=db_admin append=yes"

本章节Ansible-基础就介绍到这,相信看到这已经能够用ansible在资产服务器上执行一些简单的命令了,关于ansible的模块,可以自行查看文档了解,此处不再介绍了,说再多用不到也白扯 - - #

按顺序食用,口味更佳
( 1 ) ⾃动化运维利器Ansible-基础
( 2 ) ⾃动化运维利器 Ansible-Playbook
( 3 ) ⾃动化运维利器 Ansible-变量
( 4 ) ⾃动化运维利器AnsiblePlaybook的任务控制
( 5 ) ⾃动化运维利器 Ansible-Jinja2
( 6 ) ⾃动化运维利器 Ansible-最佳实战

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

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

相关文章

简易实现自动签到并发送通知邮件

环境准备 Windows操作系统adbshell1.0.40pyhon3.7visual stdio code stableandroid手机数据线,并配置环境变量 打卡程序 需要定位屏幕坐标 import os import timea0os.popen("adb shell input keyevent 26") ##ba0.read() ##print(b) time.sleep(5) …

机器学习(贝叶斯算法,决策树)

朴素贝叶斯分类 贝叶斯分类理论 假设现有两个数据集,分为两类 我们现在用p1(x,y)表示数据点(x,y)属于类别1(图中红色圆点表示的类别)的概率,用p2(x,y)表示数据点(x,y)属于类别2(图中蓝色三角形表示的类别)的概率,那么对于一个新数据点(x,y)…

[ACTF2020]Upload 1--详细解析

信息收集 题目告诉我们是一道upload,也就是文件上传漏洞题目。 进入界面,是一个灯泡,将鼠标放在图标上就会出现文件上传的相应位置: 思路 文件上传漏洞,先看看有没有前端校验。 在js源码中找到了前端校验&#xff…

网络常用特殊地址-127.0.0.1

借用Medium博客的一张图 经常在问题解答群里留意到如下关于127.0.0.1的消息 ”如果单机版,不需要配置IP,所有配置IP的地方都写死127.0.0.1就可以” “ip: 根据实际情况填写(在 xxx-init.conf 里可以给一个默认值 127.0.0.1 ,方便…

Scala-字符串(拼接、printf格式化输出等)-用法详解

Scala 一、 使用 号连接字符串 在 Scala 中, 运算符实际上会调用 String 类的 concat 方法或者使用字符串的加法操作,生成一个新的字符串。 字符串是不可变的,每次拼接都会创建一个新的字符串。 Mr. yuTips: 性能相对较差&…

软考教材重点内容 信息安全工程师 第 4 章 网络安全体系与网络安全模型

4,1 网络安全体系的主要特征: (1)整体性。网络安全体系从全局、长远的角度实现安全保障,网络安全单元按照一定的规则,相互依赖、相互约束、相互作用而形成人机物一体化的网络安全保护方式。 (2)协同性。网络安全体系依赖于多种安全机制,通过各…

【数据库】如何保证数据库迁移过程中数据的一致性?

在数据库迁移过程中,保证数据的一致性是非常重要的,尤其是在涉及到多个表、多个数据库或分布式系统的情况下。以下是一些确保数据一致性的最佳实践和方法: 1. 备份数据 在开始迁移之前,进行全面的数据备份是确保数据一致性的第…

github 模型下载方法

github 模型权重,如果是项目下载,pth文件有时下载后只有1kb 本人测试ok下载方法: 点击view raw,然后可以下载模型权重文件了。

spring-data-elasticsearch 3.2.4 实现桶bucket排序去重,实现指定字段的聚合搜索

一、背景 es索引有一个文档CourseIndex,下面是示意: creatorIdgradesubjectnameno1002270英语听力课程一N00232DS91004380数学口算课程N00209DK71003480物理竞赛课程N00642XS21002280英语听力课程二N00432WS31002290英语听力课程三N002312DP5 在搜索的时候&#…

QQ 小程序已发布,但无法被搜索的解决方案

前言 我的 QQ 小程序在 2024 年 8 月就已经审核通过,上架后却一直无法被搜索到。打开后,再在 QQ 上下拉查看 “最近使用”,发现他出现一下又马上消失。 上线是按正常流程走的,开发、备案、审核,没有任何违规&#xf…

快速搭建Android开发环境:Docker部署docker-android并实现远程连接

目录 前言 1. 虚拟化环境检查 2. Android 模拟器部署 3. Ubuntu安装Cpolar 4. 配置公网地址 5. 远程访问 小结 6. 固定Cpolar公网地址 7. 固定地址访问 作者简介: 懒大王敲代码,计算机专业应届生 今天给大家聊聊快速搭建Android开发环境&#x…

大麦抢票科技

仅供学习参考,切勿再令您所爱的人耗费高昂的价格去购置黄牛票 ⚠️核心内容参考: 据悉,于购票环节,大麦凭借恶意流量清洗技术,于网络层实时甄别并阻拦凭借自动化手段发起下单请求的流量,强化对刷票脚本、刷票软件以及…

【STM32】基于SPI协议读写SD,详解!

文章目录 0 前言1 SD卡的种类和简介1.1 SD卡的种类1.2 SD卡的整体结构1.3 SD卡运行机制——指令和响应2 SD卡的通信总线2.1 SDIO2.2 SPI3 硬件连接4 代码实践【重点】4.1 HAL库移植4.2 标准库移植4.3 遇到的问题和解决方案5 扩展阅读0 前言 因为项目需要,使用stm32读写sd卡,这…

kafka管理工具

文章目录 前言一、Kafka Assistan1.1 描述1.2、配置安装 二、Conduktor2.1、描述2.2、配置安装 三、kafka-maneger3.1、描述3.2、配置安装3.3、命令启动3.4、[refer to](https://www.ctyun.cn/document/10000120/10033218#section-39755766f4910e4b) 前言 提示:这里…

leetcode_二叉树最大深度

对二叉树的理解 对递归调用的理解 对内存分配的理解 基础数据结构(C版本) - 飞书云文档 每次函数的调用 都会进行一次新的栈内存分配 所以lmax和rmax的值不会混在一起 /*** Definition for a binary tree node.* struct TreeNode {* int val;* …

使用 Axios 拦截器优化 HTTP 请求与响应的实践

目录 前言1. Axios 简介与拦截器概念1.1 Axios 的特点1.2 什么是拦截器 2. 请求拦截器的应用与实践2.1 请求拦截器的作用2.2 请求拦截器实现 3. 响应拦截器的应用与实践3.1 响应拦截器的作用3.2 响应拦截器实现 4. 综合实例:一个完整的 Axios 配置5. 使用拦截器的好…

高亚科技签约美妥维志化工,提升业务协同与项目运营效率

近日,中国企业管理软件资深服务商高亚科技与韶关美妥维志化工有限公司(以下简称“美妥维志”)正式签约。基于高亚科技的8Manage PM项目管理软件,美妥维志将实现项目进度、人员审批及问题的统一管理,提升部门间协同效率…

使用真实 Elasticsearch 进行更快的集成测试

作者:来自 Elastic Piotr Przybyl 了解如何使用各种数据初始化和性能改进技术加快 Elasticsearch 的自动化集成测试速度。 在本系列的第 1 部分中,我们探讨了如何编写集成测试,让我们能够在真实的 Elasticsearch 环境中测试软件,并…

数据分布之指数分布(sample database classicmodels _No.10)

数据分布之指数分布(sample database classicmodels _No.10) 准备工作,可以去下载 classicmodels 数据库具体如下 点击:classicmodels 也可以去 下面我的博客资源下载 https://download.csdn.net/download/tomxjc/88685970 文章…

RPC-健康检测机制

什么是健康检测? 在真实环境中服务提供方是以一个集群的方式提供服务,这对于服务调用方来说,就是一个接口会有多个服务提供方同时提供服务,调用方在每次发起请求的时候都可以拿到一个可用的连接。 健康检测,能帮助从连…