华为云用户手册

  • 高质量素材规范要求有哪些? 素材制作规范要求:排版有层次,色调平衡,画面简洁且兼容美感。 整体:图片内容符合所选模板及场景定位 ,准确的传达信息,突出画面的主题。 排版:尽量通过位置关系(前后、上下、大小等)提升文字层次感。 核心信息区域:视觉焦点位,展示主要信息点,避免字体过多、偏小、偏大,突出利益点。 辅助区域:不放重要信息,可辅助营造氛围感,烘托主体信息。 色调:减少使用强对比色彩,色彩组调保持画面平衡。 图片版权:确保设计用途的版权、人物肖像权;杜绝使用明显政治倾向、色情、暴力、恐怖等图片。 图1 高质量素材样例 图2 高质量素材样例 图3 高质量素材样例 图4 高质量素材样例 图5 高质量素材样例 父主题: 智能模板制作常见问题
  • 模板用途/来源、图片、文案问题规范要求有哪些? 模板用途问题 模板用途区分,规范示范如图1。 图1 模板用途规范样例 模板发送主体问题 模板发送主体要清晰。错误示范如图2所示,其中图片文案均未出现商家主体。正确示范如图3所示,商家主体在图片或文案显眼位置标识。 图2 错误示范样例 图3 正确示范样例 图片素材问题 合格图片:简洁美观重点突出 图4 合格图片样例 图5 合格图片样例 不合格图片:文字与图片元素重叠、图片模糊、小字多看不清、截断、白底 、大片留白区域、周围大片空白 图6 不合格图片样例:文字与图片元素重叠 图7 不合格图片样例:图片模糊、小字多看不清 图8 不合格图片样例:截断 图9 不合格图片样例:白底 、大片留白区域 图10 不合格图片样例:周围大片空白 文案合规问题 图片/文案涉及其他厂商 图11 错误样例:图片/文案涉及其他厂商 文案截断 图12 错误样例:文案截断 不可使用有明显诱导性的按钮(如手指、箭头等) 图13 错误样例:诱导性符号按钮 不可使用具有明显诱导性,且与实际使用场景不符的文案(如小贷类的已到账、待领取等强诱导性字眼) 图14 错误样例:诱导性不实文案/按钮 图14中“到账”与实际使用场景不符且包含手指/箭头等强诱导性符号。 父主题: 智能模板制作常见问题
  • 各手机厂商智能信息支持能力差异有哪些? 表1 各手机厂商智能信息支持能力 各手机厂商智能信息支持能力一览表 华为 小米 OPPO VIVO 魅族 点击事件 打开H5 √ √ √ √ √ 打开浏览器 √ √ √ √ √ 打开快应用 √ √ √ √ √ 打开app √ √ √ √ √ 打电话 √ √ × × √ 发短信 √ √ × × √ 发邮件 √ √ × × √ 设置日程 √ √ × × √ 打开地图 √ √ × × √ 弹窗 √ √ × × √ 复制 √ √ × × √ 查看大图 √ √ √ √ × 短链能力 个性化短链 √ √ √ √ √ 群发短链 √ √ √ √ √ 识别类型 短链识别 √ √ √ √ √ 特征码识别 √ × × × × 文本识别 √ × √ √ × 动参能力 文本动参 √ √ √ × × 兜底能力 打开应用市场 √ √ √ √ × 打开H5 √ √ √ √ × 打开浏览器 √ √ √ √ × 打开快应用 √ √ × × × 父主题: 智能模板制作常见问题
  • 各手机厂商智能信息模板应用差异有哪些? 各手机厂商版式支持差异 表1 各手机厂商版式支持差异 各手机厂商版式支持能力 华为 小米 OPPO VIVO 魅族 支持情况一览表 模板样式 通知 √ √ √ √ × 图文 √ √ √ √ √ 红包 √ √ √ √ × 长文本 √ × √ × × 多图文 √ √ √ √ √ 单卡券/多卡券 √ × × × × 图片轮播 √ × √ √ × 个性化红包 √ × × × × 电商(单商品) √ × √ √ × 横滑 √ × √ × √ 电商(多商品) √ × × × × 视频图文/图文视频 √ × × × × 视频 √ × √ √ × 各手机厂商信箱展示差异 华为终端收件箱列表显示一行,小米、OPPO及VIVO收件箱列表显示两行。收件箱显示两行的终端,智能信息文案尽量用原短信文案,前置利益点。 智能信息短信在短链和签名报备的情况下,会优先推送至主要栏。 图1 华为终端样例 图2 小米终端样例 图3 OPPO终端样例 图4 vivo终端样例 父主题: 智能模板制作常见问题
  • 智能信息模板总体设计规范有哪些 表1 智能信息模板总体设计规范 规范内容 规范要求 注意事项或建议 文字 使用书面语言 文案内容完整 不能有错别字、语法混乱、符号错乱 不标题党、严重夸大商品 不发布过时效的信息或服务 文案与跳转页面相匹配 - 音视频 内容拥有使用版权 优先使用mp4格式,且内容完整流畅 不能出现马赛克/拉伸变形/模糊等 与对应标题、短信、主体匹配 不含有其他平台水印标识 无杂音、无多音轨 - 图片 内容拥有使用版权 符合所选模板及场景定位 单图大小不超2MB 要素从简、扁平化设计 保证清晰美感,有明确主色调,减少使用强对比色彩 不超过3种字体样式(组合情况下不超过2种字体样式) 周围保持18px~24px边距 不出现引导性按钮 元素不宜过多,以简洁为主 为了保证阅读性,最小文字不小于30px 跳转链接 不存在无法打开的链接、恶意网址 不存在不适用PC的页面 落地页与素材相匹配 不违反广告法 核心功能流程支持全流程流畅 无拉伸、收缩、扭曲等变形或者页面不适配的情况 链接必须为https或http开头 链接跳转需跳转到厂商应用下载平台 页面上线后如有问题,将直接下线再另行通知 父主题: 智能信息模板制作规范
  • 能否通过动态参数指定智能信息模板的图片、跳转链接、标题、内容? 动态参数的作用是为了方便客户看到个性化内容,目前仅支持标题、文案和链接设置动参,不支持图片的动参。 动态参数的内容要求来源合法或有充分授权,不会出现不正当竞争行为或侵犯第三方的著作权、信息网络传播权等任何合法权益。用户在使用动态参数时应承诺所有素材内容与推送消息内容保持一致,不包含违法和不良信息内容;对于信息内容中人物的肖像权也已获得充分授权、可合法用于展示、介绍、宣传、推广、演示产品、服务、公司或与公司有关的其他事务。 父主题: 其他问题
  • KooMessage 服务开通以后,是否还需要开通消息&短信(Message & SMS )服务? 开通KooMessage服务会默认开通消息&短信服务,是可以使用消息&短信(Message & SMS)服务,消息&短信(Message & SMS)服务用于智能信息AIM的短信发送。如您不使用华为云短信发送通道进行智能消息AIM的发送,只使用智能信息AIM+的短链生成和解析,可关闭消息&短信(Message & SMS)服务。 父主题: 服务开通
  • KooMessage智能信息和普通短信的区别是什么? 智能信息是通过手机终端增强技术和用户数据分析能力,以可交互的富媒体方式精准触达到最终消费者。可实现与用户应用交互、内容访问、信息查询、智能客服等实时互动。支持视频、高清图片、文字等多种媒体元素,支持浏览器内置访问、LBS、APP、快应用、服务号、快捷支付等应用交互能力,有效帮助企业客户与用户实现智能、快速、精准的营销互动沟通与服务。 父主题: 服务能力咨询
  • 智能信息模板审核时间 KooMessage运营审核时段为法定工作日的9:00-18:00,周末及节假日不进行审核。 如有加急或特殊需求,请联系运营团队。 不同厂商智能信息模板审核时间段有所差异,具体请参考表1。 表1 不同厂商智能信息模板审核时间 厂商 智能信息模板审核时间段 华为终端厂商 工作日:9:00-18:00 小米终端厂商 工作日:10:00-18:00 OPPO终端厂商 工作日:10:00-18:00 VIVO终端厂商 工作日:10:00-18:00 魅族终端厂商 工作日:9:00-18:00 父主题: 智能信息模板制作规范
  • 资质审核规范 企业单位营业执照的扫描件,企业单位信息应当可在全国企业信用信息公示系统查询; 事业单位法人证书和组织机构代码证的扫描件,社会团体法人登记证和组织机构代码证的扫描件,组织机构代码证应当在全国组织机构代码管理中心查询; 营业执照复印件文档可添加备注,例如“仅限华为云审核专用”; 复印件需保持完整,不可有遮挡、覆盖等影响材料完整的行为; 不可更改文件内容,否则视为无效; 经办人身份证复印件和经办人手持身份证照片拍照应与经办人授权书主体保持一致; 资质审核文件内公司署名与签署日期为必填项,否则视为无效; 公司关系授权函为发送内容涉及两家或两家以上企业,需要授权方与被授权方加盖公章,并承诺上线合作的品牌、业务、产品运营均取得合法有效授权,内容合法合规; A-B原则,如果投放主体为A,原则上只能投放自有业务,B为A的合作企业、投放主体A的子业务,因合作需要或联合活动业务,在B业务或B业务授权的前提下,可通过主体A发送B业务。具体投放一事一议; 投放主体提供的资质各项证书期限应涵盖智能信息内容的投放期限及产品、服务的提供期限;投放主体提供的主体经营范围应涵盖在KooMessage待推广的业务及产品中。
  • 智能信息入网所需材料准备 表1 智能信息入网所需材料 智能信息所需资料 AIM AIM+ 是否加盖公章 是否可添加水印 营业执照复印件(三证合一9开头) √ √ √ × 智能信息及富媒体消息类业务素材承诺函 √ √ √ √ 经办人身份证复印件(正反面) √ × √ √ 经办人手持身份证照片拍照 √ × × √ 经办人授权书 √ × √ √ 签名说明书 √ × √ √ 签名授权函 √ × √ √ 公司关系授权函 (如果签名跟企业名称不符,需提供“公司关系授权函”及其他签名证明材料) 根据需要提供 根据需要提供 √ √ 七大类(房产/互金/投资/移民/教育/培训/社交)以及游戏等行业需根据实际发送内容进行额外资质提供。
  • 问题现象 Flink作业提交时,jobmanager启动成功,但taskmanager一直是启动中直到超时,报错如下: org.apache.flink.runtime.jobmanager.scheduler.NoResourceAvailableException: Could not allocate the required slot within slot request timeout. Please make sure that the cluster has enough resources
  • 如何修改HDFS主备倒换类? 当 MRS 3.x版本集群使用HDFS连接NameNode报类org.apache.hadoop.hdfs.server.namenode.ha.AdaptiveFailoverProxyProvider无法找到时,是由于MRS 3.x版本集群HDFS的主备倒换类默认为该类,可通过如下方式解决。 方式一:添加hadoop-plugins-xxx.jar到程序的classpath或者lib目录中。 hadoop-plugins-xxx.jar包一般在HDFS客户端目录下:$HADOOP_HOME/share/hadoop/common/lib/hadoop-plugins-8.0.2-302023.jar 方式二:将HDFS的如下配置项修改为开源类: dfs.client.failover.proxy.provider.hacluster=org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider 父主题: 组件配置类
  • 表引擎选择建议 自助报表分析、行为数据分析,在不涉及重复数据聚合的情况下,建议使用ReplicatedMergeTree表引擎。 涉及到物化视图等聚合函数的场景,建议使用ReplicatedAggregatingMergeTree表引擎。 经常有数据去重或有update修改数据的场景下,建议使用ReplacingMergeTree表引擎,配合使用argMax函数获取最新数据。 表1 应用场景列表 引擎名称 应用场景 MergeTree ClickHouse中最重要的引擎,基于分区键(partitioning key)的数据分区分块存储、前缀稀疏索引(order by和primary key)。 ReplacingMergeTree 相对于MergeTree,它会用最新的数据覆盖具有相同主键的重复项。 删除老数据的操作是在分区异步merge的时候进行处理,只有同一个分区的数据才会被去重,分区间及shard间重复数据不会被去重,所以应用侧想要获取到最新数据,需要配合argMax函数一起使用。 SummingMergeTree 当合并SummingMergeTree表的数据片段时,ClickHouse会把所有具有相同主键的行进行汇总,将同一主键的行替换为包含sum后的一行记录。 如果主键的组合方式使得单个键值对应于大量的行,则可以显著的减少存储空间并加快数据查询的速度。 AggregatingMergeTree 该引擎继承自MergeTree,并改变了数据片段的合并逻辑。 ClickHouse会将一个数据片段内所有具有相同主键(准确的说是排序键)的行替换成一行,这一行会存储一系列聚合函数的状态。可以使用AggregatingMergeTree表引擎来做增量数据的聚合统计,包括物化视图的数据聚合。 CollapsingMergeTree 在创建时与MergeTree基本一样,除了最后多了一个参数,需要指定Sign位(必须是Int8类型)。 CollapsingMergeTree会异步地删除(折叠)除了特定列Sign1和-1值以外的所有字段的值重复的行。 VersionedCollapsingMergeTree 是CollapsingMergeTree的升级,使用不同的collapsing算法,该算法允许使用多个线程以任何顺序插入数据。 Replicated*MergeTree 只有Replicated*MergeTree系列引擎是上面介绍的引擎的多副本版本,为了提升数据和服务的可靠性,建议使用副本引擎: ReplicatedMergeTree ReplicatedSummingMergeTree ReplicatedReplacingMergeTree ReplicatedAggregatingMergeTree ReplicatedCollapsingMergeTree ReplicatedVersionedCollapsingMergeTree ReplicatedGraphiteMergeTree
  • 数据修改 建议慎用delete、update的mutation操作 标准SQL的更新、删除操作是同步的,即客户端要等服务端反回执行结果(通常是int值);而ClickHouse的update、delete是通过异步方式实现的,当执行update语句时,服务端立即返回执行成功还是失败结果,但是实际上此时数据还没有修改完成,而是在后台排队等着进行真正的修改,可能会出现操作覆盖的情况,也无法保证操作的原子性。 业务场景要求有update、delete等操作,建议使用ReplacingMergeTree、CollapsingMergeTree、VersionedCollapsingMergeTree引擎,使用方式参见:https://clickhouse.tech/docs/zh/engines/table-engines/mergetree-family/collapsingmergetree/。 建议少或不增删数据列 业务提前规划列个数,如果将来有更多列要使用,可以规划预留多列,避免在生产系统跑业务过程中进行大量的alter table modify列操作,导致不可以预知的性能、数据一致性问题。 对于批量数据清理,建议根据分区来操作: ALTER TABLE table_name DROP PARTITION partition_name; 禁止修改索引列 对索引列的修改会导致现有索引失效,触发重建索引,期间查询数据不准确。 如果业务场景必须修改索引列,推荐用ReplacingMergeTree引擎建表,使用数据写入+去重引擎代替数据更新场景:https://clickhouse.tech/docs/zh/engines/table-engines/mergetree-family/collapsingmergetree/。
  • 数据查询建议 建议查询指定分区 通过指定分区字段会减少底层数据库扫描的文件数量,提升查询性能,实际经验:700个分区的千列大表,需要查询一个分区中有7000万数据,其他699个分区中无数据,虽然只有一个分区有数据,其他分区无数据,但是查询指定分区为百毫秒级性能,没有指定分区查询性能为1~2秒左右,性能相差20倍。 慎用final查询 在查询语句的最后跟上final,通常是对于ReplacingMergeTree引擎,数据不能完全去重情况下,有些开发人员习惯写final关键字进行实时合并去重操作(merge-on-read),保证查询数据无重复数据。可以通过argMax函数或其他方式规避此问题。
  • CCE资源 RFS 模板文件 { "terraform": { "required_providers": { "huaweicloud": { "source": "huawei.com/provider/huaweicloud", "version": "1.56.0" } } }, "provider": { "huaweicloud": { "auth_url": "https://iam.cn-north-4.myhuaweicloud.com/v3", "insecure": true, "region": "cn-north-4" } }, "resource": { "huaweicloud_cce_cluster": { "cce-cluster-yfclf": { "vpc_id": "18b117f8-****-****-****-6d022db472a1", "name": "cce-cluster-rfs-001", "cluster_version": "v1.27", "charging_mode": "postPaid", "flavor_id": "cce.s2.small", "container_network_type": "vpc-router", "enterprise_project_id": "2191bb05-****-****-****-96f098494b8d", "subnet_id": "bef6af2f-****-****-****-9e78ef03eb6a" } }, "huaweicloud_cce_node": { "cce-node-pmqnn": { "name": "cce-node-rfs-001", "charging_mode": "postPaid", "flavor_id": "c7.large.2", "os": "Huawei Cloud EulerOS 2.0", "runtime": "containerd", "root_volume": { "size": 50, "volumetype": "SAS" }, "password": "${var.CCE-Node-Password-u9fi}", "cluster_id": "d6eb9020-****-****-****-0255ac1000ac", "availability_zone": "cn-north-4c", "data_volumes": [{ "volumetype": "SAS", "size": 100 }], "storage": { "selectors": [{ "name": "cceUse", "type": "evs", "match_label_count": 1, "match_label_size": 100, "match_label_volume_type": "SAS" }], "groups": [{ "name": "vgpaas", "cce_managed": true, "selector_names": ["cceUse"], "virtual_spaces": [{ "name": "runtime", "size": "90%", "runtime_lv_type": "linear" }, { "name": "kubernetes", "size": "10%", "lvm_lv_type": "linear" }] }] }, "depends_on": ["huaweicloud_cce_cluster.cce-cluster-yfclf"], "subnet_id": "bef6af2f-****-****-****-9e78ef03eb6a" } } }, "variable": { "CCE-Node-Password-u9fi": { "description": "Password for cce-node-pmqnn", "type": "string", "sensitive": true, "nullable": false, "default": "" } } }
  • E CS 资源RFS模板文件 { "terraform": { "required_providers": { "huaweicloud": { "source": "huawei.com/provider/huaweicloud", "version": "1.56.0" } } }, "provider": { "huaweicloud": { "auth_url": "https://iam.cn-north-4.myhuaweicloud.com/v3", "insecure": true, "region": "cn-north-4" } }, "resource": { "huaweicloud_compute_instance": { "ecs-qh7h5": { "name": "ecs-rfs-001", "charging_mode": "postPaid", "admin_pass": "${var.ECS-Password-ia2c}", "flavor_id": "s6.small.1", "system_disk_type": "SAS", "availability_zone": "cn-north-4a", "network": { "uuid": "bef6af2f-****-****-****-9e78ef03eb6a" }, "security_group_ids": ["986d4460-****-****-****-f5f237df42c0"], "enterprise_project_id": "2191bb05-****-****-****-96f098494b8d", "system_disk_size": 40, "image_id": "86405805-****-****-****-09f30b497c98" } } }, "variable": { "ECS-Password-ia2c": { "description": "Ecs password for ecs-qh7h5", "type": "string", "sensitive": true, "nullable": true, "default": null } } }
  • 研发包结构 图1 研发包结构 Service下所有的main.tf文件中的Resource实例不能有重叠,否则会导致资源被覆盖或删除。 表1 研发包结构介绍 文件名 说明 Service(推荐方式) 按云服务维度的资源模板,整个云服务涉及资源的生命周期都在同一个RFS资源模板中管理。 MicroService 按微服务维度的资源模板管理,当一个云服务的每个微服务有单独的资源时使用。 envXname 云服务/微服务部署环境,每个环境的RFS包资源都是与环境配套,每个环境都有单独的资源模板。 package.json 固定名称与格式,发布包版本信息,类型,软件包名称,版本。 { "type": "rfstemplate", // 固定 "name": "templatename", // RFS模板名称,服务下唯一 "envid": "envid1", // 云服务的环境ID "version": "1.0.0", // RFS模板版本号 "maintf": "main.tf", // 实际创建资源的TF文件 "variablestf": "variable.tf" // 存储参数变量的TF文件 } main.tf RFS实际使用的模板文件,通过此文件来管理华为云资源。当前支持的华为云资源有CCE、DCS、DNS、ECS、Kafka、RDS及VPC,模板文件样例分别参考CCE资源RFS模板文件、DCS资源RFS模板文件、DNS资源RFS模板文件、ECS资源RFS模板文件、Kafka资源RFS模板文件、RDS资源RFS模板文件及VPC资源RFS模板文件。 详细的开发规范请参考Terraform文档。 variable.tf RFS资源模板中涉及到的变量值,可能多个云服务变量名称不一致,提取出来单独设置。样例如下: CCE-Name-1234: "CCE-Cluster-ERS" 说明: 建议敏感数据不在此文件设置,敏感数据在界面手动输入。
  • DCS资源RFS模板文件 { "terraform": { "required_providers": { "huaweicloud": { "source": "huawei.com/provider/huaweicloud", "version": "1.56.0" } } }, "provider": { "huaweicloud": { "auth_url": "https://iam.cn-north-4.myhuaweicloud.com/v3", "insecure": true, "region": "cn-north-4" } }, "resource": { "huaweicloud_dcs_instance": { "dcs-cx83b": { "charging_mode": "postPaid", "availability_zones": ["cn-north-4a", "cn-north-4a"], "vpc_id": "18b117f8-****-****-****-6d022db472a1", "subnet_id": "bef6af2f-****-****-****-9e78ef03eb6a", "maintain_begin": "18:00:00", "maintain_end": "22:00:00", "engine_version": "5.0", "capacity": 1, "flavor": "redis.ha.xu1.large.r2.1", "enterprise_project_id": "2191bb05-****-****-****-96f098494b8d", "password": "${var.DCS-Password-qvwu}", "name": "dcs-rfs-001", "engine": "Redis" } } }, "variable": { "DCS-Password-qvwu": { "description": "dcs password for dcs-cx83b", "type": "string", "sensitive": true, "nullable": true, "default": null } } }
  • Kafka资源RFS模板文件 { "terraform": { "required_providers": { "huaweicloud": { "source": "huawei.com/provider/huaweicloud", "version": "1.56.0" } } }, "provider": { "huaweicloud": { "auth_url": "https://iam.cn-north-4.myhuaweicloud.com/v3", "insecure": true, "region": "cn-north-4" } }, "resource": { "huaweicloud_dms_kafka_instance": { "kafka-gq8ef": { "manager_password": "${var.Kafka-Manager-Password-nsbl}", "name": "kafka-rfs-001", "charging_mode": "postPaid", "manager_user": "kafka-manager-rfs", "flavor_id": "s6.2u4g.cluster.small", "engine_version": "3.x", "broker_num": 3, "storage_spec_code": "dms.physical.storage.high.v2", "availability_zones": ["cn-north-4a"], "storage_space": 300, "vpc_id": "18b117f8-****-****-****-6d022db472a1", "network_id": "bef6af2f-****-****-****-9e78ef03eb6a", "security_group_id": "32ed0723-****-****-****-7c0fb748d436", "enterprise_project_id": "2191bb05-****-****-****-96f098494b8d", "retention_policy": "time_base" } } }, "variable": { "Kafka-Manager-Password-nsbl": { "description": "Manager Password for kafka-gq8ef", "type": "string", "sensitive": true, "nullable": false, "default": "" } } }
  • RDS资源RFS模板文件 { "terraform": { "required_providers": { "huaweicloud": { "source": "huawei.com/provider/huaweicloud", "version": "1.56.0" } } }, "provider": { "huaweicloud": { "auth_url": "https://iam.cn-north-4.myhuaweicloud.com/v3", "insecure": true, "region": "cn-north-4" } }, "resource": { "huaweicloud_rds_instance": { "rds-instance-yaqsb": { "name": "rds-rfs-001", "charging_mode": "postPaid", "db": { "type": "MySQL", "version": "8.0", "password": "${var.RDS-Password-u6z0}" }, "ha_replication_mode": "async", "volume": { "size": 40, "type": "ULTRAHIGH" }, "vpc_id": "18b117f8-****-****-****-6d022db472a1", "subnet_id": "bef6af2f-****-****-****-9e78ef03eb6a", "security_group_id": "32ed0723-****-****-****-7c0fb748d436", "enterprise_project_id": "2191bb05-****-****-****-96f098494b8d", "availability_zone": ["cn-north-4c", "cn-north-4c"], "flavor": "rds.mysql.c6.large.2.ha" } } }, "variable": { "RDS-Password-u6z0": { "description": "Password for rds-instance-yaqsb", "type": "string", "sensitive": true, "nullable": false, "default": "" } } }
  • DNS资源RFS模板文件 { "terraform": { "required_providers": { "huaweicloud": { "source": "huawei.com/provider/huaweicloud", "version": "1.56.0" } } }, "provider": { "huaweicloud": { "auth_url": "https://iam.cn-north-4.myhuaweicloud.com/v3", "insecure": true, "region": "cn-north-4" } }, "resource": { "huaweicloud_dns_zone": { "dns-zone-iz7r1": { "enterprise_project_id": "2191bb05-****-****-****-96f098494b8d", "zone_type": "private", "router": { "router_id": "c6131e37-****-****-****-5fffa75982f3" }, "name": "exampleninenine.com" } } } }
  • VPC资源RFS模板文件 { "terraform": { "required_providers": { "huaweicloud": { "source": "huawei.com/provider/huaweicloud", "version": "1.56.0" } } }, "provider": { "huaweicloud": { "auth_url": "https://iam.cn-north-4.myhuaweicloud.com/v3", "insecure": true, "region": "cn-north-4" } }, "resource": { "huaweicloud_vpc": { "vpc-krkup": { "name": "vpc-rfs-001", "cidr": "192.168.0.0/16", "enterprise_project_id": "2191bb05-****-****-****-96f098494b8d" } }, "huaweicloud_vpc_subnet": { "vpc-subnet-ppnwk": { "name": "subnet-rfs-001", "cidr": "192.168.3.0/24", "gateway_ip": "192.168.3.1", "vpc_id": "c6131e37-****-****-****-5fffa75982f3", "depends_on": ["huaweicloud_vpc.vpc-krkup"] } }, "huaweicloud_vpcep_endpoint": { "vpcep_endpoint-4epnv": { "service_id": "ebc591db-****-****-****-15354c9bef25", "network_id": "${huaweicloud_vpc_subnet.vpc-subnet-ppnwk.id}", "vpc_id": "${huaweicloud_vpc_subnet.vpc-subnet-ppnwk.vpc_id}" } }, "huaweicloud_networking_secgroup": { "sg-rmo7v": { "name": "sg-rfs-all-deny", "enterprise_project_id": "2191bb05-****-****-****-96f098494b8d", "description": "通用Web服务器,默认放通22、3389、80、443端口和ICMP协议。 适用于需要远程登录、公网ping及用于网站服务的云服务器场景。", "depends_on": ["huaweicloud_vpc.vpc-krkup"] } }, "huaweicloud_networking_secgroup_rule": { "sg-rule-d28sj": { "action": "allow", "direction": "ingress", "ethertype": "IPv4", "protocol": "icmp", "remote_ip_prefix": "0.0.0.0/0", "priority": 1, "security_group_id": "${huaweicloud_networking_secgroup.sg-rmo7v.id}" } } } }
  • 流控配置 表9 flowControlConf字段说明 参数名 是否必选 说明 flowControlSwitch 是 流控总开关,取值为on或off。 autoDivideSwitch 是 分摊模式开关,取值为on或off。 flowControlOrder 是 流控类型执行顺序,和下面的流控配置相匹配。 nodeFlowControl 否 节点级流控配置 interfaceFlowControl 否 接口级流控配置 serviceFlowControl 否 服务级流控配置 ipFlowControl 否 IP流控配置 singleParamFlowControl 否 自定义参数流控配置 multiParamFlowControl 否 多参数组合流控配置 quotaFlowControl 否 配额流控配置 concurrentFlowControl 否 并发连接流控配置
  • 其他配置 表13 confLuaConf字段说明 参数名 说明 addGreyFlag 灰度标记开关,取值为on或off。 greyTestSwitch 灰度测试开关,取值为on或off。 greyTestServiceId 灰度测试服务Id。 greyTestSwitch为on时必传。 getIpType 取IP方式,取值为1或2,1表示从左取,2表示从右取,默认为1。 isBypassOnGreyDown 灰度服务器全部宕机后,请求路由到生产开关,取值为on或off,默认为off。 areaGreyGetIpFromLeft 地域灰度IP从左侧取值开关,取值为on或off,默认为off。 greyTestQpsLimit 灰度测试每秒转发量限制,取值为1到1000。 successRateAlarmAbsThreshold 成功率告警阈值绝对值,非负浮点数,取值为0到100,默认值为90。 successRateAlarmOffsetThreshold 成功率下降告警阈值(相比1分钟前或者5分钟前),非负浮点数,取值为0到100,默认值为5。 healthCheckAlarmServerCountThreshold 健康检查不健康机器数告警阈值,正整数,默认为1,表示有1台节点不健康就会告警。 healthCheckAlarmDurationThreshold 健康检查告警持续时间阈值,非负正整数,默认为0,表示不健康主机立即告警;如果配置为1,表示发现不健康持续1分钟以上,才会告警。 concurrentFlowControlAlarmThreshold 并发请求流控告警阈值,非负整数,默认为0,表示只要发生1次流控,就会告警。 serviceFlowControlAlarmThreshold 服务级流控告警阈值,非负整数,默认0,表示只要发生1次流控,就会告警。 singleParamFlowControlAlarmThreshold 自定义参数流控告警阈值,非负整数,默认0,表示只要发生1次流控,就会告警。 multiParamFlowControlAlarmThreshold 多参数流控告警阈值,非负整数,默认0,表示只要发生1次流控,就会告警。 quotaFlowControlAlarmThreshold 配额流控告警阈值,非负整数,默认0,表示只要发生1次流控,就会告警。 manyRequestPreAlarmThreshold 请求数过多告警阈值,正整数,例如:25000,表示每个cpu每分钟平均处理达到25000请求,则触发告警。 以4C的主机为例,1分钟处理超过25000*4=100000请求,则开始告警。 manyRequestAlarmThreshold 请求数警阈值,非负整数,默认为0。 statisticsParams 统计日志参数,格式为格式为ParamName:position。 ParamName为参数名称。 Position为参数位置,取值为queryString或header。 slb_instance_config/conf_lua_config.yaml #其他配置 addGreyFlag: 'off' #非必填,灰度标记开关,取值为off或on greyTestSwitch: 'off' #非必填,灰度测试开关,取值为off或on greyTestServiceId: 123456 #非必填,灰度测试服务ID isBypassOnGreyDown: 'off' #非必填,宕机时路由到生产集群开关,取值为off或on areaGreyGetIpFromLeft: 'off' #非必填,地域灰度IP从左取值开关 ,取值为off或on getIpType: 1 #非必填,取IP方式,取值为1或2 statisticsParams: #非必填,统计日志参数 greyTestQpsLimit: 1000 #非必填,灰度测试每秒转发量限制,取值为1到1000 manyRequestAlarmThreshold: 1000 #非必填,请求数量告警 successRateAlarmAbsThreshold: 90 #非必填,成功率告警阈值,取值为0到100 successRateAlarmOffsetThreshold: 90 #非必填,成功率下降告警阈值,取值为0到100 healthCheckAlarmServerCountThreshold: 1000 #非必填,健康检查告警阈值 healthCheckAlarmDurationThreshold: 1000 #非必填,健康告警持续时间阈值 concurrentFlowControlAlarmThreshold: 1000 #非必填,并发连接流控告警阈值 serviceFlowControlAlarmThreshold: 1000 #非必填,服务级流控告警阈值 multiParamFlowControlAlarmThreshold: 1000 #非必填,多参数流控告警阈值 singleParamFlowControlAlarmThreshold: 1000 #非必填,自定义参数流控告警阈值 quotaFlowControlAlarmThreshold: 1000 #非必填,配额流控告警阈值 manyRequestPreAlarmThreshold: 1000 #非必填,请求数量预告警
  • 自定义lua配置 表14 customLuaConf字段说明 参数名 是否必选 说明 slb100GlobalInit 否 大小不得超过16KB slb200WorkerInit 否 大小不得超过16KB slb300PreFlowControl 否 大小不得超过16KB slb400OnFlowControled 否 大小不得超过16KB slb500PreGrey 否 大小不得超过16KB slb600PostGrey 否 大小不得超过16KB slb700PostRoute 否 大小不得超过16KB slb750RespHeaderFilter 否 大小不得超过16KB slb800RespBodyFilter 否 大小不得超过16KB slb_instance_config/SLB_100_Global_Init_iac3.lua #SLB_100_Global_Init_iac3.lua默认配置 --the custom point SLB_100_Global_Init, running when Global init. --will be triggered in exec function, so pls make sure there is a exec function in global_init local global_init = {}; function global_init.exec(gen_param) --eg:ngx.log(ngx.ERR,"i am in global_init") end return global_init slb_instance_config/SLB_200_Worker_Init_iac3.lua #SLB_200_Worker_Init_iac3.lua默认配置 --the custom point SLB_200_Worker_Init, running when Worker init. --will be triggered in exec function, so pls make sure there is a exec function in worker_init local worker_init = {}; function worker_init.exec(gen_param) --eg:ngx.log(ngx.ERR,"i am in worker init"); end return worker_init slb_instance_config/SLB_300_Pre_FlowControl_iac3.lua #SLB_300_Pre_FlowControl_iac3.lua默认配置 --the custom point SLB_300_Pre_FlowControl, running before flowcontrol and blacklist. --will be triggered in exec function, so pls make sure there is a exec function in pre_flowcontrol local pre_flowcontrol = {}; function pre_flowcontrol.exec(gen_param) --eg:ngx.log(ngx.ERR,"I am in pre flowcontrol") end return pre_flowcontrol slb_instance_config/SLB_400_On_FlowControled_iac3.lua #SLB_400_On_FlowControled_iac3.lua默认配置 --the custom point SLB_400_On_FlowControlled, running when request is flowcontrolled or blocked due to blacklist. --will be triggered in exec function, so pls make sure there is a exec function in on_flowcontroled local on_flowcontroled = {}; function on_flowcontroled.exec(gen_param) --eg:ngx.log(ngx.ERR,"the flowcontrol type is:",gen_param.control_type) end return on_flowcontroled slb_instance_config/SLB_500_Pre_Grey_iac3.lua #SLB_500_Pre_Grey_iac3.lua默认配置 --the custom point SLB_500_Pre_Grey, running before Greyrule judge. --will be triggered in exec function, so pls make sure there is a exec function in pre_grey local pre_grey = {}; function pre_grey.exec(gen_param) --eg:ngx.log(ngx.ERR,"I am in pre grey"); end return pre_grey slb_instance_config/SLB_600_Post_Grey_iac3.lua #SLB_600_Post_Grey_iac3.lua默认配置 --the custom point SLB_600_Post_Grey, running after get result of greyrule. --will be triggered in exec function, so pls make sure there is a exec function in post_grey local post_grey = {}; function post_grey.exec(gen_param) --eg:ngx.log(ngx.ERR,"I AM IN POST GREY"); end return post_grey slb_instance_config/SLB_700_Post_Route_iac3.lua #SLB_700_Post_Route_iac3.lua默认配置 --the custom point SLB_700_Post_Route, running after get result of routerule. --will be triggered in exec function, so pls make sure there is a exec function in post_route local post_route = {}; function post_route.exec(gen_param) --eg:ngx.log(ngx.ERR,"I AM IN POST Route"); end return post_route slb_instance_config/SLB_750_Resp_Header_Filter_iac3.lua #SLB_750_Resp_Header_Filter_iac3.lua默认配置 --the custom point SLB_750_Resp_Header_Filter, running during header filter. --will be triggered in exec function, so pls make sure there is a exec function in header_filter local header_filter = {}; function header_filter.exec(gen_param) --eg:ngx.log(ngx.ERR,"I am in header filter"); end return header_filter slb_instance_config/SLB_800_Resp_Body_Filter_iac3.lua #SLB_800_Resp_Body_Filter_iac3.lua默认配置 --the custom point SLB_800_Resp_Body_Filter, running during body filter. --will be triggered in exec function, so pls make sure there is a exec function in body_filter local body_filter = {}; function body_filter.exec(gen_param) --eg:ngx.log(ngx.ERR,"I am in body filter"); end return body_filter
  • 重写重定向配置 表2 urlResetConf字段说明 参数名 是否必选 说明 transferType 是 转换类型,为以下枚举值: rewriteGrey 灰度重写 rewriteNormal 生产重写 redirectGrey 灰度重定向 redirectNormal 生产重定向 source 是 匹配路径,例:/abc/portal/login.jsp(.*)$ target 是 目标路径,例:/abc/def/$1 slb_instance_config/url_reset_config.yaml #重写重定向配置 - transferType: rewriteNormal #必填,转发类型,rewriteNormal代表生产重写 source: /a1 #必填,匹配路径 target: /b1 #必填,目标路径 - transferType: rewriteGrey #必填,转发类型,rewriteGrey代表灰度重写 source: /a2 #必填,匹配路径 target: /b2 #必填,目标路径
  • 内网段配置 表3 innerSegmentsConf字段说明 参数名 是否必选 说明 segment 是 IP地址段,格式为ip/子网掩码。 slb_instance_config/inner_segments_config.yaml #内网段配置 - segment: 10.0.0.0/8 - segment: 127.0.0.1/32 - segment: 172.16.0.0/12 - segment: 192.168.0.0/16 - segment: 100.125.0.0/16
  • nginx配置 slb_instance_config/nginx.conf #nginx默认配置 #user slb slb; worker_processes auto; #worker_cpu_affinity 0001 0010 0100 1000; pid logs/nginx.pid; ##################################################################### ### Default: Close the error log error_log /dev/null crit; # nofile per worker around 20000-100000 is ok, eg, if have 8 worker, nginx will use no more than 8*worker_rlimit_nofile nofile, should make this result less than system nofile. worker_rlimit_nofile 51200; events { use epoll; # connections per worker, usually setup same or similar value as worker_rlimit_nofile. worker_connections 51200; } http { ##################################################################### ### load basic lua script include 'lua/nginx.http.lua.conf'; init_by_lua_file 'conf/lua/initial.lua'; init_worker_by_lua_file 'conf/lua/initialWorker.lua'; log_by_lua_file 'conf/lua/monitor/LogRequest.lua'; #rewrite_by_lua_no_postpone on; ##################################################################### uninitialized_variable_warn off; server_tokens off; autoindex off; port_in_redirect off; ssi off; proxy_hide_header X-Powered-By; add_header X-XSS-Protection "1; mode=block"; add_header X-frame-options SAMEORIGIN; add_header X-Content-Type-Options nosniff; add_header Strict-Transport-Security "max-age=31536000; includeSubDomains "; add_header Content-Security-Policy "default-src 'self'"; add_header Cache-control "no-cache, no-store, must-revalidate"; add_header Pragma no-cache; add_header Expires 0; client_header_timeout 60s; client_body_timeout 60s; keepalive_timeout 75s; send_timeout 60s; client_header_buffer_size 1k; large_client_header_buffers 4 8k; client_body_buffer_size 16k; client_max_body_size 1m; proxy_buffer_size 8k; proxy_buffers 8 8k; proxy_busy_buffers_size 16k; include mime.types; default_type text/html; ##################################################################### ### gzip compress gzip on; gzip_http_version 1.1; gzip_comp_level 5; gzip_min_length 1k; gzip_disable "MSIE [1-6]."; gzip_types text/plain text/css text/xml text/javascript application/json application/x-javascript application/xml application/xml+rss application/xhtml+xml; ##################################################################### ### enabled the error page process fastcgi_intercept_errors on; error_page 400 401 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 /4xx.html; error_page 500 501 502 503 504 505 /5xx.html; ##################################################################### ### log format and switch. log_format main '$time_local|$request_time|$upstream_response_time|$uri' '|$status|$body_bytes_sent|$request_length|$bytes_sent|$http_user_agent|$http_host' '|$upstream_addr|$upstream_status|$scheme|$is_grey_server|$resp_status|$server_protocol'; access_log logs/access.log main buffer=5m flush=10s; log_format bigData '$time_local|$server_addr|$upstream_addr|$is_grey_server|$uri' '|$upstream_status|$resp_status|$request_time|$upstream_response_time|$request_length|$bytes_sent|$connections_active|$target_all|$remote_addr' '|$http_x_forwarded_for|$request_method|$http_user_agent|$status|$http_referer|$server_protocol|$body_bytes_sent|$request_length|$http_host|$request' '|$server_port|-|$http_x_api_method||||||||||'; access_log logs/access_for_big_data.log bigData buffer=5m flush=10s; ##################################################################### ### load sub configure include vhosts/*.conf; include slb_conf/*.conf; }
共100000条