如何低成本搭建百万用户级APP?

《推蜜》《蜜蜂少女队》官方互动养成APP,借力《阿里云》从零到壹的演变

Posted by 李牧牧 on February 26, 2017

本文发布于 李牧牧的博客 转载请保留链接 ;)

摘要:

2015年05月APP上线注册量激增

2016年03月浙江卫视黄金档节目播出,注册量飙升访问量增大

2016年05月APP蜜决终极赛事,投票服务器Hold住高并发

2016年06月[内地、港澳台、美国、澳大利亚]同时投票,承受秒级高并发请求

……

困境

应用上线之初,需要给移动端、H5前端、网站电商提供后端数据服务,那么服务器的稳定性、服务负载能力、资源存储能力、CDN内容分发网络、可扩容数据库、数据融灾备份还原、日志短信预警、网络安全组分配等,都是保证应用稳定、快速的基本配置。

之前在上汽工作时,东家有自建 IDC 托管,购买昂贵的硬件服务器并部署自身的业务系统,专业的运维团队,整套部署需要斥巨资,对于初创中小企业可是笔不小的费用。

什么服务是烧钱的货?

CDN就是互联网版的悍马,用户流量的增长好比踩油门,车子一旦发动就好像副驾驶坐着一大美女端着大把钞票,一张一张的朝窗外丢。

只要不是企业内部管理应用,但凡需要给到全国用户良好网络体验的应用,都需要CDN的支持。如 YY 、 斗鱼 、战旗每月单花在 CDN 上的费用小则几千万,大的需要上亿元,当然不是每个应用都能有这么大的流量,但相对其他服务花费来说,CDN还是蛮烧钱的。

CDN市场的竞争为什么这么激烈 - 来源 知乎

直播的CDN成本很高,到底有多高?这些数字太惊人 - 来源 搜狐新闻

网络运营商就是二房东,服务器好比房子,辣么贵的房子是你买的,你还要交租金。

机房、空调、UPS、机架、刀片机、光纤、电费,小企业每月少则几千、大的几万不止,为了业务上的buffer,自己买的硬件肯定是不可能满负荷运转的,对于初创公司来说,最重要的是要控制成本,而大量的重复投入与回报不能成正比。

阿里巴巴的服务器机房一天的耗电量大概是多少 - 来源 知乎

时间就是金钱,把时间当朋友,和朋友处理最重要的事。

发布一套产品,从内测到上线,发包、备份、日志监控、增减服务器;搭建它们需要时间,维护它们也需要时间,如何组合起来形成可靠的解决方案更需要时间的积累。

为什么要借力阿里云?

站在巨人的肩膀上, “双十一” 每秒14万笔交易,“12306” 改善的背后是阿里云在支撑;对于精简初创的互联网企业来说,即控制成本又做到产品的快速稳定迭代,阿里云的产品基本都能满足需求。

12306 系统在 2015 年春运高峰期的稳定运行,采用了哪些具体技术? - 来源 知乎

如何部署高可用的云系统?

阿里云生产架构资源分配图 图片来源: 李牧牧博客

从域名开始添砖加瓦

2009年万网加入阿里的大家庭,自此阿里云的平台用户简单操作就可以直接租赁、转让、备案域名,按照用户引导页一步步走,简单快速。在这以前笔者的域名是万网租的,但服务器是租赁其他供应商的,结果申请备案时,我还要跑到照相馆拍照、打印店打印文件、邮寄文件,最后电话通知我说审核资料不符合标准,于是乎又把前面流程走一遍,直到通过。

阿里云域名备案流程 - 来源 阿里云

域名只能租,不能买

域名在国外属于机构(ICANN),在国内属于国家(CNNIC),域名的机构管理就好像全天候不休息的大管家兼引路人,大管家把所有域名与IP地址的对应关系都保存起来,这样的大管家一共有十三位分别分布在全球各地,当然实际上还有非常多小管家一起帮忙,不过最核心的十三位管家由机构管理,所有人只能找他们租赁域名的对应关系,所以市面上购买域名实际上就是租赁,有人租赁时间长(像阿里云、百度、腾讯)租5年10年,有人租赁时间短(像笔者博客)每年续租一次,所以市面上的域名买卖就是做所有权变更。

