自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(33)
  • 收藏
  • 关注

原创 Unity3D开发

Linda1987_mark yyyyoooorrrrkkkk1.世界层生成车辆和商品2.模拟器处于自动操作模式3.后端下发接口/api/Order{"warehouseID": 1,"licenseNO": "123","heatNO": 10,"grade": 1,"size": 2,"length": 3,"weight": 5,"pieceCount": 10,"date": "2021-12-15T02:22:04.354Z","shift"

2022-01-06 16:42:34 3308

转载 Docker EE企业版安装教程

企业需要 Docker 能实现私有化部署。这通常意味着 Docker 需要一个本地化部署方案,并且由企业自己掌控和维护。这还意味着角色和安全功能需要满足企业内部的组织结构,并且在安全部门的监管之下。同时还需要一份重要的售后支持协议。Docker 企业版(Enterprise Edition,EE)应运而生!Docker EE 是企业版的 Docker。其内部包括了上百个引擎、操作界面以及私有安全注册。用户可以本地化部署,并且其中包括了一份支持协议。上层架构如下图所示。Docker EE

2021-07-04 16:27:16 827

转载 Docker安全特性

Swarm 模式Swarm 模式是 Docker 未来的趋势。Swarm 模式支持用户集群化管理多个 Docker 主机,同时还能通过声明式的方式部署应用。每个 Swarm 都由管理者和工作者节点构成,节点可以是 Linux 或者 Windows。管理者节点构成了集群中的控制层,并负责集群配置以及工作负载的分配。工作者节点就是运行应用代码的容器。Swarm 模式包括很多开箱即用的安全特性,同时还设置了合理的默认值。这些安全特性包括以下几点。 加密节点 ID。 基于 TLS 的认证...

2021-07-04 15:41:04 342

转载 Docker安全

好的安全性是基于分层隔离的,Docker有很多分层。Docker 支持所有主流 Linux 安全机制,同时 Docker 自身还提供了很多简单的并且易于配置的安全技术。接下来主要介绍一些 Docker 中保障容器安全运行的一些技术。安全本质就是分层!拥有更多的安全层,就能拥有更多的安全性。下图展示了一部分安全技术。Linux Docker 利用了大部分 Linux 通用的安全技术。包括命名空间(Namespace)、控制组(CGroup)、系统权限(Capability),强制访问控制(MA

2021-07-04 14:59:59 493

转载 Docker Stack

大规模场景下的多服务部署和管理是一件很难的事情。Docker Stack 为解决该问题而生,Docker Stack 通过提供期望状态、滚动升级、简单易用、扩缩容、健康检查等特性简化了应用的管理,这些功能都封装在一个完美的声明式模型当中。在笔记本上测试和部署简单应用很容易。但这只能算业余选手。在真实的生产环境进行多服务的应用部署和管理,这才是专业选手的水平。幸运的是,Stack 正为此而生!Stack 能够在单个声明文件中定义复杂的多服务应用。Stack 还提供了简单的方式来部署应用并管理其完整的生

2021-06-18 17:31:09 1688

转载 Docker卷与持久化数据

数据主要分为两类,持久化的与非持久化的。持久化数据是需要保存的数据。例如客户信息、财务、预定、审计日志以及某些应用日志数据。非持久化数据是不需要保存的那些数据。两者都很重要,并且 Docker 均有对应的支持方式。每个 Docker 容器都有自己的非持久化存储。非持久化存储自动创建,从属于容器,生命周期与容器相同。这意味着删除容器也会删除全部非持久化数据。如果希望自己的容器数据保留下来(持久化),则需要将数据存储在卷上。卷与容器是解耦的,从而可以独立地创建并管理卷,并且卷并未与任意容器生命周

2021-06-18 10:10:25 330

转载 Docker overlay覆盖网络及VXLAN

在现实世界中,容器间通信的可靠性和安全性相当重要,即使容器分属于不同网络中的不同主机。这也是覆盖网络大展拳脚的地方,它允许创建扁平的、安全的二层网络来连接多个主机,容器可以连接到覆盖网络并直接互相通信。Docker 提供了原生覆盖网络的支持,易于配置且非常安全。其背后是基于 Libnetwork 以及相应的驱动来构建的。Libnetwork 是 CNM 的典型实现,从而可以通过插拔驱动的方式来实现不同的网络技术和拓扑结构。Docker 提供了一些诸如 Overlay 的原生驱动,同时第三方也可以

2021-06-17 16:54:48 670

转载 Docker Service Discovery

作为核心网络架构,Libnetwork 还提供了一些重要的网络服务——服务发现。服务发现(Service Discovery)允许容器和 Swarm 服务通过名称互相定位。唯一的要求就是需要处于同一个网络当中。其底层实现是利用了 Docker 内置的 DNS 服务器,为每个容器提供 DNS 解析功能。下图展示了容器“c1”通过名称 ping 容器“c2”的过程。Swarm 服务原理相同。...

2021-06-17 15:45:18 279

转载 Docker Macvlan

能够将容器化应用连接到外部系统以及物理网络的能力是非常必要的。常见的例子是部分容器化的应用——应用中已容器化的部分需要与那些运行在物理网络和 VLAN 上的未容器化部分进行通信。Docker 内置的 Macvlan 驱动(Windows 上是 Transparent)就是为此场景而生。通过为容器提供 MAC 和 IP 地址,让容器在物理网络上成为“一等公民”。下图展示了具体内容。...

2021-06-17 14:31:00 2526

转载 Docker单机桥接网络

最简单的 Docker 网络就是单机桥接网络。从名称中可以看到两点,单机意味着该网络只能在单个 Docker 主机上运行,并且只能与所在 Docker 主机上的容器进行连接,桥接意味着这是 802.1.d 桥接的一种实现(二层交换机)。Linux Docker 创建单机桥接网络采用内置的桥接驱动,而 Windows Docker 创建时使用内置的 NAT 驱动。实际上,这两种驱动工作起来毫无差异。下图展示了两个均包含相同本地桥接网络 mynet 的 Docker 主机。虽然网络是相同的,但却是两

2021-06-17 13:58:09 1007

转载 Docker网络简介

网络已经无处不在。每当基础设施出现问题时,被抱怨的通常是网络,很大一部分原因是,网络负责连接一切——无网络,无 APP!在 Docker 早期阶段,网络设计确实非常复杂,那时候配置网络几乎是一种乐趣。Docker 在容器内部运行应用,这些应用之间的交互依赖于大量不同的网络,这意味着 Docker 需要强大的网络功能。幸运的是,Docker 对于容器之间、容器与外部网络和 VLAN 之间的连接均有相应的解决方案。后者对于那些需要跟外部系统(如虚拟机和物理机)的服务打交道的容器化应用来说至关重要。

2021-06-17 11:41:10 159

转载 Docker Swarm

Swarm 是 Docker 官方提供的一款集群管理工具,其主要作用是把若干台 Docker 主机抽象为一个整体,并且通过一个入口统一管理这些 Docker 主机上的各种 Docker 资源。Swarm 和 Kubernetes 比较类似,但是更加轻,具有的功能也较 kubernetes 更少一些。Docker Swarm 包含两方面:一个企业级的 Docker 安全集群,以及一个微服务应用编排引擎。集群方面,Swarm 将一个或多个 Docker 节点组织起来,使得用户能够以集群方式管理它们。

2021-06-17 11:22:31 199

转载 Docker Compose

Docker Compose 与 Docker Stack 非常类似。它能够在 Docker 节点上,以单引擎模式(Single-Engine Mode)进行多容器应用的部署和管理。多数的现代应用通过多个更小的服务互相协同来组成一个完整可用的应用。比如一个简单的示例应用可能由如下 4 个服务组成。 Web前端。 订单管理。 品类管理。 后台数据库。将以上服务组织在一起,就是一个可用的应用。部署和管理繁多的服务是困难的。而这正是 Docker Compose 要...

2021-06-16 19:19:16 230

转载 Dockerfile

使用 Docker 中的docker image build 命令会读取 Dockerfile,并将应用程序容器化。Dockerfile 由一行行命令语句组成,并支持以 # 开头的注释行。例如:# Test web-app to use with Pluralsight courses and Docker Deep Dive book# Linux x64FROM alpineLABEL maintainer="nigelpoulton@hotmail.com"# Install No

2021-06-16 16:38:45 96

转载 Docker容器

容器是镜像的运行时实例。用户也同样可以从单个镜像上启动一个或多个容器。虚拟机和容器最大的区别是容器更快并且更轻量级——与虚拟机运行在完整的操作系统之上相比,容器会共享其所在主机的操作系统/内核。下图为使用单个 Docker 镜像启动多个容器的示意图。...

2021-06-15 18:14:47 2456

转载 Docker镜像

如果曾经做过 VM 管理员,则可以把 Docker 镜像理解为 VM 模板,VM 模板就像停止运行的 VM,而 Docker 镜像就像停止运行的容器;而作为一名研发人员,则可以将镜像理解为类(Class)。首先需要先从镜像仓库服务中拉取镜像。常见的镜像仓库服务是 Docker Hub,但是也存在其他镜像仓库服务。拉取操作会将镜像下载到本地 Docker 主机,可以使用该镜像启动一个或者多个容器。镜像由多个层组成,每层叠加之后,从外部看来就如一个独立的对象。镜像内部是一个精简的操作系统(OS),同

2021-06-15 16:52:13 316

转载 Docker引擎

Docker 引擎是用来运行和管理容器的核心软件。通常人们会简单地将其代指为 Docker 或 Docker 平台。如果你对 VMware 略知一二,那么可以将 Docker 引擎理解为 ESXi 的角色。基于开放容器计划(OCI)相关标准的要求,Docker 引擎采用了模块化的设计原则,其组件是可替换的。从多个角度来看,Docker 引擎就像汽车引擎——二者都是模块化的,并且由许多可交换的部件组成。汽车引擎由许多专用的部件协同工作,从而使汽车可以行驶,例如进气管、节气门、气缸、火花塞、排气

2021-06-15 15:18:10 148

转载 开发人员角度看docker

容器即应用!以 Linux 为例进行演示。示例中 Web 应用代码下载:https://pan.baidu.com/s/150UgIJPvuQUf0yO3KBLegg 提取码:pkx4

2021-06-15 14:46:42 136

转载 运维人员角度看docker

从运维的角度需要掌握 Docker 的镜像下载、运行新的容器、登录新容器、在容器内运行命令,以及销毁容器。当我们安装 Docker 的时候,会涉及两个主要组件:Docker 客户端和 Docker daemon(有时也被称为“服务端”或者“引擎”)。daemon 实现了 Docker 引擎的 API。使用 Linux 默认安装时,客户端与 daemon 之间的通信是通过本地 IPC/UNIX Socket 完成的(/var/run/docker.sock);在 Windows 上是通过名为 np

2021-06-15 13:35:56 359

转载 Docker存储驱动

Docker Storage Driver每个 Docker 容器都有一个本地存储空间,用于保存层叠的镜像层(Image Layer)以及挂载的容器文件系统。默认情况下,容器的所有读写操作都发生在其镜像层上或挂载的文件系统中,所以存储是每个容器的性能和稳定性不可或缺的一个环节。以往,本地存储是通过存储驱动(Storage Driver)进行管理的,有时候也被称为 Graph Driver 或者 GraphDriver。虽然存储驱动在上层抽象设计中都采用了栈式镜像层存储和写时复制(Copy-o

2021-06-15 10:47:13 650

转载 Docker的安装和升级引擎

1. 安装docker本机按照vmware16和ubuntu20在ubuntu里面安装docker,打开shell$ wget -qO- https://get.docker.com/ | sh获取并运行 Docker 安装脚本,然后采用 Shell 中管道(pipe)的方式来执行这个脚本。提示了无法获取 dpkg 前端锁 (/var/lib/dpkg/lock-frontend),是否有其他进程正占用它?采用以下命令先解锁,再执行上面的脚本sudo rm /var/lib/d.

2021-06-15 10:05:59 664

转载 Docker初步-Docker的历史

Docker的历史一种运行于 Linux 和 Windows 上的软件,用于创建、管理和编排容器。是在 GitHub 上开发的 Moby 开源项目的一部分。公司,位于旧金山,是整个 Moby 开源项目的维护者。Docker 公司还提供包含支持服务的商业版本的 Docker。...

2021-06-15 09:51:57 142

原创 编写可维护软件的不朽代码随想-11

编写简洁的代码代码坏味道是指隐含问题的代码风格。不留痕迹童子军军规:离开营地时,要让它比来时更干净。应用在软件开发中,表示一旦编写或修改了一段代码,就有机会进行小的改进,结果就是你让这段代码比之前更简洁、更具有可维护性。如何使用本原则1. 不要编写单元级别的代码坏味道: 过长的代码单元(第2章),复杂的代码单元(第3章),长接口的代码单元(第5章)。需要及时重构“坏味道”的代码。及时就是尽可能快,但必须在代码被提交到版本控制系统之前。在开发过程中是允许有少许违反的,一个...

2021-06-15 09:51:20 121

原创 编写可维护软件的不朽代码随想-10

自动化开发部署和测试在之前章节中有一个IsValid方法,检查银行账号是是否符合校验码要求,由于这种方法很容易出现代码错误,都会写一个短小的程序来测试验证此方法。

2021-06-11 14:55:26 183 4

原创 编写可维护软件的不朽代码随想-9

保持小规模代码库控制代码库增长,主动减少系统的代码体积。代码库是存储在一个仓库中的所有源代码的集合,可以独立地进行编译和部署,并且由一个团队进行维护。以大型代码库为目标的项目更容易失败项目体积和项目风险关系紧密,一个大型项目会导致大型团队、复杂的设计以及长时间的项目周期,会出现更复杂的沟通和协作,很难看清软件设计的整体情况,而且会出现大量的需求变更,这些都增加了质量下降、项目延期以及失败的可能性。大型代码库更加难以维护大型系统会出现更密集的缺陷如何使用本原则当其他条件都一样的

2021-06-11 14:51:13 91

原创 编写可维护软件的不朽代码随想-8

保持架构组件之间的平衡构建封装边界是设计软件架构的重要技能。原则:平衡代码中顶层组件的数量和体积。保持源代码中组件的数量接近于9,并且这些组件的体积基本一致。平衡的组件可以帮助定位代码,并且允许独立对组件进行维护。四种情况:1. 所有修改都发生在一个单独的巨大的组件中2. 大多数修改都发生在一个单独的巨大的组件,也有几个小组件存在3. 许多修改分散在多个组件中,多个组件,大小参差不齐。4. 对一两个范围有限的组件独立修改,体积比较一致的多个组件。平衡组件的好处:

2021-06-11 14:50:39 148 1

原创 编写可维护软件的不朽代码随想-7

架构组件松耦合有两种构建软件设计的方式:简单到明显没有缺陷;复杂到没有明显的缺陷。原则顶层组件之间应该做到松耦合尽可能减少当前模块中需要暴露给其他组件中模块的相关代码模块耦合度关注于单个模块对系统其他部分的暴露程度,组件耦合度关注的是一个组件中的模块,对其他组件中模块的暴露程度。如果从组件层面来考虑,相同组件中模块之间的调用会被认为是一个内部调用,但是如果从模块层面来考虑,就变成了模块之间的耦合。将组件级别的松耦合称为组件独立,与其相反的称为组件依赖。当发生组件依赖时,组件.

2021-06-11 14:50:05 153 1

原创 编写可维护软件的不朽代码随想-6

分离模块之间的关注点原则:避免形成大型模块,以便能达到模块之间的松耦合。不同的职责分给不同的模块,隐藏接口的内部实现细节。之前说的是代码单元层面,这里开始说模块层面。对应C#的类的概念。一个真实的案例,先说明类之间的紧耦合是什么样子,为何对导致可维护性问题。一个UserService类,位于某web应用程序的服务层,在开发过程中变得越来越庞大,最终违法了本章的原则。第一次迭代中,该类只有三个方法,如下...

2021-06-11 14:47:33 159 1

原创 编写可维护软件的不朽代码随想-5

保持代码单元的接口简单限制每个代码单元的参数不能超过4个。将多个参数提取成对象。为了保持代码的可维护性,需要限制参数的个数,避免使用过多的参数(也称为代码单元接口)之前的JPacman项目中,BoardPanel类的render方法,拥有许多参数的典型,此方法在一个由x,y,w,h表示的矩形中绘制一个方块以及方块的占有者(例如表示一个幽灵或一个豆丸)...

2021-06-11 14:42:54 149 1

原创 编写可维护软件的不朽代码随想-4

不写重复代码不要复制代码编写可重用的、通用的代码,调用已有的代码如果复制代码,就需要在多个地方修复BUG。举例一个管理银行账户的系统,通过Transfer类对象来表示钱在不同账户之间的流转过程。CheckingAccount表示银行提供的支票账户,如下...

2021-06-11 14:38:34 192 1

原创 编写可维护软件的不朽代码随想-3

编写简单的代码单元每个问题的内部都有许多更小的问题。原则:限制每个代码单元分支点的数量不超过4个评测复杂度的一个常用方式是计算一段代码中可能路径的数量,也就是分支数量,在C#中具体是if和switch语句。分支覆盖率:一个代码单元分支点的数量,就是覆盖所有分支点产生的分支路径的最小数量。执行路径:所有分支组合起来就是该代码单元的执行路径,也称为单元路径的最大数量。分支点的数量是路径的最小值,执行路径是所有路径的最大值,衡量复杂度的标准采用的是分支点数量+1,圈复杂度。没有任何

2021-06-11 14:33:32 117

原创 编写可维护软件的不朽代码随想-2

编写短小的代码单元代码单元的长度应<=15行,将长的代码分解成多个更短的代码单元;短小的代码单元易于理解、测试和重用。代码单元:可独立维护和执行的最小代码集合。例如在C#中,一个方法或者构造函数就是一个代码单元。短小的代码一般是只有一个职责,比如列举的例子有一个方法,根据URL中的一个客户标识,生成该客户的所有银行账户以及收支明细列表。方法体伪代码如下:{  处理一个HTTP GET请求  访问数据库并返回所需数据  银行账户的校验  拼接返回的JSON结果

2021-06-11 14:27:11 121 1

原创 编写可维护软件的不朽代码随想

初探谁写的这段代码?我实在受不了了!可维护性:系统可以被修改的难易程度。后面提到的SIG是一个软件管理咨询公司ISO 25010 将软件质量划分8个特征:可维护性,功能可适性,性能效率,兼容性,可使用性,可靠性,安全性,可移植性。软件的维护四种方式:纠正性维护(也就是发现修复BUG),适应性维护(比如操作系统升级或者使用的技术升级),完善性维护(也就是需求变更或者增加新需求),预防性维护(预防将来可能会产生的BUG)。重要性:可维护性低的代码会对业务造成严重影响:软件在交付使用后

2021-06-11 14:25:11 103

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除