「阿里云运维架构实践秘籍」
云计算只是一个概念,阿里云则是云计算的落地实现。云计算是面向广大用户的,对应的是一个分布式云管控平台,具有稳定性、可弹性扩展、安全性、低成本、易用性等有点。从技术角度看,云平台是虚拟化、分布式、自动化的综合类平台。
云端选型
云产品
云计算带来的运维变革
- 人工阶段:人工完成运维
- 脚本及工具阶段:对于重复的事情通过脚本和工具完成
- 平台化阶段:用平台界面智能化操作完成日常操作
- 智能化阶段:自动扩容、故障自愈、AIOps
云计算带来的技术架构变革
- 单机架构阶段:IOE架构
- 集群架构阶段:采用虚拟的VIP技术
- 分布式架构阶段
- 微服务架构阶段
软件技术选型
- 硬件相关,嵌入式相关,C/C++
- Java/C#
- 胶水语言:Python
- 快速构建语言:PHP
- 高并发语言:go
- 前后端语言:Javascript/Node.js
系统技术选型
云端网络的选型策略
- 网段
- 网卡
- 网络隔离
- 网络功能
- 网络实践
入网请求选型的方法
- SLB网络
- 公网IP
- 弹性EIP
- DNAT
出网请求选型的方法
- 公网IP
- 弹性EIP
- SNAT
WEB服务器选型考虑
- 稳定性
- 性能
- 对负载均衡功能的支持
- 前端静态数据缓存
- 丰富的插件及支持灵活的二次开发
负载均衡的选型考虑
- LVS
- 工作在网络的2、3、4层,仅作分发之用,资源消耗极低、抗负载能力极强
- 内核集成,没有复杂配置项
- 对几乎所有应用做负载均衡
- 云端ECS不支持LVS部署,不支持7层应用
- 不适合中小型应用
- Nginx
- 支持4层和7层应用
- 功能丰富、技术成熟
- 会话保持功能弱
- 对后端的健康检查只能通过端口来进行
- Haproxy
- 专注4、7层负载均衡,功能较少
- 会话保持能力强
- 阿里云SLB
云端存储的类型
- 块存储
- 云盘的备份
- 云盘的性能
- 共享块存储
- 共享文件存储
- 对象存储
云端数据库选型
数据库的分类
- 数据库的分类以及选型依据
- CAP定理
- 一致性
- 可用性
- 分区容错性
- ACID模型
- 原子性
- 一致性
- 隔离性
- 持久性
- BASE模型
- 基本可用
- 软状态
- 最终一致性
- 数据库的分类
- 关系型数据库
- 非关系型数据库
- CAP定理
- 常见热门数据库
数据库选型
- 业务需求主要对应的是软件代码层面的架构及规划
- 运维架构层考量及规划
- 硬件及基础环境部署
- 数据库安装配置及优化
- SQL语句优化
- 日常备份及恢复
配置选项
业务指标
- PV
- UV
- IP
- 用户数
- 活跃用户数
- 在线用户数
- 并发用户数
性能指标转换计算
每秒处理请求的数量 = (80% * 总PV量) / (24h * 60m * 60s * 40%)
业务指标转换计算
- 下载类: PV = IP/活跃用户量*(2~5倍)
- 音视频类:PV= IP/活跃用户量* (5~10)
- 电商论坛类: PV=IP/活跃用户量 * (10~30)
用户数向并发用户数的转换计算
用户数 * 业务因子 (10% ~ 30%) = 活跃用户数
活跃用户数 * 业务因子 (10% ~ 30%) = 在线用户数
在线用户数 * 业务因子 (10% ~ 30%) = 并发用户数 ( 每秒请求数 )
云端服务器配置模型
PV量和服务器配置/RDS性能对应表
PV(万) | 服务器配置列表 | RDS配置列表 | 带宽需求 |
---|---|---|---|
1 | 1core1GiB * 1台 | 无 | 1Mbps |
10 | 2core4GiB * 1台 | 1core1GiB * 1台 | 1Mbps |
50 | 4core8GiB * 1台 | 2core4GiB * 1台 | 2~4Mbps |
100 | 8core16GiB * 1台 | 4core8GiB * 1台 | 3.5~11Mbps |
500 | 8core16GiB * 10台 | 8core16GiB * 1台 | 18.5~55Mbps |
1000 | 8core16GiB * 20台 | 16core64GiB * 1台 | 100~200Mbps |
服务器CPU/内存配置模型
资源配比 | 应用场景 |
---|---|
1:1 | 个人、官网等小型站点 |
1:2 | Web服务、web应用类 |
1:4 | 数据库类型 |
1:8 | 内存数据库、内存应用 |
带宽配置选型
带宽配置 = 每秒请求数量 * 每次请求传输的数据量
= (80% * 总PV量) / ( 24h * 60m * 60s * 40%) * XMbps
- 80%的应用默认选择按量带宽,即案量带宽是云端带宽选择的最佳实践
- 20%的应用选择固定带宽,前提是每天按量下载的费用合计超过带宽平均每天费用
云端实践
资源共享、按需使用时云计算区别于传统IT架构的关机及核心,也是云计算模式的最大优势。
云的本质优势在于分布式架构,所以在云端实践钟,不要把云主机当作硬件服务器来使用,也不要指望通过升级服务器配置来解决业务性能扩展问题。阿里云的架构核心也是分布式架构,去除对底层高性能硬件的依赖,在架构上考虑采用哦个海量低配硬件资源来满足庞大的业务需求。
云端负载均衡实践
- 1+1 > 2 经典架构,使用双机+SLB替代单机+EIP模式
- 单机+SLB架构
- 按需构建架构,不要为了分布式而分布式、为了架构而架构
- DNS负载均衡
- DNS负载均衡适用于大规模应用
- DNS缓存导致的负载均衡无效
- CDN是智能解析的最佳实践
- 跨地域分布式架构是智能解析的最佳实践
- 企业级WEB架构实战
- 通过代理+VPN提速跨国际网络访问
云端存储实践
云端块存储的实践技巧
- 提升云盘IO的技巧
- 分布式部署
- 夜间活动减少资源共抢
- 云盘的拆分及合并
- 云盘使用的技巧
- 对于云盘不应当分区
- 云盘不应当使用LVM
- 云盘的系统盘不做数据存储
- 云盘不要依赖ECS
- 云盘挂载要放到/etc/fstab,而不是rc.local
云端共享文件存储的五种方法
- Rsync文件共享
- Rsync+inotify文件共享
- NFS文件共享
- NFS的高可用:DRBD+KeepLived
- NFS的性能问题:使用分布式文件系统
- OSS文件共享实践
- 使用API接口/SDK来管理OSS
- 使用阿里云管理控制台管理OSS
- 使用图形化工具管理OSS
- 使用本地文件系统挂载管理OSS
- 使用FTP来管理OSS
- 使用命令行工具管理OSS
- OSS数据迁移的技巧
- OSSImport工具
- OSS在线迁移服务
- 跨区域服务
- 离线迁移
云端缓存实践
使用静态缓存提升网站性能
- 浏览器缓存:通过Nginx的expires
- 磁盘缓存:通过Nginx的proxy_cache
- 内存缓存:Varnish
- CDN实现动静分离
动态缓存的应用
- 数据库缓存
- 集中session管理
- 基于源IP的会话保持:Haproxy的balance source和Nginx的ip_hash
- 基于浏览器的cookie的会话保持
- 数据库存放session
- 动态缓存的集中session管理:Redis或者memcache
- 基于Tomcat集群的Session共享
- 基于NAS的本地磁盘文件保存Session共享
- 动态页面缓存
- 通过Nginx内置Proxy模块实现动态页面缓存
- PHP的动态页面缓存:fastcgi_cache
- 通过Nginx内置Memcache模块实现动态页面缓存
- 通过Nginx第三方模块实现动态页面缓存:memc-nginx和srcache-nginx
云端数据库实践
在数据库领域钟,垂直分区和水平分区是一种纵向、横向的架构扩展手段。水平拆分就是典型的分布式数据库应用,即把一个表的数据划分到不同的数据库,而且两个数据库的表结构一致,且两个数据库同时对外提供访问。纵向垂直分区就是针对数据库的库基本拆分,也就是说把数据分别放在不同的数据库中,然后把不同的数据库放到不同的服务器中。针对数据库读写操作的纵向垂直拆分,就是主从架构。在主从架构上基础上加上高可用,就是数据库的集群技术应用。
垂直拆库实践
主从的四种实践方案
- 经典主从架构:读写分离或者双机热备
- 主从架构的三种扩展应用:
- 一主多从架构
- 主主架构
- 主从连接的三种方式
- 代码配置文件:手动修改
- 集中配置:Zookeeper、Consul、Etcd
- 读写分离中间件:Mysql Proxy、MyCAT、RDS读写分离
- 主从的高可用架构
- 集群技术的应用实践
- Oracle RAC:解决高可用问题,但不解决数据安全问题
- MySQL Cluster:解决高可用和数据安全问题,但写入效率和性能低下
水平拆表实践
- 业务层水平分区拆表
- 哈希算法
- 范围
- 映射关系
- 数据库层次水平分区拆表
- 四大成熟分布式Sharding技术方案
- DRDS Sharding技术
- 分布式中间件Codis、Redis Cluster、阿里云Redis
- MongoDB Sharding技术
- 列数据库Sharding技术
- HBase
- 表格存储
云端运维实践
上云流程
- 前期技术调研,由售前和销售执行
- 运维团队规模和水平测试
- 计算资源规模、技术选型和架构拓扑
- 了解迁移限制:时间、运维文档、业务状况
- 项目启动:
- 确定干系人、指定通讯录
- 确定项目实施计划和实施周期
- 系统架构的梳理和评估
- SLB
- 带宽
- 主机选型
- 数据库选型
- 确定迁移方案
- 迁移实施
- 域名备案要先行
- 定制系统镜像
- 自动化运维工具的应用
- 迁移测试
- 上线切割
- Nginx反向代理将老用户请求引流到阿里云(302转向)
- 项目交付及后期监控运维
- 主要内容为文档的编写总结
- 包括系统软件架构、系统架构、迁移方案、运维实施配置文档、运维维护手册、故障处理手册
混合云实践
- 基于VPC+专线构建混合云架构
- RDS自建主从同步在混合云中的实践
- MongoDB副本集在混合云中的实践
- RabbitMQ+SLB高可用实践
- 云端自建DNS实践
- Redis主从+Sentinel+Consul+DNSMasq高可用实践
- MySQL主从+Consul+DNSMasq高可用实践
- DNS的高可用
云端运维架构的优化
- 优化ECS配置选型
- 优化云端网络架构
- 优化云端负载均衡
- 优化云端静态资源访问
- 运维管理
- 运维安全加固
- 执行运维规范
- 主机命名规范:业务名-用途-编号
- 开机自启规范
- 运维自动化
云端监控实践
物理机体系
- Shell/Python监控
- Nagios监控
- Nagios+Cacti监控
云计算体系
- Zabbix
- 阿里云云监控
- 驻云监控
容器体系
- Prometheus+Alertmanager + Grafana
- TICK技术栈
云端容器实践
云端容器技术的实践
- 云端容器资源编排技术的选择
- 结合K8S的DevOPS流程
- K8S集群的配置:8核16GiB或者8核32GiB
- K8S云端部署架构
- K8S插件之DNS
- 容器的Web管理控制台
- 利用Nginx实现K8S Dashbord认证的LDAP支持
- Racher对K8S的管理
- K8S业务应用+自建DNS实践
- K8S Master节点的高可用
- K8S Node 节点高可用
- K8S部署架构优化
- 自建K8S迁移阿里云K8S托管版+Rancher
- K8S监控实战
DevOps发展的阶段
- 人工阶段
- 硬件相关
- 系统相关
- 代码发布
- 脚本及工具阶段
- 运维自动化1.0: shell/python编程脚本实现自动化(Ansible)
- 运维自动化2.0:Rundesk
- DevOps阶段
- DevOps 1.0:引入开发的Jenkins+Gitlab和运维使用Ansible + Shell + Rundesk
- 运维自动化 3.0:建立CMDB + Workflow
- 运维自动化 4.0:平台化管理
- 账号管理
- 客户管理
- 项目管理
- 资源管理
- 系统管理
- 配置管理
- 任务管理
- DevOps 2.0
- GitLab + Jenkins + K8S + 微服务
- 引入JIRA+Confluence做项目管理和知识库管理
- 建立运维流水线CI/CD
- 智能化阶段
云端安全
面临的挑战
- 安全行业状态不容乐观
- 安全防御两极化
- 互联网安全意识堪忧
- 安全产品使用问题
- 云端安全环境复杂化的挑战
- 安全对云优势的冲击
面临的机遇
- 云计算、大数据将成为安全体系的基础核心保障
- 基础安全保障解决了大多数传统中小型企业的安全问题
- 利用大数据分析的优势发现潜在的入侵和高隐蔽性攻击威胁
- 推动云计算进一步发展
- 政策驱动叠加
常见攻击
入侵的途径:漏洞
- 信息收集
- 漏洞筛选
- 开始入侵
- 放置后门
- 清理痕迹
常见系统层攻击
- 木马
- Webshell
常见应用层攻击
- SQL注入
- 跨站脚本攻击
- 密码暴力破解
- 恶意注册
- WebShell
常见网络层攻击
- DDOS攻击
- SYN Flood
- UDP Flood
- ACK Flood
- ICMP Flood
- CC攻击
最佳防御方案
- 安骑士
- WAF
- DDoS高防IP
- 黑域
- 态势感知
安全架构策略
- 云平台架构模式
- 分布式架构是安全保障的基石
- 全面开启云产品的安全机制
- 基于VPC的企业级安全架构
云端运维安全实践
- 云端堡垒机的选择
- 运维用户管理
- 密码安全管理
- 防火墙安全管理
- 端口安全管理
- 开源WAF实践
- 数据安全传输的标准
- 安全性能调优
- 通过冷热备进一步保障云端数据安全性
- ECS数据冷备
- 创建云盘快照
- tar打包传输到线下IDC或者OSS
- RDS数据结合OSS的冷备
- ECS数据的热备:RSYNC
- RDS数据热备:混合云架构实践
- ECS数据冷备
- 加强安全巡检及安全培训管理
云端架构篇
演变历史
单机
分离Web和数据库
动静分离:静态缓存+对象存储
负载均衡
数据库缓存
垂直扩展
- 业务拆分
- 读写分离
- 分库分表
水平扩展
- 增加更多的Web服务器
- 增加更多的SLB
- 采用分布式缓存
- Sharding+NoSQL
架构的应用
电商架构应用
活动
- 弹性伸缩
- API+镜像+快照
商品图片
- 静态资源占流量的80%
游戏架构应用
- 分区,独立部署应用服务器和数据库服务器,不构建集群
- 页游与端游、手游的区别
- 不同游戏的后端技术区别
移动社交架构应用
- 海量的信息存储
- 分布式数据库
- 半结构化海里数据:OSS
- 海量的信息存储
金融架构应用
- 安全合规
- 与公共云差异明显
- 提供专享产品与服务