首先把云架构可分为如下几层
1首先就是基础设施的云架构
1.1机房优先部署在自然灾害概率低的地方
1.2机房环境方面,配备空调消防设备 防止意外
1.3电源和网络的高可用,配备多条线路
1.4多机房部署
2物理主机层(维护成本高)
2.1存储和计算分离,避免磁盘故障而导致计算能力降低,同时还能降低存储成本。
2.2增加备用机器,保证计算节点高可用
2.3采用nas提升并发性能,特别是他的raid可提升性能和可用性
Nas:通过高速网卡和交换机提供高并发和高性能访问能力
Raid: 磁盘阵列 用两块磁盘组成 RAID 1,其中一块磁盘当作数据镜像磁盘。假如单个磁盘故障率为 0.1%,那么两块磁盘组成 RAID 1 后,整体故障率为 0.0001%。
2.4虚拟ip和心跳机制将两台主机做成双机互备模式
Iaas 层
主机虚拟化VMware、KVM、Xen 容器虚拟化
主机虚拟化 1可解决物理机时代高可用问题 资源隔离和安全
2相比物理机高可用,实现了热迁移和冷迁移
X 公司购买的云主机热备功能,是指利用虚拟机的 RDMA(Remote Direct Memory Access,远程直接数据存取)技术实时同步虚拟机 VM1 的内存数据同步到备用虚拟机 VM2 内,这个高可用技术叫“云主机热备”。
容器虚拟化
容器虚拟化技术是指利用 Linux 命名空间技术,在 Linux 系统里划分出多个互相隔离的运行环境,可以为每个运行环境单独分配资源。比如现在比较火的 Docker 便是使用了容器虚拟化技术。
1提升了程序执行效率
2kubernetes 让iaas可用性进一步提升
paas层
举个例子,假如你要在一百台 IaaS 上部署新版本 MySQL、Redis、MQ,通常有两种做法:
一种是登录到每台机器上挨个执行命令来安装;另一种是制作一个包含新版本基础组件的虚拟机系统镜像,替换现有镜像。
作用:主要是为了解决iaas基础组件的分发问题
缺点:paassdk如果出现问题影响业务稳定
Saas层
软件即服务
可用同城双活,异地备份,多云部署等降低单云机房的风险。
故障转移和恢复
三个方向
存储故障和转移 业务的故障和转移 网络的故障和转移
什么是主备切换
所谓主备切换,按主从关系划分的话,有狭义和广义之分。
狭义上的主备切换,有明确的主从角色划分,主节点承担了主要的集群管理工作,当主节点故障,从节点变成主节点,接管主节点的工作。这种主备切换比较适合有状态的系统,也就是有数据存储功能的系统,比如存储系统等。
广义上的主备切换,它没有明确的主从角色划分,任何一个节点发生故障,它的工作就会分配到其他任何一个正常节点上,不需要指定主节点。这种主备切换比较适合无状态的系统,也就是没有数据存储功能的系统,比如 http 服务。
主备切换在转移故障的时候,主要分三步:
第一步故障自动侦测(Auto-detect),采用健康检查、心跳等技术手段自动侦测故障节点;
第二步自动转移(FailOver),当侦测到故障节点后,采用摘除流量、脱离集群等方式隔离故障节点,将流量转移到正常节点;
第三步自动恢复(FailBack),当故障节点恢复正常后,自动将其加入集群中,确保集群资源与故障前一致。
存储系统的主备切换
NAS 存储系统中会用到一种叫 DRBD (Distributed Replicated Block Device,分布式复制块设备) 的技术。该技术能将存储节点的磁盘作为块设备,通过互相映射的方式实现互相备份。
通过Heartbeat 心跳检测机制 和Keepalived 实现
利用 Nginx、微服务框架等组件的侦测能力,就可以识别故障节点,并将其摘除,然后选择正常的节点重试出错的请求。
以 Nginx 为例,为了给后端服务做健康检查,我们可以在 Nginx 配置文件中添加如下配置:
复制代码
upstream test_web {
server 192.168.1.21:80;
server 192.168.1.22:80;
check interval=3000 rise=2 fall=5 timeout=1000 type=http;
}
在这些配置中,server 指令用于配置后端节点,check 指令用于配置节点的健康检查。在 check 指令后面有几个健康检查相关的参数:interval、rise、fall、timeout、type
高可用之熔断限流
熔断
那么,熔断的判断条件都有哪些呢?
熔断的判断条件往往跟系统节点的承载能力和服务质量有关,比如 CPU 的使用率超过 90%,请求错误率超过 5%,请求延迟超过 500ms, 它们中的任意一个满足条件就会出现熔断。
限流算法
限流算法主要有:计数器限流(实现简单,缺点流量抖动)、滑动窗口限流(缺点流量抖动)、令牌桶限流、漏桶限流(恒定速度,需要额外内存)。
其中,只有漏桶算法真正实现了恒定速度处理请求,能够绝对防止突发流量超过下游系统承载能力。不过,漏桶限流也有个不足,就是需要分配内存资源缓存请求,这会增加内存的使用率。而令牌桶限流算法中的“桶”可以用一个整数表示,资源占用相对较小,这也让它成为最常用的限流算法。
正是因为这些特点,漏桶限流和令牌桶限流经常在一些大流量系统中结合使用。比如秒杀系统中就同时使用了这两种限流算法。
KV 存储:etcd 和 Redis 高可用原理和部署方法
那 Redis 是如何做到高可用
它主要通过支持主从模式、哨兵模式、集群模式这三种模式,来满足不同业务特点和可用等级的需求。 其中,主从模式部署最简单,用得也最多,集群模式比较复杂,但可用性最高。
Redis 高可用原理
1存储数据更灵活,能节省很多开发成本
2支持原子操作和事务,可以确保操作数据时的准确性
3支持master slave 模式的数据备份
4故障转移方面,比memcached高
5可通过命令将内存数据持久化到磁盘
部署方法主从模式
适合业务初期并发量不高的场景
哨兵模式
比主从模式多了哨兵节点
适合读请求多于写请求的业务场景
集群模式
根据一致性hash算法将key分布在各个节点之上。
每个master后面跟若干个slave
可避免单个节点压力多大的问题
etcd 高可用原理
1支持HTTPS访问 划分命名空间 权限控制 可以有效保证数据安全
2etcd 是用golong实现的,简单配置后可运行
3提供http和grpc接口非常方便客户端使用
4支持订阅某个key下的数据变更,客户端实时收到通知并获取最新数据
5凭借raft协议保证集群稳定运行
部署方式
部署奇数节点
集群模式和代理模式