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 Namespac...
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 绑定,另一方面则嵌入到某个 ...
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 来完成
Cloud Native Foundation - Go GC
Heap 管理 Allocator (向 OS 申请)初始化连续内存块作为 Heap Mutator 申请内存,Allocator 从 Heap 中未分配的区域中分割小的内存块 用链表将已分配内存连接起来 内存块元数据:大小、是否使用、下一个内存块的地址 Collector 会扫描 Heap,将不再被使用的内存设置为 unused 内存分配TCMalloc TC = Thread Caching page:内存页,大小为 8k,Go 与 OS 之间的内存申请和内存释放,都是以 page 为单位的 span:内存块,一个或者多个连续的 page 组成一个 span sizeclass:空间规格,每个 span 都带有一个 sizeclass,标记着该 span 中的 page 该如何使用 sizeclass - 8,16,32,48,64,80 … object:对象,用来存储一个变量数据的内存空间 span 在初始化时,会被切割成一堆等大的 object 如果 object 的大小为 16B,Span list 1 中的 span 为 8k,该 span 中的 page 会...
Cloud Computing - Region + Availability zone
Region 云计算厂商在某个地理位置提供的所有云服务的组合,是厂商对外提供云服务的基本单位和容器 绝大多数的云服务,通常都会按照 Region 进行部署 用户使用的所有云资源,都会隶属于某个 Region,通常在创建资源时确定 每个 Region 都会有个由字母数字构成的 Region 代号(Region ID or Region Code),一般为全局唯一 Region 的设立与分布,体现了云厂商的业务重点和地区倾向 不同 Region 之间的距离,一般为数百公里或以上 Region 的选址思路 人口稠密的中心城市 - 离用户和商业更近 相对偏远的地区 - 维护成本低 选择 Region 地理位置 尽可能地靠近应用所面向的最终用户 混合云架构(本地数据中心与云端互联) 混合云的专线接入,一般以同城或短距离接入为主(控制费用 + 提高线路稳定性) Region 之间云服务的差异 同一个云在不同的 Region,所能提供的服务和规模可能是不同的 Region 的服役时间,往往与 Region 内云服务的可用性有较大的关联 新 Region - 最新的硬件和云端服务 旧 Regi...
Cloud Native Foundation - Go Scheduling
线程加锁 线程安全 123456789// fatal error: concurrent map writesfunc unsafeWrite() { conflictMap := map[int]int{} for i := 0; i < 1<<10; i++ { go func(i int) { conflictMap[0] = i }(i) }} 锁 Go 不仅支持基于 CSP 的通信模型,也支持基于共享内存的多线程数据访问 Sync 包提供了锁的基本原语 原语 描述 sync.Mutex 互斥锁 sync.RWMutex 读写分离锁 sync.WaitGroup 等待一组 goroutine 返回 sync.Once 保证某段代码只执行 1 次 sync.Cond 让一组 goroutine 在满足特定条件时被唤醒 Mutex12345678910111213141516171819...















