AI 时代下组织如何快速变革?如何提升全员 AI 技能?戳> 了解详情
写点什么

举重若轻,用 snowball 迁移数据库上云

  • 2019-10-10
  • 本文字数:9071 字

    阅读完需:约 30 分钟

举重若轻,用snowball迁移数据库上云

概述

随着企业上云渐渐形成“新常态”,越来越多的迁移方案和工具为大家所熟悉,但大部分的数据传输都是基于网络的,即使使用专线的解决方案,在海量数据迁移的场景下也依然可能力不从心。因此,AWS 针对这类场景推出了 AWS Snowball 服务,客户可通过物理存储设备 (绕过 Internet) 加快将海量数据传入和传出 AWS 的速度。Snowball 会通过加密和防篡改技术,保护静态数据和物理运送中的数据。您无需担心自己的数据泄露或丢失。 当然 snowball 并不是包治百病的偏方,是否使用 snowball 需要综合地考量数据量、成本、时间等因素,如果要在本地数据中心和 Amazon S3 之间传输 10 TB 以下的数据,则 Snowball 对您来说可能不是最优的选择。 本文希望通过一个使用 snowball 将 ORACLE 数据库备份传输上 AWS,进而搭建由本地 ORACLE 数据库和云端 EC2 上运行 ORACLE 数据库组成的 data guard 环境,最终通过切换完成最小停机时间数据库迁移上云的 DEMO,让读者对 snowball 的使用有一个直观的认识,大体的步骤如下:


  • 创建导入任务,申请 snowball 设备,接收 AWS Snowball 设备

  • 将 AWS Snowball 设备连接到本地网络,在工作站安装 snowball 客户端并激活设备

  • 对本地 ORACLE 数据库执行备份,将备份文件传输到 snowball

  • 寄回设备, snowball 里的备份文件自动导入 S3

  • 在 AWS EC2 上下载 S3 中的备份文件,使用备份文件搭建 data guard 环境

  • 通过切换完成最小停机窗口数据库迁移。

  • 请注意,本文中的 ORACLE 环境和您的实际环境会有差异,DEMO 中的步骤和各种参数的配置,仅供参考,当您需要完成实际迁移项目时,请和您的 DBA 团队商讨,根据实际情况进行调整。

1 环境准备

1.1 数据库准备

1.1.1 测试环境概述

身份  操作系统  数据库版本  主机名  端口  实例名主库  Linux  11.2.0.1.0  Primary  1521  orcl备库  Linux  11.2.0.1.0  Standby  1521  stby
复制代码


两台服务器网络已经调通,互相可以访问,并建立了 SSH 互信,具体步骤这里不展开。可以通过在主备库主机上分别执行 ssh <远程主机名> date 来测试

1.1.2 日志准备

1 在主库上开启归档,用以下命令检查,如果还没有开启归档,需要启动数据库到 mount,而后用 alter database archivelog; 开启归档,开启后用 Archive log list; 查看归档设置,输出如下图所示。


2 使用命令 alter database force logging; 对主库开启 force logging ,而后用 select force_logging from v$database; 查询设置结果,输出如下图所示。



3 在主库上用以下命令创建 standby logfile


alter database drop standby logfile group 4;
alter database drop standby logfile group 5;
alter database drop standby logfile group 6;
alter database drop standby logfile group 7;
alter database add standby logfile group 4 '/u01/app/oracle/oradata/orcl/stbredo04.log' size 50m;
alter database add standby logfile group 5 '/u01/app/oracle/oradata/orcl/stbredo05.log' size 50m;
alter database add standby logfile group 6 '/u01/app/oracle/oradata/orcl/stbredo06.log' size 50m;
alter database add standby logfile group 7 '/u01/app/oracle/oradata/orcl/stbredo07.log' size 50m;
复制代码


设置后用以下语句查询设置结果:


set linesize 200;
select group#,dbid,thread#,sequence#,bytes/1024/1024,archived,status from v$standby_log;
col member format a50;
select member,type from v$logfile;
复制代码

1.1.3 参数文件修改

