【Docker】子系统与其相关名词的界定、Control Groups等详细讲解

news2024/11/25 18:40:26

在这里插入图片描述

前言

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux或Windows操作系统的机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。


📕作者简介:热爱跑步的恒川,致力于C/C++、Java、Python等多编程语言,热爱跑步,喜爱音乐的一位博主。
📗本文收录于恒川的日常汇报系列,大家有兴趣的可以看一看
📘相关专栏C语言初阶、C语言进阶系列等,大家有兴趣的可以看一看
📙Python零基础入门系列,Java入门篇系列正在发展中,喜欢Python、Java的朋友们可以关注一下哦!

Docker中Control Groups

  • 1. 关于术语定义
  • 2. 子系统
    • 2.1 确定方法
    • 2.2 使用
    • 2.3 规则
    • 2.4 子系统与其相关名词的界定
  • 3. cpu
  • 4. cpusets
  • 5. memory
  • 6. blkio
  • 恒川赠书活动

cgroups 实现了对资源的配额和度量。 cgroups 的使用非常简单,提供类似文件的接口,在/cgroup目录下新建一个文件夹即可新建一个group,在此文件夹中新建task文件,并将pid写入该文件,即可实现对该进程的资源控制。具体的资源配置选项可以在该文件夹中新建子subsystem ,{子系统前缀}.{资源项} 是典型的配置方法

memory.usage_in_bytes 就定义了该group 在subsystem memory中的一个内存限制选项。
另外,cgroups中的 subsystem可以随意组合,一个subsystem可以在不同的group中,也可以一个group包含多个subsystem - 也就是说一个 subsystem。

1. 关于术语定义

A * cgroup * associates a set of tasks with a set of parameters for one
or more subsystems.
A * subsystem * is a module that makes use of the task grouping
facilities provided by cgroups to treat groups of tasks in
particular ways. A subsystem is typically a "resource controller"that
schedules a resource or applies per-cgroup limits, but it may be
anything that wants to act on a group of processes, e.g. a
virtualization subsystem.
主要关心cgroups可以限制哪些资源,即有哪些subsystem会受到影响。

2. 子系统

子系统是一种模型元素,它具有包(其中可包含其他模型元素)和类(其具有行为)的语义。子系统的行为由它所包含的类或其他子系统提供。子系统实现一个或多个接口,这些接口定义子系统可以执行的行为。
在这里插入图片描述

2.1 确定方法

如果某个协作中的各个类只是在相互之间进行交互,并且可生成一组定义明确的结果,就应将该协作和它的类封装在一个子系统中。
这一规则同样适用于协作的子集。可以对协作的任何部分或全部进行封装和简化,这将会使设计更易于理解。

提示详细说明
注意可选性如果特定的协作(或子协作)代表可选行为,则应将其封装在一个子系统中。如果可以将某些功能删除、升级或替换为其他功能,就应该认为这些功能是独立的。
注意系统的用户界面。如果用户界面相对独立于系统中的实体类(即二者都可以且将要独立地变更),则应创建横向集成的子系统:将相关的用户界面边界类归入一个子系统,而将相关的实体类归入另一个子系统。
如果用户界面和它所显示的实体类紧密耦合(即一方的变更会触发另一方的变更),则应创建纵向集成的子系统:将相关的边界类和实体类装入共同的子系统中。
注意主角将两个不同主角使用的功能分开,因为每个主角可能会独立变更自己对系统的需求。
查找类与类之间的耦合和内聚耦合度或内聚度较高的类彼此协作,以提供某一组服务。将耦合度较高的类组织成子系统,沿着弱耦合的界线将类分开。在某些情况下,可以将类分成更小的类,使其具有内聚度更高的职责,从而完全消除弱耦合。
注意替换如果为某项特定功能指定了几个服务级别(例如,高、中、低可用性),则要将每个服务级别表示成一个独立的子系统,每个子系统都将实现同一组接口。这样,子系统就可互相替换。
注意分布虽然一个特定子系统可能有多个实例,每个实例都在不同的节点上执行,但不可能在各节点间拆分子系统的单个实例。如果必须在各节点间拆分子系统行为,则需要将子系统分成更小的子系统,使其具有限制更严格的功能。确定必须存在于每个节点上的功能,并创建一个新的子系统,使其“拥有”该功能,然后相应地在该子系统内分布职责和相关元素。

