华为云用户手册

  • GaussDB (DWS)可以存储多少业务数据? 数据仓库 集群每个节点默认能够支持1.49TB、2.98TB、4.47TB、160GB、1.68TB、13.41TB六种规格的存储容量,一个集群支持的节点数范围为3~256,集群总的存储容量随集群规模等比例扩充。 为增强可靠性,每个节点都有一个副本,副本会占用一半的存储空间,选择容量时副本容量会自动翻倍存储。 数据仓库系统会备份数据,生成索引、临时缓存文件、运行日志等内容,并占用存储容量。每个节点实际存储的数据,大致为总存储容量的一半。 父主题: 数据迁移
  • 操作步骤 使用系统管理员dbadmin连接DWS数据库。 执行以下SQL语句创建角色role1。 1 CREATE ROLE role1 PASSWORD disable; 执行以下SQL语句,为角色role1进行授权。 1 2 3 GRANT usage ON SCHEMA s1 TO role1; --赋予SCHEMA s1的访问权限; GRANT select ON ALL TABLES IN SCHEMA s1 TO role1; --赋予SCHEMA s1下所有表的查询权限; ALTER DEFAULT PRIVILEGES FOR USER tom IN SCHEMA s1 GRANT select ON TABLES TO role1; --赋予SCHEMA s1未来创建的表的权限,其中tom为SCHEMA s1的owner 执行以下SQL语句,将角色role1授权到实际用户user1。 1 GRANT role1 TO user1; 如果访问的SCHEMA s1中包含有外表,还需要对只读用户user1进行使用外表的授权,执行以下命令。 1 ALTER USER user1 USEFT; 否则以只读用户查询外表时会报以下错误:“ERROR: permission denied to select from foreign table in security mode”。 使用只读用户user1进行SCHAMA s1下所有表数据的日常读取。
  • GaussDB(DWS)以pg_toast_temp*或pg_temp*开头的Schema是什么? 查询Schema列表的时候,发现查询结果存在pg_temp*或pg_toast_temp*的Schema,如下图所示。 1 SELECT * FROM pg_namespace; 这些Schema是在创建临时表时,该临时表通过每个会话独立的以pg_temp开头的Schema来保证只对当前会话可见,因此,不建议用户在日常操作中手动删除以pg_temp,pg_toast_temp开头的Schema。 临时表只在当前会话可见,本会话结束后会自动删除,这些相应的Schema也会被删除。 父主题: 数据库使用
  • 截取单位差异 substrb(),按字节截取。 substr(),按字符截取。 substring(),按字符截取。 以utf8编码为例,1个汉字占3个字节,当使用substrb()截取长度3的子串时,只能截取到一个字符,而substr()/substring()可以截取到三个字符。 示例: 1 2 3 4 SELECT substrb('data数据库',3,5),substr('data数据库',3,5),substring('data数据库',3,5); substrb | substr | substring ---------+----------+----------- ta数 | ta数据库 | ta数据库
  • 函数形式 substrb()、substr()和substring()均为字符串截取函数,都可带两个或三个参数,用于提取字符串中指定截取的开始位置和截取的长度。函数定义如下: 1 2 3 substrb(string, from [, count]) substr(string, from [, count]) substring(string, from [, count]) 参数描述:从参数string中抽取子字符串,from表示抽取的起始位置,count表示抽取的字符串长度。 返回值类型:text
  • 权限管理 GaussDB(DWS)中的权限管理分为三种场景: 系统权限 系统权限又称为用户属性,包括SYSADMIN、CREATEDB、CREATEROLE、AUDITADMIN和 LOG IN。 系统权限一般通过CREATE/ALTER ROLE语法来指定。其中,SYSADMIN权限可以通过GRANT/REVOKE ALL PRIVILEGE授予或撤销。但系统权限无法通过ROLE和USER的权限被继承,也无法授予PUBLIC。 用户权限 将一个角色或用户的权限授予一个或多个其他角色或用户。在这种情况下,每个角色或用户都可视为拥有一个或多个数据库权限的集合。 当声明了WITH ADMIN OPTION,被授权的用户可以将该权限再次授予其他角色或用户,以及撤销所有由该角色或用户继承到的权限。当授权的角色或用户发生变更或被撤销时,所有继承该角色或用户权限的用户拥有的权限都会随之发生变更。 数据库系统管理员可以给任何角色或用户授予/撤销任何权限。拥有CREATEROLE权限的角色可以赋予或者撤销任何非系统管理员角色的权限。 数据对象权限 将数据库对象(表和视图、指定字段、数据库、函数、模式等)的相关权限授予特定角色或用户。GRANT命令将数据库对象的特定权限授予一个或多个角色。这些权限会追加到已有的权限上。
  • USER/ROLE 用户或角色是数据库服务器(集群)全局范围内的权限控制系统,是集群业务的所有者和执行者,用于各种集群范围内所有的对象权限管理。因此角色不特定于某个单独的数据库,但角色登录集群的时候必须要显式指定登录的用户名,以保证当前连接执行的操作者的透明性。同时数据库也会通过权限管理限定用户的访问和操作权限。 用户是权限的最终体现者,所有的权限管理最终都体现在用户对数据库对象的操作权限是否被允许。
  • GaussDB(DWS)经典变更规格与弹性变更规格、扩容、缩容分别在什么场景下使用? 经典变更规格相对来说比较重量级,对业务的影响也比较大,相当于实现将老集群迁移到新集群的功能,并同时实现规格的升降、节点数量的增减。建议用户优先使用扩容、缩容、弹性变更规格等轻量级操作。功能特性具体适用场景如下表所示: 表1 特性功能区别 功能特性 适用场景 备注 扩容 随着您的业务规模扩张,对数据存储容量和性能有更高的要求时,或者集群整体CPU不足时,建议通过扩容集群进行集群节点的扩容 实时数仓(单机部署)不支持扩容集群。 缩容 集群容量大量闲置的业务低谷期,可通过缩容操作来减少节点数量以实现减少成本的目的。 实时数仓(集群部署)不支持缩容至单机部署集群。 弹性变更规格 仅对现有集群做规格的调整,该功能不会涉及节点数量的改变,只是对节点的CPU、内存等做配置升级或降级,用以实现根据业务量调整集群性能,以实现业务诉求。 弹性变更规格目前仅支持E CS +EVS形态的标准数仓或实时数仓集群。 经典变更规格 若有以下需求可考虑使用调经典变更规格功能,例如: BMS集群或不支持弹性变更规格功能的集群,该场景只能进行经典变更规格操作实现规格变更。 用户想要改变集群拓扑结构,因为扩容/缩容操作都是按环增加/减少节点。 集群版本低需变更为新集群,同时不想进行业务数据迁移。 经典变更规格目前仅支持标准数仓集群。 父主题: 集群管理
  • Helm3部署示例的环境准备 本节作为后续三个示例的环境准备,以环境准备中的chart目录为例,将使用如下模板,对CCE集群进行部署,在代码托管代码仓中,创建如下目录。 configmap.yaml部分片段: metadata: name: {{ .Values.configmapname }} deployment.yaml部分片段: spec: template: spec: containers: - image: '{{ .Values.imagename }}:{{ .Values.imagetag }}' values.yaml部分片段: configmapname: valuesfromfile imagename: httpd imagetag: latest {{ .Values.xxxx }} 对应Chart内values.yaml定义的变量。 以下三个示例,是在本节基础上进行的。 参考:Values文件使用说明。 示例1:使用Chart包或Chart文件结构目录部署 如果Chart中已有缺省values文件,则不需要指定制品仓库values文件,可直接部署。 其部署结果为: 对应CCE生成的configMap为: 对应CCE生成的deployment为: 示例2:通过指定制品仓库中的Values文件部署 本示例将演示,指定制品仓库中的Values文件进行部署。 外部values文件中定义的值将会覆盖Chart中values文件定义值。 外部Values的片段,本示例命名为values123.yaml: configmapname: valuesfile-releasenman imagename: nginx imagetag: stable 如下图,在“选择Values文件”中,选择制品仓库中的Values文件: 其部署结果为: 对应CCE控制台的configMap为: 对应CCE控制台的deployment为: 示例3:通过设置Values值进行部署 当设置了Values的值,其优先级会是最高的,会覆盖Chart内values文件设置值以及外部values文件内的设置值。 下面将以设置镜像版本的操作为例: Chart内values文件片段: imagetag: latest 制品仓库values文件片段: imagetag: stable 在设置values,填入: imagetag=perl 其部署结果为: 对应CCE控制台的deployment为:
  • 查看应用 介绍如何查看已创建应用的信息,该信息包括应用的部署记录及配置详情。 应用部署记录查看:您可查看应用的最近92天的部署记录。 应用配置详情查看:您可查看应用的最新配置信息。 应用操作记录查看:您可查看应用最近一年的操作记录。 同一个应用每部署一次,增加一次版本记录,编号最新的为最近一次部署记录。您可以查看已部署的应用中的“部署日志"、“执行参数”、“访问方式”、“环境”等信息。 单击目标应用名称,进入该应用“部署记录”页面。 在“部署记录”即可查看该应用的历史版本,排序由上至下分别对应部署时间由近至远。 可在上图中单击选中某一个应用版本,可查看该应用版本的“部署日志”、“执行参数”、“访问方式”、“环境”等信息。 表1 参数说明 参数 说明 部署日志 部署日志信息。 说明: 界面默认展示应用的全量日志,单击某个步骤可查看该步骤的部署日志。 单击日志窗口右上角全屏按钮,可以最大化日志窗口;单击“退出全屏”按钮,可以退出全屏。 单击“下载全量日志”,可以将日志下载到本地。 执行参数 该应用部署时的“执行参数”中参数对应的数值。 访问方式 仅应用中“部署步骤”包含“URL健康测试”时有该参数,添加该部署步骤可以在主机上通过访问 URL 测试服务状态。 环境 在主机部署场景下,显示该应用部署的环境。 回退到“部署记录”页签,切换顶部的页签,您可以查看已部署的应用中最新的“基本信息"、“部署步骤”、“参数设置”、“部署记录”“环境管理”、“权限管理”、“通知订阅”等信息。 单击“部署”旁的图标,在下拉框中单击“操作历史”,可以查看该应用最近一年的操作记录,也可以回到应用列表,选择目标应用,单击图标,单击“操作历史”进入页面。 参数 说明 操作人 显示具体操作人员的昵称。 操作类型 显示操作人员的操作类型,分为“新建”、“修改”、“禁用”、“取消禁用”。 修改时间 显示操作的具体时间。 操作对象 显示操作人员操作的具体对象,分为“应用”、“部署步骤”、“参数设置”、“权限管理”、“通知订阅”。
  • 示例事件 SMN 示例事件 { "record": [ { "event_version": "1.0", "smn": { "topic_urn": "urn:smn:{region}:0162c0f220284698b77a3d264376343a:{function_name}", "timestamp": "2018-01-09T07:11:40Z", "message_attributes": null, "message": "this is smn message content", "type": "notification", "message_id": "a51671f77d4a479cacb09e2cd591a983", "subject": "this is smn message subject" }, "event_subscription_urn": "urn:fss:{region}:0162c0f220284698b77a3d264376343a:function:default:read-smn-message:latest", "event_source": "smn" } ], "functionname": "test", "requestId": "7c307f6a-cf68-4e65-8be0-4c77405a1b2c", "timestamp": "Wed Nov 15 2017 12:00:00 GMT+0800 (CST)" } 表1 参数说明 参数 类型 示例值 描述 event_version String 1.0 事件协议的版本。 topic_urn String 参考示例 SMN事件唯一编号 type String notification 事件的类型 RequestID String 7c307f6a-cf68-4e65-8be0-4c77405a1b2c 请求ID。每个请求的ID取值唯一。 message_id String a51671f77d4a479cacb09e2cd591a983 消息ID。每条消息的ID取值唯一。 Message String this is smn message content 消息内容 event_source String smn 事件源 event_subscription_urn String 参考示例 添加的订阅唯一编号 timestamp String Wed Nov 15 2017 12:00:00 GMT+0800 (CST) 事件发生的时间 APIG示例事件 { "body": "{\"test\":\"body\"}", "requestContext": { "apiId": "bc1dcffd-aa35-474d-897c-d53425a4c08e", "requestId": "11cdcdcf33949dc6d722640a13091c77", "stage": "RELEASE" }, "queryStringParameters": { "responseType": "html" }, "httpMethod": "GET", "pathParameters": { "path":"value" }, "headers": { "accept-language": "zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2", "accept-encoding": "gzip, deflate, br", "x-forwarded-port": "443", "x-forwarded-for": "103.218.216.98", "accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", "upgrade-insecure-requests": "1", "host": "50eedf92-c9ad-4ac0-827e-d7c11415d4f1.apigw.region.cloud.com", "x-forwarded-proto": "https", "pragma": "no-cache", "cache-control": "no-cache", "x-real-ip": "103.218.216.98", "user-agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:57.0) Gecko/20100101 Firefox/57.0" }, "path": "/apig-event-template", "isBase64Encoded": true } 通过APIG服务调用函数服务时,isBase64Encoded的值默认为true,表示APIG传递给FunctionGraph的请求体body已经进行Base64编码,需要先对body内容Base64解码后再处理。 函数必须按以下结构返回字符串。 { "isBase64Encoded": true|false, "statusCode": httpStatusCode, "headers": {"headerName":"headerValue",...}, "body": "..." } 表2 参数说明 参数 类型 示例值 描述 body String "{\"test\":\"body\"}" 记录实际请求转换为String字符串后的内容。 requestContext Map 参考示例 请求来源的API网关的配置信息、请求标识、认证信息、来源信息。 httpMethod String GET 记录实际请求的HTTP方法 queryStringParameters Map 参考示例 记录在API网关中配置过的Query参数以及实际取值。 pathParameters Map 参考示例 记录在API网关中配置过的Path参数以及实际取值。 headers Map 参考示例 记录实际请求的完整Header内容 path String /apig-event-template 记录实际请求的完整的Path信息 isBase64Encoded Boolean True 默认为true DIS示例事件 { "ShardID": "shardId-0000000000", "Message": { "next_partition_cursor": "eyJnZXRJdGVyYXRvclBhcmFtIjp7InN0cmVhbS1uYW1lIjoiZGlzLXN3dGVzdCIsInBhcnRpdGlvbi1pZCI6InNoYXJkSWQtMDAwMDAwMDAwMCIsImN1cnNvci10eXBlIjoiVFJJTV9IT1JJWk9OIiwic3RhcnRpbmctc2VxdWVuY2UtbnVtYmVyIjoiNCJ9LCJnZW5lcmF0ZVRpbWVzdGFtcCI6MTUwOTYwNjM5MjE5MX0", "records": [ { "partition_key": "shardId_0000000000", "data": "d2VsY29tZQ==", "sequence_number": "0" }, { "partition_key": "shardId_0000000000", "data": "dXNpbmc=", "sequence_number": "1" }, { "partition_key": "shardId_0000000000", "data": "RnVuY3Rpb25TdGFnZQ==", "sequence_number": "2" }, { "partition_key": "shardId_0000000000", "data": "c2VydmljZQ==", "sequence_number": "3" } ], "millis_behind_latest": "" }, "Tag": "latest", "StreamName": "dis-swtest" } 表3 参数说明 参数 类型 示例值 描述 ShardID String shardId-0000000000 数据下载分区的ID next_partition_cursor String 参考示例 下一个分区的游标 Records Map 参考示例 存储在DIS通道中的数据单元 partition_key String 参考示例 分区键 data String 参考示例 数据块,由数据生产者添加到数据通道 sequence_number Int 参考示例 每个记录的唯一标识符,由DIS服务自动分配 Tag String latest 通道的标签 StreamName String dis-swtest 通道名称 TIMER示例事件 { "version": "v1.0", "time": "2018-06-01T08:30:00+08:00", "trigger_type": "TIMER", "trigger_name": "Timer_001", "user_event": "User Event" } 表4 参数说明 参数 类型 示例值 描述 version String V1.0 事件协议的版本 time String 2018-06-01T08:30:00+08:00 事件产生的时间 trigger_type String TIMER 触发器的类型 trigger_name String Timer_001 触发器的名字 user_event String User Event 在创建触发器时配置的附加信息 LTS示例事件 { "lts": { "data": "ICB7CiAgICAibG9ncyI6W3sKICAgICAgICAgIm1lc3NhZ2UiOiIyMDE4LTA4LTA4LzA4OjA4OjA4IFtXUk5dIFt0ZXN0LmdvOjA4XVRoaXMgaXMgYSB0ZXN0IG1lc3NhZ2UuIiwKICAgICAgICAgInRpbWUiOjE1MzAwMDk2NTMwNTksCiAgICAgICAgICJob3N0X25hbWUiOiJlY3MtdGVzdCIsCiAgICAgICAgICJpcCI6IjE5Mi4xNjguMS4xIiwKICAgICAgICAgInBhdGgiOiJ2YXIvbG9nL3Rlc3QubG9nIiwKICAgICAgICAgImxvZ191aWQiOiI2NjNkNjkzMC03OTJkLTExZTgtOGIwOC0yODZlZDQ4OGNlNzAiLAogICAgICAgICAibGluZV9ubyI6MQogICAgIH1dLAogICAgIm93bmVyIjogIjYyODBlMTcwYmQ5MzRmNjBhNGQ4NTFjZjVjYTA1MTI5IiwKICAgICJsb2dfZ3JvdXBfaWQiOiAiOTdhOWQyODQtNDQ0OC0xMWU4LThmYTQtMjg2ZWQ0ODhjZTcwIiwKICAgICJsb2dfdG9waWNfaWQiOiAiMWE5Njc1YTctNzg0ZC0xMWU4LTlmNzAtMjg2ZWQ0ODhjZTcwIgogfQ==" } } 表5 Event中涉及的参数解释 参数 类型 示例值 描述 data Sting 参考示例 Base64编码后的数据 CTS 示例事件 { "cts": { "time": "2018/06/26 08:54:07 GMT+08:00", "user": { "name": "userName", "id": "5b726c4fbfd84821ba866bafaaf56aax", "domain": { "name": "domainName", "id": "b2b3853af40448fcb9e40dxj89505ba" } }, "request": {}, "response": {}, "code": 204, "service_type": "vpc", "resource_type": "VPC", "resource_name": "workflow-2be1", "resource_id": "urn:fgs:{region}:2d1d891d93054bbaa69b9e866c0971ac:graph:workflow-2be1", "trace_name": "deleteGraph", "trace_type": "ConsoleAction", "record_time": "2018/06/26 08:54:07 GMT+08:00", "trace_id": "69be64a7-0233-11e8-82e4-e5d37911193e", "trace_status": "normal" } } 表6 参数说明 参数 类型 示例值 描述 User Map 参考示例 本次请求的发起用户信息 Request Map 参考示例 事件请求内容 Response Map 参考示例 事件响应内容 Code Int 204 事件响应码,例如200、400 service_type String vpc 发送方的简写,比如vpc,ecs等等 resource_type String VPC 发送方资源类型,比如vm,vpn等等 resource_name String workflow-2be1 资源名称,例如ecs服务中某个虚拟机的名称 trace_name String deleteGraph 事件名称,比如:startServer, shutDown等 trace_type String ConsoleAction 事件发生源头类型,例如ApiCall record_time string 2018/06/26 08:54:07 GMT+08:00 cts服务接受到这条trace的时间 trace_id String 69be64a7-0233-11e8-82e4-e5d37911193e 事件的唯一标识符 trace_status String normal 事件的状态 DDS示例事件 { "records": [ { "event_source": "dds", "event_name": "insert", "region": "{region}", "event_version": "1.0", "dds": { "size_bytes": "100", "token": "{\"_data\": \"825D8C2F4D0000001529295A100474039A3412A64BA89041DC952357FB4446645F696400645D8C2F8E5BECCB6CF5370D6A0004\"}", "full_document": "{\"_id\": {\"$oid\": \"5d8c2f8e5beccb6cf5370d6a\"},\"name\": \"dds\",\"age\": {\"$numberDouble\": \"52.0\"}}", "ns": "{\"db\": \"functiongraph\",\"coll\": \"person\"}" }, "event_source_id": "e6065860-f7b8-4cca-80bd-24ef2a3bb748" } ] } 表7 参数说明 参数 类型 示例值 描述 region String cn-north-1 DDS实例所在的地域 event_version String 1.0 事件协议的版本 event_source String dds 事件的来源 event_name String insert 事件的名字 size_bytes Int 100 消息的字节数 token String 参考示例 Base64编码后的数据 full_document String 参考示例 完整的文件信息 ns String 参考示例 列名 event_source_id e6065860-f7b8-4cca-80bd-24ef2a3bb748 参考示例 事件源唯一标识符 Kafka示例事件 { "event_version": "v1.0", "event_time": 1576737962, "trigger_type": "KAFKA", "region": "{region}", "instance_id": "81335d56-b9fe-4679-ba95-7030949cc76b", "records": [ { "messages": [ "kafka message1", "kafka message2", "kafka message3", "kafka message4", "kafka message5" ], "topic_id": "topic-test" } ] } 表8 参数说明 参数 类型 示例值 描述 event_version String v1.0 事件协议的版本 event_time String 2018-01-09T07:50:50.028Z 事件发生的时间 trigger_type String KAFKA 事件类型 region String cn-north-1 Kafka实例所在的地域 instance_id String 81335d56-b9fe-4679-ba95-7030949cc76b 创建的Kafka实例的唯一标识符。 messages String 参考示例 消息内容 topic_id String topic-test 消息的唯一标识符 GeminiDB示例事件 { "records": [ { "event_name": "\"insert\"", "event_version": "1.0", "event_source": "gemini_mongo", "region": "{region}", "gemini_mongo": { "full_document": "{\"_id\": {\"$oid\":\"5f61de944778db5fcded3f87\"},\"zhangsan\": \"zhangsan\"}", "ns": "{\"db\": \"zhangsan\",\"coll\": \"zhangsan\"}", "size_bytes": "100", "token": "{\"_data\": \"825F61DE940000000129295A1004A2D9AE61206C43A5AF47CAF7C5C00C5946645F696400645F61DE944778DB5FCDED3F870004\"}" }, "event_source_id": "51153d19-2b7d-402c-9a79-757163258a36" } ], "vernier": "{\"_data\": \"825F61DE940000000129295A1004A2D9AE61206C43A5AF47CAF7C5C00C5946645F696400645F61DE944778DB5FCDED3F870004\"}" } 表9 参数说明 参数 类型 示例值 描述 region String cn-north-1 GeminiDB实例所在的地域 event_source String gemini_mongo 事件的来源 event_version String 1.0 事件协议的版本 full_document String 参考示例 完整的文件信息 size_bytes Int 100 消息的字节数 token String 参考示例 Base64编码后的数据 vernier String 参考示例 游标 RabbitMQ示例事件 { "event_version": "v1.0", "event_time": 1576737962, "trigger_type": "RABBITMQ", "region": "{region}", "records": [ { "messages": [ "rabbitmq message1", "rabbitmq message2", "rabbitmq message3", "rabbitmq message4", "rabbitmq message5" ], "instance_id": "81335d56-b9fe-4679-ba95-7030949cc76b", "exchange": "exchange-test" } ] } 表10 参数说明 参数 类型 示例值 描述 event_version String v1.0 事件协议的版本 Region String cn-north-1 RabbitMQ实例所在的地域 instance_id String 81335d56-b9fe-4679-ba95-7030949cc76b 创建的RabbitMQ实例的唯一标识符。 EG示例事件 RocketMQ自定义事件源 { "datacontenttype": "application/json", "data": { "context": "yyyyy" }, "subject": "ROCKETMQ:region:domainId/projectId:ROCKETMQ:eventSourceName", "specversion": "1.0", "id": "016d5bd3-6231-4e9e-86ef-e451a070d598", "source": "eventSourceName", "time": "2023-04-07T11:51:10Z", "type": "ROCKETMQ:CloudTrace:RocketmqCall" } OBS应用事件源 { "channel_id":"b65779ed-d9d0-4a6c-b312-c767226964cf", "description":"", "name":"subscription-xeak", "sources":[ { "id":null, "name":"HC.OBS.DWR", "detail":{ "bucket":"eventbucket", "objectKeyEncode":true }, "filter":{ "source":[ { "op":"StringIn", "values":[ "HC.OBS.DWR" ] } ], "type":[ { "op":"StringIn", "values":[ "OBS:DWR:ObjectCreated:PUT", "OBS:DWR:ObjectCreated:POST" ] } ], "subject":{ "and":[ { "op":"StringStartsWith", "values":[ "/ddd" ] } ] }, "data":{ "obs":{ "bucket":{ "name":[ { "op":"StringIn", "values":[ "output-your" ] } ] } } } }, "provider_type":"OFFICIAL" } ], "targets":[ { "id":null, "name":"HC.FunctionGraph", "detail":{ "urn":"urn:fss:cn-north-7:c53626012ba84727b938ca8bf03108ef:function:A-nodejs-lqz:pylog:latest", "agency_name":"EG_AGENCY" }, "dead_letter_queue":null, "provider_type":"OFFICIAL", "transform":{ "type":"ORIGINAL", "value":"" } } ] } 云服务事件源: { "specversion":"1.0", "id":"eaf3b6a6-d525-11ed-a4ca-1baaeb906770", "source":"HC.OBS", "type":"OBS:CloudTrace:Others", "datacontenttype":"application/json", "subject":"OBS:cn-north-5:1d60cc02b9814b9e8cab1ff36886cacb/a5b94f2084a14e3eb8273dd224b89d9a:OBJECT", "time":"2023-04-07T09:21:53.271Z", "data":{ "code":"200", "source_ip":"10.62.9.176", "trace_type":"Others", "event_type":"data", "project_id":"a5b94f2084a14e3eb8273dd224b89d9a", "total_time":"138", "content_length":"6887848", "trace_id":"eaf3b6a6-d525-11ed-a4ca-1baaeb906770", "trace_name":"GET.OBJECT", "resource_type":"OBJECT", "trace_rating":"normal", "service_type":"OBS", "tracker_name":"obs-eg", "time":"1680859313271", "resource_name":"fangxin-sdk:SDK/nodejs-sdk.zip", "record_time":"1680859313271", "request_id":"000001875B05B4AB8411EF94DDE202C0", "user":{ "domain":{ "id":"1d60cc02b9814b9e8cab1ff36886cacb", "name":"hwstaff_pub_fcspaasw3" }, "name":"devuser", "id":"0d8880584b0090271f7cc00857a7c7b9" } } } 更多云服务事件源,请参见云服务事件源。 表11 参数说明 参数 类型 示例值 描述 datacontenttype String application/json 数据类型 data Map 见示例 数据 subject String 见示例 目标值 specversion String 1.0 版本 id String 见示例 唯一键值 source String eventSourceName 来源名称 time String 见示例 发布订阅时间 type String ROCKETMQ:CloudTrace:RocketmqCall 订阅类型
  • API Gateway 可以通过HTTPS调用FunctionGraph函数,使用API Gateway自定义REST API和终端节点来实现。可以将各个API操作(如GET和PUT)映射到特定的FunctionGraph函数,当向该API终端节点发送HTTPS请求时(APIG示例事件),API Gateway会调用相应的FunctionGraph函数。HTTPS调用触发函数的使用过程请参考使用APIG触发器。
  • 云审计 服务触发器CTS 可以编写FunctionGraph函数,根据CTS云审计服务类型和操作订阅所需要的事件通知,当CTS云审计服务获取已订阅的操作记录后,通过CTS触发器将采集到的操作记录作为参数传递(CTS示例事件)来调用FunctionGraph函数。经由函数对日志中的关键信息进行分析和处理,对系统、网络等业务模块进行自动修复,或通过短信、邮件等形式产生告警,通知业务人员进行处理。CTS触发器的使用请参考使用CTS触发器。
  • 业务报表开发流程 使用业务报表进行业务监控的流程如图2所示。 图2 业务报表开发流程图 服务运维岗位或运维管理员权限人员开发业务报表 新增业务报表数据源:首次使用数据源进行报表开发,需要先新增数据源后才能使用。 新增业务报表页面:业务报表以页面来呈现,开发报表需要先新增报表页面。如需对页面进行管理,请参见在监控服务管理业务报表页面。 开发业务报表:为报表新增数据图表,以图表来体现业务数据的动态变化。 基于数仓配置图表:新增warehouse类型数据源后,可以基于数仓中创建的指标或视图配置图表。 基于SQL配置图表:新增其他类型数据源后,可以基于SQL配置图表。 服务所有人员可以查看已开发业务报表 查看业务报表:查看已开发业务报表进行业务监控。
  • AppStage运维中心的优势 简化运维管理:使用AppStage运维中心可以集中管理和监控IT资源及服务,大大简化了运维管理的复杂性。通过统一的Console,SRE可以轻松地管理服务器、数据库、网络和应用等各个方面,实现应用生命周期运行 数据可视化 ,避免数据孤岛。 提高运维效率:AppStage运维中心提供了自动化的运维流程和任务调度功能,可以自动执行常见的运维任务,如监控、故障处理等,节省SRE大量的时间和精力,让运维团队能够更专注于解决重要的问题和提供高价值的服务。 实现故障快速恢复:AppStage运维中心具备强大的故障监测和自动恢复能力,当系统出现故障或异常时,AIOps可以及时发现并采取相应的措施进行修复,最大限度地减少停机时间和业务中断,减轻可能出现的业务损失和客户流失。 提供实时监控和报告:AppStage运维中心集成了丰富的监控和报表功能,可以实时监控系统的性能指标、资源利用率和安全状态等。通过可视化的报表和图表,SRE可以随时了解系统的运行情况,进行及时的决策和调整。同时,这些信息也可以用于向上级管理层的汇报和运维成果展示。 降低运维成本:AppStage运维中心沉淀了华为在运维领域的管理经验,基于人工智能技术提供数据分析,优化资源配置,预测未来需求,以降低IT资源成本。企业将应用迁移至华为云后,通过AppStage运维中心来自主管理和运维,可以自然使用上述能力获得成本优势。 提高运维安全性:AppStage运维中心通过身份验证、访问控制和加密等技术,保护企业应用不受攻击、侵入、干扰和破坏,确保客户数据的安全性和完整性,同时通过自动化变更、操作防呆等减少SRE的误操作风险。
  • 运维面临的问题 应用的快速迭代与现网业务稳定性之间存在冲突,应用发布周期短,版本可能未经过充分的现网验证。 运维平台基于开源软件或者各类分散工具构建,各工具能力参差不齐,缺乏统一的数据接入、监控、诊断、 数据治理 体系。 系统可用性依赖全栈可观测,运维人员需要被动变主动,利用数据实时监控分析系统的性能、可靠性和运行状态,及时发现问题,精准定位问题。 外部安全攻击渗透频率日趋增多,攻击技术手段越发高超,数据泄露风险大。
  • AppStage运维中心应用场景 华为云AppStage运维中心是以云原生应用为中心的一站式数智化运维平台,围绕SRE的工作场景,基于华为内外部优秀实践,把运维流程、工具在业务场景中持续打磨,基于AI持续构建运维活动“自动驾驶”能力,打造自动化、数据化、智能化运维平台,围绕运维的“感知(数字化)、决策(智能化)、执行(自动化)”能力持续提升,大大降低了企业用户维护和使用云原生应用的门槛。 父主题: AppStage运维中心简介
  • 设置事件单 进入AppStage运维中心。 将鼠标悬停在右上角的账号,选择下拉列表中的“工单管理”,默认显示“变更单管理”页面。 单击左侧导航栏的“设置”,进入“设置”页面。 设置事件单。 设置解决时限:单击“编辑”,设置解决时限后单击“确定”,如图1所示。 图1 设置解决时限 设置通知方式:勾选事件通知方式,支持Welink和手机短信。 如需使用Welink通知,需要先配置运维中心对接华为云 WeLink ,配置后显示该选项。 设置排班表:选择需要配置的服务,双击排班表的具体时间表格,显示“编辑排班表”页面,如图2所示,默认为双击的时间,设置值班人,也可以值班时间,然后单击“确定”。将排班表设置完成后单击“保存”。 图2 设置排班表
  • 准备工作 注册华为账号 并实名认证。 在创建函数前,请先注册华为账号并实名认证,具体步骤请参考注册华为账号并开通华为云和实名认证介绍。 如果您已有一个华为账号并实名认证,请跳过此步骤。 免费额度。 函数工作流 服务每个月都会提供一定数量的免费额度,免费额度是子主账户共同使用,具体详情请参见免费额度。 当免费额度使用完后,若您继续使用函数工作流时,账户的可用额度小于待结算的账单时,即被判定为账户欠费。欠费后,可能会影响您的服务资源的正常运行,请及时充值,具体详情请参考账户充值。 为用户添加函数的操作权限。 本章节所有操作均默认具有操作权限,请确保您登录的用户已有“FunctionGraph Administrator”权限,即FunctionGraph服务所有权限,更多权限的说明请参考权限管理。
  • 准备工作 注册华为账号并实名认证。 在创建函数前,请先注册华为账号并实名认证,具体步骤请参考注册华为账号并开通华为云和实名认证介绍。 如果您已有一个华为账号并实名认证,请跳过此步骤。 免费额度。 函数工作流服务每个月都会提供一定数量的免费额度,免费额度是子主账户共同使用,具体详情请参见免费额度。 当免费额度使用完后,若您继续使用函数工作流时,账户的可用额度小于待结算的账单时,即被判定为账户欠费。欠费后,可能会影响您的服务资源的正常运行,请及时充值,具体详情请参考账户充值。 为用户添加函数的操作权限。 本章节所有操作均默认具有操作权限,请确保您登录的用户已有“FunctionGraph Administrator”权限,即FunctionGraph服务所有权限,更多权限的说明请参考权限管理。
  • 操作场景 资源合规规则添加完成后,您可以在规则列表中查看所有已添加的合规规则,进入规则详情页可查看规则的评估结果、标签、修正配置和规则详情配置等信息。 规则的评估结果数据支持全部导出;在规则详情页的右上角,您可以进行触发规则评估(立即评估)、修改规则(编辑规则)、停用/启用规则、删除规则操作;在修正管理页签您可以查看和编辑此合规规则的修正配置;在标签页签您还可以查看和编辑合规规则的标签。 添加、修改、启用合规规则和触发规则评估需要开启资源记录器,资源记录器处于关闭状态时,合规规则仅支持查看、停用和删除操作。
  • 操作步骤 登录管理控制台。 单击页面左上角的图标,在弹出的服务列表中,选择“管理与监管”下的“配置审计 Config”,进入“资源清单”页面。 单击左侧的“资源合规”,进入“资源合规”页面。 在“规则”页签下的列表中,可查看所有已添加的合规规则以及其运行状态、合规评估结果等信息。 在规则列表中单击合规规则的规则名称,进入规则详情的“基本信息”页。 “基本信息”页签左侧展示合规规则评估结果的详细信息,右侧展示合规规则的配置详情。左侧的评估结果列表默认展示合规评估结果为“不合规”的资源,您可以在列表上方的筛选框中通过合规评估结果、资源名称或资源ID对评估结果进行筛选检索,还支持导出全部评估结果数据。 “修正管理”页签展示此合规规则的修正配置详细信息,并支持编辑、删除修正配置,以及执行修正、添加/删除修正例外等操作。 “标签”页签展示此合规规则的标签信息,且支持编辑标签。 图1 合规规则详情 合规规则的运行状态分为: 已启用:表示此合规规则可用。 已停用:表示此合规规则已停用。 评估中:表示正在使用此合规规则进行资源评估。 提交中:表示自定义合规规则正在提交评估任务给FunctionGraph函数。 当规则评估正在进行中时,规则的运行状态显示为“评估中”,当规则评估结束后,规则的运行状态变为“已启用”,此时可查看规则评估结果。
  • 支持的资源关系 表1 支持的资源关系 服务 资源类型 关系类型 相关云服务 相关资源类型 弹性云服务器 ECS 云服务器 被包含(isContainedIn) 虚拟私有云 VPC 虚拟私有云 企业主机安全 HSS 主机代理 MapReduce服务 MRS 弹性大数据服务 包含(contains) 云备份 存储库 绑定(isAttachedTo) 虚拟私有云 VPC 弹性公网IP 云备份 CBR 备份 云硬盘 EVS 磁盘 关联(isAssociatedWith) 虚拟私有云 VPC 安全组 镜像服务 IMS 镜像 裸金属服务器 BMS 云服务器 被包含(isContainedIn) 虚拟私有云 VPC 虚拟私有云 绑定(isAttachedTo) 云硬盘 EVS 磁盘 关联(isAssociatedWith) 虚拟私有云 VPC 安全组 镜像服务 IMS 镜像 云耀云服务器 HECS 云耀云服务器 被包含(isContainedIn) 虚拟私有云 VPC 虚拟私有云 包含(contains) 虚拟私有云 VPC 弹性公网IP 绑定(isAttachedTo) 云硬盘 EVS 磁盘 关联(isAssociatedWith) 虚拟私有云 VPC 安全组 镜像服务 IMS 镜像 弹性伸缩 AS 弹性伸缩组 被包含(isContainedIn) 虚拟私有云 VPC 虚拟私有云 关联(isAssociatedWith) 虚拟私有云 VPC 安全组 分布式缓存服务 DCS Memcached实例 被包含(isContainedIn) 虚拟私有云 VPC 虚拟私有云 关联(isAssociatedWith) 虚拟私有云 VPC 安全组 节点 被包含(isContainedIn) 分布式缓存服务 DCS Redis实例 Redis实例 被包含(isContainedIn) 虚拟私有云 VPC 虚拟私有云 包含(contains) 分布式缓存服务 DCS 节点 关联(isAssociatedWith) 虚拟私有云 VPC 安全组 弹性负载均衡 ELB 负载均衡器 包含(contains) 弹性负载均衡 ELB 监听器 绑定(isAttachedTo) 虚拟私有云 VPC 弹性公网IP 弹性负载均衡 ELB 后端服务器组 弹性负载均衡 ELB 主备后端服务器组 监听器 被包含(isContainedIn) 弹性负载均衡 ELB 负载均衡器 包含(contains) 弹性负载均衡 ELB 转发策略 绑定(isAttachedTo) 弹性负载均衡 ELB 后端服务器组 弹性负载均衡 ELB 主备后端服务器组 后端服务器组 包含(contains) 弹性负载均衡 ELB 后端服务器 绑定(isAttachedTo) 弹性负载均衡 ELB 负载均衡器 弹性负载均衡 ELB 监听器 主备后端服务器组 包含(contains) 弹性负载均衡 ELB 后端服务器 绑定(isAttachedTo) 弹性负载均衡 ELB 负载均衡器 弹性负载均衡 ELB 监听器 转发策略 被包含(isContainedIn) 弹性负载均衡 ELB 监听器 后端服务器 被包含(isContainedIn) 弹性负载均衡 ELB 后端服务器组 弹性负载均衡 ELB 主备后端服务器组 虚拟私有云 VPC 虚拟私有云 包含(contains) 弹性云服务器 ECS 云服务器 裸金属服务器 BMS 云服务器 云耀云服务器 HECS 云耀云服务器 弹性伸缩 AS 弹性伸缩组 分布式缓存服务 DCS Memcached实例 分布式缓存服务 DCS Redis实例 MapReduce服务 MRS 弹性大数据服务 虚拟私有云 VPC VPC流日志 虚拟私有云 VPC 弹性公网IP 安全组 关联(isAssociatedWith) 弹性云服务器 ECS 云服务器 裸金属服务器 BMS 云服务器 云耀云服务器 HECS 云耀云服务器 弹性伸缩 AS 弹性伸缩组 分布式缓存服务 DCS Memcached实例 MapReduce服务 MRS 弹性大数据服务 MapReduce服务 弹性大数据服务 分布式缓存服务 DCS Redis实例 VPC流日志 被包含(isContainedIn) 虚拟私有云 VPC 子网 虚拟私有云 VPC 弹性网卡 虚拟私有云 VPC 虚拟私有云 弹性网卡 包含(contains) 虚拟私有云 VPC VPC流日志 虚拟私有云 VPC 安全组 子网 包含(contains) 虚拟私有云 VPC VPC流日志 带宽 包含(contains) 虚拟私有云 VPC 弹性公网IP 弹性公网IP 被包含(isContainedIn) 虚拟私有云 VPC 带宽 虚拟私有云 VPC 虚拟私有云 绑定(isAttachedTo) 弹性云服务器 ECS 云服务器 弹性负载均衡 ELB 负载均衡器 MapReduce服务 MRS 弹性大数据服务 NAT网关 公网NAT网关 云硬盘 EVS 磁盘 包含(contains) 云备份 CBR 存储库 绑定(isAttachedTo) 弹性云服务器 ECS 云服务器 裸金属服务器 BMS 云服务器 云备份 CBR 备份 云耀云服务器 HECS 云耀云服务器 镜像服务 IMS 镜像 关联(isAssociatedWith) 弹性云服务器 ECS 云服务器 裸金属服务器 BMS 云服务器 云耀云服务器 HECS 云耀云服务器 NAT网关 公网NAT网关 绑定(isAttachedTo) 虚拟私有云 VPC 弹性公网IP 云数据库 GeminiDB 实例 包含(contains) 云数据库 GeminiDB 节点 节点 被包含(isContainedIn) 云数据库 GeminiDB 实例 云数据库 GaussDB 实例 包含(contains) 云数据库 GaussDB 节点 节点 被包含(isContainedIn) 云数据库 GaussDB 实例 MapReduce服务 MRS 弹性大数据服务 被包含(isContainedIn) 虚拟私有云 VPC 虚拟私有云 绑定(isAttachedTo) 虚拟私有云 VPC 弹性公网IP 关联(isAssociatedWith) 虚拟私有云 VPC 安全组 包含(contains) 弹性云服务器 ECS 云服务器 云容器引擎 CCE 集群 包含(contains) 云容器引擎 CCE 节点 节点 被包含(isContainedIn) 云容器引擎 CCE 集群 企业路由器 ER 连接 被包含(isContainedIn) 企业路由器 ER 实例 实例 包含(contains) 企业路由器 ER 连接 统一身份认证 服务 IAM 委托 关联(isAssociatedWith) 统一身份认证服务 IAM 策略 统一身份认证服务 IAM 权限 用户组 包含(contains) 统一身份认证服务 IAM 用户 关联(isAssociatedWith) 统一身份认证服务 IAM 策略 统一身份认证服务 IAM 权限 策略 关联(isAssociatedWith) 统一身份认证服务 IAM 委托 统一身份认证服务 IAM 用户组 统一身份认证服务 IAM 用户 权限 关联(isAssociatedWith) 统一身份认证服务 IAM 委托 统一身份认证服务 IAM 用户组 统一身份认证服务 IAM 用户 用户 关联(isAssociatedWith) 统一身份认证服务 IAM 策略 统一身份认证服务 IAM 权限 被包含(isContainedIn) 统一身份认证服务 IAM 用户组 云数据库 RDS 实例 包含(contains) 云数据库 RDS 节点 节点 被包含(isContainedIn) 云数据库 RDS 实例 配置审计 Config 合规规则包 包含(contains) 配置审计 Config 合规规则 合规规则 被包含(isContainedIn) 配置审计 Config 合规规则包 云备份 CBR 备份 绑定(isAttachedTo) 弹性云服务器 ECS 云服务器 云硬盘 EVS 磁盘 高性能弹性文件服务 SFS Turbo SFS Turbo 策略 绑定(isAttachedTo) 云备份 CBR 存储库 存储库 绑定(isAttachedTo) 云备份 CBR 策略 被包含(isContainedIn) 弹性云服务器 ECS 云服务器 云硬盘 EVS 磁盘 高性能弹性文件服务 SFS Turbo SFS Turbo 文档数据库服务 DDS 实例 包含(contains) 文档数据库服务 DDS 节点 节点 被包含(isContainedIn) 文档数据库服务 DDS 实例 企业主机安全 HSS 主机代理 包含(contains) 弹性云服务器 ECS 云服务器 Web应用防火墙 WAF 网站 被包含(isContainedIn) Web应用防火墙 WAF 防护策略 防护策略 包含(contains) Web应用防火墙 WAF 网站 高性能弹性文件服务 SFS Turbo SFS Turbo 包含(contains) 云备份 存储库 SFS Turbo 绑定(isAttachedTo) 云备份 备份 父主题: 附录
  • 读写分离优势 相比在应用程序内手动做读写分离,扩容灵活,维护成本低。 客户端读请求按权重分发至后端只读节点,数据库实例整体负载更加均衡,提升资源利用率。 通过代理将指定业务的读请求路由到选定的只读实例上,实现业务隔离,避免多个业务之间相互影响。 数据库代理默认提供过载保护功能:避免用户执行大结果集操作时,因压力过大引起服务端OOM。该功能默认打开,不需要用户单独设置。针对数据库内核过慢引起的压力,依赖数据库限流机制。
  • 注意事项 表1 数据库代理注意事项 分类 注意事项 版本约束 GaussDB(for MySQL)实例内核版本如下时,不支持开通数据库代理。 大于等于2.0.26.2且小于等于2.0.28.3 等于2.0.29.1 GaussDB(for MySQL)实例的内核版本低于2.0.42.230601时,仅支持创建1个代理实例。 GaussDB(for MySQL)实例的内核版本高于或等于2.0.42.230601时,最多支持创建4个代理实例。 不支持的功能 数据库代理不支持压缩协议。 数据库代理不支持事务隔离级别READ-UNCOMMITTED。 数据库代理不支持读写表中单列超过16MB的数据。 数据库代理不支持SQL_MODE参数PAD_CHAR_TO_FULL_LENGTH。 使用约束 实例的CPU总核数(即所有节点的CPU核数的总和)低于8核时,不支持开通数据库代理。 至少创建1个只读节点才能开启读写分离功能。 开启读写分离功能后,不允许修改GaussDB(for MySQL)实例的端口和读写内网地址。 如果执行了Multi-Statements,当前连接的后续请求会全部路由到主节点,需断开当前连接并重新连接才能恢复读写分离。 使用代理地址时,事务请求都会路由到实例的主节点(可以使用事务拆分功能对事务中写之前的读请求进行拆分),不保证非事务读的一致性,业务上有读一致性需求可以封装到事务中。 使用代理地址时,show processlist和直连数据库有差异。因为数据库代理的show processlist是逻辑的,仅仅将通过数据库代理节点下发的业务展示出来,所以和直连数据库有差异。 当某一个代理节点处于异常状态时,通过代理执行show processlist或者Kill时,有可能会出现命令执行时间稍微变长的情况,此时无需关注,业务不会受到影响。 当数据库代理进行缩容后,通过代理执行show processlist命令时,可能会将被缩容的节点上的业务展示出来。 通过数据库代理进行Kill时,偶尔可能会出现超时等报错信息,此时可以通过二次show processlist查看业务是否真正被Kill成功。 当数据库代理的某个节点处于异常状态时,执行show processlist命令时,可能会出现2秒卡顿,此时无需关注,结果会正常返回。 当使用数据库代理时,多语句拼接的SQL大小不超过100MB,避免数据库代理解析SQL消耗过多的资源。 当使用数据库代理时,不能使用中文数据库和中文用户名。 HTAP实时分析 不支持一致性级别和连接池。 路由模式仅支持权重负载模式。 代理模式仅支持读写模式。
  • 基本概念 代理地址 购买数据库代理后,可以从数据库代理中查看代理地址,连接该地址可以执行读写操作,数据库代理会通过代理地址自动将写请求发送到主节点,将读请求发送到只读节点,降低主节点的压力。 代理模式 GaussDB(for MySQL)的代理模式支持读写模式和只读模式。 读写模式:所有写请求只发往主节点,所有读请求按照读权重配比或者是活跃连接数情况分发到已选节点。 只读模式:所有读请求按照读权重配比或者是活跃连接数情况分发到已选只读节点,不会分发到主节点。 事务拆分 数据库代理提供事务拆分的功能,能够将事务内写操作之前的读请求转发到只读节点,降低主节点负载。 更多关于事务拆分的内容请参见开启GaussDB(for MySQL)代理的事务拆分功能。 连接池 数据库代理提供了会话级连接池,可减少短连接业务频繁建立连接导致数据库负载高。 更多关于连接池的内容请参见开启GaussDB(for MySQL)代理的连接池功能。 路由模式 GaussDB(for MySQL)数据库代理支持权重负载、负载均衡的路由模式,可根据需要配置不同的路由模式。 权重负载:根据您设置的读权重比例分发读请求。 负载均衡:根据数据库节点的活跃连接数情况进行读请求分发,将读请求分发到活跃连接数较少的节点上。负载均衡模式不需要修改权重。 更多关于路由模式的内容请参见路由模式。
  • 读写分离原理 GaussDB(for MySQL)支持开通一个或多个数据库代理。 单个数据库代理下的读写分离 一个GaussDB(for MySQL)实例下只有1个数据库代理实例,应用服务通过数据库代理地址连接到数据库代理实例,写请求通过数据库代理实例自动转发到主节点,读请求根据数据库代理实例的路由模式转发至主节点或只读节点。 图1 单个数据库代理读写分离原理图 多个数据库代理下的读写分离 一个GaussDB(for MySQL)实例下可以创建多个数据库代理实例,最多支持创建4个代理实例,主要适用于有隔离需求的复杂业务。不同的应用服务可以根据业务需要连接不同的数据库代理,数据库代理连接指定的只读节点,将不同应用服务之间的读请求最终转发到不同的只读节点上,实现业务隔离。 图2 多个数据库代理读写分离
  • 请求路由规则 只发往主节点的写请求 INSERT、UPDATE、DELETE。 所有DDL操作(建表/库、删表/库、变更表结构、权限等)。 所有事务中的请求(事务拆分开启时部分读请求可能发送至只读节点,详见事务拆分)。 用户自定义函数。 存储过程。 EXECUTE语句。 Multi Statements。 使用到临时表的请求。 所有对用户变量的更改。 KILL(SQL语句中的KILL,非命令KILL)。 发往主节点的读请求 如果查询语句被放在事务中,事务请求都会路由到主实例。如果在查询语句前设置set autocommit=0时也当做事务处理路由到主实例。 如果所有只读节点都均异常或只读节点权重为0时,则查询会路由到主实例。对于成功开启读写分离功能的实例,您可以设置其主实例和只读实例的权重。 在执行SQL语句时: 如果执行了Multi-Statements(如“insert xxx;select xxx”),当前连接的后续请求会全部路由到主节点,需断开当前连接并重新连接才能恢复读写分离。 带锁的读操作(如SELECT for UPDATE)会被路由到主节点。 当使用/*FORCE_MASTER*/这个Hint语句时,会被路由到主实例。 如果执行了Handler语句,默认后续请求会全部路由到主节点,需断开当前连接并重新连接才能恢复读写分离。 SELECT last_insert_id()。 所有对用户变量的查询。 发往只读节点或主节点 非事务中的SELECT。 COM_STMT_EXECUTE命令。 总是发往所有节点 所有系统变量的更改。 USE命令。
  • 理解ModelArts的权限与委托 图1 权限管理抽象 ModelArts每个功能都通过IAM的权限来进行控制。比如,用户(此处指IAM子用户,而非租户)希望在ModelArts创建训练作业,则该用户必须拥有 "modelarts:trainJob:create" 的权限才可以完成操作(无论界面操作还是API调用)。关于如何给一个用户赋权(准确讲是需要先将用户加入用户组,再面向用户组赋权),可以参考IAM的文档《权限管理》。 而ModelArts还有一个特殊的地方在于,为了完成AI计算的各种操作,AI平台在任务执行过程中需要访问用户的其他服务,典型的就是训练过程中,需要访问OBS读取用户的训练数据。在这个过程中,就出现了ModelArts“代表”用户去访问其他云服务的情形。从安全角度出发,ModelArts代表用户访问任何云服务之前,均需要先获得用户的授权,而这个动作就是一个“委托”的过程。用户授权ModelArts再代表自己访问特定的云服务,以完成其在ModelArts平台上执行的AI计算任务。 综上,对于图1 权限管理抽象可以做如下解读: 用户访问任何云服务,均是通过标准的IAM权限体系进行访问控制。用户首先需要具备相关云服务的权限(根据您具体使用的功能不同,所需的相关服务权限多寡亦有差异)。 权限:用户使用ModelArts的任何功能,亦需要通过IAM权限体系进行正确权限授权。 委托:ModelArts上的AI计算任务执行过程中需要访问其他云服务,此动作需要获得用户的委托授权。
  • ModelArts权限管理 默认情况下,管理员创建的IAM用户没有任何权限,需要将其加入用户组,并给用户组授予策略,才能使得用户组中的用户获得对应的权限,这一过程称为授权。授权后,用户就可以基于授予的权限对云服务进行操作。 ModelArts部署时通过物理区域划分,为项目级服务,授权时“选择授权范围方案”可以选择“指定区域项目资源”,如果授权时指定了区域(如华北-北京4)对应的项目(cn-north-4),则该权限仅对此项目生效;简单的做法是直接选择“所有资源”。 ModelArts也支持企业项目,所以选择授权范围方案时,也可以指定企业项目。具体操作参见《创建用户组并授权》。 IAM在对用户组授权的时候,并不是直接将具体的某个权限进行赋权,而是需要先将权限加入到“策略”当中,再把策略赋给用户组。为了方便用户的权限管理,各个云服务都提供了一些预置的“系统策略”供用户直接使用。如果预置的策略不能满足您的细粒度权限控制要求,则可以通过“自定义策略”来进行精细控制。 表1列出了ModelArts的所有预置系统策略。 表1 ModelArts系统策略 策略名称 描述 类型 ModelArts FullAccess ModelArts管理员用户,拥有所有ModelArts服务的权限 系统策略 ModelArts CommonOperations ModelArts操作用户,拥有所有ModelArts服务操作权限除了管理专属资源池的权限 系统策略 ModelArts Dependency Access ModelArts服务的常用依赖服务的权限 系统策略 通常来讲,只给管理员开通“ModelArts FullAccess”,如果不需要太精细的控制,直接给所有用户开通“ModelArts CommonOperations”即可满足大多数小团队的开发场景诉求。如果您希望通过自定义策略做深入细致的权限控制,请阅读ModelArts的IAM权限控制详解。 ModelArts的权限不会凌驾于其他服务的权限之上,当您给用户进行ModelArts赋权时,系统不会自动对其他相关服务的相关权限进行赋权。这样做的好处是更加安全,不会出现预期外的“越权”,但缺点是,您必须同时给用户赋予不同服务的权限,才能确保用户可以顺利完成某些ModelArts操作。 举例,如果用户需要用OBS中的数据进行训练,当已经为IAM用户配置ModelArts训练权限时,仍需同时为其配置对应的OBS权限(读、写、列表),才可以正常使用。其中OBS的列表权限用于支持用户从ModelArts界面上选择要进行训练的数据路径;读权限主要用于数据的预览以及训练任务执行时的数据读取;写权限则是为了保存训练结果和日志。 对于个人用户或小型组织,一个简单做法是为IAM用户配置“作用范围”为“全局级服务”的“Tenant Administrator”策略,这会使用户获得除了IAM以外的所有用户权限。在获得便利的同时,由于用户的权限较大,会存在相对较大的安全风险,需谨慎使用。(对于个人用户,其默认IAM账号就已经属于admin用户组,且具备Tenant Administrator权限,无需额外操作) 当您需要限制用户操作,仅为ModelArts用户配置OBS相关的最小化权限项,具体操作请参见OBS权限管理。对于其他云服务,也可以进行精细化权限控制,具体请参考对应的云服务文档。
共100000条