sqlserver alwayson部署文档手册

1、ALWAYSON概述

详细介绍参照官网详细文档,我就不在这里赘述了:

https://learn.microsoft.com/zh-cn/sql/database-engine/availability-groups/windows/overview-of-always-on-availability-groups-sql-server?view=sql-server-ver16

下图显示的是一个包含一个主要副本和四个次要副本的可用性组。支持最多八个次要副本,包括一个主要副本和四个同步提交次要副本。

图片

2、安装部署过程记录

为了部署方便,我以接下来的部署中,关闭了所有服务器的windows主机防火墙。

开始菜单—>管理工具—>高级安全 Windows 防火墙。右键属性。

图片

关闭包括“域配置文件”、“专用置文件”、“公用置文件”中的防火墙设置。

图片

图片

图片

如果是安全要求较高的生产环境,注意打开防火墙配置,并配置打开域间通通讯策略,具体开放端口参照微软官方文档:

https://learn.microsoft.com/zh-cn/previous-versions/windows/it-pro/windows-server-2008-R2-and-2008/dd772723(v=ws.10)?redirectedfrom=MSDN

准备基础环境

1、操作系统Windows均为Windows server 2012R2标准版

2、数据库版本为sql server 2016 企业版本

3、各节点基本 配置如下表:

AD域

控制器/DNS

SQL节点1

SQL节点2

SQL节点3

硬件配置

4VCPU

8G内存

80G磁盘

1块网卡

4VCPU

16G内存

300G磁盘

2块网卡

4VCPU

16G内存

300G磁盘

2块网卡

4VCPU

16G内存

300G磁盘

2块网卡

主机IP

192.168.0.111

192.168.0.112

1.1.1.112

192.168.0.113

1.1.1.113

192.168.0.114

1.1.1.114

主机网关

192.168.0.1

192.168.0.1

192.168.0.1

192.168.0.1

主机DNS

192.168.0.111

192.168.0.111

192.168.0.111

192.168.0.111

CLUSER-VIP

192.168.0.200

Sql 监听器IP

192.168.0.202

4、分别到每台主机上执行whoadmi /user确认SID值。

图片

图片

图片

图片

注意4台主机的用户SID不能一样(虚拟化中克隆主机SID可能相同),因为要加域环境,如果都是克隆的同一台虚拟机需要手动sysprep修改下SID,修改方法进入c:\windows\system32\sysprep目录下运行sysprep.exe修改一下(需要重启主机)。

部署流程图

图片

2.1、部署域控制器

在192.168.0.111主机运行服务器管理器,选择本地服务器、管理、添加角色和功能

图片

图片

图片

图片

图片

图片

图片

图片

安装完成后,点击下图“将此服务器提升为域控制器”

图片

图片

图片

图片

图片

图片

图片

图片

安装完毕后,主机会自动重启。

之后登录需要使用administrator@sqlnet.com做为用户名

2.2、SQL节点主机加域

配置私有IP的做为心跳网络的网卡,取消DNS注册,并禁用netbios

图片

图片

测评ping域名sqlnet是否可以正常解析

图片

可以的话,进行加域

图片

图片

输入192.168.0.111的主机域管理员密码进行验证

加域成功后,需要重启服务器。

图片

重复以上操作,分别把3个节点都加入到域环境。

2.3、安装SQLserver2016

说明一下,SQLserver2016的安装DVD包里没有管理工具,需要单独下载安装。

https://learn.microsoft.com/zh-cn/sql/ssms/download-sql-server-management-studio-ssms?redirectedfrom=MSDN&view=sql-server-ver16

另外需要.net安装包

https://support.microsoft.com/zh-cn/topic/%E9%80%82%E7%94%A8%E4%BA%8E-windows-%E7%9A%84-microsoft-net-framework-4-8-%E8%84%B1%E6%9C%BA%E5%AE%89%E8%A3%85%E7%A8%8B%E5%BA%8F-9d23f658-3b97-68ab-d013-aa3c3e7495e0

图片

数据库服务器安装部分内容如下:

使用域管理员administrator@sqlnet.com登录服务器,进行安装

图片

图片

图片

图片

图片

图片

图片

图片

图片

图片

图片

图片

图片

 2.4、安装故障转移集群

安装需要在各个节点进行安装,域控服务器不需要安装。

图片

图片

图片

图片

图片

图片

图片

图片

2.5、配置故障转移集群

打开windows窗口管理工具故障转移群集管理器

图片