在主库上通过 spfile 生成 pfile,并进行编辑,添加 data guard 相关的参数,在本例中,主库 unique name 是 orcl,备库 unique name 是 stby,添加参数时注意不同角色数据库的名称,尤其是 log_file_name_convert 和 db_file_name_convert 两个参数,这两个参数用来指定数据文件和 redo 文件路径的转换,譬如源的数据文件是 /u01/app/oracle/oradata/stby/system01.dbf,我们希望将这个数据文件的路径转换到 /u01/app/oracle/oradata/orcl/,那么我们的 db_file_name_convert 就要配置为 ‘/u01/app/oracle/oradata/stby/ ‘,’/u01/app/oracle/oradata/orcl/ ‘,这两个参数十分重要且容易配错,请您务必注意。 以下的参数信息仅供参考,需要您的 DBA 按照实际情况配置。


create pfile='/u01/app/oracle/product/11.2.0/dbhome_1/dbs/initorcl.ora'  from spfile;
orcl.__db_cache_size=385875968
orcl.__java_pool_size=16777216
orcl.__large_pool_size=16777216
orcl.__oracle_base='/u01/app/oracle'#ORACLE_BASE set from environment
orcl.__pga_aggregate_target=553648128
orcl.__sga_target=1040187392
orcl.__shared_io_pool_size=0
orcl.__shared_pool_size=603979776
orcl.__streams_pool_size=0
*.audit_file_dest='/u01/app/oracle/admin/orcl/adump'
*.audit_trail='db'
*.compatible='11.2.0.0.0'
*.control_files='/u01/app/oracle/oradata/orcl/control01.ctl','/u01/app/oracle/flash_recovery_area/orcl/control02.ctl'
*.db_block_size=8192
*.db_domain=''
*.db_name='orcl'
*.db_recovery_file_dest='/u01/app/oracle/flash_recovery_area'
*.db_recovery_file_dest_size=4070572032
*.diagnostic_dest='/u01/app/oracle'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=orclXDB)'
*.memory_target=1588592640
*.open_cursors=300
*.processes=150
*.remote_login_passwordfile='EXCLUSIVE'
*.undo_tablespace='UNDOTBS1'
*.db_unique_name='orcl'
*.fal_client='ORCL'
*.fal_server='STBY'
*.log_archive_config='DG_CONFIG=(orcl,stby)'
*.log_archive_dest_1='LOCATION=/u01/app/oracle/flash_recovery_area/ORCL/archivelog/ valid_for=(ALL_LOGFILES,ALL_ROLES) db_unique_name=orcl'
*.log_archive_dest_2='SERVICE=stby valid_for=(online_logfiles,primary_role) db_unique_name=stby'
*.log_archive_dest_state_2='ENABLE'
*.log_archive_max_processes=4
*.log_file_name_convert='/u01/app/oracle/oradata/stby/ ','/u01/app/oracle/oradata/orcl/ '
*.db_file_name_convert='/u01/app/oracle/oradata/stby/ ','/u01/app/oracle/oradata/orcl/ '
*.standby_file_management='AUTO'
复制代码



在主库服务器上通过 scp initorcl.ora standby:$ORACLE_HOME/dbs/initstby.ora 拷贝 pfile 到备库 initorcl.ora 100% 1599 1.4MB/s 00:00 在备库上编辑 initstby.ora,需要注意以下两点,同样地,以下参数仅供参考,需要 DBA 按实际情况修改


1 除了主库添加的参数,备库的 audit 文件目录以及 control file 的目录会有变化


2 对于主库添加的参数,要注意备库和主库涉及路径,名称的不同


