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-ens33

TYPE=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-ens36

TYPE=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.html

this 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.html

this 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地址的转换,从而解决了内网设备访问外部网络的问题。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

AI究竟是在帮助开发者还是取代他们?来看大佬的观点你就明白了

AI(人工智能)在现代社会中扮演着越来越重要的角色,其在软件开发领域的应用也日益广泛。关于AI是在帮助开发者还是取代他们,V 哥个人认为,一半一半吧,为什么这么说,先不用噴,我们需要…

智驭未来:人工智能与目标检测的深度交融

在科技日新月异的今天,人工智能(AI)如同一股不可阻挡的浪潮,正以前所未有的速度重塑着我们的世界。在众多AI应用领域中,目标检测以其独特的魅力和广泛的应用前景,成为了连接现实与智能世界的桥梁。本文旨在…

WPF引入多个控件库使用

目的 设计开发时有的控件库的一部分符合我们想要的UI样式,另一部分来自另一个控件库,想把两种库的样式做一个整合在同一个控件资源上。单纯通过引用的方式会导致原有样式被覆盖。这里通过设置全局样式的方式来实现。 1.安装控件库nuget包:H…

Python 传递参数和返回值

Python是一种功能强大的编程语言,它以其简洁和易用性而广受欢迎。在Python编程中,参数传递和返回值是函数调用中两个非常重要的概念。理解这些概念对于编写高效且可维护的代码至关重要。 一、参数传递 在Python中,函数参数可以通过以下几种…

css文字自适应宽度动态出现省略号...

前言 在列表排行榜中通常会出现的一个需求:从左到右依次是名次、头像、昵称、徽标、分数。徽标可能会有多个或者没有徽标,徽标长度是动态的,昵称如果过长要随着有无徽标进行动态截断出现省略号。如下图布局所示(花里胡哨的底色是…

Java版Flink使用指南——分流导出

大纲 新建工程编码Pom.xml自定义无界流分流 测试工程代码 在之前的案例中,我们一直使用的是单个Sink来做数据的输出。实际上,Flink是支持多个输出流的。本文我们就来讲解如何在Flink数据输出时做分流处理。 我们将基于《Java版Flink使用指南——自定义无…

人工智能(AI)在医疗行业的应用前景

人工智能(AI)在医疗行业的应用前景十分广阔,有望彻底改变医疗行业的各个方面。需要注意的是,AI在医疗领域的应用也存在一些潜在的风险和挑战,例如算法偏见、数据隐私和安全、伦理问题等。在开发和应用AI医疗产品时&…

苹果手机短信功能停用怎么恢复?一分钟快速解决!

在使用苹果手机的过程中,可能会遇到短信功能突然停用的情况,这可能导致你无法发送或接收短信,影响日常通讯。这个问题可能由多种原因引起,如网络设置、软件冲突或运营商问题。 短信功能停用怎么恢复?不必担心&#xf…

【Superset】dashboard 自定义URL

URL设置 在发布仪表盘(dashboard)后,可以通过修改看板属性中的SLUG等,生成url 举例: http://localhost:8090/superset/dashboard/test/ 参数设置 以下 URL 参数可用于修改仪表板的呈现方式:此处参考了官…

django农产品销售系统-计算机毕业设计源码65418

基于HTML5的农产品销售系统的设计与实现 摘 要 本文针对农产品销售系统存在的传统销售方式效率低下、信息交流困难等问题,基于HTML5进行了系统的设计与实现。首先,通过对当前农产品销售系统的现状和问题进行分析,提出了基于HTML5的系统设计方…

蓝牙人员定位精准吗?是否会对人体有伤害?

不知道大家现在使用的蓝牙人员定位系统都是什么样的呢?其实就出行而言,使用GPS定位也就是足够了的,而且目前的定位相对也比较精准了,效果还是很不错的。但是如果说是室内定位,很显然常规的定位系统是无法满足使用需求的…

C语言 结构体和共用体——结构体类型与结构体变量

目录 问题的提出 数组的解决方法 我们希望的内存分配图 如何声明一个结构体类型? 如何定义一个结构体变量? 用typedef给数据类型定义一个别名 如何定义一个结构体变量? 结构体变量的初始化 问题的提出 数组的解决方法 我们希望的内存…

PostgREST API 安装及基础使用

PostgREST是一个独立的Web服务器,它将PostgreSQL数据库转换为RESTful API。它提供基于基础数据库的结构自定义的API。 PostgREST安装 首先访问Releases PostgREST/postgrest (github.com),根据安装平台选择下载的源码。比如我现在的设备是Mac但是我的…

man手册的安装和使用

man手册 - HQ 文章目录 man手册 - HQ[toc]man手册的使用Linux man中文手册安装man中文手册通过安装包安装通过apt安装 配置man中文手册README使用说明配置步骤 man手册的使用 首先man分为八个目录,每个目录用一个数字表示 1.可执行程序2.系统调用3.库函数4.特殊文…

身份证二要素API,实名认证领域的创新之选

身份证二要素API,是一种实名认证领域的创新解决方案。通过输入姓名和身份证号,该API可以通过官方权威渠道进行核查,实时校验二要素的一致性,并返回生日、性别、籍贯等详细信息。这篇博文将详细介绍身份证二要素API的使用方法&…

c语言数据结构--链表

实验内容: 编程实现链表下教材第二章定义的线性表的基本操作,最好用菜单形式对应各个操作,使其编程一个完整的小软件。 实验步骤: 1.按照实验要求编写代码,构造链表,初始化链表 2.再插入元素1 2 3 3.分别…

书生大模型实战营(暑假场)-入门岛-第一关

书生大模型实战营暑假场重磅开启!,这场学习路线看起来很好玩呀,闯关学习既能学到知识又有免费算力可得,太良心啦。感兴趣的小伙伴赶快一起报名学习吧!!! 关卡任务 好的,我们废话不多…

如何在忘记密码的情况下重置Realme手机?

欢迎阅读我们关于如何在有或没有密码的情况下重置Realme手机的综合指南。无论您是忘记了密码,还是只是需要将设备恢复到出厂设置,我们都会为您提供所需的专业提示和技术专长。 发现分步说明、专家提示和行之有效的方法,轻松重新控制您的 Rea…

python库(9):prettytable库快速实现ASCII表格

下面介绍一个快速制作ASCII表格库——prettytable,可以方便地制作简单表格。 1 安装prettytable pip install -i https://pypi.tuna.tsinghua.edu.cn/simple prettytable 结果如下: 2 代码实例 from prettytable import PrettyTable table PrettyTa…

How do I format markdown chatgpt response in tkinter frame python?

题意:怎样在Tkinter框架中使用Python来格式化Markdown格式的ChatGPT响应? 问题背景: Chatgpt sometimes responds in markdown language. Sometimes the respond contains ** ** which means the text in between should be bold and ### te…