为什么DNS根服务器只能有13台呢? - 来源 知乎

工欲善其事,必先利其器,先给程序找个家

手机软件必须运行在手机操作系统与硬件上才能发挥其强大的作用,网站程序也是需要浏览器与软硬件的通力合作才能完美展现,有了它们就好像有了一层衣服,对于平日里使用的商业软件这显然还不够,只有给它们提供各种业务数据它们才有商业价值。要提供各种业务数据就需要购买服务器,实际上云服务器也是租赁的模式,机器是马云大大的,我借他的用,借用期限到了阿里云会将数据保留一个月,让用户备份迁移数据,然后再将所有数据释放。

如何在阿里云搭建业务生产ECS服务器? - 来源 李牧牧博客

阿里云,你开门阿,我知道你还在里面!

相信你根据文章《如何在阿里云搭建业务生产ECS服务器?》 已经租赁配置好业务生产服务器,能够给用户提供业务数据的服务器就好像面馆,面馆终于开门营业了,来吃面的用户越来越多,为了防止用户太多把面馆挤跨,面馆老板决定每次只接纳部分用户进门吃面,人满后关上门让其他用户在门外等待,可是门外的用户哪知道你是关门营业还是让他们排队等候,而且吃面还要排那么久的队,用户体验不佳下次就不来了。老板即时发现问题,决定再开一家面馆,并且在两家面馆门前安排一位迎宾美女,当老面馆正在接待顾客时,迎宾美女引导排队顾客去新面馆就餐,哪怕老面馆重新装修,只要通知迎宾美女,她就会带顾客去其他门店,如果顾客越来越多,只需要加开门店并告诉迎宾美女,问题迎刃而解。这里说的新老两家面馆就是两台业务生产服务器,迎宾美女就是负载均衡,重新装修就是程序更新与发包。

如何配置阿里云SLB负载均衡并连通服务器? - 来源 李牧牧博客

老板,来碗鱼丸粗面

酒香不怕巷子深,一家味道好、服务周到的面馆逐渐成为了网红餐厅,老板还开了好几家分店,各门店的订单信息、顾客信息、生鲜食材分别由各自的门店管理,信息越来越多管理起来越来越乱,顾客进门点了一份鱼丸粗面,厨师发现鱼丸用光了还没采购,老门店给顾客办的会员卡在新门店找不到记录。老板拨乱反正,决定要建中央信息仓库,所有食材、顾客资料都统一管理、统一查询、统一采购,仓库建好后,平静的日子没有几天又发现新问题,仓库只有一张门,往里送食材的人与各个门店从仓库里拿食材的人数成几何数增长,员工们都堵在门口,顾客迟迟等不到想要的菜。当然我们的老板毕竟不是第一次遇到这种情况了,他又在中央仓库旁边再建一个一模一样的仓库,老仓库与新仓库内部是相通的,它们都有各自朝外的大门,送食材的从老仓库大门进,取食材的从新仓库大门进,互不妨碍,老板终于能睡个安稳觉了。这里说的新、老中央信息仓库就是说数据库,数据库给服务器提供原始材料,多台服务器从数据库拿到元数据,服务器根据业务将数据组合后再提供给用户使用。

如何搭建阿里云主从RDS数据库并配置安全规则? - 来源 李牧牧博客

时间就金钱,速度就是生命

