46、lvs集群- 博客

1、lvs集群:

  • lvs:linux virtual server----章文嵩发起的开源项目,阿里。linux的内核层面实现负载均衡的软件。

  • 主要作用:将多个后端服务器组成一个高可用,高性能的服务器集群,通过负载均衡的算法将客户端的请求分发到后端的服务器上,来实现高可用和负载均衡。

  • 阿里的SLB:server load balance----lvm+keepalive实现的。

2、集群和分布式:

2.1、系统的拓展方式:

  • 垂直扩展:向上扩展,增强,性能更强的计算机。瓶颈,计算机本身设备的限制,硬件本身的性能瓶颈。

  • 水平扩展向外扩展,增加设备。并行的运行多个服务,依靠网络解决内部通信问题,cluster 集群。

  • 集群:为了解决某个特定的问题将计算机组合起来形成的单个系统。

2.2、集群的类型,三种类型:

1、LB:load balance负载均衡,多个主机组成,每个主机只承担一部分的访问请求。

2、HA:high availiablity高可用,在设计系统时,采取一定的措施,确保系统当中某一组件或者部分出现故障,整个系统依然能够正常运行。为了维护系统的可用性,可靠性,容错性。

3、HPC:high-performance computing 高性能 对响应时间,处理能力要求更高。

2.3、系统可靠性指标:

MTBF:Mean time Between Failure 平均无故障时间

MTTR:Mean time Resotration repair 平均故障恢复时间

A=MTBF/(MTBF+MTTR)

0-1

A指标0-1之间,A指标就是系统可用性的度量,0表示系统越不可用,1表示系统越可以用。

A指标要无线接近于1.

99.99%

都是以小时为单位

1年365天=8760小时
90(1-90%)*365=36.5天99 8760**1%=87.6小时
99.9999=31秒
99.99%=======52.6分钟

停机时间:计划内时间,计划内的时间开以忽略不计。但是现在也算在内。

计划外时间,故障时间,从故障发生到故障解决的总时间,尤其是运维,计划外时间是我们必须关注的一个指标。

某某-----当天事必须当天解决----没有解决之间,人是不可用离开的-------解决完之后必须生成报告,备案。

日报,周报,月报,年报。

运维精神:7*24小时待命(及时响应,及时处理,及时总结。)

2.4、lvs适用场景:

  • 小集群不需要使用lvs,大集群使用lvs。

  • lvs集群中的术语

  • VS: virtual server:lvs服务的逻辑名称,也就是我们外部访问lvs集群时使用的ip地址和端口。

  • DS: Director Server :lvs集群中的主服务器,也就是调度器(nginx的代理服务器)是集群的核心

  • 调度服务器就是用来接收客户端的请求转发到后端的服务器。

  • RS: Real Server:lvs集群中的真实服务器,后端服务器,用来接收DS转发来的请求,并响应结果。

  • CIP:Client ip :客户端的地址,发起请求的客户端地址。

  • VIP:virtual Ip :lvs集群使用的ip地址,对外提供集群访问的虚拟ip地址。

  • DIP:Director ip :调度器在集群中的地址,用于和RS通信。

  • RIP:Real ip :后端服务器在集群当中的ip地址。

在这里插入图片描述

2.5、lvs的工作模式:

  • NAT模式:由调度器响应给客户端

  • DR模式:直接路由模式,真实服务器直接响应给客户端

  • TUN:隧道模式----电信公司DNS提供

  • 常用的模式:NATDR模式

2.5.1、NAT模式

nat模式是常用的lvs的模式之一。

在nat模式下,lvs会将来自客户端的请求报文中的目标ip地址和端口,修改为lvs内部的ip地址和端口,然后把请求转发到后端服务器。

在这里插入图片描述

响应结果返回客户端的过程中,响应报文经过lvs的处理,把目标ip和端口修改成客户端的ip地址和端口。

好处:在于,对于客户端来说,请求的目标地址始终不变,客户端的配置不需要做特殊的修改,只需调度器再对ip和端口进行转换,后端的服务端也不需要更改任何配置。

