作者:洛浩

小迈于 2015 年 1 月成立,是一家致力以数字化领先为优势,实现业务高质量自增长的移动互联网科技公司。始终坚持以用户价值为中心,以数据为驱动,为用户开发丰富的工具应用、休闲游戏、益智、运动等系列的移动应用。累计开发 400 余款产品,累计用户下载安装量破七亿。而在未来三年内,小迈以成为全球领先开发者增长服务平台为愿景及使命,希望通过标准化的产品和服务赋能,为开发者提供全链路解决方案,以技术+服务全方位保驾护航,助燃产品持续增长,帮助工具和休闲游戏的开发者提升产品的成功率。

在小迈内部,实行扁平化的管理风格,每个业务团队都可以独立选择采用更适合自己的技术栈和基础架构,因此内部出现了 ECS,K8s,SAE(Serverless 应用引擎)三种不同计算平台共存的局面,而且都在跑微服务架构,不同的计算平台都有自己独特的优势和价值,而同样也会面临各自的挑战,目前主要在使用 SAE 平台的主要是游戏团队。

为什么选择 SAE

对于大部分休闲类游戏来讲,首先游戏本身存在自己的生命周期,而在生命周期内,游戏本身会出现非常大的波峰波谷。比如,白天比晚上流量大的多,白天流量又集中在几个时间点,而晚上 8 点是业务的最高峰,凌晨 2 点到 6 点几乎没有流量,但是又不能停服。另外,在游戏刚上线的时候,每次运营活动又会拉来大量的新客户涌入,就需要后台服务能够快速响应流量的变化,所以业务方就期望能有一种自动弹性伸缩的计算平台。其次,大部分休闲类游戏都是无状态的,还可以拆分成不同的服务模块来提升服务性能和质量,如聊天、红包、背包、升级、用户数据获取、视频处理、广告投放等,因此就可以采用微服务架构来部署。最后游戏在上线期间,也会迭代增加很多新的功能模块,需要频繁的发布升级。所以业务方在选型的时候,就会综合考虑:

  1. 系统的稳定性和容灾能力
  2. 平台的自动弹性伸缩能力
  3. 对微服务架构的支持
  4. 便捷的发布回滚能力,甚至是不停服升级

这些能力,其实通过 ECS 或者 K8s 自建也都能实现,但是会给业务团队带来大量的运维成本,而且很难平衡成本的投入。尤其是在弹性方面,自建弹性效率很难满足流量的快速变化,往往还是需要冗余大量的资源。而 SAE 可以非常好的满足以上 4 个需求。其实小迈的游戏团队早在 SAE 公测期间,就开始关注试用 SAE 了。截止到目前,在 SAE 上累计已经部署了 50 多个服务和应用,涉及十几款游戏,比如爱上猜成语、成语最强答人、我找茬贼快、答多多、欢乐找找茬、多多短视频等,感兴趣的话可以下载 APP 试玩下。

SAE 落地实践

Serverless 应用引擎 SAE 定位是容器之上的一站式应用托管平台,核心价值是给用户提供全应用生命周期管理、微服务治理、弹性免运维的 K8s 运行环境。本质上,用户的代码最终还是运行在容器里,只是这个容器不用去维护管理。因此对于存量的游戏服务来讲,可以零改造直接迁移部署到 SAE 上。而且 SAE 针对 JAVA 应用,还提供了 JAR 包直接部署的模式,省去了小迈打镜像的步骤,和原有使用 ECS 的模式非常接近,但是使用体验上会更加简单,大概的对比如下:

SAE 比较核心的能力就是高可用和自动弹性,对于小迈的游戏团队,在部署 JAR 包的时候可以勾选多可用区,就能达到跨可用区的容灾。SAE 底层其实是会提供多个分布在不同可用区的 K8s 集群,承载业务的容器实例可以在多可用区自动调度。对于弹性的配置同样也非常简单,可以基于 CPU、内存、QPS、RT 等指标来进行设置,对于小迈的线上游戏,主要还是通过CPU和内存的使用率来触发扩缩,同时还能指定最大实例数和最小实例数,非常的便捷。而且目前定时弹性和监控指标弹性还可以混用,那么对于有运营活动时,就可以通过两种弹性方式共同使用的方式,来确保资源的弹性。但是这里需要注意的是监控指标的阈值,需要根据业务的实际情况来配置,建议上线前,通过压测来明确。