“服务员,我点的雪花红酒牛肉面怎么还没来?”,这已经是今天不下十次听到类似的训斥了,刚来巡店的老板急匆匆的走进厨房准备催单,刚一进门就看到厨师长在摇脑袋,原来厨房并不是出单慢,而是每次顾客下单后,厨房需要从中央仓库拿食材,仓库的位置是距离各家门店折中的位置,也就是距离每家门店都有点距离,从下单选材到仓库取货然后再上灶出锅,顾客的等待时间太长了,虽然是美食,但在如此竞争激烈的市场,不想办法留住顾客就得关门歇业。老板以为再建立一套临时储物间刻不容缓,各门店把经常使用的食材全部放倒临时储物间,等顾客再次下单时,直接从储物间拿食材就能迅速上菜,门店厨房配置临时储物间后,餐厅再也听不到训斥声了。这个临时储物间就是缓存系统,服务器把从数据库经常拿的数据放入缓存系统,下次需要同样的数据就从缓存系统拿,不用大老远找数据库了。

如何安装阿里云Redis缓存系统并配置持久化? - 来源 李牧牧博客

给员工减减负担

最近面馆新推出爆款菜式“全家福拌面”,慕名而来的顾客络绎不绝,这可把服务员累得够呛,因为这份菜需要非常多的酱菜、酱料,每次都要端上一大盘子配料上菜,五六盘送过去很多服务员开始吃不消了。老板心疼员工想出个主意,让各个门店将所有配菜、酱料、饮料、盘碟碗分门别类的全部放在餐厅指定位置并立提示牌提醒顾客到哪自助领取,员工们减轻了工作负担,非常感谢这位聪明的老板。这里提到的餐厅指定位置就是云储存系统,服务器提供关键数据,其他辅助数据(视频、音频、图片、小文件)让用户自行获取。

如何部署阿里云OSS分片存储系统并配置专属域名? - 来源 李牧牧博客

把店开到全国各地

网红面馆名声越来越大,周围兄弟省份的顾客都想尝尝味道,问题是面馆离家里太远了,坐车来回路上要消耗大吧时间,这让其他省份的顾客望尘莫及。解决这个问题对于面馆太重要了,老板委托其它省份的朋友建立小仓库,小仓库里放着顾客经常点餐的食物,顾客不需要到餐厅就可以在各个省份家门口尝到新鲜的食物。这里部署在全国各省份的小仓库就是CDN内容分发网络,只把经常使用的数据放在CDN中,用户依照就近的原则拿到数据,速度快效率高。

如何配置阿里云CDN内容分发网络? - 来源 李牧牧博客

顾客是上帝

门店新采购一套奶茶设备,茶余饭后奶茶吧台门口总能排起长长的队伍,新设备投产老板亲自冲泡奶茶,顾客现场点单后老板现场冲泡,每一位顾客需要经历点单、等待、取餐,然后再到下一位顾客,慢慢的许多顾客抱怨队伍太长,等待太久。老板决定部署点餐机器并新购几台奶茶设备,顾客点餐后带小票离开等候,不需要守在吧台前,几台奶茶设备用来处理不同类别的奶茶。果不其然,点餐机器上线后效率高涨,顾客的抱怨声消失不见。前面说到的点餐机器就是消息队列平台,新购买的奶茶机就是队列消费服务器,用户把处理请求发送给消息队列平台,多台消费服务器将处理请求消化掉。

如何部署阿里云MQ消息队列平台? - 来源 李牧牧博客

天王盖地虎,宝塔镇河妖

老板的门店历尽艰难,开业首月顺利度过,老门店归属区工商局跑来跟老板说:“你们要办营业执照,有了证就不是黑店,国家保护你,人民信任你,否则准备关门“,老板带着各种材料前去办理执照。这里提到的执照就是安全数字证书,办理证书的单位会提交企业相关资料让机构备案,当服务使用证书服务时,所有数据传输将被加密保障企业与客户数据安全。

苹果公司启用Apple ATS必须安装证书宣布延期 - 来源 苹果

如何配置租赁数字证书? - 来源 李牧牧博客

百万用户的应用开销多少?

注:CDN费用由当月用户量流量大小决定,400元-4000元每月的情况都有,当然相对收益,流量费就不算多了。