缺点:性能损失,请求和响应都需要调度器做地址转换,影响性能,nat模式只要有一个调度器,调度器故障,整个集群就不能正常工作。

地址转换:

内网----外网 转换的源ip地址 snat

外网----内网 转换的目的ip地址 nat

1、客户端发起请求,访问vip地址,到达调度器

2、调度器接收到请求之后,根据负载均衡算法选一个后端服务器。

3、请求的地址,转成可以直接和内部RS通信的IP地址。

4、后端服务器处理请求。

5、目的的地址转换,转换vip地址

6、调度器的vip地址响应给客户端

在这里插入图片描述

外网到内网–12.0.0.10-----12.0.0.1------192.168.168.10

内网到外网–192.168.168.0/24-----12.0.0.1-----12.0.0.10----需要地址转换

iptables -t nat -A POSTROUTING -s 192.168.168.0/24 -o ens36 -j SNAT --to 12.0.0.1

2.6、lvs的工具

2.6.1、ipvsadm 工具,用来配置和管理lvs集群的工具。

  • -A 添加虚拟服务器 vip

  • -D 删除虚拟服务器地址

  • -s指定负载均衡的调度算法

  • -a 添加真实服务器

  • -d 删除真实服务器

  • -t 指定vip的地址和端口

  • -r 指定rip的地址和端口

  • -m使用nat模式

  • -g 使用DR模式

  • -i 使用隧道模式

  • -w 设置权重

  • -p 60:连接保持60设置保持时间

  • -l:列表查看

  • -n:数字化展示

  • -m指定模式为nat模式

2.6.2、算法

  • rr默认,轮询

  • 加权轮询:wrr

  • 最小连接:lr

  • 加权最小连接:wlc

2.6.3、操作

ipvsadm -C—#清空原有的策略

ipvsadm -A -t 12.0.0.1:80 -s rr------#指定好的vip的地址和端口

ipvsadm -a -t 12.0.0.1:80 -r 192.168.168.10:80 -m—#先添加vip,虚拟服务器的ip和端口,然后再添加真实服务器

ipvsadm -D -t 192.168.168.50:80----#删除策略

ipvsadm -D -t 192.168.168.50:80
[root@test5 opt]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags-> RemoteAddress:Port           Forward Weight ActiveConn InActConn

ipvsadm -d -r 192.168.168.20:80 -t 12.0.0.1:80----###删除节点服务器

ipvsadm -d -r 192.168.168.20:80 -t 12.0.0.1:80
[root@test5 opt]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags-> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  12.0.0.1:80 rr-> 192.168.168.10:80            Masq    1      0          0     

开启路由转发:

vim /etc/sysctl.conf net.ipv4.ip_forward=1[root@test5 opt]# sysctl -p
net.ipv4.ip_forward = 1

3、NAT集群实验

3.1、rr配置

在这里插入图片描述

nginx1 :192.168.168.10

nginx2:192.168.168.20

test5:调度器 ens33:192.168.168.50 ens36 :12.0.0.1

test6 客户端12.0.0.10

test5:

安装ipvsadm工具

yum -y install ipvsadm* -y

添加网卡

[root@test5 network-scripts]# cp ifcfg-ens33 ifcfg-ens36

vim ifcfg-ens33TYPE=Ethernet
DEVICE=ens33
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.168.50
NETMASK=255.255.255.0 
#GATEWAY=192.168.168.2
#DNS1=218.2.135.1
#DNS2=221.131.143.69
vim ifcfg-ens36TYPE=Ethernet
DEVICE=ens36
ONBOOT=yes
BOOTPROTO=static
IPADDR=12.0.0.1
NETMASK=255.255.255.0
#GATEWAY=192.168.168.2
#DNS1=218.2.135.1
#DNS2=221.131.143.69

systemctl restart network

在这里插入图片描述

nginx1修改网卡中的网关指向调度器的ip(即网关)

TYPE=Ethernet 
DEVICE=ens33 
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.168.10
NETMASK=255.255.255.0
GATEWAY=192.168.168.50
DNS1=218.2.135.1
DNS2=221.131.143.69
vim /usr/local/nginx/html/index.htmlthis is nginx1