图片

输入3个节点名称

图片

图片

图片

测试无错误即可,对于相关的报警可以行查看。

图片

图片

图片

图片

图片

查看sql01节点己启动CLUSTERVIP

图片

继续为集群添加仲裁见证,这里采用共享文件夹的方式来进行,共享文件夹创建在域控制器主机中。

在192.168.0.111主机C盘创建votedisk目录,右键属性

图片

图片

图片

在192.168.0.112 SQL01主机上,打开故障转移集群,右键集群,更多操作,配置集群仲裁设置

图片

图片

图片

图片

图片

图片

图片

图片

图片

图片

2.6、打开sqlserver alwayson

运行SQL配置管理器

图片

图片

勾选启动alwayson

图片

图片

之后重启sqlserver服务生效。依次修改其它节点。

修改之后连上各个数据库节点,右键属性,查看HADR是否为true。

图片

2.7、配置sqlserver alwayson

在sql01主机上创建备份目录,并共享该目录,对现有数据库进行备份。

图片

任务-备份

图片

先删除默认的备份位置,再添加

图片

图片

图片

图片

图片

新建可用性组向导

图片

图片

图片

图片

图片

图片

图片

图片

图片

图片

图片

图片

图片

图片

添加监听器

图片

图片

图片

配置完成后查看sql01节点增加监听IP

图片

图片

图片

图片

图片

3、FAQ相关

3.1、关于监听器不能实现自动读写负载均衡

监听器读写默认只连接到主副本,

要想实现读写分离,需要配置客户端连接串时写applicatiopn=readonly

同时配置只读路由,监听器会根据配置转发到只读副本

官方文档描述:

https://learn.microsoft.com/zh-cn/sql/database-engine/availability-groups/windows/about-client-connection-access-to-availability-replicas-sql-server?view=sql-server-ver16

以下摘取自原文:

默认情况下,可用性组侦听器将传入连接定向到主副本。不过,您可以对可用性组进行配置以便支持只读路由,这使其可用性组侦听器能够将读意向应用程序的连接请求重定向到可读取的辅助副本。

在故障转移期间,辅助副本转换为主角色,以前的主副本转换为辅助角色。在故障转移过程中,所有到主副本或辅助副本的客户端连接都将终止。故障转移之后,在将客户端重新连接到可用性组侦听器时,侦听器将客户端重新连接到新的主副本,只有读意向连接请求除外。如果在承载新的主副本以及至少一个可读取辅助副本的客户端和服务器实例上配置了只读路由,则读意向连接请求将被重新路由到支持客户端要求的连接访问类型的辅助副本。若要确保在故障转移之后获得良好的客户端体验,务必为每个可用性副本的辅助角色和主角色配置连接访问。

连接访问配置如何影响客户端连接:

副本的连接访问设置决定连接尝试是失败还是成功。下表简要说明对于每个连接访问设置,给定连接尝试是失败还是成功。

副本角色

副本上支持的连接访问

连接意向

连接尝试结果

辅助副本

全部

指定了读意向、读写意向或未指定连接意向

成功

辅助副本

无(这是默认辅助行为。)

指定了读意向、读写意向或未指定连接意向

失败

辅助副本

仅限读意向

读意向

成功

辅助副本

仅限读意向

指定了读写意向或未指定连接意向

失败

主要

所有(这是默认主要行为。)

指定了只读意向、读写意向或未指定连接意向

成功

主要

读写

仅限读意向

失败

主要

读写

指定了读写意向或未指定连接意向

成功

针对客户端连接字符串的要求和建议

对于要使用只读路由的客户端应用程序,其连接字符串必须满足以下要求:

  • 使用 TCP 协议。

  • 将应用程序意向特性/属性设置为只读。

  • 引用配置为支持只读路由的可用性组的侦听器。

  • 引用该可用性组中的数据库。

此外,建议连接字符串启用多子网故障转移,这将支持每个子网上的每个副本的并行客户端线程。这将最大程度地减小故障转移后的客户端重新连接时间。

连接字符串的语法取决于应用程序正在使用的 SQL Server 提供程序。以下用于 SQL Server 的 .NET Framework 数据访问接口 4.0.2 的示例连接字符串说明了使用只读路由时所需的和建议的连接字符串的部分。

Server=tcp:MyAgListener,1433;Database=Db1;IntegratedSecurity=SSPI;ApplicationIntent=ReadOnly;MultiSubnetFailover=True

