基于容器的可伸缩应用架构

云计算有5大特征,其中有一项是按需使用,即根据业务对资源的需求量自动获取相应的资源或释放部分闲置的资源。这种按需使用的需求,对应到业务架构时,可以认为是一个可伸缩的云应用架构,当然底层的这种伸缩能力是由云厂商为我们提供的,如果哪个云平台提供不了这种功能,也可以认为该平台并不能真正符合业界对云计算的定义,在云计算发展这么多年后还提供不了这个功能,只能用挫来形容。

废话少扯,来看一个需求。大概是这样,要求使用Docker部署应用,这些应用白天的使用量远远大于晚上,白天高峰期需要保证用户的流畅体验,如何购买云服务资源和架构应用,使得成本最低并且应用容易扩展。

说到可扩展,你想到了什么?一般来说,扩展包括纵向扩展和横向扩展,洋文分别叫Scale up和和Scale out。所谓纵向,就是比如不添加新机器,只增加处理器主频、增大内存和硬盘容量,横向则是添加新机器。可想而知,纵向扩展很快就遇到瓶颈,毕竟一台服务器不能一直增加配置,而横向则趋于无限(现实中集群的规模也是有限度的)。几年前我也在搞云计算平台,对于可伸缩,我只知道有通过新购和释放虚拟资源来达到伸缩的目标,没有看到哪个平台是通过Scale up来实现用户对资源的自动伸缩需求。

很显然,我们需要通过横向扩展来达到目标,那么对于Docker部署的应用系统,需要一个Docker集群,这个Docker集群能自动扩容和缩容就OK。如果自建集群,可以使用Kubernetes或者Swarm,但是维护可能会比较麻烦,那么可以选择阿里云的容器云服务,然后将我们购买的ECS实例添加到容器集群,后面各种应用运行在Docker容器中,容器运行在这些ECS实例的系统中。购买多少ECS实例呢,由自动伸缩服务来完成,而自动伸缩服务依赖于云监控。由于要应对高并发高负载情况,还需要做负载均衡,数据库弄读写分离,甚至必要时要增加缓存系统。

综上,如果都是购买阿里云的服务而不是自建,那么需要购买的服务大致包括:负载均衡、云监控(应该包含在自动伸缩里面)、自动伸缩服务、容器服务、RDS数据库、读写分离服务。这些服务组合起来,形成的架构图如下:

上面的架构图,只能说是一个雏形,比如也没有缓存系统,没有考虑CDN等。而随着需求的增加和变更,应用系统的架构也会跟着逐步演化,经过不断演化、不断总结,才能形成最佳实践。

发表评论

电子邮件地址不会被公开。