nginx2修改网卡中的网关指向调度器的ip(即网关)

TYPE=Ethernet
DEVICE=ens33
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.168.20
NETMASK=255.255.255.0 
GATEWAY=192.168.168.50
DNS1=218.2.135.1
DNS2=221.131.143.69
vim /usr/local/nginx/html/index.htmlthis is nginx2

test5配置:

内网到外网—出去做地址转换

iptables -t nat -A POSTROUTING -s 192.168.168.0/24 -o ens36 -j SNAT --to 12.0.0.1

ipvsadm -C—#清空原有的策略

ipvsadm -A -t 12.0.0.1:80 -s rr-----指定好的vip的地址和端口

先添加vip,虚拟服务器的ip和端口,然后再添加真实服务器:

ipvsadm -a -t 12.0.0.1:80 -r 192.168.168.10:80 -m

-a 添加真实服务器

-t 指定vip地址

-r 指定真实服务器的地址和端口

-m指定模式为nat模式

ipvsadm -a -t 12.0.0.1:80 -r 192.168.168.20:80 -m

[root@test5 opt]# ipvsadm -A -t 12.0.0.1:80 -s rr
[root@test5 opt]# ipvsadm -a -t 12.0.0.1:80 -r 192.168.168.10:80 -m
[root@test5 opt]# ipvsadm -a -t 12.0.0.1:80 -r 192.168.168.20:80 -m
[root@test5 opt]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags-> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  12.0.0.1:80 rr-> 192.168.168.10:80            Masq    1      0          0         -> 192.168.168.20:80            Masq    1      0          0  [root@test5 opt]# ipvsadm-save > /etc/sysconfig/ipvsadm
[root@test5 opt]# systemctl restart ipvsadm
[root@test5 opt]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags-> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.168.50:80 rr-> 192.168.168.10:80            Masq    1      0          0         -> 192.168.168.20:80            Masq    1      0          0    

在这里插入图片描述

删除策略

ipvsadm -D -t 192.168.168.50:80
[root@test5 opt]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags-> RemoteAddress:Port           Forward Weight ActiveConn InActConn

重新保存

[root@test5 opt]# ipvsadm -A -t 12.0.0.1:80 -s rr
[root@test5 opt]# ipvsadm -a -t 12.0.0.1:80 -r 192.168.168.10:80 -m
[root@test5 opt]# ipvsadm -a -t 12.0.0.1:80 -r 192.168.168.20:80 -m
[root@test5 opt]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags-> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  12.0.0.1:80 rr-> 192.168.168.10:80            Masq    1      0          0         -> 192.168.168.20:80            Masq    1      0          0         
[root@test5 opt]# systemctl restart ipvsadm
[root@test5 opt]# ipvsadm-save > /etc/sysconfig/ipvsadm
[root@test5 opt]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags-> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  12.0.0.1:80 rr-> 192.168.168.10:80            Masq    1      0          0         -> 192.168.168.20:80            Masq    1      0          0 

删除节点服务器

ipvsadm -d -r 192.168.168.20:80 -t 12.0.0.1:80
[root@test5 opt]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags-> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  12.0.0.1:80 rr-> 192.168.168.10:80            Masq    1      0          0     

开启路由转发:

vim /etc/sysctl.conf net.ipv4.ip_forward=1[root@test5 opt]# sysctl -p
net.ipv4.ip_forward = 1

简单的全部完成。

test6:

在这里插入图片描述

需要改网关和ip地址

vim /etc/sysconfig/network-scripts/ifcfg-ens33     ##更改网关指向路由TYPE=Ethernet
DEVICE=ens33
ONBOOT=yes
BOOTPROTO=static
IPADDR=12.0.0.10
NETMASK=255.255.255.0
GATEWAY=12.0.0.1
DNS1=218.2.135.1
DNS2=221.131.143.69 

在这里插入图片描述

外网到内网–12.0.0.10-----12.0.0.1------192.168.168.10

net.ipv4.ip_forward=1,可以进行转发

内网到外网192.168.168.10-----12.0.0.1-------12.0.0.10