3.2、关于监听器读负载均衡支持

官方说法是默认SQL2016以前的版本只读第1条只读路由

SQL2016以后版本可以在括号内写多个路由,自动实现读负载均衡

官方文档描述:

https://learn.microsoft.com/zh-cn/sql/database-engine/availability-groups/windows/configure-read-only-routing-for-an-availability-group-sql-server?view=sql-server-ver16

以下摘取自原文:

从 SQL Server 2016 (13.x)开始,可以在一组只读副本间配置负载平衡。以前,只读路由始终都将流量定向到路由列表中第一个可用的副本。若要利用此功能,请使用一个级别的嵌套括号将 CREATE AVAILABILITY GROUP 或 ALTER AVAILABILITY GROUP 命令中的 READ_ONLY_ROUTING_LIST 服务器实例括起来。

例如,以下路由列表在两个只读副本 Server1 和 Server2之间的读意向连接请求实现负载平衡。括住这些服务器的嵌套圆括号可以标识已实现负载平衡的组。如果该组中没有副本,则它将继续尝试按顺序连接到只读路由列表中的其他副本:Server3 和 Server4。

READ_ONLY_ROUTING_LIST = (('Server1','Server2'), 'Server3', 'Server4')

请注意,路由列表中的每项本身也可以是一组负载平衡的只读副本。下面的示例演示这一操作。

READ_ONLY_ROUTING_LIST = (('Server1','Server2'), ('Server3', 'Server4', 'Server5'), 'Server6')

示例:

以下示例将修改现有可用性组 AG1 的两个可用性副本以支持只读路由(如果其中一个副本拥有主角色)。为了标识承载可用性副本的服务器实例,此示例指定了实例名称 COMPUTER01 和 COMPUTER02。

ALTER AVAILABILITY GROUP [AG1]MODIFY REPLICA ONN'COMPUTER01' WITH(SECONDARY_ROLE (ALLOW_CONNECTIONS = READ_ONLY));ALTER AVAILABILITY GROUP [AG1]MODIFY REPLICA ONN'COMPUTER01' WITH(SECONDARY_ROLE (READ_ONLY_ROUTING_URL = N'TCP://COMPUTER01.contoso.com:1433'));ALTER AVAILABILITY GROUP [AG1]MODIFY REPLICA ONN'COMPUTER02' WITH(SECONDARY_ROLE (ALLOW_CONNECTIONS = READ_ONLY));ALTER AVAILABILITY GROUP [AG1]MODIFY REPLICA ONN'COMPUTER02' WITH(SECONDARY_ROLE (READ_ONLY_ROUTING_URL = N'TCP://COMPUTER02.contoso.com:1433'));ALTER AVAILABILITY GROUP [AG1]MODIFY REPLICA ONN'COMPUTER01' WITH(PRIMARY_ROLE (READ_ONLY_ROUTING_LIST=('COMPUTER02','COMPUTER01')));ALTER AVAILABILITY GROUP [AG1]MODIFY REPLICA ONN'COMPUTER02' WITH(PRIMARY_ROLE (READ_ONLY_ROUTING_LIST=('COMPUTER01','COMPUTER02')));GO

3.3、关于监听器相关参数配置实验证录

①配置A副本的只读路由属性(ReadOnly代表‘只读意向’)

ALTER AVAILABILITY GROUP [testAG]MODIFY REPLICA ON N'WIN-14VNU7CGQO1' WITH (SECONDARY_ROLE (ALLOW_CONNECTIONS = READ_ONLY));

②配置A副本的只读路由URL

ALTER AVAILABILITY GROUP [testAG]MODIFY REPLICA ON N'WIN-14VNU7CGQO1' WITH (SECONDARY_ROLE (READ_ONLY_ROUTING_URL = N'tcp://WIN-14VNU7CGQO1.fnst.com:1433'));

③配置B副本的只读路由属性

ALTER AVAILABILITY GROUP [testAG]MODIFY REPLICA ON N'WIN-14VNU7CGQO2' WITH (SECONDARY_ROLE (ALLOW_CONNECTIONS = READ_ONLY));

④配置B副本的只读路由URL

ALTER AVAILABILITY GROUP [testAG]MODIFY REPLICA ON N'WIN-14VNU7CGQO2' WITH (SECONDARY_ROLE (READ_ONLY_ROUTING_URL = N'tcp://WIN-14VNU7CGQO2.fnst.com:1433'));

⑤配置A副本作为主副本时候的只读路由表

