阿里云伸缩配置作用是什么?

运维派隶属马哥教育旗下专业运维社区,是国内成立最早的IT运维技术社区,欢迎关注公众号:yunweipai
领取学习更多免费Linux云计算、Python、Docker、K8s教程关注公众号:马哥linux运维

携程系统研发部高级总监

2012年加入携程,从零组建携程云平台团队,目前负责携程私有云、虚拟桌面云、网站应用持续交付等研发。

一、在线旅游与弹性需求

近年来随着大众旅游消费的火热,携程的业务每年呈高速增长,2016年Q4财报显示携程2016年全年营业收入同比增长76%,交通票务营业收入同比增长98%,酒店预订营业收入同比增长56%,其他BU也有大幅增长,预计2018年携程的 GMV 将突破10000亿,并在2021年突破2万亿。

我们开发的私有云和持续交付平台为携程超过 20 个 BU/SBU 服务,为了同步支撑业务的高速发展,我们也需要不断的技术革新,持续提升携程运营、研发的效率,缩短产品从 idea 到交付用户的时间。

旅游出行的特点是季节性的,在平时流量都比较低,但节假日前一天流量会突然增高很多。因此每到节假日就会面临成「倍」增长的扩容需求。图 1 中可以明显的看到流量的起伏情况。

一般情况,临时扩容的需求较多,缩容会比较少,因为流量一上去之后,在短时间内不会下来,另外一方面,哪怕是流量下来了,由于以往资源申请没那么灵活,一般都会占用资源不释放,只能通过一些运维手段来监测资源使用情况然后告知业务部门去主动缩容。

携程目前大部分还是虚拟机,我们想缩短提前扩容的时间,以目前的虚拟机扩容方式,单个虚拟机扩容(从分配资源、调度、网络、os基础环境、应用部署等)至少是十分钟级别的。

如果是每次扩容上千台的话,确实需要一定的时间,而且还得看看有无足够的资源,比如 1 月 1 日的流量提前一周就扩容好,但这不够灵活,业务流量下来以后需要缩容,目前的速度还是不够快。

针对这一场景,我们需要解决的问题是,能有更快的方案吗?如何能够做到更快速的弹性伸缩满足业务的需求?答案是利用容器。

再举个例子,携程有个深度学习的小诗机项目,将训练好的模型,对外提供服务,用户只要上传照片,后台的 AI 机器人就会根据照片中的内容自动写诗,这对于现行都市词穷一族来说,瞬间提升了意境,蛮有意思的。

该项目希望在春节前上线,需要紧急扩容 1000 核,以满足春节期间大流量的需求,春节过后立马就可以缩容 90% 的资源。

目前我们通过容器可以做到 1000 核的资源,5 分钟内完成 150 个容器实例的扩容,而且这还是 API 同步创建的速度,我们正在优化成异步的方式,相信后续提高并发能力后,速度还可以得到大大的提升。

其实携程的容器化已经进行一年多了,容器给我们最大的感觉是看起来简单,但要做好很难,原理不是很复杂,但是要利用这个技术做出一个产品或服务,中间有非常多的细节需要完善,比如如何做到用户体验更好的 UI 可视化、如何做到灰度发布、容器监控、容器基础镜像版本管理等等。

1、打造极致的秒级持续交付体验,服务20+BU

秒级意味着所有的扩容、缩容、回滚全部是秒级的,做到秒级是很难的,有很多需要突破的地方。比如,高速的镜像下发系统;高效的调度系统,稳定的容器服务,高度自动化的网络服务。

为了提高服务器资源利用率,我们采取账单的形式,督促业务线提高资源利用率,优化代码架构。我们对采集到的实时监控数据进行统计分析,按照 CPU、内存、存储、网络等多个纬度,按月计费,每个月会将账单发给业务线的 CTO。

应用所需要依赖的很多组件能够变成服务化,AWS 或者阿里云也做了很多这种服务。携程内部也在尝试把一些公共组件服务化,例如,MySQL,Redis,RabbitMQ 等。

拿 MySQL 为例,我们让用户可以在测试环境快速部署 MySQL 实例,并且可以选择性的将测试数据灌入。新建的 MySQL 实例也会自动在数据访问中间件中完成注册,方便开发人员、测试人员快速搭建测试环境和测试数据。

4、从自动化到一定程度智能化

从自动化到一定程度智能化指的是基础设施变得更智能,比如能够具备一定的自我修复能力,如果是从上游到下游的一整套服务都具备智能化修复能力的话,这是一个非常大的突破,对于提升运营效率和故障恢复速度至关重要;

以上是携程容器部署基本原则,看起来很容易,却是我们很长时间实践经验的总结。

比如单容器单应用这个原则,历史原因我们有混合部署的情况,单个vm部署多个应用,运维的复杂度会上升很多,比如:应用之间如何做到更好的资源隔离?发布如何避免相互之间的冲突?等等。