做地址转换进行访问

3.2、wrr加权算法

第二个,删除rr算法,

ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags-> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  12.0.0.1:80 rr-> 192.168.168.10:80            Masq    1      0          0         -> 192.168.168.20:80            Masq    1      0          0         
[root@test5 opt]# ipvsadm -D -t 12.0.0.1:80
[root@test5 opt]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags-> RemoteAddress:Port           Forward Weight ActiveConn InActConn

添加wrr权重算法

[root@test5 opt]# ipvsadm -A -t 12.0.0.1:80 -s wrr
[root@test5 opt]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags-> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  12.0.0.1:80 wrr
[root@test5 opt]# ipvsadm -a -t 12.0.0.1:80 -r 192.168.168.10:80 -m -w 2
[root@test5 opt]# ipvsadm -a -t 12.0.0.1:80 -r 192.168.168.20:80 -m -w 2
[root@test5 opt]# ipvsadm -d -r 192.168.168.20:80 -t 12.0.0.1:80 
[root@test5 opt]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags-> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  12.0.0.1:80 wrr-> 192.168.168.10:80            Masq    2      0          0         
[root@test5 opt]# ipvsadm -a -t 12.0.0.1:80 -r 192.168.168.20:80 -m -w 1
[root@test5 opt]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags-> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  12.0.0.1:80 wrr-> 192.168.168.10:80            Masq    2      0          0         -> 192.168.168.20:80            Masq    1      0          0    

测试结果
在这里插入图片描述

3.3、设置wlc最小连接数加权算法

[root@test5 opt]# ipvsadm -D -t 12.0.0.1:80
[root@test5 opt]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags-> RemoteAddress:Port           Forward Weight ActiveConn InActConn
[root@test5 opt]# ipvsadm -A -t 12.0.0.1:80 -s wlc
[root@test5 opt]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags-> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  12.0.0.1:80 wlc
[root@test5 opt]# ipvsadm -a -t 12.0.0.1:80 -r 192.168.168.10:80 -m -w 2
[root@test5 opt]# ipvsadm -a -t 12.0.0.1:80 -r 192.168.168.20:80 -m -w 1
[root@test5 opt]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags-> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  12.0.0.1:80 wlc-> 192.168.168.10:80            Masq    2      0          0         -> 192.168.168.20:80            Masq    1      0          0  

创建vip地址的时候才能指定负载均衡算法,不是在真实服务器上添加算法。

test5做地址转换:

iptables -t nat -vnL ----查看nat地址转换策略表

iptables -t nat -A POSTROUTING -s 192.168.168.0/24 -o ens36 -j SNAT --to 12.0.0.1

ipvsadm -a-t 12.0.0.1:80-r192.168.233.61:80 -m

-a 添加真实服务器

-t 指定vip地址

3.4、增加理解

在探讨外网访问内网与内网访问外网时,是否需要开启转发功能或地址转换,我们首先要明确几个基本概念和它们在网络通信中的作用。### 外网访问内网,开启转发功能,不需要地址转换当外网需要访问内网时,通常涉及到的是网络访问控制和路由策略。在某些情况下,如使用VPN(虚拟私人网络)或端口转发等技术,可以实现外网直接访问内网资源,而无需进行地址转换。这是因为VPN等技术可以在不暴露内网实际IP地址的情况下,为外网用户提供一条安全的通道来访问内网资源。同样,端口转发可以将外网对特定端口的访问请求转发到内网中的特定设备或服务上,而无需改变IP地址。### 内网访问外网,为什么需要地址转换1. 内网与公网的隔离:- 内网通常是指被NAT(网络地址转换)隔离起来的私有地址空间,这些地址在Internet上是不可见的,也无法被直接路由。- 公网则是指全球互联网上分配的全局IP地址空间,任何设备只要具有公网IP地址,就可以被Internet上的其他设备访问。
2. IP地址的稀缺性:- 由于IPv4地址的稀缺性,不可能为每个内网设备分配一个独立的公网IP地址。因此,需要通过NAT技术将内网设备的私有IP地址转换为公网IP地址,以实现与外部网络的通信。
3. 安全性和隐私性:- NAT技术还可以在一定程度上提供安全性和隐私保护。通过隐藏内网设备的真实IP地址,可以防止外部网络对内网设备的直接攻击和扫描。
4. 通信的必要性:- 内网中的设备,如企业内部的服务器或终端用户,有时需要访问外部网络或互联网上的资源。为了实现这种访问,必须进行地址转换,以便将内网设备的私有IP地址转换为公网IP地址,从而通过Internet进行通信。综上所述,内网访问外网需要地址转换的原因主要是由于内网与公网的隔离、IP地址的稀缺性、安全性需求以及通信的必要性。NAT技术通过在内网出口设备上部署,实现了内网设备私有IP地址到公网IP地址的转换,从而解决了内网设备访问外部网络的问题。

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

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

