乐趣区

API进阶之路老板给我涨薪30如何通过SDK接口搞定千万级流量直播

摘要: 看我如何通过 API Explorer 的 SDK 接口搞定千万级流量直播。

最近几个月,我的变动其实还蛮大的,从一个被实习生“忽视”的“前浪”,转变成了不仅可能解决技术问题还能解决业务问题(棘手还能帮实习生解决恋爱问题)的“前辈”。后面几期故事记录了我的高光时刻,有趣味能够点击前文查看。

公司的短视频我的项目上线之后始终不温不火,老板挺焦急,运营部提出要在 6 月底组织一次千人直播带货流动,邀请 1 千个主播同时在短视频平台上开直播,拉用户和流量。

千人同时在线直播,短视频平台的指标访问量在百万级以上,须要技术部门保障高并发流量下服务器的稳固。这个好办,华为云弹性云服务器是能够随时扩容的,通过部门钻研,咱们给出的技术计划是长期创立 100 台云虚拟机来撑持这次流动。

这个工作又光彩地落到了我的身上,谁让我是公司公认的云服务器专家呢…可离直播流动落地只有一个星期的工夫了,还要留出工夫进行压测。“通过 API 能够批量解决弹性云服务器,但我当初一个个接口封装也来不及啊!而且依据我的教训,还得提前做好随时扩容的筹备,可能反对比预估指标更高的流量,得连忙想想除了 API 还有什么能够用……”我心里有点焦急了。

习惯性的关上华为云官网,在首页发愣了 1 分钟,一道灵光闪过:操作简略,能够疾速管制批量资源,这可不就是 SDK 的个性吗!说来就来,我很快就有了思路:先疾速创立 100 台按需计费的弹性云服务器作为直播撑持,在直播实现后,再对这些弹性云服务器进行开释。

