docker学习笔记(1)-|docker学习笔记(1)- 架构概述
微服务架构
微服务VS传统分层架构
文章图片
传统分层架构
优点
对于简单系统:
- 容易部署
- 容易测试
- 容易横向扩展
- 耦合度高
- 不易快速维护
- 启动慢,部署慢
- 模块变更引起的回归问题多
- 难以持续集成和部署
优点 对于复杂系统:
- 将一个庞大的系统分解成高内聚低耦合的组件
- 异构系统,不同team可自主选择技术栈,维护效率高
- 每个服务独立部署,易于持续集成和部署
- 服务体量小,启动快
- 增加了系统复杂性,分布式部署,需要实现进程间通信,需要处理分布式系统的复杂问题
- 分区数据库,一个事物需要更新不同微服务的数据库
- 测试复杂
- 部署监控复杂
文章图片
客户端访问不同微服务,这些服务又会调用其他微服务
- 多用于系统内部多组件之间通讯
- 微服务之间依赖关系错综复杂,维护成本高
- 容易出现重复模块
文章图片
所有请求都从API网关走
- 新的API使用通过注册到网关实现
- 容易统一审计监控
- 减少功能相同的重复模块数量
- 基于Linux内核的Namespaces、Control groups、Union file systems技术对进程进行封装隔离,属于操作系统层面的虚拟化技术,被隔离的进程独立于宿主机和其他进程,称为容器
- docker在容器的基础上,从文件系统、网络、进程隔离进行了进一步的封装,极大的简化了容器的创建和维护
虚拟机
文章图片
docker
文章图片
- 虚拟机提供一套虚拟的硬件,在其上安装操作系统和应用
- Docker容器不使用硬件虚拟化,运行在容器的应用程序接口和主机的内核直接通信
Docker | 虚拟机 | |
---|---|---|
启动速度 | 快 | 慢 |
复杂度 | 对基础设施依赖低 | 部署复杂度高,面临基础设施兼容性问题 |
运行性能 | 在内核中实现,性能接近原生部署 | 性能较差 |
可控性 | 依赖简单,与进程无本质区别 | 依赖复杂 |
体积 | 与业务发布版本大小相近 | 独立的操作系统,体积为GB级别 |
资源利用率 | 高 | 低 |
资源隔离 | 较弱 | 隔离性强 |
安全性 | 低 | 高 |
传统的容器只解决了容器执行的问题,而docker提供了一套构建->分发->执行的实现
文章图片
- 镜像:为了满足特定的用途,按照Docker规则制作的一个只读的模版,通过镜像来创建容器,通常镜像会基于其他镜像进行额外的定制
- 容器:从镜像创建的运行实例,可以使用docker API创建、运行、停止、删除容器。可以将容器连接到多个网络、添加存储到容器、基于容器当前状态构建新的镜像
- 仓库:存放docker镜像的地方,是docker镜像分发、部署的关键
文章图片
docker使用C/S架构,客户端通过API与Docker daemon通信,进行构建、分发、执行的工作
Docker daemon 监听Docker API请求,管理镜像,容器,网络,数据卷等。还可以同其他daemon进行通信来管理集群服务
Docker client 是用户与Docker交互的主要方式,可以通过docker命令的形式,也可以通过restful API的形式与一个或多个daemon进行通信
Docker registries 【docker学习笔记(1)-|docker学习笔记(1)- 架构概述】主要用于存放镜像,可以使用公有的docker hub,也可以搭建私有仓库,类似于github管理代码
推荐阅读
- 实时增量学习在云音乐直播推荐系统中的实践
- zbh的协程学习总结
- 使用Docker镜像构建Go应用的实现方法
- 微服务学习|Nginx学习笔记
- 微服务学习|Redis6学习笔记(上)
- 微服务学习|Docker学习笔记
- #|《Effective Modern C++》学习笔记 - Item 29: 移动操作的“坑点”(它们可能不存在,开销不小或不会被调用)
- flutter学习|flutter+Dart类的创建(六)
- 『现学现忘』Docker相关概念|『现学现忘』Docker相关概念 — 6、虚拟化技术分类
- 深度学习|一文理解深度学习框架中的InstanceNorm