相关文章

资讯类app怎么应对DDOS攻击

资讯类app怎么应对DDOS攻击?在数字化时代,资讯类App作为信息传播的重要载体,其稳定运行直接关系到用户的信任与满意度。日益猖獗的DDoS攻击成为了这类应用不可忽视的威胁。为了有效抵御这一挑战,业界涌现出了多种创新的防护方案&a…

基于cmake为项目自动获取git分支tag的版本号和commitid

目录 1. 引言2. 实现过程2.1 工程目录规划2.2 c程序文件2.3 CMakeLists.txt2.4 GitVersion.cmake文件2.5 BuildNumber.cmake文件1. 引言 在项目构建的时候,我们经常会希望能够将git提交的分支信息和提交号(commitid)以及当前版本发布的tag信息作为版本号自动构建到程序里面,以…

留学生的作业形式有哪些???

作业是在海外求学中不可避免的一部分,在国外留学,课程种类丰富多样,每一门课程都有其独特的学习要求和作业形式。课业压力很大,不仅要应对各项quiz,日常各类作业也丝毫不能松懈。无论是文学、艺术,还是理工…

【JavaScript脚本宇宙】实时协同编辑:JavaScript 库和框架全面解析

实时协同编辑:探秘JavaScript实时协同编辑利器## 前言 在当今互联网时代,实时协同编辑成为了许多应用程序的重要功能之一。无论是团队协作办公软件,还是在线教育平台,都需要实现多人同时编辑文档的功能。为了满足这一需求&#x…

自建搜索引擎-基于美丽云

Meilisearch 是一个搜索引擎,主程序完全开源,除了使用官方提供的美丽云服务(收费)进行对接之外,还可以通过自建搜索引擎来实现完全独立的搜索服务。 由于成本问题,本博客采用自建的方式,本文就…

通过git将文件push到github 远程仓库

1.先git clone 代码地址 git clone htttp://github.com/用户名/test.git 2. 添加文件 例如:touch 1.txt 3.将文件添加到暂存区 git add 1.txt 4.提交 git commit -m "commit 1.txt" 5.与远程仓库建立关联 git remote add 远程仓库名 远程仓库…

(2024)docker-compose实战 (9)部署多项目环境(LAMP+react+vue+redis+mysql+nginx)

前言 本系列最初的想法就是搭建一个多项目的环境, 包含nginx, nodejs, php, html, redis, MongoDB, mysql.本文使用的PHP镜像为php:7.3.6-apache, 这里可以使用上一篇文章中生成好的镜像.LAMP或包含react或vue的前端项目, 本文就各写了一个, 可以按照实际需求, 自行添加多个容…

LLM 研究方向(一): LLM Prompts--p-tuning、LoRA

