华为云用户手册

  • 将订阅模型部署为服务 针对我的订阅模型,支持将模型一键部署为服务。 在“我的订阅”列表中,单击模型名称左侧的小三角,展开模型的详情和模型版本。 在“版本列表”中,单击“部署”,选择对应的服务类型。 图4 部署 若您选择部署的是商用模型,则选择服务类型后会弹出“修改配额”窗口,根据需要选择配额后单击“确定”即可跳转至“部署”页面。 由于商用模型支持同时购买多种配额模式的资产,所以仅部署商用模型时需要进行配额选择。免费模型仅一种配额模式无需选择。 图5 修改配额 若您选择部署的非商业模型,系统自动跳转至“部署”页面。 在部署页面中,无需再选择模型及其版本,参考部署模型的操作指导完成其他参数填写,即可部署为您需要的服务。
  • 推理代码 在模型代码推理文件customize_service.py中,需要添加一个子类,该子类继承对应模型类型的父类,各模型类型的父类名称和导入语句如请参考表1。 from PIL import Imageimport logfrom model_service.pytorch_model_service import PTServingBaseServiceimport torch.nn.functional as Fimport torch.nn as nnimport torchimport jsonimport numpy as nplogger = log.getLogger(__name__)import torchvision.transforms as transforms# 定义模型预处理infer_transformation = transforms.Compose([ transforms.Resize((28,28)), # 需要处理成pytorch tensor transforms.ToTensor()])import osclass PTVisionService(PTServingBaseService): def __init__(self, model_name, model_path): # 调用父类构造方法 super(PTVisionService, self).__init__(model_name, model_path) # 调用自定义函数加载模型 self.model = Mnist(model_path) # 加载标签 self.label = [0,1,2,3,4,5,6,7,8,9] # 亦可通过文件标签文件加载 # model目录下放置label.json文件,此处读取 dir_path = os.path.dirname(os.path.realpath(self.model_path)) with open(os.path.join(dir_path, 'label.json')) as f: self.label = json.load(f) def _preprocess(self, data): preprocessed_data = {} for k, v in data.items(): input_batch = [] for file_name, file_content in v.items(): with Image.open(file_content) as image1: # 灰度处理 image1 = image1.convert("L") if torch.cuda.is_available(): input_batch.append(infer_transformation(image1).cuda()) else: input_batch.append(infer_transformation(image1)) input_batch_var = torch.autograd.Variable(torch.stack(input_batch, dim=0), volatile=True) print(input_batch_var.shape) preprocessed_data[k] = input_batch_var return preprocessed_data def _postprocess(self, data): results = [] for k, v in data.items(): result = torch.argmax(v[0]) result = {k: self.label[result]} results.append(result) return results def _inference(self, data): result = {} for k, v in data.items(): result[k] = self.model(v) return resultclass Net(nn.Module): def __init__(self): super(Net, self).__init__() self.hidden1 = nn.Linear(784, 5120, bias=False) self.output = nn.Linear(5120, 10, bias=False) def forward(self, x): x = x.view(x.size()[0], -1) x = F.relu((self.hidden1(x))) x = F.dropout(x, 0.2) x = self.output(x) return F.log_softmax(x)def Mnist(model_path, **kwargs): # 生成网络 model = Net() # 加载模型 if torch.cuda.is_available(): device = torch.device('cuda') model.load_state_dict(torch.load(model_path, map_location="cuda:0")) else: device = torch.device('cpu') model.load_state_dict(torch.load(model_path, map_location=device)) # CPU或者GPU映射 model.to(device) # 声明为推理模式 model.eval() return model
  • 训练并保存模型 from __future__ import absolute_import, division, print_function, unicode_literalsimport tensorflow as tfmnist = tf.keras.datasets.mnist(x_train, y_train), (x_test, y_test) = mnist.load_data()x_train, x_test = x_train / 255.0, x_test / 255.0model = tf.keras.models.Sequential([ tf.keras.layers.Flatten(input_shape=(28, 28)), tf.keras.layers.Dense(128, activation='relu'), tf.keras.layers.Dense(256, activation='relu'), tf.keras.layers.Dropout(0.2), # 对输出层命名output,在模型推理时通过该命名取结果 tf.keras.layers.Dense(10, activation='softmax', name="output")])model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])model.fit(x_train, y_train, epochs=10)tf.keras.models.save_model(model, "./mnist")
  • 推理代码 在模型代码推理文件customize_service.py中,需要添加一个子类,该子类继承对应模型类型的父类,各模型类型的父类名称和导入语句如请参考表1。 import loggingimport threadingimport numpy as npimport tensorflow as tffrom PIL import Imagefrom model_service.tfserving_model_service import TfServingBaseServicelogger = logging.getLogger()logger.setLevel(logging.INFO)class MnistService(TfServingBaseService): def __init__(self, model_name, model_path): self.model_name = model_name self.model_path = model_path self.model = None self.predict = None # label文件可以在这里加载,在后处理函数里使用 # label.txt放在obs和模型包的目录 # with open(os.path.join(self.model_path, 'label.txt')) as f: # self.label = json.load(f) # 非阻塞方式加载saved_model模型,防止阻塞超时 thread = threading.Thread(target=self.load_model) thread.start() def load_model(self): # load saved_model 格式的模型 self.model = tf.saved_model.load(self.model_path) signature_defs = self.model.signatures.keys() signature = [] # only one signature allowed for signature_def in signature_defs: signature.append(signature_def) if len(signature) == 1: model_signature = signature[0] else: logging.warning("signatures more than one, use serving_default signature from %s", signature) model_signature = tf.saved_model.DEFAULT_SERVING_SIGNATURE_DEF_KEY self.predict = self.model.signatures[model_signature] def _preprocess(self, data): images = [] for k, v in data.items(): for file_name, file_content in v.items(): image1 = Image.open(file_content) image1 = np.array(image1, dtype=np.float32) image1.resize((28, 28, 1)) images.append(image1) images = tf.convert_to_tensor(images, dtype=tf.dtypes.float32) preprocessed_data = images return preprocessed_data def _inference(self, data): return self.predict(data) def _postprocess(self, data): return { "result": int(data["output"].numpy()[0].argmax()) }
  • 训练模型 from __future__ import print_functionimport argparseimport torchimport torch.nn as nnimport torch.nn.functional as Fimport torch.optim as optimfrom torchvision import datasets, transforms# 定义网络结构class Net(nn.Module): def __init__(self): super(Net, self).__init__() # 输入第二维需要为784 self.hidden1 = nn.Linear(784, 5120, bias=False) self.output = nn.Linear(5120, 10, bias=False) def forward(self, x): x = x.view(x.size()[0], -1) x = F.relu((self.hidden1(x))) x = F.dropout(x, 0.2) x = self.output(x) return F.log_softmax(x)def train(model, device, train_loader, optimizer, epoch): model.train() for batch_idx, (data, target) in enumerate(train_loader): data, target = data.to(device), target.to(device) optimizer.zero_grad() output = model(data) loss = F.cross_entropy(output, target) loss.backward() optimizer.step() if batch_idx % 10 == 0: print('Train Epoch: {} [{}/{} ({:.0f}%)]\tLoss: {:.6f}'.format( epoch, batch_idx * len(data), len(train_loader.dataset), 100. * batch_idx / len(train_loader), loss.item()))def test( model, device, test_loader): model.eval() test_loss = 0 correct = 0 with torch.no_grad(): for data, target in test_loader: data, target = data.to(device), target.to(device) output = model(data) test_loss += F.nll_loss(output, target, reduction='sum').item() # sum up batch loss pred = output.argmax(dim=1, keepdim=True) # get the index of the max log-probability correct += pred.eq(target.view_as(pred)).sum().item() test_loss /= len(test_loader.dataset) print('\nTest set: Average loss: {:.4f}, Accuracy: {}/{} ({:.0f}%)\n'.format( test_loss, correct, len(test_loader.dataset), 100. * correct / len(test_loader.dataset)))device = torch.device("cpu")batch_size=64kwargs={}train_loader = torch.utils.data.DataLoader( datasets.MNIST('.', train=True, download=True, transform=transforms.Compose([ transforms.ToTensor() ])), batch_size=batch_size, shuffle=True, **kwargs)test_loader = torch.utils.data.DataLoader( datasets.MNIST('.', train=False, transform=transforms.Compose([ transforms.ToTensor() ])), batch_size=1000, shuffle=True, **kwargs)model = Net().to(device)optimizer = optim.SGD(model.parameters(), lr=0.01, momentum=0.5)optimizer = optim.Adam(model.parameters())for epoch in range(1, 2 + 1): train(model, device, train_loader, optimizer, epoch) test(model, device, test_loader)
  • 操作步骤 查看项目下构建任务列表。 接口信息 URI:GET /v3/{project_id}/jobs API文档详情请参见:查看项目下用户的构建任务列表 API Explorer在线调试请参见: 查看项目下用户的构建任务列表 请求示例 GET https://cloudbuild-ext.cn-north-1.myhuaweicloud.com/v3/8391ec48637849f384dd3db5c8d61.../jobs?page_index=0&page_size=2 响应示例 { "total": 35, "jobs": [{ "id": "d62d64d7782545c696ffaacc9ac9c69a", "job_name": "cloudbuild-制作镜像并推送到SWR仓库", "job_creator": "b7066bfb50194e36b472a61f088bbf72", "user_name": "L0_codeci", "last_build_time": 1598438571000, "health_score": 100, "source_code": "codeci", "last_build_status": "blue", "is_finished": true, "disabled": false, "favorite": true, "is_modify": true, "is_delete": true, "is_execute": true, "is_copy": true, "is_forbidden": true, "is_view": true }, { "id": "4485de11a8e74ffdb9c9f85bafb85f83", "job_name": "cloudbuild-使用SWR公共镜像", "job_creator": "b7066bfb50194e36b472a61f088bbf72", "user_name": "L0_codeci", "last_build_time": 1598438567000, "health_score": 100, "source_code": "codeci", "last_build_status": "blue", "is_finished": true, "disabled": false, "favorite": true, "is_modify": true, "is_delete": true, "is_execute": true, "is_copy": true, "is_forbidden": true, "is_view": true }]}
  • AK/SK认证 AK/SK签名认证方式仅支持消息体大小12M以内,12M以上的请求请使用Token认证。 AK/SK认证就是使用AK/SK对请求进行签名,在请求时将签名信息添加到消息头,从而通过身份认证。 AK(Access Key ID):访问密钥ID。与私有访问密钥关联的唯一标识符;访问密钥ID和私有访问密钥一起使用,对请求进行加密签名。 SK(Secret Access Key):与访问密钥ID结合使用的密钥,对请求进行加密签名,可标识发送方,并防止请求被修改。 使用AK/SK认证时,您可以基于签名算法使用AK/SK对请求进行签名,也可以使用专门的签名SDK对请求进行签名。详细的签名方法和SDK使用方法请参见API签名指南。
  • 操作步骤 执行构建任务。 接口信息 URI:POST /v3/jobs/build API文档详情请参见:执行构建任务 API Explorer在线调试请参见: 执行构建任务 请求示例 POST https://cloudbuild-ext.cn-north-1.myhuaweicloud.com/v3/jobs/build 请求体示例 { "job_id": "3341eaf0de6844669f07baa1ddfc9..."} 响应示例 { "octopus_job_name": "j_WfRE6eOY", "actual_build_number": "55", "daily_build_number": "20200825.1"} 查看任务是否为运行状态。 接口信息 URI:GET /v3/jobs/{job_id}/status API文档详情请参见:查看任务运行状态 API Explorer在线调试请参见: 查看任务运行状态 请求示例 GET https://cloudbuild-ext.cn-north-1.myhuaweicloud.com/v3/jobs/3341eaf0de6844669f07bdfc9.../status 响应示例 { "result": false}
  • Token认证 Token的有效期为24小时,需要使用一个Token鉴权时,可以先缓存起来,避免频繁调用。 Token在计算机系统中代表令牌(临时)的意思,拥有Token就代表拥有某种权限。Token认证就是在调用API的时候将Token加到请求消息头,从而通过身份认证,获得操作API的权限。 在构造请求中以调用获取用户Token获取请求认证接口为例说明了如何调用API。 Token可通过调用获取用户Token接口获取,调用本服务API需要project级别的Token,即调用获取用户Token接口时,请求body中auth.scope的取值需要选择project,如下所示。 { "auth": { "identity": { "methods": [ "password" ], "password": { "user": { "name": "username", "password": "********", "domain": { "name": "domainname" } } } }, "scope": { "project": { "name": "xxxxxxxx" } } } } 获取Token后,再调用其他接口时,您需要在请求消息头中添加“X-Auth-Token”,其值即为Token。例如Token值为“ABCDEFJ....”,则调用接口时将“X-Auth-Token: ABCDEFJ....”加到请求消息头即可,如下所示。 GET https://iam.cn-north-1.myhuaweicloud.com/v3/auth/projectsContent-Type: application/jsonX-Auth-Token: ABCDEFJ....
  • 终端节点 终端节点即调用API的请求地址,不同服务不同区域的终端节点不同,编译构建的终端节点如表1所示,请您根据业务需要选择对应区域的终端节点。 表1 CodeArts编译构建的终端节点 区域名称 区域 终端节点(Endpoint) CN North-Beijing1 cn-north-1 cloudbuild-ext.cn-north-1.myhuaweicloud.com CN North-Beijing4 cn-north-4 cloudbuild-ext.cn-north-4.myhuaweicloud.com CN South-Guangzhou cn-south-1 cloudbuild-ext.cn-south-1.myhuaweicloud.com CN East-Shanghai2 cn-east-2 cloudbuild-ext.cn-east-2.myhuaweicloud.com CN Northeast-Dalian cn-northeast-1 cloudbuild-ext.cn-northeast-1.myhuaweicloud.com 父主题: 使用前必读
  • 概述 编译构建服务(CodeArts Build)为开发者提供配置简单的混合语言构建平台,实现编译构建云端化,支撑企业实现持续交付,缩短交付周期,提升交付效率。支持编译构建任务一键创建、配置和执行,实现获取代码、构建、打包等活动自动化,实时监控构建状态,让您更加快速、高效地进行云端编译构建。 您可以使用本文档提供的API对编译构建任务进行相关操作,如执行、查询任务等,支持的全部操作请参见API概览。 在调用API之前,请确保已经充分了解编译构建相关概念,详细信息请参见产品介绍。 父主题: 使用前必读
  • 状态码 状态码如表1所示。 表1 状态码 状态码 编码 错误码说明 100 Continue 继续请求。 这个临时响应用来通知客户端,它的部分请求已经被服务器接收,且仍未被拒绝。 101 Switching Protocols 切换协议。只能切换到更高级的协议。 例如,切换到HTTP的新版本协议。 201 Created 创建类的请求完全成功。 202 Accepted 已经接受请求,但未处理完成。 203 Non-Authoritative Information 非授权信息,请求成功。 204 NoContent 请求完全成功,同时HTTP响应不包含响应体。 在响应OPTIONS方法的HTTP请求时返回此状态码。 205 Reset Content 重置内容,服务器处理成功。 206 Partial Content 服务器成功处理了部分GET请求。 300 Multiple Choices 多种选择。请求的资源可包括多个位置,相应可返回一个资源特征与地址的列表用于用户终端(例如:浏览器)选择。 301 Moved Permanently 永久移动,请求的资源已被永久的移动到新的URI,返回信息会包括新的URI。 302 Found 资源被临时移动。 303 See Other 查看其它地址。 使用GET和POST请求查看。 304 Not Modified 所请求的资源未修改,服务器返回此状态码时,不会返回任何资源。 305 Use Proxy 所请求的资源必须通过代理访问。 306 Unused 已经被废弃的HTTP状态码。 400 BadRequest 非法请求。 建议直接修改该请求,不要重试该请求。 401 Unauthorized 在客户端提供认证信息后,返回该状态码,表明服务端指出客户端所提供的认证信息不正确或非法。 402 Payment Required 保留请求。 403 Forbidden 请求被拒绝访问。 返回该状态码,表明请求能够到达服务端,且服务端能够理解用户请求,但是拒绝做更多的事情,因为该请求被设置为拒绝访问,建议直接修改该请求,不要重试该请求。 404 NotFound 所请求的资源不存在。 建议直接修改该请求,不要重试该请求。 405 MethodNotAllowed 请求中带有该资源不支持的方法。 建议直接修改该请求,不要重试该请求。 406 Not Acceptable 服务器无法根据客户端请求的内容特性完成请求。 407 Proxy Authentication Required 请求要求代理的身份认证,与401类似,但请求者应当使用代理进行授权。 408 Request Time-out 服务器等候请求时发生超时。 客户端可以随时再次提交该请求而无需进行任何更改。 409 Conflict 服务器在完成请求时发生冲突。 返回该状态码,表明客户端尝试创建的资源已经存在,或者由于冲突请求的更新操作不能被完成。 410 Gone 客户端请求的资源已经不存在。 返回该状态码,表明请求的资源已被永久删除。 411 Length Required 服务器无法处理客户端发送的不带Content-Length的请求信息。 412 Precondition Failed 未满足前提条件,服务器未满足请求者在请求中设置的其中一个前提条件。 413 Request Entity Too Large 由于请求的实体过大,服务器无法处理,因此拒绝请求。为防止客户端的连续请求,服务器可能会关闭连接。如果只是服务器暂时无法处理,则会包含一个Retry-After的响应信息。 414 Request-URI Too Large 请求的URI过长(URI通常为网址),服务器无法处理。 415 Unsupported Media Type 服务器无法处理请求附带的媒体格式。 416 Requested range not satisfiable 客户端请求的范围无效。 417 Expectation Failed 服务器无法满足Expect的请求头信息。 422 UnprocessableEntity 请求格式正确,但是由于含有语义错误,无法响应。 429 TooManyRequests 表明请求超出了客户端访问频率的限制或者服务端接收到多于它能处理的请求。建议客户端读取相应的Retry-After首部,然后等待该首部指出的时间后再重试。 500 InternalServerError 表明服务端能被请求访问到,但是不能理解用户的请求。 501 Not Implemented 服务器不支持请求的功能,无法完成请求。 502 Bad Gateway 充当网关或代理的服务器,从远端服务器接收到了一个无效的请求。 503 ServiceUnavailable 被请求的服务无效。 建议直接修改该请求,不要重试该请求。 504 ServerTimeout 请求在给定的时间内无法完成。客户端仅在为请求指定超时(Timeout)参数时会得到该响应。 505 HTTP Version not supported 服务器不支持请求的HTTP协议的版本,无法完成处理。 父主题: 附录
  • 错误码说明 当您调用API时,如果遇到“APIGW”开头的错误码,请参见API网关错误码进行处理。 更多服务错误码请参见API错误中心。 状态码 错误码 错误信息 描述 处理措施 500 CB.00060100 网络繁忙,请稍后重试。 网络繁忙,请稍后重试。 稍后重试。 500 CB.00060101 服务内部异常。 服务内部异常。 服务内部异常。 400 CB.00060200 参数不合法。 参数不合法。 请检查并确认参数值是否合法。 400 CB.00060201 任务ID参数不合法。 任务ID参数不合法。 输入合法任务ID。 400 CB.00060202 业务ID参数不合法。 业务ID参数不合法。 业务ID仅支持小写字母、数字组合。请确认参数是否合法。 400 CB.00060203 文件名称不合法。 文件名称不合法。 文件名称不允许为空,且长度不大于500。 500 CB.00060211 请求过于频繁,请稍后再试。 请求过于频繁,请稍后再试。 稍后重试。 400 CB.00060212 上传文件不能为空。 上传文件不能为空。 确认是否有选择文件上传。 400 CB.00060213 上传文件个数不能超过x个。 上传文件个数不能超过x个。 减少单次上传的文件个数。 404 CB.00060214 找不到您访问的url。 访问的url不合法。 确认请求的URL路径是否正确。
  • 优势对比 单机实例:支持创建只读实例、错误日志、慢日志查询管理。相较于主备实例,单机实例少了一个数据库节点,可大幅节省用户成本,售价低至主备实例的一半。由于单机实例只有一个数据库节点,当该数据库节点出现故障时,恢复时间较长,因此,如果是对数据库可用性要求较高的敏感性业务,不建议使用单机实例。 主备实例:主备实例的备数据库节点仅用于故障转移和恢复场景,不对外提供服务。由于使用备数据库节点会带来额外性能开销,从性能角度来看,单机实例的性能与主备实例相同,甚至单机实例的性能可能会高于主备实例。 集群版实例:采用微软AlwaysOn高可用架构,支持1主1备5只读集群模式,拥有更高可用性、可靠性、可拓展能力。
  • 读写分离 RDS for SQL Server2019企业版和2017企业版支持只读实例。 RDS for MySQL数据库的主实例和只读实例都具有独立的连接地址,每个云数据库RDS for MySQL单机实例、主备实例最多支持创建5个只读实例,创建方法请参见创建只读实例。 为了实现读取能力的弹性扩展,分担数据库压力,您可以在某个区域中创建一个或多个只读实例,利用只读实例满足大量的数据库读取需求,以此增加应用的吞吐量。 父主题: 典型应用
  • 产品类型简介 目前,云数据库RDS的实例分为如下几个类型: 单机实例 主备实例 集群版实例 不同系列支持的引擎类型和实例规格不同,请以实际界面为准。 表1 实例类型简介 实例类型 简介 使用说明 适用场景 单机实例 采用单个数据库节点部署架构。与主流的主备实例相比,它只包含一个节点,但具有高性价比。 单机版出现故障后,无法保障及时恢复。 个人学习。 微型网站。 中小企业的开发测试环境。 主备实例 采用一主一备的经典高可用架构,支持跨AZ高可用,选择主可用区和备可用区不在同一个可用区(AZ)。主实例和备实例共用一个IP地址。 备机提高了实例的可靠性,创建主机的过程中,会同步创建备机,备机创建成功后,用户不可见。 当主节点故障后,会发生主备切换,时长大概为5-10s,期间数据库客户端会发生短暂中断。若存在复制延时,主备切换时间会长一点,数据库客户端需要支持重新连接。 大中型企业的生产数据库。 覆盖互联网、物联网、零售电商、物流、游戏等行业的应用。 集群版实例 采用微软AlwaysOn高可用架构,支持1主1备5只读集群模式,拥有更高可用性,可靠性,可拓展能力。 仅限RDS for SQL Server使用。 金融行业。 互联网行业。 酒店行业。 在线教育。 父主题: 产品系列
  • 数据库实例类型 数据库实例是云数据库RDS的最小管理单元。一个实例代表了一个独立运行的云数据库RDS。您可以在一个实例中创建和管理多个数据库,并且可以使用与独立访问数据库实例相同的工具和应用进行访问。使用管理控制台或基于HTTPS请求的API(Application programming interface)可以方便地创建或者修改数据库实例。云数据库RDS服务对运行实例数量没有限制,但每个数据库实例都有唯一的标识符。 实例可进行如下分类: 表1 实例类型 实例类型 简介 使用说明 单机实例 采用单个数据库节点部署架构。与主流的主备实例相比,它只包含一个节点,但具有高性价比。 单机版出现故障后,无法保障及时恢复。 主备实例 采用一主一备的经典高可用架构,主备实例的每个节点的规格保持一致。 RDS支持跨AZ高可用。选择主可用区和备可用区不在同一个可用区(AZ)。 备机提高了实例的可靠性,创建主机的过程中,会同步创建备机,备机创建成功后,用户不可见。 当主节点故障后,会自动发生主备切换,数据库客户端会发生短暂中断,数据库客户端需要支持重新连接。 关于主备之间的同步方式: RDS for MySQL默认是半同步。 RDS for PostgreSQL默认是异步。 RDS for SQL Server主备实例之间默认是同步:2017企业版和2019企业版是AlwaysOn同步机制,其他版本是Mirror同步机制。 RDS for SQL Server主实例和只读实例之间默认是异步。 只读实例 采用单个物理节点架构或高可用架构。 只读实例分为单机版只读实例和高可用只读实例: 单机版只读实例:推荐开启数据库代理功能,并购买冗余的单机版只读实例。当单个只读故障后,数据库代理可以将流量分担到其它只读节点。 高可用只读实例:当只读实例所在物理机故障后,备用只读实例自动顶替。购买只读实例时,注意表库名的大小写敏感要与主实例保持一致。 当只读实例与主数据库之间复制异常后,单机版和高可用版只读都需要较长时间重建和恢复(取决于数据量)。 集群版实例 采用微软AlwaysOn高可用架构,支持1主1备5只读集群模式,拥有更高可用性,可靠性,可拓展能力。 仅限RDS for SQL Server使用。 RDS for SQL Server 2019企业版和2017企业版支持只读实例。 用户可以在云数据库RDS系统中自助创建及管理各种数据库引擎的实例。 不同实例类型之间的区别和功能对比请参考产品类型简介和产品功能对比。 父主题: 实例说明
  • 日志 RDS for MySQL 支持查看数据库级别的错误日志,包括数据库主库和从库运行的错误信息,以及运行较慢的SQL查询语句,有助于分析系统中存在的问题。 错误日志的详细介绍,请参见查看或下载错误日志。 慢日志用来记录执行时间超过当前慢日志阈值“long_query_time”(默认是1秒)的语句,通过慢日志的日志明细、统计分析情况,查找出执行效率低的语句,进行优化。 慢日志的详细介绍,请参见查看或下载慢日志。 支持查看主备切换日志,通过RDS for MySQL实例的主备切换日志信息,评估对业务的影响。 主备切换日志的详细介绍,请参见查看主备切换日志。 支持开通SQL审计功能,系统会将所有的SQL操作记录下来存入日志文件,以提供针对数据增删改查等操作的审计行为。 SQL审计的详细介绍和开通配置方法,请参见开启SQL审计日志。 RDS for PostgreSQL 错误日志记录了数据库运行时的日志,通过错误日志有助于分析系统中存在的问题。 错误日志的详细介绍,请参见查看或下载错误日志。 慢日志用来记录执行时间超过当前慢日志阈值“log_min_duration_statement”的语句,通过慢日志的日志明细、统计分析情况,查找出执行效率低的语句,进行优化。 慢日志的详细介绍,请参见查看或下载慢日志。 RDS for SQL Server 运行日志记录了数据库运行时的日志,通过运行日志分析系统中存在的问题。 运行日志的详细介绍,请参见查看或下载运行日志。 慢日志用来记录执行时间超过当前慢日志阈值“long_query_time”(默认是1秒)的语句,通过慢日志的日志明细,查找出执行效率低的语句,进行优化。 慢日志的详细介绍,请参见查看或下载慢日志。 默认开启SQL审计功能,系统会将对服务级、数据库级、表级的主要变更操作记录进审计日志文件,以提供针对数据增删改查等操作的审计行为。 审计日志的详细介绍,请参见查看或下载审计日志。
  • 审计 云审计服务(Cloud Trace Service,CTS),是华为云安全解决方案中专业的日志审计服务,提供对各种云资源操作记录的收集、存储和查询功能,可用于支撑安全分析、合规审计、资源跟踪和问题定位等常见应用场景。 用户开通云审计服务并创建和配置追踪器后,CTS可记录RDS的管理事件和数据事件用于审计。 CTS的详细介绍和开通配置方法,请参见CTS快速入门。 CTS支持追踪的RDS for MySQL管理事件和数据事件列表,请参见支持审计的关键操作列表。 CTS支持追踪的RDS for PostgreSQL管理事件和数据事件列表,请参见支持审计的关键操作列表。 CTS支持追踪的RDS for SQL Server管理事件和数据事件列表,请参见支持审计的关键操作列表。
  • 服务韧性 RDS for MySQL使用EVS作为存放数据的云盘,本身具有三副本的冗余,提供9个9的数据持久性,还通过跨区域复制、AZ之间数据容灾、AZ内反亲和等技术方案,保障实例的可靠性和可用性。 RDS for PostgreSQL使用EVS作为存放数据的云盘,本身具有三副本的冗余,提供9个9的数据持久性,还通过跨区域复制、AZ内反亲和等技术方案,保障实例的可靠性和可用性。 RDS for SQL Server使用EVS作为存放数据的云盘,本身具有三副本的冗余,提供9个9的数据持久性,还通过跨区域复制、AZ内反亲和等技术方案,保障实例的可靠性和可用性。 图1 可靠性架构保证数据稳定,业务可靠 父主题: 安全
  • 数据保护技术 云数据库RDS通过多种数据保护手段和特性,保障存储在RDS中的数据安全可靠。 表1 RDS的数据保护手段和特性 数据保护手段 简要说明 详细介绍 传输加密(SSL) RDS for MySQL实例支持非SSL和SSL传输协议,为保证数据传输的安全性,推荐您使用更加安全的SSL协议。 RDS for PostgreSQL实例和RDS for SQL Server实例支持SSL传输协议,保证数据传输的安全性。 RDS for MySQL:设置SSL数据加密 RDS for PostgreSQL:通过psql命令行内网连接实例 RDS for SQL Server:通过内网连接RDS for SQL Server实例 跨可用区部署 为了达到更高的可靠性,RDS支持选择多可用区部署主实例和备实例,可用区之间内网互通,不同可用区之间物理隔离,RDS会自动将主实例和备实例分布到不同的可用区,以提供故障切换能力和高可用性。 RDS for MySQL:购买实例选择跨可用区部署 RDS for PostgreSQL:购买实例选择跨可用区部署 RDS for SQL Server:购买实例选择跨可用区部署 删除保护 云数据库RDS支持将退订后的包年包月实例和删除的按需实例,加入回收站管理。通过数据库回收站中重建实例功能,可以恢复1~7天内删除的实例。 RDS for MySQL:回收站 RDS for PostgreSQL:回收站 RDS for SQL Server:回收站 跨区域备份 云数据库RDS支持将备份文件存放到另一个区域存储,某一区域的实例故障后,可以在异地区域使用备份文件在异地恢复到新的RDS实例,用来恢复业务。 RDS for MySQL:设置跨区域备份策略 RDS for PostgreSQL:设置跨区域备份策略 RDS for SQL Server:设置跨区域备份策略 父主题: 安全
  • RDS for PostgreSQL实例规格 RDS for PostgreSQL实例支持的数据库版本请参见数据库引擎和版本。 RDS for PostgreSQL实例规格的CPU架构分为X86架构和ARM架构,详见表1。支持的规格列表请参见表4、表5和表6。 X86架构:通用型(推荐)、独享型(推荐)、通用增强型(存量经营)、通用增强II型(存量经营) ARM架构:鲲鹏通用增强型 表1 实例规格类型 规格 说明 适用场景 约束限制 通用型(推荐) 与同一物理机上的其他通用型规格实例共享CPU资源,通过资源复用换取CPU使用率最大化,性价比较高,适用于对性能稳定性要求较低的应用场景。 侧重对成本、性价比要求较高的场景。 后续主推规格,支持的区域如表2所示。 独享型(推荐) 完全独享的CPU和内存,性能长期稳定,不会因为物理机上其它实例的行为而受到影响,适用于对性能稳定性要求较高的应用场景。 电商、游戏、金融、政企等核心数据库场景。 后续主推规格,支持的区域如表2所示。 通用增强型、通用增强II型 CPU性能强劲,并搭载全新网络加速引擎,以及DPDK(Data Plane Development Kit)快速报文处理机制,提供更高的网络性能以及算力,满足不同场景需求。 对数据库算力与网络有更高性能要求的网站和Web应用场景。 该规格为存量经营。 鲲鹏通用增强型 搭载鲲鹏920处理器及25GE智能高速网卡,提供强劲鲲鹏算力和高性能网络 政府、互联网等企业场景。 支持的区域如表3所示。 表2 通用型、独享型支持的区域 规格类型 区域 通用型、独享型 华北-北京四、华北-乌兰察布一 华东-上海一 华南-广州、华南-广州-友好用户环境 西南-贵阳一 亚太-曼谷、亚太-新加坡 中国-香港 拉美-圣保罗一、拉美-圣地亚哥、拉美-墨西哥城一、拉美-墨西哥城二 非洲-约翰内斯堡 表3 鲲鹏通用增强型支持的区域 规格类型 区域 可用区 PostgreSQL版本 鲲鹏通用增强型 华北-北京四 可用区一、可用区二、可用区七 11 华东-上海一 可用区一、可用区三 11 华南-广州 可用区二、可用区五 11 华南-深圳 可用区一 11 西南-贵阳一 可用区一 11 华北-乌兰察布一 可用区一 11 表4 X86架构实例规格(通用型、独享型) 规格 主备实例规格码 只读实例规格码 单机实例规格码 vCPU(个) 内存(GB) 通用型 rds.pg.n1.medium.2.ha rds.pg.n1.medium.2.rr rds.pg.n1.medium.2 1 2 rds.pg.n1.large.2.ha rds.pg.n1.large.2.rr rds.pg.n1.large.2 2 4 rds.pg.n1.large.4.ha rds.pg.n1.large.4.rr rds.pg.n1.large.4 2 8 rds.pg.n1.xlarge.2.ha rds.pg.n1.xlarge.2.rr rds.pg.n1.xlarge.2 4 8 rds.pg.n1.xlarge.4.ha rds.pg.n1.xlarge.4.rr rds.pg.n1.xlarge.4 4 16 rds.pg.n1.2xlarge.2.ha rds.pg.n1.2xlarge.2.rr rds.pg.n1.2xlarge.2 8 16 rds.pg.n1.2xlarge.4.ha rds.pg.n1.2xlarge.4.rr rds.pg.n1.2xlarge.4 8 32 独享型 说明: SSD云盘和极速型SSD支持的独享型规格存在差异,请以实际环境为准。 rds.pg.x1.large.2.ha rds.pg.x1.large.2.rr - 2 4 rds.pg.x1.large.4.ha rds.pg.x1.large.4.rr - 2 8 rds.pg.x1.large.8.ha rds.pg.x1.large.8.rr - 2 16 rds.pg.x1.xlarge.2.ha rds.pg.x1.xlarge.2.rr - 4 8 rds.pg.x1.xlarge.4.ha rds.pg.x1.xlarge.4.rr - 4 16 rds.pg.x1.xlarge.8.ha rds.pg.x1.xlarge.8.rr - 4 32 rds.pg.x1.2xlarge.2.ha rds.pg.x1.2xlarge.2.rr - 8 16 rds.pg.x1.2xlarge.4.ha rds.pg.x1.2xlarge.4.rr - 8 32 rds.pg.x1.2xlarge.8.ha rds.pg.x1.2xlarge.8.rr - 8 64 rds.pg.x1.4xlarge.2.ha rds.pg.x1.4xlarge.2.rr - 16 32 rds.pg.x1.4xlarge.4.ha rds.pg.x1.4xlarge.4.rr - 16 64 rds.pg.x1.4xlarge.8.ha rds.pg.x1.4xlarge.8.rr - 16 128 rds.pg.x1.8xlarge.2.ha rds.pg.x1.8xlarge.2.rr - 32 64 rds.pg.x1.8xlarge.4.ha rds.pg.x1.8xlarge.4.rr - 32 128 rds.pg.x1.16xlarge.2.ha rds.pg.x1.16xlarge.2.rr - 64 128 rds.pg.x1.16xlarge.4.ha rds.pg.x1.16xlarge.4.rr - 64 256 rds.pg.x1.16xlarge.8.ha rds.pg.x1.16xlarge.8.rr - 64 512 表5 X86架构实例规格(通用增强型、通用增强II型) 规格 vCPU(个) 内存(GB) 通用增强型 1 2 1 4 2 4 2 8 2 16 4 8 4 16 4 32 8 32 8 64 16 64 32 128 60 128 60 256 通用增强II型 2 4 2 8 2 16 4 8 4 16 4 32 8 16 8 32 8 64 16 32 16 64 16 128 32 64 32 128 64 128 64 256 64 512 表6 ARM架构实例规格 规格 主备实例规格码 只读实例规格码 单机实例规格码 vCPU(个) 内存(GB) 鲲鹏通用增强型 rds.pg.large.arm2.ha rds.pg.large.arm2.rr rds.pg.large.arm2.single 2 4 rds.pg.large.arm4.ha rds.pg.large.arm4.rr rds.pg.large.arm4.single 2 8 rds.pg.xlarge.arm2.ha rds.pg.xlarge.arm2.rr rds.pg.xlarge.arm2.single 4 8 rds.pg.xlarge.arm4.ha rds.pg.xlarge.arm4.rr rds.pg.xlarge.arm4.single 4 16 rds.pg.2xlarge.arm2.ha rds.pg.2xlarge.arm2.rr rds.pg.2xlarge.arm2.single 8 16 rds.pg.2xlarge.arm4.ha rds.pg.2xlarge.arm4.rr rds.pg.2xlarge.arm4.single 8 32 rds.pg.4xlarge.arm2.ha rds.pg.4xlarge.arm2.rr rds.pg.4xlarge.arm2.single 16 32 rds.pg.4xlarge.arm4.ha rds.pg.4xlarge.arm4.rr rds.pg.4xlarge.arm4.single 16 64 rds.pg.8xlarge.arm2.ha rds.pg.8xlarge.arm2.rr rds.pg.8xlarge.arm2.single 32 64 rds.pg.8xlarge.arm4.ha rds.pg.8xlarge.arm4.rr rds.pg.8xlarge.arm4.single 32 128 rds.pg.15xlarge.arm2.ha rds.pg.15xlarge.arm2.rr rds.pg.15xlarge.arm2.single 60 120 数据库实例规格请以实际环境为准。 父主题: 实例规格
  • 到期与欠费 服务到期 “按需计费”实例,没有到期的概念。 “包年/包月”实例到期后无法在RDS管理控制台进行该实例的操作,相关接口也无法调用,自动化监控或告警等运维也会停止。如果在保留期结束时您没有续费,实例将终止服务,系统中的数据也将被永久删除。 若您购买的实例已到期,请参见费用中心用户指南中资源停止服务或逾期释放说明章节进行处理。 欠费 “包年/包月”实例,没有欠费的概念。 “按需计费”实例是按实际使用扣费,当余额不足,无法扣费,就会导致实例欠费。您续费后解冻实例,可继续正常使用,请注意在保留期进行的续费,是以原到期时间作为生效时间,您应当支付从进入保留期开始到续费时的服务费用。 若您购买的实例已欠费,请参见费用中心用户指南中欠费还款章节进行处理。
  • 计费项 华为云RDS对您选择的数据库实例、数据库存储和备份存储(可选)收费。 表1 RDS计费项说明 计费项 计费说明 数据库实例 提供包年包月和按需计费两种方式。同一个实例下的实例规格计费方式和存储计费方式保持一致。 数据库存储 备份存储(可选) RDS提供了部分免费存储空间,用于存放您的备份数据,其总容量约为您购买容量的100%。备份存储用量超过数据库存储空间的100%,开始按照阶梯计费。 公网流量 RDS实例支持公网访问,公网访问会产生带宽流量费;RDS数据库实例在云内部网络产生的流量不计费。 华为云RDS管理费用详情,请参见产品价格详情。您可以通过RDS提供的价格计算器,选择您需要的实例规格,来快速计算出购买RDS实例的参考价格。
  • RDS与其他服务的关系 关系型数据库与其他服务之间的关系,具体如下图所示。 图1 关系型数据库与其他服务的关系示意图 表1 与其他服务的关系 相关服务 交互功能 弹性云服务器(ECS) 云数据库RDS服务配合弹性云服务器(Elastic Cloud Server,简称ECS)一起使用,通过内网连接云数据库RDS可以有效地降低应用响应时间、节省公网流量费用。 虚拟私有云(VPC) 对您的云数据库RDS实例进行网络隔离和访问控制。 对象存储服务(OBS) 存储云数据库RDS实例的自动和手动备份数据。 云监控服务(Cloud Eye) 云监控服务是一个开放性的监控平台,帮助用户实时监测云数据库RDS资源的动态。云监控服务提供多种告警方式以保证及时预警,为您的服务正常运行保驾护航。 云审计服务(CTS) 云审计服务(Cloud Trace Service,简称CTS),为用户提供云服务资源的操作记录,供您查询、审计和回溯使用。 数据库安全服务(DBSS) 数据库前端使用数据库安全服务(Database Security Service,简称DBSS),多种策略防止数据库被攻击,持久保护云上数据库安全。 分布式缓存服务(DCS) 分布式缓存服务(Distributed Cache Service,简称DCS)通过将热点数据放入缓存,加快用户端的访问速度,提升用户体验。 分布式数据库中间件服务(DDM) 对于云数据库 RDS for MySQL,使用分布式数据库中间件服务(Distributed Database Middleware,简称DDM),后端对接多个数据库实例,实现分布式数据库的透明访问。 数据复制服务(DRS) 使用数据复制服务,实现数据库平滑迁移上云。 数据管理服务(DAS) 使用数据管理服务,通过专业优质的可视化操作界面,提高数据管理工作的效率和安全。
  • 版本功能差异(WEB版、标准版、企业版) Microsoft SQL Server官方版本的主要功能差异如表1所示。 表1 主要功能差异 功能 WEB版 标准版 企业版 高可用 不支持 Mirror HA Microsoft SQL Server 2008(Mirror)支持 Microsoft SQL Server 2012(Mirror)支持 Microsoft SQL Server 2014(Mirror)支持 Microsoft SQL Server 2016(Mirror)支持 Microsoft SQL Server 2017(Always On)支持 数据压缩 支持 支持 支持 SQL Profiler 支持 支持 支持 列式索引 不支持 支持 支持 表/索引分区 支持 支持 支持 变更数据捕获(Change Data Capture,简称CDC) 不支持 支持 支持 并行检索操作 不支持 不支持 支持 分区表并行度调整 支持 支持 支持 透明数据加密(Transparent Data Encryption,简称TDE) 不支持 不支持 支持 高级R语言集成 不支持 不支持 支持 父主题: RDS for SQL Server各版本功能概览
  • URI URI格式 DELETE /v3/{project_id}/instances/{instance_id}/database/{db_name} URI样例 https://{endpoint}/v3/0483b6b16e954cb88930a360d2c4e663/instances/a8abe84a41364097be7c233c39275087in04/database/rds-test 参数说明 表1 参数说明 名称 是否必选 说明 project_id 是 租户在某一region下的project ID。 获取方法请参见获取项目ID。 instance_id 是 实例ID。 db_name 是 需要删除的数据库名。
  • 状态码 状态码如表1所示: 表1 状态码 状态码 编码 错误码说明 100 Continue 继续请求。 这个临时响应用来通知客户端,它的部分请求已经被服务器接收,且仍未被拒绝。 101 Switching Protocols 切换协议。只能切换到更高级的协议。 例如,切换到HTTP的新版本协议。 200 OK 请求成功。 201 Created 创建类的请求完全成功。 202 Accepted 已经接受请求,但未处理完成。 203 Non-Authoritative Information 非授权信息,请求成功。 204 NoContent 请求完全成功,同时HTTP响应不包含响应体。 在响应OPTIONS方法的HTTP请求时返回此状态码。 205 Reset Content 重置内容,服务器处理成功。 206 Partial Content 服务器成功处理了部分GET请求。 300 Multiple Choices 多种选择。请求的资源可包括多个位置,相应可返回一个资源特征与地址的列表用于用户终端(例如:浏览器)选择。 301 Moved Permanently 永久移动,请求的资源已被永久的移动到新的URI,返回信息会包括新的URI。 302 Found 资源被临时移动。 303 See Other 查看其它地址。 使用GET和POST请求查看。 304 Not Modified 所请求的资源未修改,服务器返回此状态码时,不会返回任何资源。 305 Use Proxy 所请求的资源必须通过代理访问。 306 Unused 已经被废弃的HTTP状态码。 400 BadRequest 非法请求。 建议直接修改该请求,不要重试该请求。 401 Unauthorized 在客户端提供认证信息后,返回该状态码,表明服务端指出客户端所提供的认证信息不正确或非法。 402 Payment Required 保留请求。 403 Forbidden 请求被拒绝访问。 返回该状态码,表明请求能够到达服务端,且服务端能够理解用户请求,但是拒绝做更多的事情,因为该请求被设置为拒绝访问,建议直接修改该请求,不要重试该请求。 404 NotFound 所请求的资源不存在。 建议直接修改该请求,不要重试该请求。 405 MethodNotAllowed 请求中带有该资源不支持的方法。 建议直接修改该请求,不要重试该请求。 406 Not Acceptable 服务器无法根据客户端请求的内容特性完成请求。 407 Proxy Authentication Required 请求要求代理的身份认证,与401类似,但请求者应当使用代理进行授权。 408 Request Time-out 服务器等候请求时发生超时。 客户端可以随时再次提交该请求而无需进行任何更改。 409 Conflict 服务器在完成请求时发生冲突。 返回该状态码,表明客户端尝试创建的资源已经存在,或者由于冲突请求的更新操作不能被完成。 410 Gone 客户端请求的资源已经不存在。 返回该状态码,表明请求的资源已被永久删除。 411 Length Required 服务器无法处理客户端发送的不带Content-Length的请求信息。 412 Precondition Failed 未满足前提条件,服务器未满足请求者在请求中设置的其中一个前提条件。 413 Request Entity Too Large 由于请求的实体过大,服务器无法处理,因此拒绝请求。为防止客户端的连续请求,服务器可能会关闭连接。如果只是服务器暂时无法处理,则会包含一个Retry-After的响应信息。 414 Request-URI Too Large 请求的URI过长(URI通常为网址),服务器无法处理。 415 Unsupported Media Type 服务器无法处理请求附带的媒体格式。 416 Requested range not satisfiable 客户端请求的范围无效。 417 Expectation Failed 服务器无法满足Expect的请求头信息。 422 UnprocessableEntity 请求格式正确,但是由于含有语义错误,无法响应。 429 TooManyRequests 表明请求超出了客户端访问频率的限制或者服务端接收到多于它能处理的请求。建议客户端读取相应的Retry-After首部,然后等待该首部指出的时间后再重试。 500 InternalServerError 表明服务端能被请求访问到,但是不能理解用户的请求。 501 Not Implemented 服务器不支持请求的功能,无法完成请求。 502 Bad Gateway 充当网关或代理的服务器,从远端服务器接收到了一个无效的请求。 503 ServiceUnavailable 被请求的服务无效。 建议直接修改该请求,不要重试该请求。 504 ServerTimeout 请求在给定的时间内无法完成。客户端仅在为请求指定超时(Timeout)参数时会得到该响应。 505 HTTP Version not supported 服务器不支持请求的HTTP协议的版本,无法完成处理。 父主题: 附录
  • 如何保证请求幂等性 客户端在发送请求时,可以在HTTP请求消息头中增加X-Client-Token作为幂等性标识,字段描述参见表1。 表1 幂等标识消息头 名称 描述 是否必选 示例 X-Client-Token 保证客户端请求幂等性的标识。 该标识为32位UUID格式,由客户端生成,且需确保不同请求之间该标识具有唯一性。 否 46436810-d999-454c-bd85-e515fd258600 通常情况下,客户端只需要在服务端内部异常、连接超时等响应状态码为5xx的错误,或者无法获取响应结果重试请求。重试请求仍然使用相同的幂等标识和请求参数,则服务端会返回与第一次请求相同的请求结果。 幂等标识的详细信息如下所示: 幂等标识是一个大小写敏感的32位UUID,其格式为:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx (8-4-4-4-12),其中每个 x 是 0-9 或 a-f 范围内的一个十六进制的数字。如果您提供了一个非UUID格式的标识,则服务端会返回DBS.280497错误码。 幂等标识需要具有唯一性,如果您提供了一个已经使用过的标识,但请求参数有变化,则服务端会返回DBS.280495错误码。 幂等标识具有时效性(8小时),如果您提供了一个已经失效的标识,则服务端会返回DBS.280498错误码。 使用幂等标识后: 返回结果状态码为2xx时,重试后客户端可以得到与上次相同的结果,但对您的服务端状态没有影响。 返回结果状态码为4xx时,重试不会成功。您需要根据错误信息排查问题后再重试请求。
  • 请求消息 参数说明 表2 参数说明 名称 是否必选 参数类型 说明 comment 否 String 数据库用户名备注。 取值范围:长度1~512个字符。 URI样例 PUT https://rds.cn-north-1.myhuaweicloud.com/v3/0483b6b16e954cb88930a360d2c4e663/instances/f569f1358436479dbcba8603c32cc4aein03/db-users/root/comment 请求样例 { "comment": "this is a comment"}
共100000条