此外,对于如大促这类需要动态扩缩容的场景,需要水平扩展服务的性能,就需要在新增的服务上准备运行环境,部署服务等,运维将变得十分困难 。
3.14 第十三次演进:引入容器化技术实现运行环境隔离与动态服务管理
文章插图
目前最流行的容器化技术是Docker,最流行的容器管理服务是Kubernetes(K8S),应用/服务可以打包为Docker镜像,通过K8S来动态分发和部署镜像 。
Docker镜像可理解为一个能运行你的应用/服务的最小的操作系统,里面放着应用/服务的运行代码,运行环境根据实际的需要设置好 。
把整个“操作系统”打包为一个镜像后,就可以分发到需要部署相关服务的机器上,直接启动Docker镜像就可以把服务起起来,使服务的部署和运维变得简单 。
在大促的之前,可以在现有的机器集群上划分出服务器来启动Docker镜像,增强服务的性能
大促过后就可以关闭镜像,对机器上的其他服务不造成影响(在第18节之前,服务运行在新增机器上需要修改系统配置来适配服务,这会导致机器上其他服务需要的运行环境被破坏) 。
架构瓶颈:使用容器化技术后服务动态扩缩容问题得以解决,但是机器还是需要公司自身来管理,在非大促的时候,还是需要闲置着大量的机器资源来应对大促,机器自身成本和运维成本都极高,资源利用率低 。
3.15 第十四次演进:以云平台承载系统
文章插图
系统可部署到公有云上,利用公有云的海量机器资源,解决动态硬件资源的问题
在大促的时间段里,在云平台中临时申请更多的资源,结合Docker和K8S来快速部署服务,在大促结束后释放资源,真正做到按需付费,资源利用率大大提高,同时大大降低了运维成本 。
所谓的云平台,就是把海量机器资源,通过统一的资源管理,抽象为一个资源整体
在云平台上可按需动态申请硬件资源(如CPU、内存、网络等),并且之上提供通用的操作系统,提供常用的技术组件(如Hadoop技术栈,MPP数据库等)供用户使用,甚至提供开发好的应用
用户不需要关心应用内部使用了什么技术,就能够解决需求(如音视频转码服务、邮件服务、个人博客等) 。
在云平台中会涉及如下几个概念:
- IaaS:基础设施即服务 。对应于上面所说的机器资源统一为资源整体,可动态申请硬件资源的层面;
- PaaS:平台即服务 。对应于上面所说的提供常用的技术组件方便系统的开发和维护;
- SaaS:软件即服务 。对应于上面所说的提供开发好的应用或服务,按功能或性能要求付费 。
但同时也应该意识到,在上面的介绍中,其实是有意忽略了诸如跨机房数据同步、分布式事务实现等等的实际问题,这些问题以后有机会再拿出来单独讨论 。
4、架构设计总结
1)架构的调整是否必须按照上述演变路径进行?
不是的,以上所说的架构演变顺序只是针对某个侧面进行单独的改进
在实际场景中,可能同一时间会有几个问题需要解决,或者可能先达到瓶颈的是另外的方面,这时候就应该按照实际问题实际解决 。
如在政府类的并发量可能不大,但业务可能很丰富的场景,高并发就不是重点解决的问题,此时优先需要的可能会是丰富需求的解决方案 。
2)对于将要实施的系统,架构应该设计到什么程度?
对于单次实施并且性能指标明确的系统,架构设计到能够支持系统的性能指标要求就足够了,但要留有扩展架构的接口以便不备之需 。
对于不断发展的系统,如电商平台,应设计到能满足下一阶段用户量和性能指标要求的程度,并根据业务的增长不断的迭代升级架构,以支持更高的并发和更丰富的业务 。
3)服务端架构和大数据架构有什么区别?
所谓的“大数据”其实是海量数据采集清洗转换、数据存储、数据分析、数据服务等场景解决方案的一个统称,在每一个场景都包含了多种可选的技术
如数据采集有Flume、Sqoop、Kettle等,数据存储有分布式文件系统HDFS、FastDFS,NoSQL数据库HBase、MongoDB等,数据分析有Spark技术栈、机器学习算法等 。
总的来说大数据架构就是根据业务的需求,整合各种大数据组件组合而成的架构,一般会提供分布式存储、分布式计算、多维分析、数据仓库、机器学习算法等能力 。
推荐阅读
- 广南那秧茶树良种选育基地建成节水灌溉系统
- 3分钟学会mysql数据库的逻辑架构原理
- 一个秒杀系统的设计思考,原来可以这么轻松的就学会了
- 全面讲解分布式数据库架构设计特点
- 上虞,日本茶叶防霜冻系统投入使用
- 所有生物的生存都需要氧气 地球上的氧气主要来自哪个生态系统
- 计算机的灵魂“操作系统”,你对它了解多少?
- 什么是架构?什么样的人才能被称之为架构师?架构师是做什么的?
- Zipkin架构简介
- Mac os 10.15系统 使用安装盘快速降级10.14 你会了吗?