一旦将类组织成子系统,就要相应地更新用例实现。

  1. 记录子系统:
    一旦创建了子系统:供一个名称和一段简短说明。 如果工具支持包但不支持子系统,可以用包来记录子系统;在此环境中应使用包构造型表示子系统。 应将原始分析类的职责转移给新建的子系统,并使用该子系统的说明来记录职责。
  2. 子系统和构件:
    构件属于实施范畴;为了在设计中表示构件,可以将子系统用作构件的代理。
    系统的每个部分都应尽可能独立于系统的其他部分。 从理论上说,应该可以用新的部分替换系统的任何部分,但前提是新部分必须支持相同的接口。 应该可以使系统的不同部分独立地演进,而不受系统其他部分的影响。 为此,设计子系统提供了一种在设计模型中表示构件的理想方法:它们是用来封装许多类的行为的设计元素(就象构件封装许多类实例的行为一样),并且只能通过它们所实现的接口访问它们的行为(构件就是这样)。
    代表现有产品的子系统
    如果现有产品是用来导出接口(即操作,也许会导出接收)的产品,但却隐藏了实施的所有细节,就可以在逻辑视图中将该产品建模为子系统。您可以用子系统表示系统所使用的产品,例如:
    通信软件(中间件)。 数据库访问支持(RDBMS 映射支持)。 应用程序专用产品。 某些现有的产品,如类型集合和数据结构(例如,栈、列表、队列)最好用包来表示,因为它们所展示的不仅仅是行为。既重要又有用的是包中的特定内容,而不是包本身,包不过是一个容器而已。
    对于常用的实用程序(如数学库),如果它们只导出接口,就可以将其表示成子系统,但这是否有必要或有意义,还要取决于设计人员对建模对象性质的判断。子系统是面向对象的构造,它们不仅是分类器,还是包:子系统可以具有实例(如果设计人员作出这样的指定)。通过 UML,也可以在作为构造型类的实用程序(该实用程序没有实例)中建立多组全局变量和过程的模型。
    当定义子系统来代表产品时,还要定义一个或多个接口来表示产品接口。
  3. 子系统依赖关系限制:
    子系统与包在语义上具有差异:子系统是一种通过一个或多个它所实现的接口来提供行为的包。包并不提供行为;它们只不过是用来容纳提供行为的对象的容器。
    之所以要使用子系统而不使用包,是因为子系统完全封装自己的内容,只通过自己的接口提供行为。其好处在于,与包不同,只要子系统的接口保持不变,就可以完全自由地更改子系统的内容和内部行为。另外,子系统还提供了一种“可替换的设计”元素:任何两个实现相同接口的子系统(或类,就此而论)都可以互换。

2.2 使用

可以通过多种互补的方法来使用子系统,将系统分为若干个单元,这些单元:
可以独立预定、配置或交付 可以独立开发(只要接口保持不变) 可以在一组分布式计算节点上独立部署 可以在不破坏系统其他部分的情况下独立地进行更改 此外,子系统还可以:
将系统分为若干单元,以提供对关键资源的有限安全保护 在设计中代表现有产品或外部系统。

2.3 规则

为确保子系统在模型中是可互换的元素,需要执行以下几条规则:
子系统不应暴露自己的任何内容(即,子系统所包含的元素都不应有“公有”的可见性);子系统外部的元素都不应依赖于子系统内部特定元素的存在。 子系统只应依赖于其他模型元素的接口,因此它不直接依赖于子系统外部的任何特定模型元素。例外情况是,许多子系统共享一组类定义。在这种情况下,这些子系统将“导入”包含公共类的包中的内容。这一操作只应对位于构架低层的包执行,并且只能是为了确保必须在子系统之间传递的公共类定义保持一致。
以下显示了子系统和包的依赖关系的示例:

设计模型中子系统和包的依赖关系。

2.4 子系统与其相关名词的界定

功能是使用角度下的定义,主要指特定场景下的输入及其输出,通常来说,一个系统会有多个功能。
系统是一个可以独立存在的完整实体,由一组完成特定任务的功能组成。
子系统顾名思义,它也是一个系统,也就是说仍然是完整的实体。系统和子系统的概念是相对的,当作为另一个系统的一部分时,系统就成为一个子系统。
模块和系统、子系统一般情况下没有本质区别,但是如果模块不能必须配合系统的其它部分才能工作时则不称为系统。

3. cpu

cpu : 在cgroup中,并不能像硬件虚拟化方案一样能够定义CPU能力,但是能够定义CPU轮转的优先级,因此具有较高CPU优先级的进程会更可能得到CPU运算。
通过将参数写入cpu.shares,即可定义改cgroup的CPU优先级 - 这里是一个相对权重,而非绝对值。当然在cpu这个subsystem中还有其他可配置项,手册中有详细说明。

4. cpusets

cpusets : cpusets 定义了有几个CPU可以被这个group使用,或者哪几个CPU可以供这个group使用。在某些场景下,单CPU绑定可以防止多核间缓存切换,从而提高效率

5. memory

memory : 内存相关的限制

6. blkio

blkio : block IO相关的统计和限制,byte/operation统计和限制(IOPS等),读写速度限制等,但是这里主要统计的都是同步IO
net_cls, cpuacct , devices , freezer 等其他可管理项。