ALTER AVAILABILITY GROUP [testAG]MODIFY REPLICA ON N'WIN-14VNU7CGQO1' WITH (PRIMARY_ROLE (READ_ONLY_ROUTING_LIST=('WIN-14VNU7CGQO2','WIN-14VNU7CGQO1')));

⑥配置B副本作为主副本时候的只读路由表

ALTER AVAILABILITY GROUP [testAG]MODIFY REPLICA ON N'WIN-14VNU7CGQO2' WITH (PRIMARY_ROLE (READ_ONLY_ROUTING_LIST=('WIN-14VNU7CGQO1','WIN-14VNU7CGQO2')));

 配置完成后,使用如下SQL查看路由表 

SELECT * FROM sys.availability_read_only_routing_lists 

图片

确认一下应该是下面的形式 :

A    B

A    A

B    A

B    B

为什么这么配置请分析如下过程
1.正常运行时候,A作为主副本,B作为辅助副本,客户端连接字符串指定数据源是侦听器地址
2.此时发送只读请求
3.侦听器收到只读数据请求,有主副本A来处理,主副本A发现是ReadOnly,就查询路由表,发现第一条符合,就把只读请求交给辅助副本B来处理
4.此时主副本A失效了,那么由AlwaysOn的高可用可知,会让辅助B作为了主副本,等原来的主副本A恢复之后,让A成为新的辅助副本(当然这些对客户端是透明的)
5.副本A恢复之后,再发送一条只读请求
6.此时侦听器使用主副本B来处理这个请求,如果不像上面的设置方法,就找不到B到A的路由,也就不能实现所谓的高可用

经过上面的12次测试连接监听器IP,进行一下总结:

No.

主角色中的连接

可读辅助角色

客户端行为

读请求

写请求

1

允许所有

不设置ReadOnly

主副本

主副本

2

允许所有

仅读意向

不设置ReadOnly

主副本

主副本

3

允许所有

不设置ReadOnly

主副本

主副本

4

允许所有

设置ReadOnly

主副本

主副本

5

允许所有

仅读意向

设置ReadOnly

辅助副本

异常

6

允许所有

设置ReadOnly

辅助副本

异常

7

允许读写

不设置ReadOnly

主副本

主副本

8

允许读写

仅读意向

不设置ReadOnly

主副本

主副本

9

允许读写

不设置ReadOnly

主副本

主副本

10

允许读写

设置ReadOnly

异常

异常

11

允许读写

仅读意向

设置ReadOnly

辅助副本

异常

12

允许读写

设置ReadOnly

辅助副本

异常

结论一:客户端配置ApplicationIntent=ReadOnly;启用只读路由功能,所有的请求先交给辅助副本来处理

结论二:客户端不配置ApplicationIntent=ReadOnly;那么读和写请求处理,都是主副本进行处理的,如1、2、3、7、8、9

结论三:在4中,主副本处理只读请求先交给辅助路由,因为所有的辅助副本都是不可写的,所以再由自己来处理只读路由

    在10中,所有的辅助副本都是不可写,但是主副本又不处理ReadOnly的请求,所以就异常了

3.4、连接到 Always On 可用性组侦听器相关说明

官方链接:

https://learn.microsoft.com/zh-cn/sql/database-engine/availability-groups/windows/listeners-client-connectivity-application-failover?view=sql-server-ver16

连接到主要副本

在连接字符串中指定可用性组侦听器 DNS 名称,可连接到主要副本以进行读写访问。

例如,若要通过侦听器连接到 SQL Server Management Studio 中的主要副本,请在服务器名称字段中输入侦听器 DNS 名称:

图片

在故障转移期间,当主要副本变化时,与侦听器的现有连接将会断开,新的连接将路由到新的主要副本。

下面是 ADO.NET 提供程序 (System.Data.SqlClient) 的基本连接字符串的一个示例:

Server=tcp: AGListener,1433;Database=MyDB;Integrated Security=SSPI

可以通过运行以下 Transact-SQL (T-SQL) 命令来验证当前通过侦听器连接到的副本:

SELECT @@SERVERNAME

例如,SQLVM1 是主要副本时:

图片

仍可使用主要副本或次要副本的实例名称(而不使用可用性组侦听器)直接连接到 SQL Server 的实例。但是,这样就无法享受将新连接自动路由到当前新主要副本的好处。此外,还无法享受只读路由的好处,即让用 read-intent 指定的连接自动路由到可读次要副本。