使得我们的运维工具、发布工具变得格外复杂,开发、测试的持续交付效率也受到极大影响;

容器镜像发布也是我们做的一个比较大的突破,过去是代码编译成可发布的包,直接部署到 vm 内部,而现在是编译时直接生成容器的镜像,不同环境其实部署的是同一个镜像。

并且不允许部署之后单独登陆进行配置修改,通过这种方式做到 immutable infrastructure ,保证开发、测试、生产环境的一致性,同时也保障了自动化扩容、缩容快速高效的进行。

是否在容器内部也运行各种运维 agent 也是我们经过实践确定下来的;我们希望容器尽量简单,尽可能只包含运行的应用本身,此外将所有的 agent 合并到 host 层面,也能在很大程度上提升服务器资源利用率,agent数量下降一到两个数量级;但配套的管理工具(eg: salt) 需要做一次升级改造才能适配新的模式;

四、容器编排选型&取舍

携程除了容器之外的东西都是用 OpenStack 来管理的,OpenStack 可以用一个模块(nova-docker)来管理容器,携程在 OpenStack 方面有多年的二次开发技术积累、也大规模的部署运维经验,但最终没有选用 OpenStack,因为 OpenStack 整体过于复杂,调度效率也比较低,API 调度是 10 秒以上,可以进行优化,但我们觉得优化代价太大,OpenStack 整体的复杂度也很高;

我们早期的胖容器(把容器当 vm 来使用,做代码包发布)的确是用 OpenStack 来做的,原因是我们希望把注意力放在容器本身,以最低的代价将容器先用起来,积累开发、运维经验;

而到了瘦容器阶段(基于容器镜像做发布),我们发现 OpenStack 整体的设计理念从本质上讲还是为虚拟机隔离粒度的虚拟化方案设计的,而容器本身与 vm 其实差别很大,玩法也相去甚远, 于是我们对 Mesos/K8s 进行评估;

回顾我们的容器调度探索之旅,基本上可以用以下三个阶段来总结:

  1. 第一阶段,需要最快的使用起来,用最熟悉的技术来解决部署和调度。

    OpenStack 用于管理 bm/vm 是很合适的,并且在网络方面有很成熟的支持,无论是 vlan+OVS 还是最新的SDN 都能适配,尤其各大厂商的支持力度都很大;这也是为什么我们虽然不用 OpenStack 调度容器,但容器的网络其实还是用 neutron 来管理的;

    K8S 有很多很先进的设计理念,比如有 replication  controller/Pod/Yaml 配置管理等,但这些理念在携程都很难落地,因为跟现有的运维模式、发布流程有较大的冲突。

    而且当前还缺乏大规模部署案例,网络尚无比较成熟的方案, 例如 L4/L7 负载均衡; 而在携程 L4/L7 服务已经比较成熟稳定, 并且与我们现有的发布系统Tars集成得非常好;

    Mesos 和 K8S 解决问题的思路是不一样的,基于 Mesos 我们可以非常容易的开发出适合我们场景的调度框架,并且非常容易和我们现有的运维基础服务对接集成;包括 L4/L7 负载均衡、发布系统等;

    -单容器单IP,可路由

    Neutron+OVS+VLan,这个模式非常稳定,对于网络管理也是非常的透明的。这也是携程的选择,现在的网络无论是胖容器还是容器轻量发布都用这种模式。我们也在测试 DPDK 和 https 硬件加速的效果。

    我们也评估过类似 flannel 的网络,要求每个物理机独立网段,通过这个特性来做路由;非常不灵活的一点是容器如果迁移到另外一台物理机就需要换IP,无法满足我们的需求;

    的三层路由进行转发;openstack与我们的控制器能实现元数据的一致性;关于这块,后续我们也会有相应的分享单独进行探讨;

    里面是需要依赖外部提供信息的,所以需要知道哪个网段或者说创建的 neutronport 再配置到 Docker 容器内。这样做后就不会有网络丢失的情况。

    六、Docker遇到的问题

    接下来分享一下我们碰到的一些比较经典的Docker/Mesos相关的问题

    在我们尝试使用 Chronos 跑 cronjob 时,由于我们的 Job 执行频率非常高,导致物理机上出现非常频繁地容器创建和销毁,容器的创建和销毁比单个进程的创建和销毁代价大,会产生很多次内核的调用,磁盘的分配销毁,这对内核是一个非常大的压力考验。

    我们在实际操作过程中就遇到了一个 bug,如图 6 这台机器逐步失去响应,产生了 kernel soft lockup,慢慢的导致所有进程都死锁了,最终物理机重启了。为了避免频繁创建销毁容器,我们没有在 Chronos 这种一个 task 一个容器的路上继续走下去,我们自己研发了 mesos framework,改成了一个Job,一个容器的调度方式。

}

在阿里云上,用户经常将弹性伸缩服务AutoScaling与负载均衡服务SLB搭配使用。在这种场景中,弹性伸缩服务中“伸缩组”即是负载均衡服务中的“后端服务器组”,无需再创建伸缩组。()此题为判断题(对,错)。请帮忙给出正确答案和分析,谢谢!

