• 镜像仓库
    解决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%,一旦超过这个使用率就扩一倍节点。

十年架构设计总结!阿里华为等大厂都这么做容器调度和服务编排相关推荐

  1. 知己知彼,百战不殆,阿里华为电信大厂Java程序员秋招面经大合集(含更新)

    最近整合收集了阿里华为等大厂java程序员面经,看完你就明白为啥别人都能offer拿到手软了,文末含资料整合收集PDF,需要可自取 阿里内推 一面(电话) 听说你有博客,博客里大概有什么内容? 项目介 ...

  2. 云时代架构阅读笔记十五——架构设计思维(一)

    对于架构设计人们已经提出了许多方法,分类为:工件驱动的方法:用例驱动的法:模式驱动的方法:领域驱动的方法.一个经典的架构设计过程模型,沿用了RUP中迭代增量的思想,由分析.描述.选择.构造和组合5个阶 ...

  3. mysql架构设计书籍推荐_最近很火的MySQL:抛开复杂的架构设计,MySQL优化思想基本都在这...

    摘要: 冲区才用缓冲区,即SQL_CACHE:sort_buffer_size:排序缓冲区.3)分库分表因为数据库压力过大,首先一个问题就是高峰期系统性能可能会降低,因为数据库负载过高对性能会有影响. ...

  4. 最近很火的MySQL:抛开复杂的架构设计,MySQL优化思想基本都在这

    优化一览图 优化 笔者将优化分为了两大类:软优化和硬优化.软优化一般是操作数据库即可:而硬优化则是操作服务器硬件及参数设置. 1.软优化 1)查询语句优化 首先我们可以用EXPLAIN或DESCRIB ...

  5. Serverless架构设计指南,你关心的都在这里

    原文:The Comprehensive Guide to Serverless Architecture 作者:Jignesh Solanki 翻译:雁惊寒 摘要:本文详细介绍了无服务器架构及其优缺 ...

  6. 第九十一期:架构设计常用到的10种设计模式,你都知道吗?

    企业规模的软件系统该如何设计呢?在开始写代码之前,我们需要选择一个合适的架构,这个架构将决定软件实施过程中的功能属性和质量属性.因此,了解软件设计中的不同架构模式对我们的软件设计会有较大的帮助. 作者 ...

  7. 大数据基础课03 阿里美团这些大厂都在用什么大数据架构?

    首先,我想讲一个叫庖丁解牛的故事,想必你应该听过.庖丁从开始杀牛,到他的故事被写下,操刀十九年,杀了数千头牛.也正是由于丰富的实践经验,他总结出了解杀牛的方法论:依照牛生理上的天然结构,砍入牛体筋骨相 ...

  8. 架构设计(3)---基于Nginx和Zookeeper实现Dubbo的分布式服务

    基于Nginx和Zookeeper实现Dubbo的分布式服务 一.前言 公司的项目基于阿里的Dubbo 微服务框架开发.为了符合相关监管部门的安全要求,公司购买了华东1.华东2两套异地服务器,一套是业 ...

  9. 编程小白须知,阿里、百度、华为这些大厂都用什么编程语言?别说不知道!

    学习编程语言之前,首先要搞清楚"编程语言"这个概念. 很小的时候,父母就教我们开口说话,也教我们如何理解别人讲话的意思.经过长时间的熏陶和自我学习,我们竟然在不知不觉中学会了说话, ...

最新文章

  1. RPC(远程过程调用协议)介绍
  2. flex 3 使用手册
  3. java静态方法 问题_Java中堆、栈,静态方法和非静态方法的速度问题
  4. 几种网络负载均衡方法比较
  5. SAP固定资产期初导入检查
  6. 服务器负载不高 响应慢_京东面试官问我什么是负载均衡,兄弟们我这样说对嘛?...
  7. DVI和HDMI中的TMDS接口协议
  8. android 的各种文件类
  9. Linux学习之SAMBA共享(无密码)
  10. THCudaCheck FAIL file=/pytorch/aten/src/THC/THCGeneral.cpp line=405 error=11 : invalid argument
  11. java 中如何临时保存某输入值_java笔记临时存放
  12. leetcode 75.颜色分类
  13. python dlib caffe人脸相似度_基于深度学习的人脸识别系统(Caffe+OpenCV+Dlib)【二】人脸预处理...
  14. 毕业论文word版 格式设置技巧
  15. matlab自动打卡程序,MATLAB人脸考勤打卡签到系统[摄像头界面GUI]
  16. Cartopy画地图第七天(python画浮雕地图和比例尺)
  17. 卫星轨道资料洋面风的绘图
  18. 华硕x580nv拆机_看懂一篇拆机贴 拆遍天下机 华硕A45VM拆机清灰换硅脂 怒降25度!...
  19. 多分类学习(OvO、OVR、MVM 原理区别)
  20. 详解GaussDB(DWS) 资源监控

热门文章

  1. java.bankaccount_java编写BankAccount类
  2. 搭建jumpsever堡垒机
  3. 1.1-了解什么是计算机
  4. 【韧性架构】让你的微服务容错的 5 种模式
  5. 【悲观锁与乐观锁的原理及实现】
  6. Linux命令行另类使用技巧
  7. 北京市高等教育自学考试开考专业信息表(2023年发布)
  8. 达观数据陈运文:文字的起源与文本挖掘的前世今生
  9. 字典(汇编指令 INT 21H)
  10. jsp中点击一个图片跳转到另一个页面的方法