云服务器内容精选

  • 步骤一:添加开发中心用户 开发中心的用户数根据购买规格有相应的用户数量限制,组织管理员通过用户的添加或删除来合理管理开发中心的使用人员。 在开发中心工作台首页右上角单击“用户管理”。 在“用户管理”页面,单击右上角“添加用户”。 在“添加用户”页面的“可选用户”区域框中勾选一个或多个用户名,单击,选中的用户显示现在“已选用户”区域框。 单击“确定”,新添加的用户显示在用户列表中。 在用户列表中,可查看已添加的用户账号名、添加人及添加时间等信息。
  • 步骤二:创建团队 在开发中心进行服务开发前,需要组织管理员创建一个团队,将团队关联需要开发的服务。一个团队只能归属一个部门,可以关联一个或多个服务。 在开发中心工作台首页下方的“我的团队”区域,单击右侧“创建团队”。 在“创建团队”页面,设置团队相关参数,参数配置请参见表1。 表1 创建团队参数说明 参数名称 参数说明 团队名称 必填项,团队的命名。 团队归属部门 必填项,选择系统中已提前创建的部门,部门的创建方法请参见部门管理。 关联服务 必填项,选择系统中已提前创建的服务,服务创建方法请参见服务管理。 团队 LOG O 必填项,单击系统默认图片上的“点击修改”,可选择本地图片自定义LOGO图片。 团队简介(可选) 非必填项,团队空间的功能描述或其他备注信息。 单击“创建”。 在“我的团队”区域可查看到创建的团队的卡片。
  • 解决方案 一站式使用应用平台流程如图1所示。 图1 使用流程 表1 使用流程详解 序号 流程环节 说明 1 准备工作 将应用接入AppStage前需要依次完成申请公测、购买AppStage、关联组织、配置AppStage各中心服务授权、添加组织的部门/成员信息、录入产品/服务/微服务信息和申请权限。 2 应用开发 配置开发团队及服务扩展信息 添加开发中心用户 开发中心的用户数根据购买规格有相应的用户数量限制,组织管理员通过用户的添加或删除来合理管理开发中心的使用人员。 创建团队 在开发中心进行服务开发前,需要组织管理员先创建一个团队,将团队关联需要开发的服务。 服务配置 将团队关联服务后,还需将团队关联的服务关联CodeArts项目,后续的服务开发管理过程中才能正常使用CodeArts服务的代码托管、流水线、编译构建功能。 添加团队成员 在团队多用户协作开发过程中,不同角色成员执行各自权限和责任事项,因此需要在团队中添加协作开发的各角色成员(项目经理、开发人员、测试人员等),实现统一有序的成员信息管理。 创建及规划版本 创建版本 对团队所关联的服务划分版本,包括创建版本的基本配置信息以及选择版本开始和结束时间。 规划交付件 在版本开发启动初期对产品开发过程所需的交付件进行规划,以辅助开发过程规范有序且可追溯。 开发版本 创建代码仓 使用代码托管内置的仓库模板创建代码管理的仓库。 下载代码 基于Git的 代码托管服务 ,支持将仓库文件下载到本地进行文件的操作。 安装插件 开发人员可下载所需的开发工具,如WiseStudio 插件、Nuwa 插件、Wushan 插件后进行安装。 开发代码 开发代码的详细指导请参见《开发指南》。 提交代码到代码仓 开发在本地完成业务代码后,需要提交代码文件至代码仓库。 代码安全检视 进行安全编码TOP问题的信息统计和检查结果录入。 管理交付件 管理版本开发过程不同阶段所需或交付的必要文档,保证版本开发过程阶段性成果沉淀以及过程可追溯。 构建版本 根据需要的场景,如开发测试环境应用部署、生产环境应用部署等,对这些自动化任务进行自定义编排,一次配置后就可以一键自动化触发调度执行。 测试版本 对于版本测试过程发现的缺陷进行记录、跟踪、分析和解决,包括管理版本缺陷、管理测试结论以及管理关键风险等。 编辑总体测试结论、系统预置的测试类型结论,新增和管理自定义测试类型的测试结论,以及新增和管理版本关键风险问题。 发布版本 待版本开发及编译构建完成,且发布准入检查项均通过后,可由开发人员、测试人员或项目经理提交标准发布申请,待项目经理审批通过后,将软件发布到对应的部署平台。 3 应用部署 服务环境配置 使用AppStage运维中心前需要先准备环境并为服务关联区域、账号和企业项目。 申请资源 应用部署需要使用虚拟机、CCE、数据库等相关资源,您可以申请资源,或者在华为云购买资源后,将资源接入AppStage。 更新环境 开发完成的应用软件包,通过流水线发布,可以发布至运维中心的部署服务中,使用部署服务完成应用部署。 4 应用运维 数据接入 虚拟机日志接入 支持通过部署filebeat完成虚拟机日志采集。日志接入后,可以对日志进行检索,查看已接入日志,具体操作请参见日志检索。 容器日志接入 支持将容器日志接入AppStage运维中心。 日志接入后,可以对日志进行检索,查看已接入日志,具体操作请参见日志检索。 主机监控接入 支持定义服务的监控模板,然后通过为主机绑定监控模板,采集主机监控数据。 CES 指标接入 支持将 云监控服务 CES采集的监控指标数据接入至AppStage运维中心,如需将CES生成的告警接入AppStage运维中心,可参考CES告警接入操作。 运维监控 指标开发 对已产生或接入的数据进行指标开发 监控报表开发 对已创建的指标或视图数据进行业务报表开发。配置后可以查看业务报表监控,具体操作请参见查看业务报表。 告警配置 支持对虚拟机监控数据或业务数据配置告警,及时掌握虚拟机状态,容器接入并安装监控插件后会自动生成告警。告警配置后可以查看告警,并及时处理告警问题,具体操作请参见查看告警。
  • 背景信息 应用平台以“应用”为中心,基于云原生技术,打造了覆盖应用开发、托管、运维全生命周期支持的应用平台,面向企业IT应用、移动应用等提供一站式、集成式的云原生应用服务能力,支持开箱即用,全流程规范可视,高效异地协作,是沉淀行业通用能力,结合华为优秀实践,为产业上云及行业SaaS构建的竞争力底座。 开发应用主要使用AppStage的开发中心,其深度集成CodeArts的功能,购买AppStage后需开通CodeArts后才能使用开发中心,请在AppStage购买页面根据页面提示,前往开通CodeArts地址进行开通。
  • 微服务和普通应用有什么不同? 微服务是一种架构模式,其核心是将一个单体应用分成多个部分进行开发。所以微服务架构的应用程序,其本质上是一个分布式应用。 基于微服务架构构建的应用程序,可以让业务变化更快,整体系统可靠性更高。 类型 微服务 普通应用 开发 每个微服务的体量相对较小,业界的two pizza团队和“2周即可全部重写全部代码”等都可以作为微服务划分的参考。在开发时期,需注意服务接口的定义以与周边微服务进行配合,“基于契约”的开发方式是非常推荐的。 微服务开发,请参考开发微服务应用。 普通应用逻辑复杂、模块耦合、代码臃肿、修改难度大、版本迭代效率低下。 部署 微服务组成的应用系统通常比较复杂,在一次性部署的时候,需要进行编排部署。 微服务应用部署,请参考创建并部署组件。 普通应用可能会比较大,构建和部署时间也相应地比较长,不利于频繁部署,阻碍持续交付。在移动应用开发中,这个问题会显得尤为严重。 运维 在原来的指标监控、日志收集之外还非常强调治理。其核心理念是在运行时期通过对线上系统的各种调整以达到系统整体健康度要求的效果。 应用运维,请参考组件运维。 普通应用线上问题修复周期长,任何一个线上问题修复都需要对整个应用系统进行全面升级。 父主题: 应用开发问题
  • 在业务情况允许的情况下使用高性能算子 使用reduceByKey/aggregateByKey替代groupByKey。 所谓的map-side预聚合,说的是在每个节点本地对相同的key进行一次聚合操作,类似于MapReduce中的本地combiner。 map-side预聚合之后,每个节点本地就只会有一条相同的key,因为多条相同的key都被聚合起来了。其他节点在拉取所有节点上的相同key时,就会大大减少需要拉取的数据数量,从而也就减少了磁盘IO以及网络传输开销。通常来说,在可能的情况下,建议使用reduceByKey或aggregateByKey算子来替代掉groupByKey算子。因为reduceByKey和aggregateByKey算子都会使用用户自定义的函数对每个节点本地的相同key进行预聚合。而groupByKey算子是不会进行预聚合的,全量的数据会在集群的各个节点之间分发和传输,性能相对来说比较差。 使用mapPartitions替代普通map。 mapPartitions类的算子,一次函数调用会处理一个partition所有的数据,而不是一次函数调用处理一条,性能相对来说会高一些。 但是有的时候,使用mapPartitions会出现OOM(内存溢出)的问题。因为单次函数调用就要处理掉一个partition所有的数据,如果内存不够,垃圾回收时是无法回收掉太多对象的,很可能出现OOM异常。所以使用这类操作时要慎重! 使用filter之后进行coalesce操作。 通常对一个RDD执行filter算子过滤掉RDD中较多数据后(比如30%以上的数据),建议使用coalesce算子,手动减少RDD的partition数量,将RDD中的数据压缩到更少的partition中去。因为filter之后,RDD的每个partition中都会有很多数据被过滤掉,此时如果照常进行后续的计算,其实每个task处理的partition中的数据量并不是很多,有一点资源浪费,而且此时处理的task越多,可能速度反而越慢。因此用coalesce减少partition数量,将RDD中的数据压缩到更少的partition之后,只要使用更少的task即 可处理完所有的partition。在某些场景下,对于性能的提升会有一定的帮助。 使用repartitionAndSortWithinPartitions替代repartition与sort类操作。 repartitionAndSortWithinPartitions是Spark官网推荐的一个算子,官方建议,如果需要在 repartition重分区之后,还要进行排序,建议直接使用repartitionAndSortWithinPartitions 算子。因为该算子 可以一边进行重分区的shuffle操作,一边进行排序。shuffle与sort两个操作同时进行,比先shuffle再sort来说,性能可能是要高的。 使用foreachPartitions替代foreach。 原理类似于“使用mapPartitions替代map”,也是一次函数调用处理一个partition的所有数据,而不是一次函数调用处理一条数 据。在实践中发现,foreachPartitions类的算子,对性能的提升还是很有帮助的。比如在foreach函数中,将RDD中所有数据写 MySQL,那么如果是普通的foreach算子,就会一条数据一条数据地写,每次函数调用可能就会创建一个数据库连接,此时就势必会频繁地创建和销毁数据库连接,性能是非常低下;但是如果用foreachPartitions算子一次性处理一个partition的数据,那么对于每个 partition,只要创建一个数据库连接即可,然后执行批量插入操作,此时性能是比较高的。
  • 在对性能要求比较高的场景下,可以使用Kryo优化序列化性能 Spark提供了两种序列化实现: org.apache.spark.serializer.KryoSerializer:性能好,兼容性差 org.apache.spark.serializer.JavaSerializer:性能一般,兼容性好 使用:conf.set("spark.serializer", "org.apache.spark.serializer.KryoSerializer") 为什么不默认使用Kryo序列化? Spark默认使用的是Java的序列化机制,也就是ObjectOutputStream/ObjectInputStream API来进行序列化和反序列化。但是Spark同时支持使用Kryo序列化库,Kryo序列化类库的性能比Java序列化类库的性能要高很多。官方介 绍,Kryo序列化机制比Java序列化机制,性能高10倍左右。Spark之所以默认没有使用Kryo作为序列化类库,是因为Kryo要求要注册所有需要进行序列化的自定义类型,因此对于开发者来说,这种方式比较麻烦。
  • RDD多次使用时,建议将RDD持久化 RDD在默认情况下的存储级别是StorageLevel.NONE,即既不存磁盘也不放在内存中,如果某个RDD需要多次使用,可以考虑将该RDD持久化,方法如下: 调用spark.RDD中的cache()、persist()、persist(newLevel:StorageLevel)函数均可将RDD持久化,cache()和persist()都是将RDD的存储级别设置为StorageLevel.MEMORY_ONLY,persist(newLevel:StorageLevel)可以为RDD设置其他存储级别,但是要求调用该方法之前RDD的存储级别为StorageLevel.NONE或者与newLevel相同,也就是说,RDD的存储级别一旦设置为StorageLevel.NONE之外的级别,则无法改变。 如果想要将RDD去持久化,那么可以调用unpersist(blocking:Boolean = true),该函数功能如下: 将该RDD从持久化列表中移除,RDD对应的数据进入可回收状态; 将RDD的存储级别重新设置为StorageLevel.NONE。
  • 资源释放 关于ResultScanner和Table实例,在用完之后,需要调用它们的Close方法,将资源释放掉。Close方法,要放在finally块中,来确保一定会被调用到。 正确示例: ResultScanner scanner = null; try { scanner = demoTable.getScanner(s); //Do Something here. } finally { scanner.close(); } 错误示例: 在代码中未调用scanner.close()方法释放相关资源。 scanner.close()方法未放置在finally块中。 ResultScanner scanner = null; scanner = demoTable.getScanner(s); //Do Something here. scanner.close();
  • 共享Configuration实例 HBase客户端代码通过创建一个与ZooKeeper之间的HConnection,来获取与一个HBase集群进行交互的权限。一个ZooKeeper的HConnection连接,对应着一个Configuration实例,已经创建的HConnection实例,会被缓存起来。也就是说,如果客户端需要与HBase集群进行交互的时候,会传递一个Configuration实例到缓存中去,HBase Client部分通过已缓存的HConnection实例,来判断属于这个Configuration实例的HConnection实例是否存在,如果不存在,会创建一个新的HConnection,如果存在,则会直接返回相应的实例。 因此,如果频繁的创建Configuration实例,会导致创建很多不必要的HConnection实例,很容易达到ZooKeeper的连接数上限。 建议在整个客户端代码范围内,都共用同一个Configuration对象实例。
  • Configuration实例的创建 该类应该通过调用HBaseConfiguration的create()方法来实例化。否则,将无法正确加载HBase中的相关配置项。 正确示例: //该部分,应该是在类成员变量的声明区域声明 private Configuration hbaseConfig = null; //建议在类的构造函数中,或者初始化方法中实例化该类 hbaseConfig = HBaseConfiguration.create(); 错误示例: hbaseConfig = new Configuration();
  • Table实例的创建 public abstract class TableOperationImpl { private static Configuration conf = null; private static Connection connection = null; private static Table table = null; private static TableName tableName = TableName.valueOf("sample_table"); public TableOperationImpl() { init(); } public void init() { conf = ConfigurationSample.getConfiguration(); try { connection = ConnectionFactory.createConnection(conf); table = conn.getTable(tableName); } catch (IOException e) { e.printStackTrace(); } } public void close() { if (table != null) { try { table.close(); } catch (IOException e) { System.out.println("Can not close table."); } finally { table = null; } } if (connection != null) { try { connection.close(); } catch (IOException e) { System.out.println("Can not close connection."); } finally { connection = null; } } } public void operate() { init(); process(); close(); } }
  • Coordinator和Executor分离部署,Coordinator根据集群规模部署2-5个 Coordinator承担缓存元数据,解析SQL执行计划,和响应客户端请求的功能主要使用jvm内存,而Executor承担数据读写,算子计算等功能,主要使用offheap内存;拆分后可有效提升内存使用率;另外,所有的SQL执行统计均在Coordinator中记录,分离后可通过访问几个Coordinator节点获取整个集群的SQL运行情况,可减少运维压力。
  • 准备工作 使用盘古大模型Java SDK时,需要在代码中配置以下信息,请提前收集。 表1 资源列表 类型 资源 是否必选 依赖信息 参考文档 备注 大语言模型 华为云盘古 是(大语言模型至少选一个) 盘古模型API调用URL。 华为云 IAM 账号认证信息。 盘古大模型API参考文档: 申请资源时,可联系客户支持获取。 IAM帮助文档: https://support.huaweicloud.com/api-identitycenter/iic_04_0032.html 模型API调用文档中完整url。 格式示例为:https://{endpoint}/v1/{project_id}/deployments/{deployment_id}/chat/completions SDK配置:https://{endpoint}/v1/{project_id}/deployments/{deployment_id} (/chat/completions在SDK代码中已经进行了设置)。 IAM endpoint需要根据服务所在的区域正确配置,参考帮助文档“终端节点”章节查找。 参考IAM帮助文档,获取账号相关信息。 华为云Gallery托管三方模型 否 Gallery三方托管模型API调用URL。 华为云IAM账号认证信息。 三方大模型API参考文档: 申请资源时,可联系客户支持获取。 IAM帮助文档: https://support.huaweicloud.com/api-identitycenter/iic_04_0032.html 参考三方大模型API参考文档“API”章节,获取URL信息。 格式示例:https://{endpoint}/v1/infers/{deployment_id} 参考IAM帮助文档,获取账号相关信息。 Embedding模型 华为云 CSS CS S Embedding模型API调用URL。 华为云IAM账号认证信息。 CSS Embedding模型API参考文档: 申请资源时,可联系客户支持获取。 IAM帮助文档: https://support.huaweicloud.com/api-identitycenter/iic_04_0032.html 参考CSS Embedding模型API参考文档,获取URL信息。 格式示例:https://{endpoint}/v1/{project_id}/applications/{app_id}/{model_version} 参考IAM帮助文档,获取账号相关信息。 文档加载 华为云CSS 否 CSS文档解析服务API调用URL。 华为云IAM账号认证信息。 CSS文档解析服务API参考文档: 申请资源时,可联系客户支持获取。 IAM帮助文档: https://support.huaweicloud.com/api-identitycenter/iic_04_0032.html 参考CSS Embedding模型API参考文档,获取URL信息。 格式示例:https://{endpoint}/v1/{project_id}/applications/{app_id} 参考IAM帮助文档,获取账号相关信息。 向量记忆 华为云CSS 否 集群host信息。 用户认证信息。 云搜索服务 CSS: https://support.huaweicloud.com/css/index.html 参考CSS服务“快速入门”章节创建机器后,在集群信息中获取hosts信息。 示例: https://10.0.0.1:9200,https://10.0.0.2:9200 用户认证信息就是创建集群时设置的用户/密码。 华为云CSS(集成Embedding) 否 集群host信息。 用户认证信息。 云搜索 服务CSS: https://support.huaweicloud.com/css/index.html 参考CSS服务“快速入门”章节创建机器后,在集群信息中获取hosts信息。 示例: https://10.0.0.1:9200,https://10.0.0.2:9200 用户认证信息就是创建集群时设置的用户/密码。 Elastic Search 否 集群host信息。 用户认证信息。 ES官网: https://www.elastic.co/cn/elasticsearch/ hosts示例:https://10.0.0.1:9200,https://10.0.0.2:9200 标量存储 华为云DCS 否 host信息。 用户认证信息。 分布式缓存DCS: https://support.huaweicloud.com/dcs/index.html host示例:redis://10.0.0.1:6379 Redis 否 host信息。 用户认证信息。 Redis官网: https://redis.io/ host示例:redis://10.0.0.1:6379 华为云RDS 否 host信息。 用户认证信息。 云数据库RDS: https://support.huaweicloud.com/rds/index.html - Mysql 否 host信息。 用户认证信息。 Mysql官网: https://www.mysql.com/ - iam认证与SDK配置项的映射关系如下: POST https://iam.cn-southwest-2.myhuaweicloud.com/v3/auth/tokens { "auth": { "identity": { "methods": [ "password" ], "password": { "user": { "name": "username", //IAM用户名 "password": "********", //华为云账号密码 "domain": { "name": "domainname" //账号名 } } } }, "scope": { "project": { "name": "cn-southwest-2" //服务当前部署在“西南-贵阳一”区域,取值为cn-southwest-2 } } } } 父主题: 盘古应用开发SDK
  • Kafka开发应用时,需要准备的开发和运行环境如表1所示: 表1 开发环境 准备项 说明 操作系统 开发环境:Windows系统,支持Windows 7以上版本。 运行环境:Windows系统或Linux系统。 如需在本地调测程序,运行环境需要和集群业务平面网络互通。 安装和配置IntelliJ IDEA 开发环境的基本配置。版本要求:JDK使用1.8版本,IntelliJ IDEA使用2019.1或其他兼容版本。 说明: 若使用IBM JDK,请确保IntelliJ IDEA中的JDK配置为IBM JDK。 若使用Oracle JDK,请确保IntelliJ IDEA中的JDK配置为Oracle JDK。 若使用Open JDK,请确保IntelliJ IDEA中的JDK配置为Open JDK。 安装JDK 开发和运行环境的基本配置。版本要求如下: 服务端和客户端仅支持自带的OpenJDK,版本为1.8.0_272,不允许替换。 对于客户应用需引用SDK类的Jar包运行在客户应用进程中的。 X86客户端: Oracle JDK:支持1.8版本 IBM JDK:支持1.8.5.11版本 TaiShan客户端: OpenJDK:支持1.8.0_272版本 说明: 基于安全考虑,服务端只支持TLS V1.2及以上的加密协议。 IBM JDK默认只支持TLS V1.0,若使用IBM JDK,请配置启动参数“com.ibm.jsse2.overrideDefaultTLS”为“true”,设置后可以同时支持TLS V1.0/V1.1/V1.2,详情参见https://www.ibm.com/support/knowledgecenter/zh/SSYKE2_8.0.0/com.ibm.java.security.component.80.doc/security-component/jsse2Docs/matchsslcontext_tls.html#matchsslcontext_tls。 安装Maven 开发环境的基本配置。用于项目管理,贯穿软件开发生命周期。 7-zip 用于解压“*.zip”和“*.rar”文件,支持7-Zip 16.04版本。