Cloud Computing - Container
历史
相辅相成:云承载着容器的运行,容器生态驱动着云的发展
初期的首要目标:Docker 容器在云上能够顺畅运行
帮助用户创建底层虚拟机集群,免去用户自己手动管理虚拟机的麻烦
随着容器应用的复杂化,容器编排成为了用户最迫切的需求
Kubernetes 赢得了编排框架大战,成为了事实标准
自建 vs 托管
由于云端的多租户特性,云平台会统一提供和托管 Master 节点,降低运维成本
只需要创建 Worker 节点,并为之付费即可
Kubernetes 的抽象设计非常出色,能够支持大量灵活的扩展
云厂商会让尽量多的 IaaS 和 PaaS 功能组件,渗透到 Kubernetes 的体系中
Cloud Service Operator
通过云服务来扩展 Kubernetes 的能力,并反过来使用 Kubernetes 来管理这些云服务
成熟:容器和云一体化架构
多集群
降低了建立 Kubernetes 集群的门槛,如果业务关联较小,可以为不同的业务创建单独的 Kubernetes 集群
全托管
容器服务实例,无需关心底层基础设施
适合场景:只有一个容器镜像,且为无状态,只想 ...
Cloud Computing - Cloud database
RDS
Relational Database Service
一般针对每个数据库引擎,都会有对应的服务:RDS for MySQL、RDS for PostgreSQL
同一个数据库按照不同的版本,会有比较严格的分支选项,在创建时指定
RDS vs 传统关系型数据库
编程接口 + 使用体验:几乎完全一致
云厂商会把功能、内部机制完整地保留下来,获得最大程度的兼容性
运维(开箱即用):智能化 + 自动化
读写分离
自动调优:自动发现性能热点,智能给出调整建议
云原生数据库
完全为云设计、充分发挥云的特点和优势
出于生态发展和降低学习难度的需要,绝大多数的云原生数据库仍然保留了 SQL 接口
不同领域的云原生数据库:关系型、键值型、文档型、图数据库、分析型
优势
更强的可扩展性
计算:可以利用云快速进行水平扩展
存储:基于原生设计的计算存储分离架构,可以支撑更大规模的数据量
更高的可用性和可靠性
原生机制:默认多副本高可用
基于原生数据同步机制的底层设计,可以方便地支持跨区域的实例复制(增强冗余 + 就近服务用户)
支持多种数据模型
兼容关系型数据库后,针对不同场景,推出不 ...
Cloud Computing - Object storage
概述
对象:任意二进制文件,包括结构化和非结构化的数据,可随时执行:上传、下载、修改、删除
对象存储 vs 云硬盘
访问接口和形式
云硬盘是挂载到虚拟机的虚拟硬盘,是通过实现 OS 的底层接口,作为虚拟机的块存储设备而存在
必须连接到相关的虚拟机,才能访问到云硬盘里面的数据
对象存储,本质上是一个网络化的服务,调用方主要通过高层的 API 或者 SDK 来和它进行交互
提供类似 HTTP 的网络接口来实现,独立性很强
S3FS 和 OSSFS 等工具可以通过模拟磁盘(基于对象存储的 API )并挂载到虚拟机
并没有改变对象存储是网络化服务的本质
云硬盘位于 IaaS 层,而对象存储位于 PaaS 层
KV 系统 vs 文件系统
Key 为存储对象的路径,Value 为存储对象的二进制文件
文件系统保存了更多的元数据(如:实现目录结构和目录操作),KV 系统的目录是通过共享前缀路径来模拟的
KV 系统的优劣
简化了对象存储的逻辑和设计,云厂商可以更聚焦于对象存储的分布式架构和服务高可用上
但对象存储中的"目录"操作的代价变高了
目录删除/重命名:需要 ...
Cloud Computing - PaaS
概述
PaaS 在 IaaS 的基础上,构建了很多关键抽象和可复用的单元,让用户更聚焦业务
优势
PaaS 更符合云的初衷,代表了一种完全托管的理想主义,代表对研发生产力的极致追求
核心优势:生产力(搭建 + 运维)
维度
PaaS 服务是否带有内生的运行环境(Web 服务带有编程语言运行时、数据库服务带有 SQL 执行引擎)
PaaS 存在的位置和范围,以及开放给用户的控制粒度 – Region / Availability zone / VPC
PaaS 服务是否有状态(数据属性)
PaaS 服务的虚拟机是否对外暴露
暴露虚拟机的 PaaS 服务,拥有更高的开放程度,与 IaaS 的结合也更加紧密,成本更低
不暴露虚拟机的 PaaS 服务,拥有更好的独立性和封装性 – 数据库服务
权衡
PaaS 的核心理念在于封装:封装提升了效率,但牺牲了灵活性
Cloud Native Foundation - Docker
历史
基于 Linux 的 Namespace 、Cgroup和 Union FS,对进程进行封装隔离,属于 OS 层的虚拟化技术
Docker 最初的实现是基于 LXC
从 0.7 以后开始移除 LXC,而使用自研的 Libcontainer
从 1.11 开始,使用 runC 和 Containerd
Docker 在容器的基础上,进行进一步的封装,极大地简化容器的创建和维护
Docker vs VM
特性
Docker
VM
启动
秒级
分钟级
磁盘
MB
GB
性能
接近原生
弱于
数量
单机上千个容器
几十个
容器标准
OCI - Open Container Initiative
Key
Value
Image Specification
如何打包
Runtime Specification
如何解压应用包并运行
Distribution Specification
如何分发镜像
主要特性
隔离性(Namespace)、可配额(CGroup)、便携性(Union FS)、安全性
Namespace
Linux Namespace 是 ...
Cloud Computing - Auto scaling
Design for Failure
核心思路:冗余 + 快速切换
宿主机
保证多个虚拟机不在同一个宿主机上,甚至不处于同一个机架上
提供物理分散分布的能力:AWS(Placement Group)、Azure(Availability Set)、阿里云(部署集)
可用区 - IDC
多可用区的实例部署(VPC 支持跨可用区)
区域
多区架构层面的相关预案
互联网业务:通过 DNS 导流,将域名解析到另一个区域的备用服务,底层数据依赖日常的跨区域的实时同步
多云 - 避免厂商锁定
Auto scaling
应对工作负载洪峰 + 在低谷期显著降低成本
虚拟机编组
将功能相同的多个虚拟机,作为一个单位来创建、管理和伸缩
弹性伸缩服务
根据指定的数量和扩缩容的规则,动态地创建和销毁虚拟机实例,协调虚拟机的生命周期
负载均衡器 - SLB
将流量均匀地、或者按照一定权重或规则,分发到多台虚拟机上
弹性伸缩服务 + 负载均衡器:适合处理无状态类的计算需求
Cloud Computing - Virtual network
VPC
Virtual Private Cloud:构建在云上,相互隔离,用户可以自主控制的私有网络环境
概念
描述
网段
私有网络的内部 IP 区段,通常采用 CIDR 表达
子网
私有网络的下级网络结构,一个私有网络可以划分出多个子网,阿里云将子网称为交换机
路由表
定义私有网络内流量的路由规则,每个子网都必须有一张关联的路由表(自动创建默认路由表)
网关
是对进出私有网络的流量进行把守和分发的重要节点
安全组
私有网络内虚拟机进出流量的通行或拦截规则,相当于虚拟机外层的网络防火墙
VPC 属于局域网,VPC 创建成功后,网段无法修改,至少要创建一个子网(交换机)(网段也不能变更)
可以建立跨可用区的私有网络高可用:让主力集群在一个可用区工作,备用集群在另一个可用区随时待命,按需切换
关键:提前规划 VPC 和各子网的网段在没有 VPC 的情况下创建虚拟机,一般会自动生成 VPC – 生产慎用!
VM
VM 通过弹性网卡(Elastic network interface,ENI)来与 VPC 连接ENI 一方面与 VM 绑定,另一方面则嵌入到某个 VPC ...
Cloud Computing - Cloud disk
概念
云硬盘:云虚拟机可以挂载和使用的硬盘(系统盘 + 数据盘)
将云端磁盘服务称为块存储(Block Storage),与 Linux 中的块设备相对应,可以格式化并施加文件系统
数据持久化 (非易失性存储):最少三副本,高可用,极少发生数据丢失
但不能完全依赖云硬盘的可靠性,应该进行额外的备份
云硬盘和传统硬盘的核心差异:绝大多数的云硬盘都是远程的 – 计算存储分离
在云端,虚拟机的硬盘大概率不在宿主机上,而是在专用的磁盘服务器阵列中
通过云数据中心内部的特有 IO 线路进行连接
IO 优化实例
对云虚拟机和云硬盘之间的网络传输,进行了软硬件层面的优化,进而充分发挥所挂载磁盘的性能
性能
性能指标:IOPS、吞吐量、访问延时等
最终性能受存储介质和容量大小共同影响
等级
存储介质
基于 HDD
性能一般,最高 IOPS 大概在数百左右,但成本低
基于 SSD / HDD
IOPS 在数千左右,通常为默认选项,综合发挥 SSD 的性能优势和 HDD 的容量优势
基于 SSD
IOPS 能够上万,有非常稳定的 IO 能力,用来承载关键业务或者数据库等 IO 密集型应用
基于 高 ...
Cloud Computing - Virtual machine
体系结构
计算存储分离
传统虚拟化
对单一物理机器资源的纵向分割,计算、存储、网络等能力都是一台物理机的子集,可伸缩性有较大局限
云虚拟机
云端有大规模的专属硬件和高速的内部网络
除了核心的 CPU 和内存仍属于同一台宿主机外,硬盘和网络等可以享受云端的基础设施
在可扩展性(硬盘、网卡、公网 IP)和故障隔离方面,有很大优势
名称
阿里云:ECS - Elastic Compute Service
AWS:EC2 - Elastic Compute Cloud
Azure:Virtual Machines
腾讯云:CVM - Cloud Virtual Machine
网络安全组
Network Security Group
网络安全组:一层覆盖在虚拟机之外的网络防火墙,能够控制虚拟机入站流量和出站流量
网络安全组并不工作在 OS 层,是额外的一层防护,非法流量不会到达 OS 的网络堆栈,不会影响 VM 的性能
网络安全组是一种可复用的配置,可以同时应用于多个虚拟机,软件定义网络
网络安全组非常灵活,规则会动态生效
类型规格类型
具有同一类设计目的或者性能特点的虚拟机类别:通用均 ...
Cloud Native Foundation - Go IO
阻塞 IO
阻塞:等待数据就绪
阻塞 + 同步
非阻塞 IO
非阻塞:等待数据就绪
轮询:效率不高
非阻塞 + 同步
IO 多路复用
(集中线程)阻塞 + 同步
当数据就绪后,集中线程会唤醒其他线程,阻塞的仅仅只是一个线程
select / poll
通过传参的形式来轮询 fd 列表,长度有上限(1024)
epoll
通过 mmap 将用户态的内存和内核态的内存进行共享,不再需要传参,解决了 fd 长度受限的问题
基于事件侦听,而非轮询wq: wait queue, rdlist: ready list, rbr: red black tree
Go HTTP:goroutine 与 fd 绑定
异步 IO
非阻塞 + 异步
异步:拷贝数据(Socket 缓冲区 -> 应用缓冲区)的过程也是由 Kernel 来完成