关上 API Explorer(https://apiexplorer.developer.huaweicloud.com/apiexplorer/overview?utm_source=apiwz&utm_medium=read)疾速浏览,确认我须要用到的接口是 CreatePostPaidServers、ListServerDetails 和 DeleteServers。

万万没想到,这个设计还真起到了救急的作用!

直播开始前 1 个小时,经营部门忽然反馈,这次流动的推广成果大大超出预期,峰值流量可能是预期指标的 10 倍!这将给网站拜访带来很大的压力,老大给我打电话问我有没有方法解决。

这当然难不住我了,因为提前准备了技术计划,在直播过程中随着访问量的变动,随时批量调整服务器的配置,完满保障了直播的进行,最初在 10 倍于目标值的访问量下,仍然没有呈现任何卡顿 / 提早的状况。

流动完结后,我又开始了疯狂输入,将 SDK 的配置办法写在了文档里:

一、前置条件:获取必填参数

1. 华为云 SDK 的认证形式为 AK/SK 认证, 能够在华为云控制台”我的凭证 - 拜访密钥”页面上创立和查看 AK/SK。更多信息请查看拜访密钥 (https://support.huaweicloud.com/usermanual-ca/zh-cn_topic_0046606340.html)。

2. 筹备接口的必填参数

PS:在华为云控制台 - 镜像服务 IMS 中可疾速获取公共镜像相应的 ID

服务器配置详情:

  • 区域:华北 - 北京一 – cn-north-1
  • 可用区:可用区 1 – cn-north-1a
  • 规格:通用计算增强型 – c3.large.2
  • 镜像:Windows Server 2019 数据中心版 64 位简体中文 – fb48d5c7-8718-489a-9273-d3e0e09c84d7
  • 服务器名:任意指定 – 如 “live-stream”
  • 系统盘类型:一般 IO 磁盘 – “SATA”
  • 虚构公有云 ID(VPC ID):可获取以后账号在北京一区域中默认的 VPC ID,若没有默认 VPC 则新建
  • 网卡信息:可获取以后账号在北京一区域中默认 PC / 新建 VPC 下的子网 ID
  • 容许重名:当批量创立弹性云服务器时, 云服务器名称是否容许重名, 当 count 大于 1 的时候该参数失效 – false

二、实战演练

PS:指南:https://github.com/huaweicloud/huaweicloud-sdk-java-v3/blob/master/README_CN.md

1. 新建 maven 我的项目,导入 SDK 的 maven 依赖

<span ><!-- add dependencies inpom.xml --><br ><dependency><br >    <groupId>com.huaweicloud.sdk</groupId><br >    <artifactId>huaweicloud-sdk-core</artifactId><br >    <version>[3.0.1-beta, 3.1.0-beta)</version><br ></dependency><br ><dependency><br >    <groupId>com.huaweicloud.sdk</groupId><br >    <artifactId>huaweicloud-sdk-ecs</artifactId><br >    <version>[3.0.1-beta, 3.1.0-beta)</version><br ></dependency><br ></span> 

2. 批量创立弹性云服务器 Demo

<span >import com.huaweicloud.sdk.core.auth.BasicCredentials;<br >import com.huaweicloud.sdk.core.http.HttpConfig;<br >import com.huaweicloud.sdk.ecs.v2.EcsClient;<br >import com.huaweicloud.sdk.ecs.v2.model.*;<br > <br >import java.util.LinkedList;<br >import java.util.List;<br > <br >public class TestCreateEcs {<br >    public static void main(String[] args) {<br >        String ak = "{your ak string}";<br >        String sk = "{your sk string}";<br >        String projectId = "{your project id}";<br >        String endpoint = "https://ecs.cn-north-1.myhuaweicloud.com";<br > <br >        HttpConfig config = HttpConfig.getDefaultHttpConfig().withIgnoreSSLVerification(true);<br > <br >        BasicCredentials credentials = new BasicCredentials().withAk(ak).withSk(sk).withProjectId(projectId);<br > <br >        EcsClient ecsClient = EcsClient.newBuilder().withCredential(credentials).withEndpoint(endpoint).withHttpConfig(config).build();<br > <br >        // 确认创立虚拟机的必填参数 <br >        String az = "cn-north-1a";<br >        String flavorRef = "s3.medium.2";<br >        String imageRef = "fb48d5c7-8718-489a-9273-d3e0e09c84d7";<br >        String name = "live-stream";<br >        String vpcId = "{you vpc id}";<br >        // 网卡信息 <br >        PostPaidServerNic nic = new PostPaidServerNic().withSubnetId("{your subnet id}");<br >        List<PostPaidServerNic> list = new LinkedList<>();<br >        list.add(nic);<br >        // 系统盘信息 <br >        PostPaidServerRootVolume root = new PostPaidServerRootVolume().withVolumetype(PostPaidServerRootVolume.VolumetypeEnum.SATA);<br > <br >        PostPaidServer servers = new PostPaidServer().withAvailabilityZone(az)<br >                .withFlavorRef(flavorRef)<br >                .withImageRef(imageRef)<br >                .withName(name)<br >                .withNics(list)<br >                .withRootVolume(root)<br >                .withVpcid(vpcId)<br >                .withCount(100)<br >                .withIsAutoRename(false);<br > <br >        CreatePostPaidServersRequestBody body = new CreatePostPaidServersRequestBody().withServer(servers);<br >        CreatePostPaidServersRequest request = new CreatePostPaidServersRequest().withBody(body);<br >        CreatePostPaidServersResponse response = ecsClient.createPostPaidServers(request);<br > <br >        System.out.println(response.toString());<br >    }<br >}<br ></span>

3. 批量删除弹性云服务器 Demo

<span >// Step1: 查问以后以 "live-stream" 为结尾的虚拟机列表 <br >ListServersDetailsRequest listServersDetailsRequest = new ListServersDetailsRequest().withName("live-stream");<br >ListServersDetailsResponse listServersDetailsResponse =<br >    ecsClient.listServersDetails(listServersDetailsRequest);<br > <br >// Step2: 结构删除申请中的 ServerId 列表 <br >List<ServerDetail> serversList = listServersDetailsResponse.getServers();<br >List<ServerId> serverIdList = new ArrayList<>();<br >for(ServerDetail server : serversList) {<br >    ServerId id = new ServerId().withId(server.getId());<br >    serverIdList.add(id);<br >}<br > <br >// Step3: 传入 serverId 列表,删除虚拟机 <br >DeleteServersRequestBody deleteServersRequestBody = new DeleteServersRequestBody().withServers(serverIdList);<br >DeleteServersRequest deleteServersRequest = new DeleteServersRequest().withBody(deleteServersRequestBody);<br >DeleteServersResponse deleteServersResponse = ecsClient.deleteServers(deleteServersRequest);<br ></span>

流动获得了十分好的问题,实现了短视频平台流量和用户增长的指标,然而这次老板竟然没有褒扬我,我还有些纳闷:难道老板曾经习惯了我的优良?过了几天,HR 小姐姐递过来一张表让我签字,表上写着:“调薪申请表,调薪幅度 30%”,老板曾经签好了名字。

目前 API Explorer 平台已凋谢 EI 企业智能、计算、应用服务、网络、软件开发平台、视频等 70+ 云服务,共上线 2000+ 个 API、6000+ 个错误码。在后期试运行期间,华为云 API Explorer 平台上的 API 接口也已被多家企业胜利接入。

华为云 API Explorer 平台在将来几个月会实现更多功能,比方反对 SDK 示例代码、CLI 等个性,同时也会凋谢更多的云服务 API 接口,连贯更多开发者实现翻新、拓宽翻新边界。

点击关注,第一工夫理解华为云陈腐技术~

退出移动版