连接到只读副本

“只读路由”是指将传入的侦听器连接自动路由到配置为允许只读工作负荷的可读次要副本 。

如果满足以下条件,则连接将自动路由到只读副本:

至少一个次要副本设置为只读访问,并且每个只读次要副本和主要副本都配置为支持只读路由。

连接字符串引用可用性组中涉及的数据库。替代方法是连接中使用的登录帐户将该数据库配置为其默认数据库。有关详细信息,请参阅此有关如何使用算法处理只读路由的文章。

连接字符串引用某一可用性组侦听器,并且将传入连接的应用程序意向设置为只读(例如,使用 ODBC 或 OLEDB 连接字符串或连接特性或属性中的 Application Intent=ReadOnly 关键字)。

在登录期间,应用程序意向属性存储在客户端的会话中,然后 SQL Server 实例将处理该意向,并按照可用性组的配置和辅助副本中目标数据库的当前读写状态来确定执行什么操作。

例如,若要使用 SQL Server Management Studio 连接到只读副本,请选择“连接到服务器”对话框上的“选项”,选择“附加连接参数”选项卡,然后在文本框中指定 ApplicationIntent=ReadOnly :

图片

针对指定只读应用程序意向的 ADO.NET 访问接口 (System.Data.SqlClient) 的连接字符串的一个示例:

Server=tcp:AGListener;Database=AdventureWorks;Integrated Security=SSPI;ApplicationIntent=ReadOnly

有关详细信息,请参阅配置对可用性副本的只读访问 (SQL Server)

3.5、只读路由实测

图片

图片

图片

图片

附录

参考链接

https://learn.microsoft.com/zh-cn/windows-server/failover-clustering/file-share-witness

https://learn.microsoft.com/zh-cn/sql/database-engine/availability-groups/windows/prereqs-restrictions-recommendations-always-on-availability?view=sql-server-ver16

https://blog.csdn.net/cxu123321/article/details/108714305

https://blog.51cto.com/jimshu/1420526

https://www.cnblogs.com/DannielZhang/p/6070611.html

https://blog.csdn.net/mu_sang/article/details/129820539#:~:text=SQL%20Server%20Always%20On%E7%89%B9%E6%80%A7%E6%94%AF%E6%8C%81%20%E8%AF%BB%E5%86%99%E5%88%86%E7%A6%BB%20%EF%BC%8C%E8%BF%99%E6%98%AF%E4%B8%80%E7%A7%8D%20%E6%95%B0%E6%8D%AE%E5%BA%93%20%E8%B4%9F%E8%BD%BD%E5%88%86%E6%8B%85%E7%9A%84%E6%96%B9%E5%BC%8F%EF%BC%8C%E8%83%BD%E5%A4%9F%E4%BC%98%E5%8C%96,%E8%AF%BB%E5%86%99%E5%88%86%E7%A6%BB%20%E5%B0%86%E8%AF%BB%E6%93%8D%E4%BD%9C%E5%92%8C%E5%86%99%E6%93%8D%E4%BD%9C%E5%88%86%E5%88%AB%E5%88%86%E9%85%8D%E5%88%B0%E4%B8%8D%E5%90%8C%E7%9A%84%20%E6%95%B0%E6%8D%AE%E5%BA%93%E6%9C%8D%E5%8A%A1%E5%99%A8%20%E4%B8%8A%EF%BC%8C%E4%BB%8E%E8%80%8C%E9%99%8D%E4%BD%8E%E4%BA%86%E6%AF%8F%E4%B8%AA%20%E6%95%B0%E6%8D%AE%E5%BA%93%E6%9C%8D%E5%8A%A1%E5%99%A8%20%E7%9A%84%E8%B4%9F%E8%BD%BD%E5%92%8C%E5%8E%8B%E5%8A%9B%EF%BC%8C%E6%8F%90%E9%AB%98%E4%BA%86%E6%95%B4%E4%B8%AA%20%E6%95%B0%E6%8D%AE%E5%BA%93%20%E7%B3%BB%E7%BB%9F%E7%9A%84%E5%93%8D%E5%BA%94%E9%80%9F%E5%BA%A6%E3%80%82

 

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

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

相关文章

matlab使用jdbc连接数据库

1、打包jdbc 2、在matlab安装目录下,进去toolbox目录下,新建一个对应放jdbc包的文件夹,加入放入的是mysql的jdbc驱动包,就新建一个mysql目录,将驱动包放入mysql目录下 3、在toolbox目录下,找到local目录&a…