orcl.__db_cache_size=385875968
orcl.__java_pool_size=16777216
orcl.__large_pool_size=16777216
orcl.__oracle_base='/u01/app/oracle'#ORACLE_BASE set from environment
orcl.__pga_aggregate_target=553648128
orcl.__sga_target=1040187392
orcl.__shared_io_pool_size=0
orcl.__shared_pool_size=603979776
orcl.__streams_pool_size=0
*.audit_file_dest='/u01/app/oracle/admin/stby/adump'
*.audit_trail='db'
*.compatible='11.2.0.0.0'
*.control_files='/u01/app/oracle/oradata/stby/control01.ctl','/u01/app/oracle/flash_recovery_area/stby/control02.ctl'
*.db_block_size=8192
*.db_domain=''
*.db_name='orcl'
*.db_recovery_file_dest='/u01/app/oracle/flash_recovery_area'
*.db_recovery_file_dest_size=4070572032
*.diagnostic_dest='/u01/app/oracle'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=orclXDB)'
*.memory_target=1588592640
*.open_cursors=300
*.processes=150
*.remote_login_passwordfile='EXCLUSIVE'
*.undo_tablespace='UNDOTBS1'
*.db_unique_name='stby'
*.fal_client='STBY'
*.fal_server='ORCL'
*.log_archive_config='DG_CONFIG=(orcl,stby)'
*.log_archive_dest_1='LOCATION=/u01/app/oracle/flash_recovery_area/STBY/archivelog/ valid_for=(ALL_LOGFILES,ALL_ROLES) db_unique_name=stby'
*.log_archive_dest_2='SERVICE=orcl valid_for=(online_logfiles,primary_role) db_unique_name=orcl'
*.log_archive_dest_state_2='ENABLE'
*.log_archive_max_processes=4
*.log_file_name_convert='/u01/app/oracle/oradata/orcl/ ','/u01/app/oracle/oradata/stby/ '
*.db_file_name_convert='/u01/app/oracle/oradata/orcl/ ','/u01/app/oracle/oradata/stby/ '
*.standby_file_management='AUTO'
复制代码

1.1.4 Listener 与 tnsnames 文件修改

主库上的 listener 配置文件应静态注册您的主库,可以参考以下配置


[oracle@primary dbs]$ cat $ORACLE_HOME/network/admin/listener.oraLISTENER =  (DESCRIPTION_LIST =    (DESCRIPTION =      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))      (ADDRESS = (PROTOCOL = TCP)(HOST = primary)(PORT = 1521))    )  )SID_LIST_LISTENER =   (SID_LIST =     (SID_DESC =       (SID_NAME = orcl)       (ORACLE_HOME = /u01/app/oracle/product/11.2.0/dbhome_1)           (GLOBAL_DBNAME = orcl)     )     (SID_DESC =       (SID_NAME = orcl)       (ORACLE_HOME = /u01/app/oracle/product/11.2.0/dbhome_1)       (GLOBAL_DBNAME = orcl_DGB)     )     (SID_DESC =       (SID_NAME = orcl)       (ORACLE_HOME = /u01/app/oracle/product/11.2.0/dbhome_1)       (GLOBAL_DBNAME = orcl_DGMGRL)     )   )ADR_BASE_LISTENER = /u01/app/oracle
复制代码


在备库上的 listener 配置文件同样应静态注册您的备库,可以参考以下配置


LISTENER =  (DESCRIPTION_LIST =    (DESCRIPTION =      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))      (ADDRESS = (PROTOCOL = TCP)(HOST = standby)(PORT = 1521))    )  )SID_LIST_LISTENER =   (SID_LIST =     (SID_DESC =       (SID_NAME = stby)       (ORACLE_HOME = /u01/app/oracle/product/11.2.0/dbhome_1)        (GLOBAL_DBNAME = stby)     )     (SID_DESC =       (SID_NAME = stby)       (ORACLE_HOME = /u01/app/oracle/product/11.2.0/dbhome_1)       (GLOBAL_DBNAME = stby_DGMGRL)     )     (SID_DESC =       (SID_NAME = stby)       (ORACLE_HOME = /u01/app/oracle/product/11.2.0/dbhome_1)       (GLOBAL_DBNAME = stby_DGB)     )   )ADR_BASE_LISTENER = /u01/app/oracle
复制代码


此外,在主备库主机上需要编写 tnsnames 文件,可以参考以下内容


[oracle@primary dbs]$ cat $ORACLE_HOME/network/admin/tnsnames.ora# tnsnames.ora Network Configuration File: /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/tnsnames.ora# Generated by Oracle configuration tools.
ORCL = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = primary)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = orcl) ) )stby = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = standby)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = stby) ) )
复制代码

1.1.5 password 文件