产品名称 应用名称 付款方式 月费用(最低) 年费用(最低)
SLB负载均衡 SLB 按流量付费 150元 1800元
RDS云数据库 RDS主从 包年包月/整年 300元 3600元
OSS对象存储 OSS 按流量付费 300元 3600元
CDN内容分发 CDN 按流量付费 600元 7200元
万网域名服务 域名 x2 包年包月/整年 9.8元 118元
安全证书服务 HTTPS 包年包月/整年 125.75元 1509元
聊天服务 腾讯IM聊天 包年包月/整年 0元 0元
消息推送 个推 包年包月/整年 0元 0元
邮件服务 腾讯企业邮箱 包年包月/整年 0元 0元
数据打点 友盟 包年包月/整年 0元 0元
短信服务(大陆) 容联云通讯 按流量付费 150元 1800元
短信服务(港澳台) Mob 按流量付费 5元 60元
ECS云服务器 Redis x2 包年包月/整年 287.3元 3447.6元
ECS云服务器 消息队列 包年包月/整年 166元 2000元
ECS云服务器 基础服务x2 包年包月/整年 91.8元 1101.6元
ECS云服务器 支付服务x2 包年包月/整年 91.8元 1101.6元
ECS云服务器 网页服务x2 包年包月/整年 91.8元 1101.6元
ECS云服务器 电商服务x2 包年包月/整年 91.8元 1101.6元
ECS云服务器 后台服务 包年包月/整年 45.9元 550.8元
ECS云服务器 事件服务 包年包月/整年 45.9元 550.8元
ECS云服务器 消息服务 包年包月/整年 45.9元 550.8元
ECS云服务器 任务服务 包年包月/整年 45.9元 550.8元
ECS云服务器 跳板机 包年包月/整年 45.9元 550.8元
费用汇总     2690.51元 32286.12元

对业务需求与云产品越了解,越能让成本大幅下降,节省开销。

  • 云服务内网之间的通信是免费并且流量大速度快,平均有 10M 每秒的传输带宽,但跨地区服务器比如(华东、华北、香港、北美))内网是相互不通的,所以选择固定区域,让服务之间内网通信,是节省成本保证效率的方式。
  • 资源文件(图片、视频、音频、小文件、JS/CSS)推荐用云存储 OSS,OSS 按流量与存储量收费,前期流量与存储量小时,费用非常低。
  • 因为所有资源文件在云存储上,所以ECS服务器无需购买硬盘 IO 优化服务,选择默认最小硬盘,关闭外网功能,选择年付方式享受折扣;虽然阿里云提供 Web 方式管理控制台,笔者还是建议单独购买一台有外网功能的跳板机用于管理业务系统,登陆跳板机后用内网 IP 访问其他业务服务器不产生任何流量费,笔者有 12 台业务系统,单核单兆内存服务器平均每月花费 45.9*12 = 550.8 元,负载均衡流量费用平均在每月 150 左右,只有当用户量突然增大时才会产生较高的费用。

总结一下

  • 业务服务器集群化,配备SLB负载均衡
  • 尽可能利用缓存系统
  • 耗时操作全部MQ异步队列化
  • 云RDS数据库主从配置,定时备份
  • 静态资源使用OSS分片云储存,使用CDN内容分发网络
  • 配置网络资源安全组

不要停止学习与创新,阿里云技术产品发展的很快,客户的需求也往往如此。把“持续改进和持续集成” 加入到你的工具和流程中去,遇到问题解决问题,要不断的总结教训。

Q&A

问 要是自己搭建这样的系统,估计工作量多大?

答 企业根据自己需要,从头开始一个人两周可以基本部署完毕。

问 如何将公司内网测试环境与阿里云生产打通,并持续集成呢?

答 结合本文参考另一篇博文 《如何零成本构建研发运维一体化?》

问 如何设计开发高并发用户数庞大的代码软件架构?

答 结合上面的文字再参考博文 《如何设计开发高并发高可用的代码架构?》