Mac安装Homebrew+MySQL+Redis+Nginx+Tomcat等

Mac安装HomebrewMySQLRedisNginxTomcat等 文章目录 Mac安装HomebrewMySQLRedisNginxTomcat等一、Mac安装Mysql 8①:下载②:安装③:配置环境变量④:外部连接测试 二、Mac安装Redis和可视化工具①:安装Redis01&#xff1…

JDK和Spring的SPI机制原理分析

目录 一、JDK 二、Spring框架介绍 三、SPI机制原理 一、JDK JDK是Java Development Kit的缩写,是Java开发工具包的意思。它是用于开发Java应用程序和运行Java程序的软件包。JDK包含了Java编译器(javac)和Java虚拟机(JVM&#…

vue中 日期选择--本日、本周、本月、本年选择器实现(基于elementui)

效果图&#xff1a; 由于项目需要图标统计展示&#xff0c;需要日期美观化选择如上图所示&#xff0c;代码如下&#xff1a; <template><div class"el-page body"><el-row><el-col class"statistic-analysis-report-style" :span&qu…

大数据 - Spark系列《三》- 加载各种数据源创建RDD

Spark系列文章&#xff1a; 大数据 - Spark系列《一》- 从Hadoop到Spark&#xff1a;大数据计算引擎的演进-CSDN博客 大数据 - Spark系列《二》- 关于Spark在Idea中的一些常用配置-CSDN博客 目录 3.1&#x1f9c0;加载文件(本地) 1. 加载本地文件路径 &#x1f32e;使用te…

kafka客户端生产者消费者kafka可视化工具(可生产和消费消息)

点击下载《kafka客户端生产者消费者kafka可视化工具&#xff08;可生产和消费消息&#xff09;》 1. 前言 因在工作中经常有用到kafka做消息的收发&#xff0c;每次调试过程中&#xff0c;经常需要查看接收的消息内容以及人为发送消息&#xff0c;从网上搜寻了一下&#xff0…

python常用pandas函数nlargest / nsmallest及其手动实现

目录 pandas库 Series和DataFrame nlargest和nsmallest 用法示例 代替方法 手动实现 模拟代码 pandas库 是Python中一个非常强大的数据处理库,提供了高效的数据分析方法和数据结构。它特别适用于处理具有关系型数据或带标签数据的情况,同时在时间序列分析方面也有着出…

银河麒麟 aarch64 Mysql环境安装

一、操作系统版本信息 组件版本操作系统Kylin V10 (SP3) /(Lance)-aarch64-Build23/20230324Kernel4.19.90-52.22.v2207.ky10.aarch64MySQLmysql-8.3.0JDK1.8.0_312 二、MySQL下载 官网下载地址&#xff1a;https://dev.mysql.com/downloads/mysql/ 三、MySQL 安装 3.1 删…

C# CAD界面-自定义工具栏(三)

运行环境 vs2022 c# cad2016 调试成功 一、引用 二、开发代码进行详细的说明 初始化与获取AutoCAD核心对象&#xff1a; Database db HostApplicationServices.WorkingDatabase;&#xff1a;这行代码获取当前工作中的AutoCAD数据库对象。在AutoCAD中&#xff0c;所有图形数…

MQ面试题整理(持续更新)

1. MQ的优缺点 优点&#xff1a;解耦&#xff0c;异步&#xff0c;削峰 缺点&#xff1a; 系统可用性降低 系统引入的外部依赖越多&#xff0c;越容易挂掉。万一 MQ 挂了&#xff0c;MQ 一挂&#xff0c;整套系统崩 溃&#xff0c;你不就完了&#xff1f;系统复杂度提高 硬生…

2024年Java面试题大全 面试题附答案详解,BTA内部面试题

基础篇 1、 Java语言有哪些特点 1、简单易学、有丰富的类库 2、面向对象&#xff08;Java最重要的特性&#xff0c;让程序耦合度更低&#xff0c;内聚性更高&#xff09; 阿里内部资料 基本类型 大小&#xff08;字节&#xff09; 默认值 封装类 6、Java自动装箱与拆箱 装箱就是…

python 时间计算器

第一个函数time_calculator可以根据用户的需求增加或减少时间。 第二个函数calculate_time_difference可以计算两个时间点之间的差异。这两个函数都是自动化测试和时间管理中非常有用的工具。 from datetime import datetime, timedeltadef time_calculator(start_date, days…