另外通过应用监控,也能非常方便的查看到服务接口的调用情况,这些能力都已经默认集成到了 SAE 的平台上,对业务排障很有帮助。

最后在小迈的游戏团队,主要采用的是 Spring Cloud 和 Dubbo 技术栈,因此对微服务治理能力的支持,也是非常必要的。目前 SAE 的控制台上,可以直接配置微服务的健康检查、优雅下线脚本、配置管理、微服务的灰度发布、一键回滚等。但是在实际使用的过程,也踩过一些坑,比如在做服务发布的时候,健康检查有时候会超时导致实例不停重启,因为有时候服务会加载大量的数据和类库,启动比较耗时。加大健康检查的超时时间可以降低出现概率,但是发布时间就会拉长。而且在服务刚启动的时候,初始响应比较慢,其实是服务还没有完全 ready,这里就比较依赖 SAE 提供微服务优雅上线的能力,可以确保服务的正常上线。另外对于分批发部,为了避免负载的流量突然打到新实例,这里比较推荐使用微服务流量百分比灰度能力。经过一段时间的实践,最后落地的业务架构大致如下:

小迈的游戏团队基本只用关注业务逻辑,资源层面托管给了 SAE 平台,极大的简化了运维复杂度。另外为了应对业务的快速迭代,小迈还采用 Jenkins 封装了 SAE 的 API 接口,实现了 CI/CD 能力,极大加速了服务的上线速度。对比原来的弹性效率和部署效率,整体研发效能有了极大的提升,弹性速度从分钟级缩短到了妙级,新项目上线速度从天级缩短到了分钟级。

总结和展望

1、SAE 在微服务领域提供了 Serverless 化的运行平台,给用户提供了降本增效的新选择。另外 SAE 底层采用的是托管的 K8s 集群,也给用户做容器化转型提供了最简单的方式。

2、SAE 在应用管理和微服务治理方面的加成,使得 SAE 成为有别于容器服务的一站式应用 PAAS 平台,让用户可以专注在业务迭代。

3、针对应用的管理,SAE 还提供了环境“一键启停”功能,比如针对开发测试环境,可以设置定时关闭和开启,优化非线上环境的资源占用,可以帮助小迈进一步优化费用。

4、针对 JAVA 应用,SAE 提供了 DragonWell JDK 版本,可以加速 JAVA 应用的启动速度和线程资源的消耗,启动速度大约可以节省 40% 的耗时。

5、未来,SAE 还会不断提升弹性效率、加强应用管理层面的功能迭代,期望给用户带来更多的增值体验,比如刚发布支持 PHP 的 ZIP 包部署能力,可以简化 WEB 应用上云的复杂度。

对 Serverless 感兴趣的同学,还可以点击​此处​查看更多案例和文章。