为了让超级用户能远程登陆,需要创建 password 文件,参考以下命令创建 password 文件,再将其从主库上远程拷贝到备库上。


orapwd file='/u01/app/oracle/product/11.2.0/dbhome_1/dbs/orapworcl' password=Oracle123 entries=10  ignorecase=y scp orapworcl standby:/u01/app/oracle/product/11.2.0/dbhome_1/dbs/orapwstby
复制代码

1.1.6 备库主机创建目录

根据上述备库参数文件中设置的数据文件,redo 文件,control 文件,aduit 文件的路径,我们需要在备库上预先创建好相应目录


mkdir -p /u01/app/oracle/admin/stby/adumpmkdir -p /u01/app/oracle/oradata/stby/mkdir -p /u01/app/oracle/flash_recovery_area/stbymkdir -p /u01/app/oracle/flash_recovery_area/STBY/archivelogmkdir -p /u01/app/oracle/flash_recovery_area/STBY/onlinelog
复制代码

1.2 激活 Snowball

1.2.1 申请 Snowball

首先,我们需要申请 snowball,请打开 console 进入 snowball 的服务界面



点击 create job 按钮,选择 Import into Amazon S3 任务类型,可以通过 snowball 将数据上传到 AWS,或者通过 snowball 从 AWS 下发数据,这里我们选择“导入 Amazon S3” 任务类型



点击下一步,在下一个页面提供公司名称、地址、收货人姓名、电话等信息



点击下一步,请提供 job 的名称,并从下拉菜单中选择数据导入的 S3 bucket name,我们需要预先在自己的 AWS 账号中创建 S3 bucket



点击下一步,要提供相应的权限,点击 create/select IAM role,我们可以创建一个新的 IAM role 给 snowball,也可以选择已有的 IAM role。



点击下一步,这里我们可以设置 SNS topic,在您选定的 job 状态变化时通知您,譬如在向您发货或者货物到达时,给您发通知。这个页面设置好后,再点击下一步,就会进入 review 界面,显示我们之前所有的配置信息,如果一切正确,点击 create job 就可以最终创建任务,然后我们就可以等待快递公司将 snowball 送货上门了。


1.2.2 下载 snowball 客户端

在 snowball 传输过程中,我们可以先安装 Snowball 客户端,它 是一个您在本地工作站上运行以执行数据传输的独立终端应用程序。提供您传输数据时所需的所有功能,包括处理错误以及向本地工作站写入日志,以便进行故障排除和审计。请在 AWS 官网 snowball 服务主页或者 snowball 用户指南文档中根据您要运行 snowball 客户端程序的主机 OS 类型选择下载相应的程序。 由于工作站通常是在 Snowball 和数据源之间传输数据的瓶颈所在,我们强烈建议您使用性能强大的计算机作为工作站,而且您的工作站必须能够满足处理、内存和网络的高要求。针对工作规格,我们的官方文档有详细建议和说明https://docs.amazonaws.cn/zh_cn/snowball/latest/ug/specifications.html#workstationspecs,在实际案例中请注意避免工作站成为性能瓶颈,从而影响传输效率。本次 DEMO 中我们将用我的 windows 笔记本安装 snowball 客户端。 我们通过上述网页下载 windows 安装程序 snowball-client-win-1.0.1-281.msi,双击安装 snowball agent,默认安装。 安装后进入安装目录,执行 snowball help 测试


1.2.3 连接 snowball

当快递公司将 snowball 发送到您的公司后,您就可以将 snowball 连接到您刚才安装了客户端程序的工作站上, 到货时 snowball 的前后面板是关闭的,如下图所示



打开面板后,可以看到附带的线缆,每个 Snowball 均被设计为支持通过 RJ45、SFP+ 铜缆或 SFP+ 光纤 10 Gb 以太网传输数据。请连通电源和线缆




!


墨水屏会显示网络配置,这里 DHCP 已经自动分配了 IP,也可以手动完成网络配置


重要


为防止损坏您的数据,请勿在传输数据时,断开 Snowball 或更改其网络设置。




1.2.4 激活 snowball