阿里云的负载均衡SLB实例和后端云服务器ECS实例之间是通过公网进行通信的,所以云服务器ECS实例必须配置外网带宽。()

阿里云的云盾的DDoS防护功能可以保护阿里云机房内的所有云产品,包括:云服务器ECS、负载均衡SLB、云数据库RDS、对象存储OSS等。()

在删除阿里云弹性伸缩(Auto Scaling)的伸缩组时有两种模式:强制删除和非强制删除。在非强制删除模式下,必须满足以下哪两个条件才可以删除?()

A、伸缩组没有任何伸缩活动正在执行

B、伸缩组当前的ECS实例数量为0

C、伸缩组没有对应的定时任务以及报警任务

D、伸缩组没有和负载均衡SLB,云数据库RDS配合使用

阿里云弹性伸缩(AutoScaling)提供了“弹性自愈”功能,能保持伸缩组中的云服务器ECS实例都处在正常状态,如果伸缩组中某台ECS实例状态不是运行中,以下说法中正确的是()。
A、阿里云弹性伸缩首先会自动重启该ECS,重启成功后继续保持在伸缩组中,如果重启失败,则从伸缩组中移除,同时创建新的ECS实例键入到伸缩组中来;
B、阿里云弹性伸缩首先会自动重启该ECS,重启成功后继续保持在伸缩组中,如果重启失败,则会使用指定的镜像恢复该ECS实例到初始状态,继续保持在伸缩组中;
C、则该ECS实例会被移出伸缩组,同时自动创建一台新的ECS实例,添加到伸缩组中来;
D、阿里云弹性伸缩会启动ECS实例的故障检查与修复进程,对ECS实例进行自动修复;

请帮忙给出正确答案和分析,谢谢!

使用阿里云的负载均衡SLB实例时,针对7层(HTTP协议)服务,由于采取替换HTTP头文件IP地址的方式来进行请求转发,所以后端云服务器ECS实例看到的访问IP是负载均衡SLB实例的IP地址,而不是实际来访者的真实IP。()此题为判断题(对,错)。请帮忙给出正确答案和分析,谢谢!

负载均衡SLB是对多台云服务器进行流量分发的负载均衡服务,阿里云提供公网、私网(专有网络)和私网(经典网络)三种类型的负载均衡实例。()

作为架构师,您在给某公司设计架构方案,首先手机APP客户端的请求最终使用云服务器ECS实例来进行处理,其次使用负载均衡SLB实例来做流量分发,使得后台每台ECS实例的负载大致均匀,为了应对业务量的大幅波动(周末访问量较大),您还建议他们使用弹性伸缩(AutoScaling)动态的增加或减少计算资源,他们对您的方案比较满意,作为一个特别看重用户体验的创业型公司,他们有一个比较担心的问题:在后端云服务器ECS实例相对空闲时,可能会触发减少ECS实例的伸缩活动,这时候运行在即将移出伸缩组的ECS实例上的应用会被终止,那么发起这些应用的用户的体验会变差,您应该向客户推荐以下哪种解决方法来消除客户的后顾之忧?
A、在负载均衡SLB实例的后端服务器池中,找到将要被移出的ECS实例,手工将该实例从后端服务器池中移出,则正在此ECS实例上运行的应用会正常返回结果,但是不会再备分到新的请求
B、弹性伸缩中,伸缩组对应的伸缩配置使用的自定义镜像存放执行脚本,并设置命令在操作系统关机时自动执行该脚本,其中该脚本中存放了此种状况下的处理逻辑
C、在负载均衡SLB实例中,开启后端服务器的数据同步选项,同时开启后端服务器的应用漂移选项,则在伸缩活动将某台ECS实例从伸缩组中移走时,其上的数据和正在运行的应用将有同一个伸缩组中的另一台ECS实例接管
D、在负载均衡SLB实例的后端服务池中,找到将要被移出的ECS实例,自动设定该ECS实例的权重为0,则该实例将不会被分到新的请求,在处理完成已有的需求后,将被自动移出后端服务器池

请帮忙给出正确答案和分析,谢谢!

某用户在阿里云控制台手动创建了一台ECS实例并加入到弹性伸缩组(已知该伸缩组配置了负载均衡)中。由于用户业务发生变化,该用户将此台ECS实例转为备用状态,则()

A、该ECS实例负载均衡权重不变

B、弹性伸缩仍管理该ECS生命周期

C、伸缩组发生伸缩活动时,优先移出该ECS实例

D、用户需从伸缩组内移出该ECS实例才能将其释放

阿里云对象存储OSS是阿里云提供的海量、安全、低成本、高可靠的云存储服务。如果访问OSS文件的并发用户数和流量特别大,可以使用负载均衡SLB进行访问加速。()

}

我要回帖

更多关于 东革阿里的服用禁忌 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信