目录 1. prompt-tuning background 2. Prompt Tuning 模型介绍 2.1 2021 prefix-tuning 2.2 2021 P-tuning v1 2.3 2021 Parameter-efficient prompt tuning (PET) 2.4 2022 P-tuning v2 2.5 2019 Adapter ​2.6 2021 LoRA (Low-Rank Adaptation) 2.7 2024 DoRA (…

详解[USACO07OPEN] Cheapest Palindrome G(洛谷PP2890)(区间DP经典题)

题目 思路 考虑区间DP。 设dp[i][j]为从i到j这段区间被修正为回文串的最小花费 c[cc][1]为添加字符cc的花费 c[cc][2]为删去字符cc的花费 s为题目给出的字符串。 用[i 1,j]区间转移:这种转移相当于在[i1,j]区间的左边加入一个字符,让[i,j]变为回文的方…

SQL 游标

关系数据库中的操作会对整个行集起作用。 例如,由 SELECT 语句返回的行集包括满足该语句的 WHERE 子句中条件的所有行。 这种由语句返回的完整行集称为结果集。 应用程序,特别是交互式联机应用程序,并不总能将整个结果集作为一个单元来有效地…

安装Go语言常用工具

好的,这里是常用的Go工具,包括下载地址、在线安装指令和离线安装步骤。 1. gopls (Go language server) 功能: 提供代码补全、跳转定义、文档提示等IDE功能。 下载地址: golang.org/x/tools/gopls 在线安装命令 : sh 复制代码 go install golang.org/…

云仓适合什么商家?

1、电商平台和网店: 对于拥有大量在线订单但没有自建仓储和物流能力的小型和中型电商企业,云仓可以在成本和效率上提供显著优势,帮助快速处理订单并缩短配送时间。 —————————————————————————————————— …

根据关键词query获取google_img(api方式)

文章目录 说明代码第一部分:链接保存为Json第二部分:链接转换为img 说明 根据关键词query获取google_img USERNAME “xxx” PASSWORD “xxx” 官网申请。 代码 首先获取图片链接,保存为json之后下载。 第一部分:链接保存为…

.net 8 使用 quic 协议通讯

debian环境安装 quic支持 # 1. 添加unstable仓库(如果您使用的是Debian的不稳定分支) sudo apt install apt-transport-https ca-certificates sudo wget -O /etc/apt/trusted.gpg.d/microsoft.gpg https://packages.microsoft.com/keys/microsoft.asc …

【独家揭秘】视频号矩阵系统火爆上线,一键式多平台管理,你的内容营销神器!

在信息爆炸的时代,内容创作者们面临着前所未有的挑战与机遇。如何让自己的内容在众多平台中脱颖而出,快速传播并吸引大量观众,成为了每个创作者关注的焦点。近日,一款名为“迅狐视频号矩阵系统”的神器震撼来袭,它以其…

UV胶,它是否有毒?如同那些隐藏在黑暗中的危险之物?

UV胶,它是否有毒?如同那些隐藏在黑暗中的危险之物? 关于uv胶的毒性问题,或许我们可以这样深入探讨。UV胶,如同一位戴着神秘面纱的访客,在我们的生活中悄然出现,却带着诸多疑问。那么&#xff0…

二维码生成需知:名片二维码尺寸多少合适?电子名片二维码制作方法?

随着数字化时代的到来,二维码在各个领域的应用越来越广泛,名片作为商业交流的重要工具之一,也开始逐渐融入二维码的元素。通过在名片上添加二维码,我们可以轻松实现信息的快速传递和分享。然而,名片二维码的尺寸选择成…

Monorepo仓库管理策略之 Lerna

这里写目录标题 前言:一、简介二、新建项目使用安装生成结构 三、复用现有项目执行命令查看包 四、配置package相互引用导入现有的包 五、发布包确定项目版本发布项目添加项目到到git发布包到NPM包发布出错解决方案 五、实例代码 前言: 将大型代码仓库分…

Python 与扣子 API的链接

当 Python 与各种 API 进行链接时,更是能碰撞出无数精彩的火花,为我们的开发工作带来极大的便利和创新。今天,咱们就来聊聊 Python 与扣子 API 的链接那些事儿。 扣子 API 作为一种新兴的技术接口,为我们提供了丰富的数据和功能。…

文心一言的流式接口数据进行处理 增加属性

需求:需要对文心一言的流式接口数据进行处理 增加属性 return ResponseEntity.ok().header("Access-Control-Allow-Origin", "*").contentType(org.springframework.http.MediaType.TEXT_EVENT_STREAM).cacheControl(org.springframework.http…