在 AWS console 的 snowball 服务页面,选择我们之前创建的 job,展开该任务的 Job status 窗格,然后选择 View job details,在显示的详细信息窗格中,展开 Credentials。请记下解锁代码 (包括连字符),因为您需要提供全部 29 个字符才能传输数据。在对话框中选择 Download manifest,然后按照说明将任务清单文件下载到您的计算机上。清单文件名包括您的 Job ID。



在安装了 snowball 客户端的笔记本上,进入安装目录执行以下命令激活 snowball


snowball start -i [IP Address] -m [Path/to/manifest/file] -u [29 character unlock code]    
复制代码


2 迁移数据库

2.1 主库备份

通过 CONFIGURE CONTROLFILE AUTOBACKUP ON;更改 RMAN 设置,使之自动备份 control file



而后在主数据库进行 RMAN 备份,因为使用 snowball 迁移的数据库通常很大,所以我们可以考虑使用 BACKUP AS COMPRESSED BACKUPSET 对备份集进行压缩,此外,我们也可以使用多个 RMAN 通道,然后将数据文件分配到不同的通道,以此来调整备份的总吞吐量。以下脚本仅供参考,请读者根据实际情况进行修改。


rman target /  run{          allocate channel c1 type disk;  backup database plus archivelog tag='full';          release channel c1;}
复制代码



通过 list backup; 列出所需的备份文件,注意会有多个备份文件需要拷贝


2.2 用 Snowball 拷贝备份文件上云

2.2.1 将备份文件拷贝到 Snowball

我们将所有需要的备份文件拷贝到安装了 snowball 客户端的笔记本上的 C:\ orclbak 目录下,使用命令 snowball cp -r C:\orclbak s3://phoenixyy-test-bucket/orclbak/ 拷贝该目录下的所有备份文件到 snowball,拷贝速度和我们使用网络连接的类型以及安装 snowball 客户端的主机资源有关,我们还可以考虑多个客户端的并行复制。具体优化方式请遵循最佳实践,这里不再赘述 https://docs.amazonaws.cn/zh_cn/snowball/latest/ug/performance.html



拷贝成功后请用 snowball ls s3://phoenixyy-test-bucket/orclbak 命令验证上传结果



如果一切正确,可以用 snowball stop 停止从 当前安装 Snowball 客户端 的主机到 Snowball 的通信

2.2.2 拷贝备份文件到备库主机

接下来我们需要遵循文档https://docs.amazonaws.cn/zh_cn/snowball/latest/ug/shipping.html 将 snowball 寄回 AWS,我们上传的数据会自动上传到我们此前创建 snowball 任务时指定的 S3 bucket 里,而后我们就可以下载备份文件到要安装备库的 EC2 主机上了,该 EC2 主机上已经安装了 ORACLE 软件,这里,我们跳过了安装 ORACLE 软件和 snowball 运输的环节,直接进入从 S3 下载的环节 首先,我们将备份文件置于与主库完全相同的路径下,故而先在备库主机上创建备份文件一致的目录


mkdir -p /u01/app/oracle/flash_recovery_area/ORCL/backupset/2018_11_27mkdir -p /u01/app/oracle/flash_recovery_area/ORCL/autobackup/2018_11_27
复制代码


而后,我们将从 S3 下载备份文件到备库主机相同的目录下,在这里,我们遵循文档https://docs.amazonaws.cn/cli/latest/userguide/awscli-install-linux.html 预先安装并配置了 AWS Command Line Interface,我们可以用命令 aws s3 ls s3://phoenixyy-test-bucket/orclbak 列出上传的备份文件



再通过以下命令将备份文件逐一下载到备库主机,为了简化操作,保证备份文件在备库主机上所在的目录和主库主机的目录保持一致。这里的文件名称,路径以及 S3 bucket 名称都需要按照实际情况修改