恒川赠书活动

恒川赠书活动第三期:
在这里插入图片描述

618,清华社 IT BOOK 多得图书活动开始啦!活动时间为2023年6月7日至6月18日,清华社为您精选多款高分好书,涵盖了C++、Java、Python、前端、后端、数据库、算法与机器学习等多个IT开发领域,适合不同层次的读者。全场5折,扫码领券更有优惠哦!

特惠购书查看详细

抽奖活动:

  1. 《 Spring Cloud微服务快速上手 》
    在这里插入图片描述

  2. 《 Flask Web全栈开发实战 》在这里插入图片描述

  3. 《 项目驱动零起点学Java 》《 HTML5+CSS3+JavaScript从入门到精通(微课精编版)(第2版)》
    3. 《 项目驱动零起点学Java 》

  4. 《 项目驱动零起点学Java 》
    在这里插入图片描述

  5. 《 Python从入门到精通(微课精编版)》
    在这里插入图片描述

本次活动一共赠书3本,评论区抽取3位小伙伴免费送出!!
参与方式:关注博主、点赞、收藏、评论区评论 “ 人生苦短,我爱Python!”(切记要点赞+收藏,否则抽奖无效,每个人最多评论三次!!!)
活动截止时间:2023-06-14 21:00:00
通知方式:私信通知 (上述本书里面选一本)


如果这份博客对大家有帮助,希望各位给恒川一个免费的点赞👍作为鼓励,并评论收藏一下,谢谢大家!!!
制作不易,如果大家有什么疑问或给恒川的意见,欢迎评论区留言。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/638855.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

回收旧物系统平台开发的功能

1、定位服务 为了方便用户寻找最近的废品回收点,小程序应该提供位置服务和导航功能。 2、垃圾分类知识普及 用户可以查看所有垃圾分类知识,每种物品属于哪一个类型的垃圾分类。一目了然。相当于一本活字典,用户可以随时翻看查阅垃圾分类的…

人工智能(pytorch)搭建模型11-pytorch搭建DCGAN模型,一种生成对抗网络GAN的变体实际应用

大家好,我是微学AI,今天给大家介绍一下人工智能(pytorch)搭建模型11-pytorch搭建DCGAN模型,一种生成对抗网络GAN的变体实际应用,本文将具体介绍DCGAN模型的原理,并使用PyTorch搭建一个简单的DCGAN模型。我们将提供模型…

java+openlayer实现大气污染扩散模拟反演

一、模拟参数及效果 二、应用背景 大气污染是当今社会面临的一个重要问题。随着工业化和城市化的进程,大气污染问题变得越来越严重。为了更好地应对这个问题,许多科学家和研究人员开始探索大气污染扩散反演技术。 大气污染扩散反演技术是一种通过数学模…

给软件测试人的一封信,全网最佳“指路明灯“

一、一招鲜吃遍天下 你需要有一个核心技能。这个技能至少达到远超你的同事(包括开发岗位的同事的)平均水平。最好达到业界领先水平,且这个核心技能需要不断打磨提高。比如,我选择的核心技能是使用Python写代码。这个核心技能可以…

3.2 基于Java配置类整合SSM框架实现用户登录

一、基于Java配置类整合SSM框架实现用户登录 1、创建Maven项目 Maven项目 - SSMLoginNew 单击【Finish】按钮 2、添加相关依赖 在pom.xml文件里添加相关依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache…

Kubernetes 1.27 加快 Pod 启动速度

如何在大型集群中加快节点上的 Pod 启动&#xff1f;这是企业集群管理员常常会面临的问题。 这篇博文重点介绍了从 kubelet 一侧加快 Pod 启动的方法。此方法不涉及通过 kube-apiserver 由 controller-manager 创建 Pod 所用的时间段&#xff0c;也不包含 Pod 的调度时间或在其…

电脑最牛逼的截图方式

1.电脑桌面上空白的地方新建一个文本文档&#xff0c;将后缀名修改为bat&#xff0c;截图如下&#xff1a; 2.右键点击该文档编辑&#xff0c;在编辑界面输入start snippingtool&#xff0c;点击保存之后关闭该文档。 3.双击该文档&#xff0c;在模式里面选择响应的截图方式即可…

MySQL IDE与pymysql模块

一、IDE工具介绍 生产环境还是推荐使用mysql命令行&#xff0c;但为了方便我们测试&#xff0c;可以使用IDE工具 在此我们推荐使用Navicat软件或pycharm来连接数据库,这样就能更详细直观地查询数据 掌握&#xff1a; #1. 测试链接数据库 #2. 新建库 #3. 新建表&#xff0c;新增…

2023 年程序员高考试卷!你能答对几个?

