十年架构设计总结!阿里华为等大厂都这么做容器调度和服务编排
- 镜像仓库
解决Docker镜像存储和访问 - 资源调度
决定Docker镜像可分发到哪些机器
这些解决后,就该考虑如何在集群中创建容器,即容器调度。
容器创建后如何运作才能对外提供服务,即容器调度。
1 容器调度
当服务需要发布的时候,该选择哪些机器部署容器。
若集群机器规模上百台,要发布的服务上百个,就不能靠人肉运维,需要有专门容器调度系统,所以很多基于Docker的容器调度系统,比如Swarm、Mesos。Kubernetes。
它们能解决哪些问题呢?
主机过滤
解决容器创建时什么样的机器可以使用:
存活过滤
必须选择存活的节点,因为主机也有可能下线、故障态。硬件过滤
比如Web集群往往用作计算节点,它的CPU一般配置比较高
大数据集群往往用作数据存储,它的磁盘一般配置比较高
以上都是针对主机层次的过滤方式。
调度策略
为解决容器创建时选择哪些主机最合适,一般通过给主机打分。
比如Swarm包含两种类似策略:spread和binpack,都会根据每台主机的可用CPU、内存以及正在运行的容器的数量来给每台主机打分:
- spread策略
会选择一个资源使用最少的节点,以使容器尽可能的分布在不同的主机上运行。好处:可以使每台主机的负载都比较平均,而且如果有一台主机有故障,受影响的容器也最少 - binpack策略
正好相反,会选择一个资源使用最多的节点,好让容器尽可能的运行在少数机器上,节省资源的同时也避免了主机使用资源的碎片化
适用场景
各主机配置基本相同,使用也较简单,一台主机上只创建一个容器。每次创建容器时,直接从尚未创建过容器的主机中,随机选择一台。
某些在线、离线业务混布场景,为达到主机资源使用率最高,需综合考量容器中的任务特点:
- 在线业务主要使用CPU
- 离线业务主要使用磁盘和I/O
这两种业务的容器大部分情况下适合混跑在一起。
还有一种业务场景,主机资源都充足,每个容器只要划定所用资源限制,理论上跑在一起是没问题。但有时会出现对每个资源的抢占,比如都是CPU密集型或者I/O密集型的业务就不适合容器混布一台主机。
2 服务编排
服务依赖
若服务A调度的前提是先有服务B,容器调度时,就要考虑服务间这种依赖关系。
所以Docker提供Docker Compose。允许用户通过一个单独的docker-compose.yaml
定义一组相互关联的容器组成一个项目,以项目形式管理应用。
比如要实现一个Web项目,要创建:
- Web容器比如Tomcat容器
- 数据库容器比如MySQL容器
- 负载均衡容器比如Nginx容器等
就可以通过docker-compose.yaml
配置这个Web项目里包含的三个容器的创建。
服务发现
容器调度完成后,就可以启动了。但此时容器还不能对外服务,服务消费者并不知道这个新的节点,必须具备服务发现机制,使得新容器节点能够加入到线上服务。
常用的服务发现机制:
基于Nginx的服务发现
针对提供HTTP服务的。
当有新容器节点时,修改Nginx的节点list配置,然后利用Nginx的reload,重新读取配置,加载新节点。
基于注册中心的服务发现
针对提供RPC服务的。
当有新的容器节点时,需要调用注册中心提供的服务注册接口。使用这种方式时,如果服务部署在多个IDC,就要求容器节点分IDC进行注册,以便实现同IDC内就近访问。以微博的业务为例,微博服务除了部署在内部的两个IDC,还在阿里云上也有部署,这样的话,内部机房上创建的容器节点就应该加入到内部IDC分组,而云上的节点应该加入到阿里云的IDC。
弹性扩容
大部分互联网业务的访问呈现出访问时间的规律性。在高峰期,增加容器的数量,确保服务稳定性;低峰期减少容器数量,减少服务使用的资源成本。可以根据容器的CPU负载,设置一个扩缩容的容器数量或比例。比如可以设定容器的CPU使用率不超过50%,一旦超过这个使用率就扩一倍节点。
十年架构设计总结!阿里华为等大厂都这么做容器调度和服务编排相关推荐
- 知己知彼,百战不殆,阿里华为电信大厂Java程序员秋招面经大合集(含更新)
最近整合收集了阿里华为等大厂java程序员面经,看完你就明白为啥别人都能offer拿到手软了,文末含资料整合收集PDF,需要可自取 阿里内推 一面(电话) 听说你有博客,博客里大概有什么内容? 项目介 ...
- 云时代架构阅读笔记十五——架构设计思维(一)
对于架构设计人们已经提出了许多方法,分类为:工件驱动的方法:用例驱动的法:模式驱动的方法:领域驱动的方法.一个经典的架构设计过程模型,沿用了RUP中迭代增量的思想,由分析.描述.选择.构造和组合5个阶 ...
- mysql架构设计书籍推荐_最近很火的MySQL:抛开复杂的架构设计,MySQL优化思想基本都在这...
摘要: 冲区才用缓冲区,即SQL_CACHE:sort_buffer_size:排序缓冲区.3)分库分表因为数据库压力过大,首先一个问题就是高峰期系统性能可能会降低,因为数据库负载过高对性能会有影响. ...
- 最近很火的MySQL:抛开复杂的架构设计,MySQL优化思想基本都在这
优化一览图 优化 笔者将优化分为了两大类:软优化和硬优化.软优化一般是操作数据库即可:而硬优化则是操作服务器硬件及参数设置. 1.软优化 1)查询语句优化 首先我们可以用EXPLAIN或DESCRIB ...
- Serverless架构设计指南,你关心的都在这里
原文:The Comprehensive Guide to Serverless Architecture 作者:Jignesh Solanki 翻译:雁惊寒 摘要:本文详细介绍了无服务器架构及其优缺 ...
- 第九十一期:架构设计常用到的10种设计模式,你都知道吗?
企业规模的软件系统该如何设计呢?在开始写代码之前,我们需要选择一个合适的架构,这个架构将决定软件实施过程中的功能属性和质量属性.因此,了解软件设计中的不同架构模式对我们的软件设计会有较大的帮助. 作者 ...
- 大数据基础课03 阿里美团这些大厂都在用什么大数据架构?
首先,我想讲一个叫庖丁解牛的故事,想必你应该听过.庖丁从开始杀牛,到他的故事被写下,操刀十九年,杀了数千头牛.也正是由于丰富的实践经验,他总结出了解杀牛的方法论:依照牛生理上的天然结构,砍入牛体筋骨相 ...
- 架构设计(3)---基于Nginx和Zookeeper实现Dubbo的分布式服务
基于Nginx和Zookeeper实现Dubbo的分布式服务 一.前言 公司的项目基于阿里的Dubbo 微服务框架开发.为了符合相关监管部门的安全要求,公司购买了华东1.华东2两套异地服务器,一套是业 ...
- 编程小白须知,阿里、百度、华为这些大厂都用什么编程语言?别说不知道!
学习编程语言之前,首先要搞清楚"编程语言"这个概念. 很小的时候,父母就教我们开口说话,也教我们如何理解别人讲话的意思.经过长时间的熏陶和自我学习,我们竟然在不知不觉中学会了说话, ...
最新文章
- RPC(远程过程调用协议)介绍
- flex 3 使用手册
- java静态方法 问题_Java中堆、栈,静态方法和非静态方法的速度问题
- 几种网络负载均衡方法比较
- SAP固定资产期初导入检查
- 服务器负载不高 响应慢_京东面试官问我什么是负载均衡,兄弟们我这样说对嘛?...
- DVI和HDMI中的TMDS接口协议
- android 的各种文件类
- Linux学习之SAMBA共享(无密码)
- THCudaCheck FAIL file=/pytorch/aten/src/THC/THCGeneral.cpp line=405 error=11 : invalid argument
- java 中如何临时保存某输入值_java笔记临时存放
- leetcode 75.颜色分类
- python dlib caffe人脸相似度_基于深度学习的人脸识别系统(Caffe+OpenCV+Dlib)【二】人脸预处理...
- 毕业论文word版 格式设置技巧
- matlab自动打卡程序,MATLAB人脸考勤打卡签到系统[摄像头界面GUI]
- Cartopy画地图第七天(python画浮雕地图和比例尺)
- 卫星轨道资料洋面风的绘图
- 华硕x580nv拆机_看懂一篇拆机贴 拆遍天下机 华硕A45VM拆机清灰换硅脂 怒降25度!...
- 多分类学习(OvO、OVR、MVM 原理区别)
- 详解GaussDB(DWS) 资源监控