【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 style="font-size: 14px;"><!-- add dependencies inpom.xml --><br style=""><dependency><br style=""> <groupId>com.huaweicloud.sdk</groupId><br style=""> <artifactId>huaweicloud-sdk-core</artifactId><br style=""> <version>[3.0.-beta, 3.1.-beta)</version><br style=""></dependency><br style=""><dependency><br style=""> <groupId>com.huaweicloud.sdk</groupId><br style=""> <artifactId>huaweicloud-sdk-ecs</artifactId><br style=""> <version>[3.0.-beta, 3.1.-beta)</version><br style=""></dependency><br style=""></span>
2. 批量创建弹性云服务器Demo
<span style="font-size: 14px;">import com.huaweicloud.sdk.core.auth.BasicCredentials;<br style="">import com.huaweicloud.sdk.core.http.HttpConfig;<br style="">import com.huaweicloud.sdk.ecs.v2.EcsClient;<br style="">import com.huaweicloud.sdk.ecs.v2.model.*;<br style=""> <br style="">import java.util.LinkedList;<br style="">import java.util.List;<br style=""> <br style="">public class TestCreateEcs {<br style=""> public static void main(String[] args) {<br style=""> String ak = "{your ak string}";<br style=""> String sk = "{your sk string}";<br style=""> String projectId = "{your project id}";<br style=""> String endpoint = "https://ecs.cn-north-1.myhuaweicloud.com";<br style=""> <br style=""> HttpConfig config = HttpConfig.getDefaultHttpConfig().withIgnoreSSLVerification(true);<br style=""> <br style=""> BasicCredentials credentials = new BasicCredentials().withAk(ak).withSk(sk).withProjectId(projectId);<br style=""> <br style=""> EcsClient ecsClient = EcsClient.newBuilder().withCredential(credentials).withEndpoint(endpoint).withHttpConfig(config).build();<br style=""> <br style=""> // 确认创建虚拟机的必填参数<br style=""> String az = "cn-north-1a";<br style=""> String flavorRef = "s3.medium.2";<br style=""> String imageRef = "fb48d5c7-8718-489a-9273-d3e0e09c84d7";<br style=""> String name = "live-stream";<br style=""> String vpcId = "{you vpc id}";<br style=""> // 网卡信息<br style=""> PostPaidServerNic nic = new PostPaidServerNic().withSubnetId("{your subnet id}");<br style=""> List<PostPaidServerNic> list = new LinkedList<>();<br style=""> list.add(nic);<br style=""> // 系统盘信息<br style=""> PostPaidServerRootVolume root = new PostPaidServerRootVolume().withVolumetype(PostPaidServerRootVolume.VolumetypeEnum.SATA);<br style=""> <br style=""> PostPaidServer servers = new PostPaidServer().withAvailabilityZone(az)<br style=""> .withFlavorRef(flavorRef)<br style=""> .withImageRef(imageRef)<br style=""> .withName(name)<br style=""> .withNics(list)<br style=""> .withRootVolume(root)<br style=""> .withVpcid(vpcId)<br style=""> .withCount(100)<br style=""> .withIsAutoRename(false);<br style=""> <br style=""> CreatePostPaidServersRequestBody body = new CreatePostPaidServersRequestBody().withServer(servers);<br style=""> CreatePostPaidServersRequest request = new CreatePostPaidServersRequest().withBody(body);<br style=""> CreatePostPaidServersResponse response = ecsClient.createPostPaidServers(request);<br style=""> <br style=""> System.out.println(response.toString());<br style=""> }<br style="">}<br style=""></span>
3. 批量删除弹性云服务器Demo
<span style="font-size: 14px;">// Step1: 查询当前以"live-stream"为开头的虚拟机列表<br style="">ListServersDetailsRequest listServersDetailsRequest = new ListServersDetailsRequest().withName("live-stream");<br style="">ListServersDetailsResponse listServersDetailsResponse =<br style=""> ecsClient.listServersDetails(listServersDetailsRequest);<br style=""> <br style="">// Step2: 构造删除请求中的ServerId列表<br style="">List<ServerDetail> serversList = listServersDetailsResponse.getServers();<br style="">List<ServerId> serverIdList = new ArrayList<>();<br style="">for(ServerDetail server : serversList) {<br style=""> ServerId id = new ServerId().withId(server.getId());<br style=""> serverIdList.add(id);<br style="">}<br style=""> <br style="">// Step3: 传入serverId列表,删除虚拟机<br style="">DeleteServersRequestBody deleteServersRequestBody = new DeleteServersRequestBody().withServers(serverIdList);<br style="">DeleteServersRequest deleteServersRequest = new DeleteServersRequest().withBody(deleteServersRequestBody);<br style="">DeleteServersResponse deleteServersResponse = ecsClient.deleteServers(deleteServersRequest);<br style=""></span>活动取得了非常好的成绩,实现了短视频平台流量和用户增长的目标,但是这次老板居然没有表扬我,我还有些纳闷:难道老板已经习惯了我的优秀?过了几天,HR小姐姐递过来一张表让我签字,表上写着:“调薪申请表,调薪幅度30%”,老板已经签好了名字。
目前API Explorer平台已开放EI企业智能、计算、应用服务、网络、软件开发平台、视频等70+云服务,共上线2000+个API、6000+个错误码。在前期试运行期间,华为云API Explorer平台上的API接口也已被多家企业成功接入。
华为云API Explorer平台在未来几个月会实现更多功能,比如支持SDK示例代码、CLI等特性,同时也会开放更多的云服务API接口,连接更多开发者实现创新、拓宽创新边界。
【API进阶之路】老板给我涨薪30%!如何通过SDK接口搞定千万级流量直播的更多相关文章
- 【API进阶之路】API带来的微创新,打动投资人鼓励我创业
摘要:怎么帮助创作者提高视频的推荐量呢?我发现了:视频的封面图非常重要. 上回说到,老板一拍脑门,交代了一个新项目:小成本开发一款短视频剪辑工具([<[API进阶之路]人少钱少需求多的新项目该怎 ...
- 【API进阶之路】帮公司省下20万调研费!如何巧用情感分析API实现用户偏好调研
摘要:自从学习API后,仿佛解锁了新技能,可别小看了一个小小的API接口,用好了都是能力无穷.这不,用情感分析API来做用户偏好调研,没想到这么一个小创意给公司省了20万调研费用. 上次借着高考热点整 ...
- 【API进阶之路】用API打造一条自动化内容生产流水线
摘要:搞定了内容审核之后,我又把抓取工具.内容审核API.文本摘要生成API串联在一起,从抓到审再到编,建立了一条自动化的内容生产流水线,编辑团队只需要做优质内容的推荐就可以了. 上周,运营部将官网上 ...
- 【API进阶之路】逆袭!用关键词抽取API搞定用户需求洞察
摘要: 老大说,我这份用关键词抽取API搞定的用户需求洞察报告,简直比比市场调研的科班人士做得还好. 最近这半个月的午饭,那可是相当不错,市场老大天天请吃饭,不是外面下馆子,就是从家带饺子.说是感谢我 ...
- 看完100篇Python技术精华文章,平均涨薪30%!
一个以技术为立身根基的教育机构做出来的微信号,干货程度会有多高? 马哥Linux运维公众号运营五年,从一开始的定位就是给技术人分享加薪干货的地方.这五年里,公众号运营最重的任务就是做内容.内容并不好做 ...
- 【API进阶之路】研发需求突增3倍,测试团队集体闹离职
摘要:最近研发的需求量涨了3倍,开发团队拼命赶进度,可苦了测试团队. 本以为从一线研发转管理后会清闲一些,但是没想到,我还要充当救火队员的角色. 到了第四季度,各业务部门都在憋着劲儿冲业绩,毕竟这跟年 ...
- 【API进阶之路6】一个技术盲点,差点让整个项目翻车
上次教了实习生一个方案之后,这小子跟运营妹子的关系是越走越近,时不时地撒把狗粮,在我司真正实现了研发运营一家亲~(上回你没看?戳上文剧情回顾:万万没想到,一个技术方案帮实习生追到了运营妹子) 这回想跟 ...
- 【API进阶之路】无法想象!大龄码农的硬盘里有这么多宝藏
摘要:通过把所需建立的工具库做成云容器化应用,用CCE引擎,通过API网关调用云容器引擎中的容器应用.不仅顺应了云原生的发展趋势,还能随时弹性扩容,满足公司规模化发展的需求. 公司开完年中会后,大家的 ...
- 【API进阶之路】破圈,用一个API代替10人内容团队
摘要:我用一个API代替10人内容团队,一年帮老板省了一百万. 自从学习API以后,我用技术手段相继帮助业务部.市场部解决了不少难题,算是从纯研发破圈发展到了业务端.老板召开业务讨论会的时候也会带上我 ...
随机推荐
- 常见CSS选择器的权重和优先级
一.常见CSS选择器 [元素选择器] 1.通配选择器:*(匹配所有元素) a.效率不高,页面上的标签越多,效率越低,所以页面上最好不要出现这个选择器 2.标签选择器:li(匹配标签为li的元素) a. ...
- Netty中的这些知识点,你需要知道!
一.Channel Channel是一个接口,而且是一个很大的接口,我们称之为“大而全”,囊括了server端及client端接口所需要的接口. Channel是一个门面,封装了包括网络I/O及相关的 ...
- C#数据结构与算法系列(九):栈实现综合计算器(中缀表达式)
1.问题介绍 2.实现思路 3.代码实现 第一个版本(采用这个) public class ArrayStack { private int _maxSize; private int[] _arr; ...
- 使用java类的方式配置spring 需要什么注解?
1.@Configuration 修饰类,声明当前类是一个配置类,相当于applicationContext.xml文件 2.@ComponentScan 用于指定spring在初始化容器时要扫描的包 ...
- 解决UEditor编辑时,只添加视频内容,不添加文字,视频信息不能保存到数据库的问题
造成这个问题的原因是富文本保存内容时会筛除空标签,然后统计是否有内容,通过字数统计也可以看到,上传完视频后字数还是零,因为视频上传后是<video></video>标签,这个标 ...
- Java笔试面试总结—try、catch、finally语句中有return 的各类情况
前言 之前在刷笔试题和面试的时候经常会遇到或者被问到 try-catch-finally 语法块的执行顺序等问题,今天就抽空整理了一下这个知识点,然后记录下来. 正文 本篇文章主要是通过举例的方式来阐 ...
- eclipse使用git提交代码
准备工作: 目的:eclipse使用git提交本地项目,提交至远程github上 eclipse版本:eclipse4.5 64位 jdk版本:jdk-1.7 64位 项目类型:maven web项 ...
- volatile与lock前缀指令
前言 我们知道volatile关键字的作用是保证变量在多线程之间的可见性,它是java.util.concurrent包的核心,没有volatile就没有这么多的并发类给我们使用. 本文详细解读一下v ...
- (七) SpringBoot起飞之路-整合SpringSecurity(Mybatis、JDBC、内存)
兴趣的朋友可以去了解一下前五篇,你的赞就是对我最大的支持,感谢大家! (一) SpringBoot起飞之路-HelloWorld (二) SpringBoot起飞之路-入门原理分析 (三) Sprin ...
- Nginx 反向代理可以缓存 HTTP POST 请求页面吗?
摘要: Nginx 反向代理可以缓存 HTTP POST 请求页面吗? 2017-09-05 景峯 Netkiller 本文节选自<Netkiller Web 手札> 作者:netkil ...