华为云用户手册

  • 允许访问的VPC Endpoint 仅在“API访问”页签中可进行配置。限制用户只能从具有设定ID的VPC Endpoint访问华为云API,例如:0ccad098-b8f4-495a-9b10-613e2a5exxxx。若未进行访问控制配置,则默认用户从所有VPC Endpoint都能访问API。 图2 允许访问的VPC Endpoint “允许访问的IP地址区间”、“允许访问的IP地址区间或网段”和“允许访问的VPC Endpoint”,如果同时设置,只要满足其中一种即可允许访问。 单击“恢复默认值”,可以将“允许访问的IP地址区间”恢复为默认值,即0.0.0.0~255.255.255.255,同时将“允许访问的IP地址区间或网段”、“允许访问的VPC Endpoint ”清空。
  • 支持 IAM 资源粒度授权的云服务 如果您需要授予IAM用户特定资源的相应权限,可以创建自定义策略并选择特定资源,该IAM用户将仅拥有对应资源的使用权限。例如创建自定义策略时,选择资源类型并添加资源路径:OBS:*:*:bucket:TestBucket*,即可授予IAM用户以TestBucket命名开头的桶相应权限。 下表为当前华为云支持资源级别授权的云服务及对应资源类型。 表1 支持资源粒度授权的云服务及其资源类型 服务 资源类型 资源名称 弹性云服务器(E CS ) instance 弹性云服务器 云硬盘(EVS) volume 云硬盘 对象存储服务 (OBS) bucket 桶 object 对象 虚拟私有云(VPC) publicip 弹性公网IP 容器镜像服务 (SWR) chart chart repository 仓库 instance 实例 智能边缘平台(IEF) product 产品 node 边缘节点 group 边缘节点组 deployment 应用部署 batchjob 批量作业 application 应用模板 appVersion 应用模板版本 IEFInstance IEF实例 cluster 集群 数据湖探索 DLI ) queue 队列 database 数据库 table 表 column 列 datasourceauth 安全认证信息 jobs 作业 resource 资源包 elasticresourcepool 弹性资源池 group 资源包组 图引擎服务(GES) graphName 图名称 backupName 备份名称 metadataName 元数据名称 函数工作流 服务(FunctionGraph) function 函数 trigger 触发器 分布式消息服务(DMS) rabbitmq RabbitMQ实例 kafka Kafka实例 分布式缓存服务(DCS) instance 实例 文档数据库服务(DDS) instanceName 实例名称 设备接入(IoTDA) app 资源空间ID 资源编排 服务( RFS ) stack 堆栈 数据加密 服务(KMS) KeyId 密钥ID 自动驾驶云服务(Octopus) dataset 数据集 replay 视频回放 数据仓库 服务(DWS) cluster 集群 云堡垒机 (CBH) instanceId 实例ID IAM身份中心(IAM Identity Center) account 账号 permissionSet 权限集 instance 实例 应用与 数据集成平台 ROMA Connect graph 业务流图 父主题: 自定义策略
  • Flink Jar作业上传配置文件操作流程 自定义(JAR)作业支持上传配置文件。 将配置文件通过程序包管理上传到DLI; 在Flink jar作业的其他依赖文件参数中,选择创建的DLI程序包; 在代码中通过ClassName.class.getClassLoader().getResource("userData/fileName")加载该文件。 ClassName”为需要访问该文件的类名。 userData为固定文件路径名,不支持修改或自定义其他路径名。 fileName为需要访问的文件名。 本节示例适用于Flink 1.12版本。Flink 1.15版本的Jar作业开发指导请参考Flink Jar写入数据到OBS开发指南。
  • 注意事项 每个连接子任务都需要保留自己的Hive表缓存。请确保Hive表可以放入TM任务槽的内存中。 建议为streaming-source.monitor-interval(最新分区作为临时表)或 lookup.join.cache.ttl(所有分区作为临时表)设置一个相对较大的值。否则,作业容易出现性能问题,避免表更新和重新加载过于频繁。 缓存刷新需加载整个Hive表。无法区分新数据和旧数据。
  • 参数说明 在执行与最新的Hive表的时间关联时,Hive表将被缓存到Slot内存中,然后通过键将流中的每条记录与表进行关联,以确定是否找到匹配项。将最新的Hive表用作时间表不需要任何额外的配置。使用以下属性配置Hive表缓存的TTL。在缓存过期后,将重新扫描Hive表以加载最新的数据。 参数 默认值 类型 说明 lookup.join.cache.ttl 60 min Duration 查找联接中构建表的缓存 TTL(例如 10 分钟)。默认情况下,TTL 为 60 分钟。 该选项仅在查找有界的 hive 表源时有效,如果您使用流式 hive 源作为时态表,请使用 streaming-source.monitor-interval 配置数据更新间隔。
  • 示例 该示例展示了一个经典的业务流水线,维度表来自 Hive,每天通过批处理流水线作业或 Flink 作业更新一次,kafka流来自实时在线业务数据或日志,需要与维度表联接以扩充流。 使用spark sql 创建 hive obs 外表,并插入数据。 CREATE TABLE if not exists dimension_hive_table ( product_id STRING, product_name STRING, unit_price DECIMAL(10, 4), pv_count BIGINT, like_count BIGINT, comment_count BIGINT, update_time TIMESTAMP, update_user STRING ) STORED AS PARQUET LOCATION 'obs://demo/spark.db/dimension_hive_table' PARTITIONED BY ( create_time STRING ); INSERT INTO dimension_hive_table PARTITION (create_time='create_time_1') VALUES ('product_id_11', 'product_name_11', 1.2345, 100, 50, 20, '2023-11-25 02:10:58', 'update_user_1'); INSERT INTO dimension_hive_table PARTITION (create_time='create_time_1') VALUES ('product_id_12', 'product_name_12', 2.3456, 200, 100, 40, '2023-11-25 02:10:58', 'update_user_2'); INSERT INTO dimension_hive_table PARTITION (create_time='create_time_1') VALUES ('product_id_13', 'product_name_13', 3.4567, 300, 150, 60, '2023-11-25 02:10:58', 'update_user_3'); INSERT INTO dimension_hive_table PARTITION (create_time='create_time_1') VALUES ('product_id_14', 'product_name_14', 4.5678, 400, 200, 80, '2023-11-25 02:10:58', 'update_user_4'); INSERT INTO dimension_hive_table PARTITION (create_time='create_time_1') VALUES ('product_id_15', 'product_name_15', 5.6789, 500, 250, 100, '2023-11-25 02:10:58', 'update_user_5'); INSERT INTO dimension_hive_table PARTITION (create_time='create_time_1') VALUES ('product_id_16', 'product_name_16', 6.7890, 600, 300, 120, '2023-11-25 02:10:58', 'update_user_6'); INSERT INTO dimension_hive_table PARTITION (create_time='create_time_1') VALUES ('product_id_17', 'product_name_17', 7.8901, 700, 350, 140, '2023-11-25 02:10:58', 'update_user_7'); INSERT INTO dimension_hive_table PARTITION (create_time='create_time_1') VALUES ('product_id_18', 'product_name_18', 8.9012, 800, 400, 160, '2023-11-25 02:10:58', 'update_user_8'); INSERT INTO dimension_hive_table PARTITION (create_time='create_time_1') VALUES ('product_id_19', 'product_name_19', 9.0123, 900, 450, 180, '2023-11-25 02:10:58', 'update_user_9'); INSERT INTO dimension_hive_table PARTITION (create_time='create_time_1') VALUES ('product_id_10', 'product_name_10', 10.1234, 1000, 500, 200, '2023-11-25 02:10:58', 'update_user_10'); 参考创建Flink OpenSource作业,创建flink opensource sql作业,输入以下作业脚本,并提交运行。该作业模拟从kafka读取数据,并关联hive维表对数据进行打宽,并输出到print。 如下脚本中的加粗参数请根据实际环境修改。 CREATE CATA LOG myhive WITH ( 'type' = 'hive' , 'default-database' = 'demo', 'hive-conf-dir' = '/opt/flink/conf' ); USE CATALOG myhive; CREATE TABLE if not exists ordersSource ( product_id STRING, user_name string, proctime as Proctime() ) WITH ( 'connector' = 'kafka', 'topic' = 'TOPIC', 'properties.bootstrap.servers' = 'KafkaIP:PROT,KafkaIP:PROT,KafkaIP:PROT', 'properties.group.id' = 'GroupId', 'scan.startup.mode' = 'latest-offset', 'format' = 'json' ); create table if not exists print ( product_id STRING, user_name string, product_name STRING, unit_price DECIMAL(10, 4), pv_count BIGINT, like_count BIGINT, comment_count BIGINT, update_time TIMESTAMP, update_user STRING, create_time STRING ) with ( 'connector' = 'print' ); insert into print select orders.product_id, orders.user_name, dim.product_name, dim.unit_price, dim.pv_count, dim.like_count, dim.comment_count, dim.update_time, dim.update_user, dim.create_time from ordersSource orders left join dimension_hive_table /*+ OPTIONS('lookup.join.cache.ttl'='60 m') */ for system_time as of orders.proctime as dim on orders.product_id = dim.product_id; 连接Kafka集群,向Kafka的source topic中插入如下测试数据: {"product_id": "product_id_11", "user_name": "name11"} {"product_id": "product_id_12", "user_name": "name12"} 查看print结果表数据。 +I[product_id_11, name11, product_name_11, 1.2345, 100, 50, 20, 2023-11-24T18:10:58, update_user_1, create_time_1] +I[product_id_12, name12, product_name_12, 2.3456, 200, 100, 40, 2023-11-24T18:10:58, update_user_2, create_time_1]
  • 业务分级 同时结合业务实际,按照业务系统重要性及业务系统中断对整个公司业务影响的范围和程度,可考虑将业务系统分为三类: 核心系统 支撑公司核心业务流程,一旦停止服务会给公司运营造成重大影响或重大财务损失,如购买系统; 支撑公司关键应用的重要基础设施和办公系统,一旦中断,导致大量员工正常工作瘫痪。 重要系统 支撑公司重要的业务流程,一旦停止服务会给公司业务运营造成严重影响,或造成严重财务损失; 支撑公司重要应用的基础设施和办公系统,一旦中断,会严重影响员工的正常办公。 一般系统 支撑公司业务流程,一旦停止服务对公司运营或财务造成损失,如培训系统; 支撑公司普通应用的基础设施或办公系统,一旦中断,会影响员工的正常办公。 一般情况下,可根据业务系统影响评估数据等级,核心数据对应于核心系统,重要系统对应于重要数据,一般系统对应一般数据。如有数据分类与业务系统类别不匹配的情况,则业务系统向更高级别系统定级。例如业务系统被评估为重要系统,但是数据类型属于数据安全法的核心数据,则该系统向上一级定义为核心系统。
  • 保护Always on Availability Groups模式下的SQL Server 当前云服务器备份只支持单个虚拟机的一致性备份,对于集群数据库暂不支持,完整支持将在后续版本中推出。 在Always On模式下,SQL Server服务在主备节点上都是启动的,数据由主复制到备,主上拥有全部的数据。故在创建云服务器备份时,只需要将主节点加入策略进行备份。在主备发生切换后,及时调整策略,确保始终对主节点进行备份。 由于SQL Server自身的机制,在恢复主时,可能会触发同步,使备节点上的数据也被覆盖,导致备份时刻之后新产生的数据丢失,所以建议只有在主备节点均不可用时才进行整机恢复,防止非预期的数据丢失。 父主题: 通过自定义脚本实现数据库备份
  • 演练原则 参考“通过业务分级制定最佳备份策略“灾备策略里的演练频率,有计划、周期性地对备份数据进行恢复演练 以备份资源为单位在该资源的所有备份内抽样随机进行,不必每个备份都进行,但要保证在一定期限内每种资源的每类备份至少有一次备份被恢复验证过 为防止干扰实际业务,恢复演练以使用备份创建新资源实例进行,禁止直接恢复源实例 下发备份恢复任务后,恢复任务成功,备份能够正常恢复资源,且恢复的数据正确性需要与预期匹配,则视为恢复成功 下发备份恢复任务后,如果恢复任务失败,或者恢复任务成功,但数据存在丢失、无法读取的情况,则视为恢复失败,请及时联系华为云工程师进行定位处理 操作员应详细记录演练的周期、过程及结果。
  • 灾备策略 按照用户云上部署的业务系统的不同分级,建议配置不同的数据备份策略,针对常见的云内资源采用如下数据备份策略,该策略可根据实际业务情况自行调整。参照策略管理章节创建备份策略。 系统分类 备份对象 RPO 保留 时间 全量 备份 增量 备份 异地 备份 演练 频率 核心系统 云服务器 4h 1年以上 每周 6次/日 是 月 云数据库 4h 1年以上 每周 6次/日 是 月 云文件系统 4h 1年以上 每周 6次/日 是 月 重要系统 云服务器 12h 1年 双周 2次/日 是 季度 云数据库 12h 1年 双周 2次/日 是 季度 云文件系统 12h 1年 双周 2次/日 是 季度 一般系统 云服务器 24h 6个月 每月 1次/日 否 半年 云数据库 24h 6个月 每月 1次/日 否 半年 云文件系统 24h 6个月 每月 1次/日 否 半年
  • 详细步骤 加密HANA用户密码,供自定义脚本使用 登录HANA服务器,输入cd /home/rdadmin/Agent/bin/ ,进入Agent目录。 执行/home/rdadmin/Agent/bin/agentcli encpwd,回显如下: Enter password: 输入HANA用户的密码,并按“Enter”,屏幕上就会打印出加密后的密码,将其复制到剪贴板中。 冻结解冻脚本中配置的明文密码长度不超过16位,否则配置后密码会被截断,应用一致性备份会失败。 执行cd /home/rdadmin/Agent/bin/thirdparty/ebk_user ,进入自定义脚本目录,执行vi hana_freeze.sh ,打开HANA示例冻结脚本。 将下图所示的HANA_USER HANA_PASSWORD INSTANCE_NUMBER DB_SID修改为实际值,其中HANA_PASSWORD 为步骤1的屏幕输出。 也可以使用sed命令来直接进行修改: sed -i 's/^HANA_USER=.*/HANA_USER="XXX"/' hana_freeze.sh hana_unfreeze.sh ,其中XXX为数据库用户名。 sed -i 's/^HANA_PASSWORD=.*/HANA_PASSWORD="XXX"/' hana_freeze.sh hana_unfreeze.sh ,其中XXX为步骤1中打印出的密码。 sed -i 's/^INSTANCE_NUMBER=.*/INSTANCE_NUMBER="XXX"/' hana_freeze.sh hana_unfreeze.sh ,其中XXX为数据库实例编号。 sed -i 's/^DB_SID=.*/DB_SID="XXX"/' hana_freeze.sh hana_unfreeze.sh ,其中XXX为数据库SID。 此操作会同时修改冻结解冻脚本,所以无需再执行步骤3。 执行vi hana_unfreeze.sh ,打开HANA示例解冻脚本,修改此脚本中的用户名、密码、实例编号与SID hana_freeze.sh与hana_unfreeze.sh脚本实现了基本的数据库冻结与解冻操作,如果你在冻结、解冻时有其它额外步骤需要执行,可以自行在其中进行修改。详细说明请参见 通过自定义脚本实现其它Linux应用的一致性备份。 冻结SAP HANA数据库时,按照SAP官方建议,需要冻结Data卷的XFS文件系统,否则可能出现数据不一致的问题。在此示例脚本中,将会查询出HANA使用的Data卷挂载点,并用xfs_freeze 命令进行冻结。 如果HANA系统未按照SAP官方建议使用一个独立分区来存放Data卷数据,而是与系统卷共用一个分区,则请修改hana_freeze.sh脚本,注释掉xfs_freeze相关行,防止整个系统都被冻结,但此时可能出现备份数据不一致的问题。 父主题: 通过自定义脚本实现数据库备份
  • 场景介绍 在Linux下,如果有其它应用需要一致性备份,可以编写自己的冻结、解冻脚本,来实现应用的保护。自定义脚本需放置在/home/rdadmin/Agent/bin/thirdparty/ebk_user目录中,供Agent在备份过程中调用。 下面以一个虚构的应用appexample为例,来进行说明。 appexample是一款新的数据库,它对外提供了appexample -freeze与appexample -unfreeze两个命令来实现冻结与解冻。 用户需要开发自己的appexample_freeze.sh与appexample_unfreeze.sh脚本,供备份Agent调用以实现一致性备份。在备份过程中,会先调用appexample_freeze.sh脚本来冻结IO,冻结成功后,会进行磁盘的一致性快照激活,保证备份的数据是一致性的,最后再调用appexample_unfreeze.sh脚本解冻IO。 整体流程如图1所示: 图1 数据库备份流程图 父主题: 通过自定义脚本实现数据库备份
  • 资源与成本 表1 资源和成本规划 资源 资源说明 数量 每月费用 云服务器备份存储库 存储库容量大于等于所需要备份云服务器资源的容量总和 1 具体的计费方式及标准请参考计费说明。 SFS Turbo备份存储库 存储库容量大于等于所需要备份SFS Turbo资源的容量 1 弹性云服务器 与待演练服务器的配置相同 1 SFS Turbo文件系统 与待演练的SFS Turbo文件系统大小相同 1 RDS数据库实例 与待演练的RDS数据库配置相同 1
  • 操作步骤 登录SQL_SERVER数据库,创建新的数据库。 创建数据库成功后,创建存储过程,可以参考图1。 图1 创建存储过程 进入云备份控制台,对目标弹性云服务器创建数据库备份,并勾选数据库备份。 待备份完成后,进入Cloud Server Backup Agent-WIN64\log\ rdagent.txt文件,查看冻结、解冻日志,确定冻结解冻时间。如图中所示的17:28:51。 图2 查看日志 使用新创建的数据库备份恢复目标弹性云服务器。恢复成功后,登录云服务器和数据库,查看表中最后一条插入数据对应的时间(17:28:49)的记录。 对比步骤5日志显示的VSS冻结成功时间和步骤4的时间。冻结成功之前会停止插入数据,所以步骤5的时间比步骤4早。若步骤5的时间比步骤4早,则表示应用一致性备份成功。
  • 安全接入 实践 描述 通过专线或VPN连接IEF 线下边缘节点无法通过公网访问IEF时,可以选择通过云专线(DC)或VPN连接华为云VPC,然后通过 VPC终端节点 在VPC提供私密安全的通道连接IEF,从而使得线下边缘节点在无法访问公网时连接IEF。 使用开源C语言库连接MQTT Broker MQTT是一种发布/订阅模式的消息协议,能够在硬件性能低下的远程设备以及网络状况糟糕的情况下工作。 本最佳实践介绍一种开源的C语言库Eclipse Paho C Client Library连接使用IEF的内置MQTT Broker。
  • 边云协同 实践 描述 智能园区人脸检测 通常园区视频功能主要集中在存储和查看,视频分析和 态势感知 能力较弱。通过使用智能边缘平台与视频智能分析服务(VIAS),提升视频分析和感知能力,实现智慧园区 人脸识别 检测功能。本最佳实践提供了全面的智能园区人脸检测搭建教程,包括环境准备、IEF服务配置和下发人脸检测算法。 工业IoT边缘实时流分析 终端设备可以产生大量的数据,为了减少数据上云的数据量或提高数据处理实时性,有时需要在靠近数据产生的地方对其进行分析处理。智能边缘平台可以和 数据湖 探索服务(DLI)结合,通过在边缘节点上部署系统提供的流计算应用,将实时流计算能力从云端延伸到边缘。然后通过数据湖探索服务编辑流处理作业并下发到边缘执行,可以帮助您在边缘快速实现对流数据的实时、快速、准确地分析处理。
  • 请求示例 根据原始SQL生成SQL限流关键字。 https://das.cn-north-1.myhuaweicloud.com/v3/054c630ff780d4cc2f40c00d7f6fb21d/instances/da304cd5bbb944de828759bc7be3d3fein01/sql-limit/parse { "datastore_type" : "MySQL", "original_sql" : "select * from das_conn_info", "use_template" : true, "keep_operators" : true }
  • URI POST /v3/{project_id}/instances/{instance_id}/sql-limit/parse 表1 路径参数 参数 是否必选 参数类型 描述 project_id 是 String 项目ID。 获取方法请参见获取项目ID。 instance_id 是 String 实例ID。 X-Auth-Token 是 String 用户token。 X-Language 否 String 语言。 枚举值: zh-cn en-us
  • 请求参数 表2 请求Body参数 参数 是否必选 参数类型 描述 datastore_type 是 String 数据库类型,目前支持MySQL、MariaDB、 GaussDB (for MySQL)三种引擎。 枚举值: MySQL MariaDB GaussDB(for MySQL) original_sql 是 String 原始SQL语句 最小长度:1 最大长度:1024 use_template 是 Boolean 是否校验SQL语句。 keep_operators 是 Boolean 是否保留操作符。
  • 分支策略 我们都知道分支的意义,也知道它的用法,然而不同的分支管理方法对项目所起到的帮助也是不同的,下面就让我们来看看几种常见的分支策略,以及如何通过CodeArts来管理分支。 Github flow 特点: 令master分支时常保持可以部署的状态。 在新建的本地仓库分支中进行提交。 以合并请求进行交流。 让其他开发者进行审查,合并前的代码要经过测试。 操作步骤: 创建分支 在你创建了一个项目的分支的时候,你也就创建了一个可以尝试你的新想法的环境。 你的分支名称应该具有描述性, 以便其他人通过分支名称就可以知道它到底是干什么用的。 添加提交 每个提交操作都有一个相关的提交信息,用于描述你做出的修改。 通过写清楚的提交信息,你可以让其他人更容易跟上我们的思路并提供反馈。 提出合并请求 合并请求开启了一个关于你的提交内容的讨论。 当你有很少或没有代码但想分享一些截图或一些想法的时候;当你卡住了需要帮助或建议的时候;或者当你准备好了让人来审查你工作的时候,合并请求启动代码审查和有关更改建议的会话。 讨论和评估你的代码 审查你的更改内容的人或团队可以提供一些问题或者意见。 你也可以在大家讨论和给出关于你提交内容的反馈时, 继续Push修改你的分支,来解决问题。 部署验证 合入master代码前的最终部署测试,用真实环境检验版本的正确性。 合并 合并之后,合并请求会保存一份关于你修改代码的历史记录。 通过将某些关键字加入到你的合并请求文本中,你可以将问题与代码关联起来。 Gitlab flow 生产分支 一个反映已部署代码的生产分支。 将master的代码合入production。 可消减Git flow中releasing、tagging、merging的开销。 环境分支 提交仅向下游流动,确保在所有环境中测试所有内容。 如果要做hotfix,在一个功能分支上开发,然后合入master,master通过自动化测试后,将feature分支逐步向下游合并。 发布分支 一个分支就是一个版本。 尽可能在master测试修改完,再开发布分支,减少多分支的bug修复。 声明了发布分支后,该分支只接受严重bug的修复。 bug的修复先合入master,再往发布分支合入,上游优先策略。 每在发布分支接受bug修复,都要使用新标签标示出来。 以上就是当前行业中集中比较流行的分支策略,CodeArts提供了基于Git的版本控制系统,接下来让我们看看如何应用CodeArts帮助团队管理分支。 通过CodeArts我们可以完成分支的创建与管理,对分支进行保护、创建合并请求、对代码的合并进行检视及评分、批准合并请求等一系列操作。 新建分支 可以通过CodeArts提供的代码仓库直接创建分支,也可以通过本地仓库创建分支进行同步。 分支保护 可以设置对某一重要分支进行保护,防止误操作对交付造成影响。 合并请求 开发者提交的合并请求可在CodeArts中进行管理,通过对合并内容的检验,决定是否合并。 代码检视与打分 在CodeArts的版本控制系统中,还提供丰富多样的功能设置,例如IP白名单、子模组、webhook等常用的功能设置。运用版本控制系统,我们同样还可以进一步完善我们开发项目的软件配置、环境配置管理,关于如何进行软件配置管理与环境配置管理就不在此详细说明了。想掌握更多更详细的CodeArts代码仓库使用方法,详见代码托管用户指南。
  • 代码提交与分支创建 首先,让我们简单了解一下Git的一些基本概念,方便我们更好的理解代码提交与分支合并之间的逻辑关系。 Git有三种状态,你的文件可能处于其中之一: 已提交(committed):数据已经安全的保存在本地数据库。 已修改(modified):修改了文件,但还没保存到数据库中。 已暂存(staged):对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中。 Git仓库、工作目录以及暂存区域 Git仓库目录: Git用来保存项目的元数据和对象数据库的地方。这是Git中最重要的部分,从其它计算机克隆仓库时,拷贝的就是这里的数据。 工作目录:项目的某个版本独立提取出来的内容。 从Git仓库的压缩数据库中提取出来文件,放在磁盘上以供使用或修改。 暂存区域:是一个文件,保存了下次将提交的文件列表信息,有时候也被称作“索引”。 基本的Git工作流程如下: 在工作目录中修改文件。 暂存文件,将文件的快照放入暂存区域。 提交更新,找到暂存区域的文件,将快照永久性存储到Git仓库目录。 从上面的基本概念中我们可以了解到,Git的常用基本操作其实很简单,然而同一个工具,不同的用法产生的效果却是迥然不同的,这就要求我们在使用版本控制系统的时候尽量遵守规范,更能使工具发挥出它应有的价值。下面让我们来看看在代码提交和分支合并的时候应该遵守哪些规范: 分支具有描述性 一个好的分支名称应该具有描述性,以便其他人通过分支名称就可以知道它到底是干什么用的。 提交要做对 “好的文章不是写出来的,而是改出来的。”代码提交也是如此。 一个提交做好一件事情: 保持每个提交的正确性,不要一系列提交都在不停的修改同一个问题,如果是这样,请将它们合一。 每个提交要独立,不要混杂其他的功能。 提交要做小: 如果一个提交,修改了过多的内容,那么对检视者就是个灾难。 尽可能的拆分,让你的逻辑有延续性,并且可读。 清楚的提交信息 通过写清楚的提交信息,你可以让其他人更容易跟上我们的思路并提供反馈。 提交说明要回答如下问题: What——要解决什么问题? When——什么情况下会发生? How——怎么样解决这个问题? Why——为什么这样解决是合理的,比其他解决方法更好? 合并请求的提交要清晰 一个好的合并请求不只是代码的事情,还牵涉到代码审查者对代码的审查,所以开发者不仅要写出好的代码,还需要考虑如何让其他人更清晰的理解自己的想法和思路,这是一个用代码做交流的过程。 进行较小的合并请求。 每个合并请求只做一件事情。 代码行的字数,最好少于80个字。 避免重新格式化代码。 确保提交的代码能够编译通过并能通过所有测试。 详细记录下自己提交的原因。 避免重复修改和混入其他的merge。 了解了如何做好一次规范的提交与合并,接下来让我们看看通过CodeArts中的版本控制系统都能完成哪些具体的实践。 由于CodeArts提供的是基于Git的版本控制系统,因此所有Git的相关操作都可以在CodeArts上实现。 配置秘钥 管理代码仓库 查看提交记录 提交代码并关联工作项 通过CodeArts我们可以将每次提交的代码记录与相应的工作项进行关联。 在提交代码时,备注信息中输入fix #工作项编号即可在工作项的代码提交记录页面,查看到相关联的代码提交记录。
  • 华为云MetaStudio数字人视觉驱动算法 表3 视觉驱动算法 算法项 描述 算法名称 华为云MetaStudio数字人视觉驱动算法 备案编号 网信算备520111252474601240053号 算法基本原理 数字人视觉驱动算法是指使用神经网络,将视频中的人脸表情和人体姿态,转换为表情基系数及数字人骨骼驱动数据的一种技术。 其基本情况包括: 输入数据:单人表演视频。 算法原理:通过深度学习算法识别人脸表情和人体姿态,转换为表情基系数及数字人骨骼驱动数据。 输出结果:表情基系数、数字人骨骼驱动数据。 应用领域:应用于影视制作、虚拟人姿态控制等场景,加速影视制作的动画生成效率,提升虚拟人控制体验。 算法运行机制 输入为单人表演视频。 通过视频抽帧得到单张图片。经过安全过滤,判断是否通过安全筛选,若不通过则不进行数据生成和结果返回操作。 将视频图片输入至算法模型中,将视频图像分割为面部、手部和身体三个区域。 使用深度学习算法,识别面部区域转化为面部表情,识别手部区域转化为手部骨骼驱动数据,识别身体转化为人体骨骼驱动数据。 对算法输出系数进行平滑处理及异常数据过滤,返回结果。 算法应用场景 数字人视觉驱动算法可用于影视制作、虚拟人姿态控制等场景,加速影视制作的动画生成效率,提升虚拟人控制体验。 算法目的意图 视频驱动数字人动作,实现影视制作动画快速生成。 虚拟现实Avatar形象姿态控制。 其他需要通过表演者驱动数字人动作表情的领域,以提升形象动画生产效率。
  • 华为云MetaStudio数字人语音驱动算法 表1 语音驱动算法 算法项 描述 算法名称 华为云MetaStudio数字人语音驱动算法 备案编号 网信算备520111252474601240061号 算法基本原理 数字人语音驱动算法是指使用深度学习将语音转换成3D数字人表情和肢体驱动数据的一种技术。 其基本情况包括: 输入数据:语音音频数据。 算法原理:通过深度学习算法,提取语音音频中的特征,并转化为表情驱动的表情基系数。 输出结果:表情基系数。 应用领域:应用于3D数字人文本和语音驱动场景,包括:短视频制作、直播和交互等。在特定场景中,可替代人快速生成视频内容,提升内容生成的效率。 算法运行机制 训练阶段输入预先获取的高质量语音及其表情基系数,通过学习获得语音特征与表情基系数的关系。 用户使用时,输入音频流或音频文件。 音频经过安全审核后,进入下一步操作,否则不返回结果。 对音频特征提取后,获取音频特征,再通过算法将音频特征转换为表情基系数。 返回结果数据。 算法应用场景 数字人语音驱动算法可用于短视频制作、直播、交互等场景。在特定场景中,可替代人快速生成视频内容,以提升内容生成的效率。 算法目的意图 通过学习语音与表情基系数的关系,实现使用语音生成视频的能力。在使用数据人形象生成视频的场景,包括短视频制作、直播、智能交互等,可快速生成不同台词的视频内容。
  • 华为云MetaStudio分身数字人驱动算法 表2 分身数字人驱动算法 算法项 描述 算法名称 华为云MetaStudio分身数字人驱动算法 备案编号 网信算备520111252474601240045号 算法基本原理 分身数字人驱动算法是指通过深度学习生成数字人驱动模型,模型生成后,输入音频来合成数字人视频的一种技术。 其基本情况包括: 输入数据:真人视频、音频。 算法原理:通过深度学习算法来学习真人视频,生成驱动该真人形象的数字人模型。通过该模型输入音频,合成数字人视频。 输出结果:数字人视频。 应用领域:分身数字人驱动算法可以应用于真人视频自动生成,包括新闻播报,课件制作等场景,以取代真人视频拍摄,提升视频内容生产效率。 算法运行机制 选择一段真人视频。 输入真人视频,经过平台专家安全审核通过,且用户授权使用后,由训练人员选取真人视频中符合要求的视频进行预处理。预处理完成后,进行深度学习训练,生成该真人形象的数字人驱动模型。 推理阶段输入一段音频。 音频输入至数字人驱动模型后,经过模型推理生成数字人形象播报视频。 数字人视频通过审核后返回给用户。 算法应用场景 分身数字人驱动算法可以应用于真人视频自动生成,包括新闻播报、课件制作等场景,以取代真人视频拍摄,提升视频内容生产效率。 算法目的意图 可以使用授权过的真人视频,在预训练模型基础上,生成真人数字人驱动模型。该模型可基于音频生成口型匹配的数字人视频,实现真人视频自动生成,包括新闻播报、课件制作等场景,以取代真人视频拍摄,提升视频内容生产效率。
  • 华为云MetaStudio数字人照片建模算法 表4 照片建模算法 算法项 描述 算法名称 华为云MetaStudio数字人照片建模算法 备案编号 网信算备520111252474601230033号 算法基本原理 数字人照片建模算法是指使用深度学习算法将已授权的人像照片信息转换为数字人3D模型的一种技术。 其基本情况包括: 输入数据:有授权的人像照片。 算法原理:使用深度学习算法,将人像照片转换为数字人3D模型。 输出结果:数字人3D模型。 应用领域:数字人照片建模算法可应用于影视制作、仿真形象生成、虚拟现实等领域,能加速数字人3D模型产业的生产效率。 算法运行机制 选择一张已授权的人像照片作为输入。 输入的人像照片经过安全过滤,判断是否通过安全筛选,若不通过则不进行数据生成和结果返回操作。 将人像照片输入至算法模型中,通过特征提取、人脸重建、素材特征匹配等进行人头重建,生成3D人头模型。 生成的人头模型通过配上默认身体素材配件,形成完整的3D数字人模型,并返回结果。 算法应用场景 数字人照片建模算法可应用于影视制作、仿真形象生成、虚拟现实等领域,能加速数字人模型产业的生产效率。 算法目的意图 使用已授权的人像照片生成3D数字人模型,应用于如下场景: 用于影视动漫制作角色初始模型的快速生成。 用于虚拟现实Avatar形象快速生成。 其他需要数字人3D形象的领域,快速提升形象生成效率。
  • 步骤四:关闭备ECS的IP转发功能 使用虚拟IP构建主备场景的高可用集群时,需要关闭备ECS的IP转发功能,当主备ECS切换后,则需要确保新的备ECS也关闭IP转发功能。 为了避免ECS主备切换后遗漏配置,建议您将主备ECS的IP转发功能全都关闭。 打开浏览器,并输入EIP地址(124.X.X.187),通过网页确认主ECS。 网页如下图所示,表示此时主ECS是ECS-HA1。 图8 ECS-HA1访问验证 远程登录备ECS,本示例是ECS-HA2。 ECS有多种登录方法,具体请参见登录弹性云服务器。 请根据ECS的操作系统,在表4中选择关闭IP转发功能的操作,本示例ECS为Linux操作系统。 表4 关闭IP转发功能 操作系统 操作指导 Linux系统 执行以下命令,切换root用户。 su root 执行以下命令,查看IP转发功能是否已开启。 cat /proc/sys/net/ipv4/ip_forward 回显结果:1为开启,0为关闭,默认为0。 回显为0,任务结束。 回显为1,继续执行以下操作。 以下提供两种方法修改配置文件,二选一即可。 方法一: 执行以下命令,打开“/etc/sysctl.conf”文件。 vim /etc/sysctl.conf 按i进入编辑模式。 修改net.ipv4.ip_forward = 0。 按ESC退出,并输入:wq!保存配置。 方法二: 执行sed命令,命令示例如下: sed -i '/net.ipv4.ip_forward/s/1/0/g' /etc/sysctl.conf 执行以下命令,使修改生效。 sysctl -p /etc/sysctl.conf Windows系统 在搜索框中输入cmd,打开Windows系统的“命令提示符”窗口,执行以下命令。 ipconfig/all 回显结果中,“IP 路由已启用”为 “否”, 表示IP转发功能已关闭。 回显结果中,“IP 路由已启用”为 “是”, 表示IP转发功能未关闭,继续执行以下操作。 在搜索框中输入regedit,打开注册表编辑器。 编辑HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters下的IPEnableRouter值为0。 指定值为 0:关闭 IP 转发。 指定值为 1:启用 IP 转发。
  • 方案架构 OBS中上传对象的加解密原理说明如下: 加密原理 图2 加密原理 获取加密密钥 通过KMS,生成一个用于加密OBS桶内对象的数据加密密钥。 加密数据上传至OBS桶 加密SDK通过获取的数据加密密钥,对上传的数据明文进行加密处理,将被加密的对象密文存储到OBS。 解密原理 图3 解密原理 下载对象 通过OBS,下载被加密的对象数据。 解密对象 被加密对象通过加密SDK获取对应的密文数据密钥,通过KMS,进行密文数据密钥的解密操作,获得被解密后的原始对象。
  • 应用场景 对象存储服务(Object Storage Service,OBS)是一个基于对象的海量存储服务,为客户提供海量、安全、高可靠、低成本的数据存储能力。 密钥管理服务(Key Management Service,KMS)是一种安全、可靠、简单易用的密钥托管服务,帮助用户集中管理密钥,保护密钥安全。KMS提供信封加密能力,无需通过网络传输大量数据即可完成数据加解密。 KMS可以对OBS桶内对象进行全量加密或者部分加密,在OBS服务使用KMS加密过程中,信封加密方式有效保障了数据传输的加密性、数据解密的效率和便捷性,在对象上传和下载过程中,保证信息安全: 图1 使用KMS加密OBS 全量加密:指对OBS桶内上传的所有对象进行加密。此时,需要先对OBS桶加密,然后对桶里的对象进行加密。 开启OBS桶加密。 具体操作请参见OBS桶加密:创建OBS桶时开启服务端加密功能或者OBS桶加密:为已创建的OBS桶开启加密。 选择加密方式,对桶中的对象进行加密。 您可以选择“继承桶加密配置”加密方式,此时桶中的对象和OBS桶采用相同的加密策略;也可以根据需要选择“SSE-KMS加密”方式对OBS桶中上传的对象进行加密。具体操作请参见上传对象加密(SSE-KMS加密方式)。 部分加密:指对OBS桶内上传的部分对象进行加密。此时不需要对OBS桶进行加密,直接对OBS桶中的对象进行加密。 具体操作请参见上传对象加密(SSE-KMS加密方式)。
  • 上传对象加密(SSE-KMS加密方式) 在OBS管理控制台桶列表中,单击待操作的桶,进入“概览”页面。 在左侧导航栏,单击“对象”。 单击“上传对象”,系统弹出“上传对象”对话框。 单击“添加文件”,选择待上传的文件后,单击“打开”。 在服务端加密行,选择目标加密方式,选择完成后,在下方的选择框中选择默认密钥或者自定义密钥,如图6所示。 图6 加密上传对象(已开启OBS桶加密) 图7 加密上传对象(未开启OBS桶加密) 如果对象所在的OBS桶已开启加密,可在服务端加密行选择继承桶的加密配置,与OBS桶使用同样的加密配置进行上传对象的加密。 如果对象所在的OBS桶未开启加密,可选择先开启OBS桶加密,或者直接使用“SSE-KMS”加密方式加密上传对象。 对象上传成功后,可在对象列表中查看对象的加密状态。 对象的加密状态不可以修改。 使用中的密钥不可以删除,如果删除将导致加密对象不能下载。
  • Oracle为CDB数据库时的配置 建议由数据库管理员进行CDC功能的配置操作。 开启日志归档。 在命令行工具中执行以下命令以sys用户连接到数据库。 在实际使用过程中,可以有多种方式连接数据库,此处以命令行方式为例进行说明。 sqlplus /nolog CONNECT sys/password@host:port AS SYSDBA; 其中: password为数据库sys用户的密码,可向数据库管理员获取。 host为数据库实例所在服务器的IP地址,请根据实际情况设置。 port为数据库实例所使用的端口,请根据实际情况设置。 执行以下命令,检查日志归档是否已开启。 archive log list; 若回显打印“Database log mode: No Archive Mode”,说明日志归档未开启,继续执行下一步。 若回显打印“Database log mode: Archive Mode”,说明日志归档已开启,直接跳到1.f。 执行以下命令配置归档日志参数。 alter system set db_recovery_file_dest_size = 100G; alter system set db_recovery_file_dest = '/opt/oracle/oradata/recovery_area' scope=spfile; 其中: 100G为日志文件存储空间的大小,请根据实际情况设置。 /opt/oracle/oradata/recovery_area为日志存储路径,请根据实际规划设置,但须确保路径提前创建。 执行以下命令开启日志归档。 开启日志归档功能需重启数据库,重启期间将导致业务中断,请谨慎操作。 归档日志会占用较多的磁盘空间,若磁盘空间满了会影响业务,请定期清理过期归档日志。 shutdown immediate; startup mount; alter database archivelog; alter database open; 执行以下命令,确认日志归档是否已成功开启。 archive log list; 当回显打印“Database log mode: Archive Mode”,说明日志归档已开启。 执行以下命令退出数据库连接。 exit; 安装LogMiner工具。 在命令行工具中执行以下命令以sys用户连接到数据库实例。 sqlplus sys/password@host:port/SID as sysdba 其中: password为数据库sys用户的密码,请向数据库管理员获取。 host为数据库实例所在服务器的IP地址,请根据实际情况设置。 port为数据库实例所使用的端口,请根据实际情况设置。 SID为要同步数据所在实例的实例名,请根据实际情况设置。 执行以下命令,检查LogMiner工具是否已安装。 desc DBMS_LOGMNR desc DBMS_LOGMNR_D 若无打印信息返回,说明LogMiner工具未安装,继续执行下一步。 若有打印信息返回,说明LogMiner工具已安装,直接跳到3。 执行以下命令,安装LogMiner工具。 @$ORACLE_HOME/rdbms/admin/dbmslm.sql @$ORACLE_HOME/rdbms/admin/dbmslmd.sql 创建LogMiner执行用户并给用户赋予权限。 执行以下命令创建LogMiner用户角色并配置权限。 create role c##roma_logminer_privs container=all; grant create session, execute_catalog_role, select any transaction, flashback any table, select any table, lock any table, logmining, set container, select any dictionary to c##roma_logminer_privs container=all; grant select on SYSTEM.LOGMNR_COL$ to c##roma_logminer_privs container=all; grant select on SYSTEM.LOGMNR_OBJ$ to c##roma_logminer_privs container=all; grant select on SYSTEM.LOGMNR_USER$ to c##roma_logminer_privs container=all; grant select on SYSTEM.LOGMNR_UID$ to c##roma_logminer_privs container=all; grant select on V_$DATABASE to c##roma_logminer_privs container=all; grant select_catalog_role to c##roma_logminer_privs container=all; 其中,c##roma_logminer_privs为LogMiner用户角色名,请根据实际规划设置。 执行以下命令创建LogMiner执行用户。 create user c##roma_logminer identified by password default tablespace users container=all; grant c##roma_logminer_privs to c##roma_logminer container=all; alter user c##roma_logminer quota unlimited on users container=all; 其中: c##roma_logminer为LogMiner用户名,请根据实际规划设置。 password为LogMiner用户密码,请根据实际规划设置。 c##roma_logminer_privs为LogMiner用户角色,在3.a中创建。 执行以下命令修改日志记录参数。 alter database add supplemental log data (all) columns; 执行以下命令退出数据库连接。 exit;
共100000条