又是一年高考季&#xff0c;一起来做做“程序员们的高考试卷”&#xff0c;压压惊吧~ 2023年普通高等学校招生全国统一考试 程序员的高考试卷&#xff08;A卷&#xff09; 考生类别&#xff1a;码农 1、程序员A&#xff1a;借我1000元吧。 程序员B&#xff1a;给你凑个整数…

Linux基础知识点2

Linux基础知识 适合有Linux基础的人群进行复习。 禁止转载&#xff01; 文件管理与常用命令 Linux的文件的组成部分&#xff1a; 文件名、inode(i节点)和block(真正存数据的区域)。 查看某个文件的属性&#xff1a; ls -lh #可看到有类似”-rw-r--r--”的属性符号 …

轻松来自实力,亚马逊云科技助力边界智能应对业务高峰值数据考验

边界智能&#xff08;Bianjie.AI&#xff09;是2016年创立于上海的国家高新技术企业和专精特新企业&#xff0c;同时也是以香港为全球总部、服务全球的区块链技术创新团队。公司专注于区块链技术支持的下一代互联网应用服务&#xff0c;自主研发了跨多条联盟链的分布式应用服务…

STL入门 + 刷题(下)

&#x1f442; Raindrops (Intl. Version) - Katja Krasavice/Leony - 单曲 - 网易云音乐 &#x1f442; Rush E (Playable Version) - Sheet Music Boss - 单曲 - 网易云音乐 &#x1f442; 最美的瞬间 - 真瑞 - 单曲 - 网易云音乐 &#x1f442; 你可别卷了 - SipSu小口酥…

CTF Crypto --- orz!

文章目录 题目解题过程 题目 from Crypto.Util.number import * from gmpy2 import *flag bxxx t len(flag)//3 part1 bytes_to_long(flag[:t]) part2 bytes_to_long(flag[t:2*t]) part3 bytes_to_long(flag[2*t:]) q getPrime(1024) p next_prime(q) n p * qo getPr…

面试必备,29个Java面试必考点、1000多道Java面试题

马上金九银十招聘旺季就到了&#xff0c;不知道大家是否准备好了&#xff0c;面对金九银十的招聘旺季&#xff0c;如果没有精心准备那笔者认为那是对自己不负责任&#xff1b;就我们Java程序员来说&#xff0c;多数的公司总体上面试都是以自我介绍项目介绍项目细节/难点提问基础…

文献下载神器:文献党下载器使用方法

文献党下载器是一款文献资源整合平台&#xff0c;把知网、万方、维普、超星/读秀、Web of Science、Elsevier&#xff08;ScienceDirect&#xff09;、Wiley 、SpringerLink、EI&#xff08;工程索引&#xff09;、IEEE&#xff08;电气电子工程师学会&#xff09;、Taylor &am…

ESP32-C3系列模组简介

ESP32-C3是一款安全稳定、低功耗、低成本的物联网芯片&#xff0c;搭载RISC-V 32位单核处理器&#xff0c;为物联网产品提供行业领先的射频性能、完善的安全机制和丰富的内存资源。 嵌入式智能终端、无线WIFI技术以及Internet的广泛应用必将使家居控制变得更加自动化、智能化和…

基础软件加速自主创新,openGauss成就业务“新箭头”

不久前&#xff0c;想必业界都注意到了MetaERP横空出世的消息。作为企业经营的核心系统&#xff0c;MetaERP突破外部封锁&#xff0c;实现完全自研替代&#xff0c;是华为有史以来牵涉面较广、复杂性较高的项目。这其实是国产基础软件迅速崛起的一个缩影。 基础软件产业是关系…

element-plus vue 错误汇总

input 无法输入0.01 element ui input 无法输入0.01 一输出0.0就报错&#xff0c;是因为写成了v-model.number&#xff0c;改成v-model即可。 <el-input v-model.number"formData.reduceMoney"class"input200"type"number"focus"discou…

C#开发的OpenRA游戏之建造物品的窗口1

C#开发的OpenRA游戏之建造物品的窗口1 前面已经分析了基地工程车的创建和移动,当玩家把基地工程车移动到合适的位置,就会进行部署基地,也即是选择一个离矿场比较近的位置,因为这样做可以提高采矿的速度,减少采矿车的运输时间。 接着下来,虽然基地是建立了,但是还需要创…

HybridCLR 最佳实践,老项目集成热更(战棋项目)

文本介绍了老项目使用HybridCLR 集成热更的过程 从项目结构调整&#xff0c;代码调整&#xff0c;打包&#xff0c;热更测试&#xff0c;跑完HybridCLR所有流程 先看效果&#xff08;安卓&#xff09; 源码及资料领取方式私信&#xff1a;领取资料&#xff1a;HybridCLR战棋热更…