Game On Serverless:SAE 助力广州小迈提升微服务研发效能的更多相关文章

  1. 跟着小程学微服务-Mock自动化系统的原理及实现

    一.前言 在之前的文章 http://blog.csdn.net/u013970991/article/details/54862772 中已经介绍了"自动化Mock系统0.9版本" ...

  2. 从零入门 Serverless | SAE 场景下,应用流量的负载均衡及路由策略配置实践

    作者 | 落语 阿里云云原生技术团队 本文整理自<Serverless 技术公开课>,关注"Serverless"公众号,回复"入门",即可获取 S ...

  3. protobuf / Consul / 边缘计算 / MEC / CDN / Serverless / GraphQL / 微服务 / 网关 / 云原生 / Serverless (真能造概念啊!!!)

    技术概念层出不穷,学吧!记录下自己多这些概念的理解 protobuf: 数据结构而已,类比XML, JSON consul 解决的只是微服务里的服务注册与发现,健康检查等. 边缘计算:可以理解为是指利 ...

  4. SAE助力南瓜电影7天内全面Severless

    作者:李刚(寻如),阿里云解决方案架构师 南瓜电影APP是国内领先的专注于影视精品化运营的垂直类视频产品,在移动互联网.IPTV.OTT等客户端,面向广大中产阶级精英群体,提供有异于院线及其他视频平台 ...

  5. 从零入门 Serverless | SAE 的极致应用部署效率

    作者 | 文俊 阿里巴巴云原生团队 本文整理自<Serverless 技术公开课>,"Serverless"公众号后台回复"入门",即可获取系列文章 ...

  6. 从零入门 Serverless | SAE 的远程调试和云端联调

    作者 | 弈川 阿里巴巴云原生团队 导读:本节课程包含三部分内容,前两个部分简单介绍远程调试以及端云联调的原理,最后在 Serverless 应用引擎中进行实际演示. 经过之前课程的学习,相信大家对于 ...

  7. Serverless 下的微服务实践

    作者:弈川 审核&校对:筱姜.潇航 编辑&排版:雯燕 微服务架构介绍 微服务架构诞生背景 在互联网早期即 Web 1.0 的时代,当时流行的是单体应用,研发团队比较小,主要是外部网页, ...

  8. DevOps - 微服务与Serverless

    微服务 简介 "微服务"强调的是服务的大小,它关注的是某一个点. "微服务架构"则是一种架构思想,需要从整体上对软件系统进行通盘的考虑. 通俗来说,微服务架构就 ...

  9. 浅谈服务治理、微服务与Service Mesh(三) Service Mesh与Serverless

    作为本系列文章的第三篇(前两篇<浅谈服务治理.微服务与Service Mesh(一)Dubbo的前世今生>,<浅谈服务治理.微服务与Service Mesh(二) Spring Cl ...

随机推荐

  1. python实现图片色素的数值运算(加减乘除)和逻辑运算(与或非异或)

    目录: (一)数值运算(加减乘除) (二)逻辑运算(与或非异或) 正文: (一)数值运算(加减乘除) opencv自带图片色素的处理函数------相加:add()   相减:subtract()  ...

  2. JVM 是用什么语言写的?

    JAVA中就虚拟机是其它语言开发的,用的是C语言+汇编语言  基于此之上就是JAVA本身了  虚拟机只起到解析作用另外,JAVA并不比C语言慢,说JAVA慢一般是九十年代那时候的JAVA, 而现在 在 ...

  3. Linux下Zabbix5.0 LTS添加自定义监控项

    自定义监控项 zabbix本身提供了很多可选的监控项,可以满足绝大部分的监控需求.有时候由于业务需求,需要自定义监控项. 下面以创建mysql自定义监控项为例,分享如何创建zabbix自定义监控项. ...

  4. spring boot 动态生成接口实现类

    目录 一: 定义注解 二: 建立动态代理类 三: 注入spring容器 四: 编写拦截器 五: 新建测试类 在某些业务场景中,我们只需要业务代码中定义相应的接口或者相应的注解,并不需要实现对应的逻辑. ...

  5. 解决:ElasticsearchException[X-Pack is not supported and Machine Learning is not available for

    解决:在config/elasticsearch.yml添加一条配置: xpack.ml.enabled: false 能启动了就. 在docker安装出现这个问题,目前还没解决. 算了用win10得 ...

  6. Kubernetes Pod 全面知识

    Pod 是在 Kubernetes 中创建和管理的.最小的可部署的计算单元,是最重要的对象之一.一个 Pod 中包含一个或多个容器,这些容器在 Pod 中能够共享网络.存储等环境. 学习 Kubern ...

  7. 【POJ3349 Snowflake Snow Snowflakes】【Hash表】

    最近在对照省选知识点自己的技能树 今天是Hash 题面 大概是给定有n个6元序列 定义两个序列相等 当两个序列各自从某一个元素开始顺时针或者逆时针旋转排列能得到两个相同的序列 求这n个6元序列中是否有 ...

  8. 洛谷 P7718 -「EZEC-10」Equalization(差分转化+状压 dp)

    洛谷题面传送门 一道挺有意思的题,现场切掉还是挺有成就感的. 首先看到区间操作我们可以想到差分转换,将区间操作转化为差分序列上的一个或两个单点操作,具体来说我们设 \(b_i=a_{i+1}-a_i\ ...

  9. Sums gym100753M

    Sums gym100753M 同余最短路模板,然而这个东西貌似也可以做去年D1T2 首先我们选择一个模数作为基准,然后剩下的这样连边: 对于一个面值为 x 的硬币 ,当前在 u 这个点(感性理解一下 ...

  10. 文件IO与标准IO的区别

    文件IO与标准IO的区别 文件I/O就是操作系统封装了一系列函数接口供应用程序使用,通过这些接口可以实现对文件的读写操作,文件I/O是采用系统直接调用的方式,因此当使用这些接口对文件进行操作时,就会立 ...