aws s3 cp s3://phoenixyy-test-bucket/orclbak/o1_mf_annnn_FULL_fzskrbnv_.bkp /u01/app/oracle/flash_recovery_area/ORCL/backupset/2018_11_27/o1_mf_annnn_FULL_fzskrbnv_.bkpaws s3 cp s3://phoenixyy-test-bucket/orclbak/o1_mf_nnndf_TAG20181127T042407_fzskq7js_.bkp /u01/app/oracle/flash_recovery_area/ORCL/backupset/2018_11_27/o1_mf_nnndf_TAG20181127T042407_fzskq7js_.bkpaws s3 cp s3://phoenixyy-test-bucket/orclbak/o1_mf_s_993270283_fzskrcs1_.bkp /u01/app/oracle/flash_recovery_area/ORCL/autobackup/2018_11_27/o1_mf_s_993270283_fzskrcs1_.bkpaws s3 cp s3://phoenixyy-test-bucket/orclbak/o1_mf_annnn_FULL_fzskq6ct_.bkp /u01/app/oracle/flash_recovery_area/ORCL/backupset/2018_11_27/o1_mf_annnn_FULL_fzskq6ct_.bkp
复制代码


###2.3 创建 data guard 环境

2.3.1 还原备库

在备库上用之前准备的 pfile 启动备库实例到 nomount,并生成 spfile


startup nomount pfile=$ORACLE_HOME/dbs/initstby.oracreate spfile from pfile;shutdown immediatestartup nomount 
复制代码



使用 rman target sys/Oracle123@orcl auxiliary / 连接主库和备库,执行 duplicate target database for standby nofilenamecheck; 还原备库,其输出类似



2.3.2 恢复备库

用命令 alter database recover managed standby database using current logfile disconnect from session;在备库上开启 real-time apply redo data


用命令 select process,client_process,sequence#,status from v$managed_standby; 检查备库关键进程运行情况



在主库上执行如下语句创建测试表 test 并插入一条记录


create table test(id number);insert into test values(1);commit;
复制代码


在备库上将数据库只读打开,而后查询 test 验证复制成功


ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;alter database open;ALTER DATABASE RECOVER MANAGED STANDBY DATABASE  USING CURRENT LOGFILE   DISCONNECT FROM SESSION;
复制代码


2.3.3 搭建 DG broker 环境

在主备库上修改参数 dg_broker_start


alter system set dg_broker_start=true scope=both;
复制代码


在主库上配置并开启 configuration


dgmgrl /create configuration 'orcl' as primary database is 'orcl' connect identifier is orcl;add database 'stby' as connect identifier is stby maintained as physical;enable configuration;show configuration verbose;
复制代码




####2.3.4 切换数据库


最后我们模拟一下将数据库从 IDC 机房切换到 AWS 上的过程,在备库主机上执行如下命令


dgmgrl connect sys/Oracle123@orcldisable fast_start failover;show configuration verbose;switchover to stby;
复制代码


在新备库上执行以下语句查看状态是否正确


set linesize 200select dbid,open_mode,database_role,switchover_status,flashback_on from v$database;select process,client_process,sequence#,status from v$managed_standby;
复制代码



在原来的备库,现在的主库 stby 中,向 test 表插入一条新记录, insert into test values(2); commit; 在原来的主库现在的备库 orcl 中查询 test 表,验证数据记录复制成功


set linesize 200select dbid,open_mode,database_role,switchover_status,flashback_on from v$database;select * from test;
复制代码


结语

希望通过本文,您能对 snowball 有所了解。以后当您面临海量数据需要迁移上云,灾备环境搭建,数据中心退役乃至内容分发的时候,尤其在网络传输成为瓶颈时,您能想到还有一个选择,可以使用 snowball 举重若轻地完成任务。


相关文章:


《AWS snowball 用户指南》


作者介绍:


吕琳


AWS 解决方案架构师,负责基于 AWS 的云计算方案的咨询与架构设计,同时致力于数据库和大数据方面的研究和推广。在加入 AWS 之前曾在 Oracle 担任高级讲师并在 Amazon 担任高级 DBA,在数据库设计运维调优、DR 解决方案、大数据以及企业应用等方面有丰富的经验。


本文转载自 AWS 技术博客。


原文链接:


https://amazonaws-china.com/cn/blogs/china/snoball-migration-to-cloud/


2019-10-10 15:271003
用户头像

发布了 1855 篇内容, 共 126.5 次阅读, 收获喜欢 81 次。

关注

评论

发布
暂无评论
发现更多内容

虎符宣布开启平台币回购计划 HOO应声大涨20%

区块链前沿News

Hoo虎符 Hoo 虎符交易所 虎符平台币

书单 | 致敬计算机视觉领域经典著作!

博文视点Broadview

Think in Mingdao——人人都是全栈工程师

明道云

多协议接入框架 xRPC 发布在即,为你解读更多 APISIX 生态细节

API7.ai 技术团队

后端开发 api 网关 后端技术 后端数据

☕【Java深层系列】「并发编程系列」让我们一起探索一下CountDownLatch的技术原理和源码分析

洛神灬殇

Java 并发编程 jdk8 1月月更

学生管理系统架构设计

孙强

架构实战营

2022 福虎芯旺 | 旺链科技新春线上年会回顾

旺链科技

区块链 产业区块链 年会

源码深度剖析:Eureka与Ribbon是怎么做服务发现的?

碌碌无为小码农

Java 架构 程序人生 编程语言 经验分享

深入浅出 Apache Pulsar(5)Pulsar Connectors

云智慧AIOps社区

Java kafka 云原生 消息中间件 Apache Pulsar 消息系统

介绍一种在ABAP内核态进行内表高效拷贝的方法,和对应的Java和JavaScript版本的伪实现

汪子熙

Java JavaScript abap 1月月更

有的时候我觉得我不会 Markdown

冴羽

前端 写作 markdown markdown语法 vuepress

ReactNative进阶(三十三):Mac 下 homebrew 的安装和 brew 命令的使用

No Silver Bullet

homebrew React Native 1月月更

写给Android开发者的芯片知识

轻口味

人工智能 android 行业资讯 芯片 1月月更

从交换机安全配置,看常见局域网攻击

网络安全学海

网络安全 信息安全 渗透测试 WEB安全 安全漏洞

干掉 PowerDesigner,这款数据库设计神器真的绝了!!!

沉默王二

超赞:不愧是“阿里内部Redis学习笔记”从头到尾,全是精华

碌碌无为小码农

Java 面试 程序人生 编程语言 经验分享

虎啸龙吟之国产数据库风云榜-2022年01月

墨天轮

数据库 国产数据库

鸿蒙轻内核源码分析:Newlib C

华为云开发者联盟

鸿蒙 内核 LiteOS-M Newlib C Newlib

2021 大促 AntMonitor 总结 - 云原生 Prometheus 监控实践

SOFAStack

云原生 分布式架构 SIGMA

RocketMQ 源码探究 -- 延迟队列实现

周文童

RocketMQ #java

剖析CWE视图的层次定义和解析方式

华为云开发者联盟

存储 视图 cwe CWE节点 CWE视图

Flink 实现 MySQL CDC 动态同步表结构

腾讯云大数据

flink 源码 流计算 Oceanus

从重大漏洞应急看云原生架构下的安全建设与安全运营(下)

腾讯安全云鼎实验室

云原生 安全漏洞 容器安全 安全服务

投稿开奖丨“轻量应用服务器”征文活动(11&12月)大奖公布

阿里云弹性计算

阿里云 轻量应用 征文投稿开奖

【架构训练营模块一作业】微信业务架构图 & 学生管理系统

yhjhero

架构实战营

恒源云(GPUSHARE)_【Object Detection 20年】小结

恒源云

深度学习 计算机视觉 目标检测

sonic:基于 JIT 技术的开源全场景高性能 JSON 库

火山引擎开发者社区

原生云

做了5年后端研发,靠着这份面试题跟答案,我从12K变成了30K

碌碌无为小码农

Java 架构 程序人生 编程语言 经验分享

你会几种读取/加载 properties配置文件方法

华为云开发者联盟

Java 开发 ClassLoader properties 配置文件

2021总结和2022趋势--《香帅中国财富报告》(7/100)摘录

hackstoic

投资

基于esbuild的universal bundler设计

字节跳动终端技术

json 字节跳动 前端 火山引擎 lynx

举重若轻,用snowball迁移数据库上云_语言 & 开发_亚马逊云科技 (Amazon Web Services)_InfoQ精选文章