learn more
Toggle navigation
learn more
主页
About Me
linux
docker
mysql
elk
归档
标签
容量规划,架构优化,运维的理解
2020-10-30 11:07:25
629
0
0
wang2020
## 容量规划 ``` 概述 核心:成本和性能 作用 判断现有系统规模还可以再承载多少流量 对于新增的流量,采购设备时给予指导,花最少的钱办同样的事 流量切换时可以量化 优化服务规模 目标 节省成本 节省人力 前提条件 多少业务,业务量是多少,对应到各个系统的调用量 查询量/数据量 如果出现应用故障,业务的影响面是多少 不同的业务量下,给出容量规划,帮助进行业务评估 步骤 明确目标 收集指标 趋势预测 容量部署 资源 资源 问题 异构机器 有些机架电力不限 有些机架网络不限 资源 CPU 内存 磁盘 容量/DiskIO 网络 同一个服务不同请求所需要的资源不一样 服务类型 计算密集型:CPU 对于计算型业务,如游戏行业,其主要业务就是游戏引擎的计算,主要用CPU支撑; 数据密集型:数据密集型业务也称为DataIntensive,主要体现在大数据应用中,比如著名的搜索引擎就是从海量数据中找到有用信息,通常这类业务非常占用内存资源。缓存也是数据密集型业务,如squid、varnish,典型的应用就是cdn,cdn本质上就是个cache,它将请求的结果缓存到内存中,避免将请求转发到源站。 IO密集型:网络、磁盘 存储型业务,如百度网盘,其主要业务就是存储用户的文件,计算机资源的度量就是存储空间; 对于流量型业务,如优酷,它的主要业务就是通过网卡传输视频文件,主要就是消耗网卡及网络带宽。 同一个服务不同请求或者不同服务不同请求之间所需要的资源差异有可能非常大 方法 离线方法 压力测试:QPS、TPS --- 数据模型 第一个维度,压测粒度 单机压测 单链路压测 多链路/全链路压测 第二个维度,压测接口及流量构造方式 线上流量回放 线上流量引流 流量模拟 第三个维度,施压方式 第四个维度,数据读写 --- A/B测试 在线方法 通过监控扩容 扩容的前提是压力趋近于模块的极限,如某模块每秒最大处理的请求数(qps)是300个,当实际qps接近于250左右时就要考虑扩容了 判断是否区域极限值的方法 在程序的日志文件中增加请求处理时间的字段,这样针对每个请求的处理时间我们便清楚了,如果任何页面的处理时间太长的话就要考虑扩容了。这里所说的处理时间长度没有固定的大小,还是要和业务结合, 大多数模块都会有请求超时的设置,例如某模块设置了请求的最大处理时间是30秒,超过30秒的请求会在日志中写入报错信息,一般会有warning、error或fatal等关键字,我们可以在监控日志中匹配这些关键字来统计单位时间内因超时而报错的请求数,当达到某个极限值时就表示离扩容不远了。 切线上流量,但是要希望一部分的用户体验 预测 基于当前应用的历史数据做预测 同类型的应用预测 最大值/最小值/平均值/分位数 传统容量规划 步骤 收集对未来项目需求的预测需要多少资源?这些资源什么时候需要,以及它们需要在什么物理位置? 使用我们几天拥有的最佳数据来计划明天 预测长度一般都是几个季度到几年 制定资源的采购,构建和分配计划 评审,并且批准这个计划 部署和配置对应的资源 缺点 不可靠性 耗时巨大,同时不够精确 基于意图的容量规划将服务的依赖和资源的参数用编程的方式记录下来,同时利用一个算法自动产生资源的配给方案,包括在哪个集群中将多少资源配置给哪个服务这些细节。 如何表述 抽象一:我需要50个CPU资源,必须在集群X, Y, Z中,为服务Foo使用 抽象二:我需要50个CPU的资源,在地理区域YYYY中的任意三个集群中,为服务Foo使用 抽象三:我想要满足Foo在每个地理区域的需求增长,同时保障N+2冗余度 抽象四:我们想要将Foo以99.999%的可靠度运行 表达产品意图的先导条件 依赖关系:依赖哪些基础服务,并且这些基础服务提供多大的延时。这些限制性条件,决定了应用服务部署的位置。 性能指标:相关性能指标信息需要通过压测获得 优先级:在资源受限的情况下,有限保证哪个服务哪种级别的服务 Auxon:容量规划服务 组件 数据信息:描述某个服务的规模化能力既可以通过压力测试获得,也可以从过去的性能数据中得出 每个服务的需求预测数据:描述了针对服务的需求预测信息。针对需求的预测信息推断资源使用量,但不是所有服务都能这样预测需求。 资源供给:提供基础资源的可用性。 资源价格:提供基础资源的成本信息。 意图配置信息:定义了每个服务,以及服务之间的依赖关系。 Auxon 配置语言引擎:把配置信息获取的信息,转换成机器格式,也就是Auxon求解器所需要的Protocal buffer格式 Auxon求解器:庞大的混合整型线性规划程序。这个程序可以在几百台甚至几千台机器上进行并行求解。 资源分配计划:结果输出 项目推广 设置期望值:既要满足客户基本需求,又做不到全部满足(避免对1~2个大型客户过度定制而失去了通用性) 识别合适的客户 争取客户支持 ``` ## 架构优化 高高可用,高高性能,高高并发 故障自我修复 业务逻辑清晰 服务架构单元结构合理 标准化 - 资产系统 - 配置管理系统 - 流程管理系统 - 监控系统 流程化 集成化 智能化 - CDN 国内网络分布主要南电信北联通,造成跨地区访问延迟大问题,对于有一定访问量网站来说,增加CDN(内容分发网络)层可有效改善此现象,也是网站加速的最好选择。CDN把网站页面缓存到全国分布的节点上,用户访问时从最近的机房获取数据,这样大大减少网络访问的路径。如果想自己搭建CDN,不建议这么做,因为什么呢?其实说白了,就是什么事别往运维上拦。CDN架构部署不复杂,影响效果的因素却很多,后期管理维护也比较复杂,想达到预期的效果确非易事,这是一个费力不讨好的活,最后老板还是感觉是你能力不足。建议找专做CDN的公司,费用也不贵,有抗流量攻击能力,效果也很好,运维也少很多事,何乐而不为呢! - 负载均衡 访问量较大的网站都会用到负载均衡,因为这是解决单台服务器性能瓶颈的最好办法。反向代理将请求转发给负载均衡器,负载均衡器根据算法(轮训、负载情况选择后端等)交给后端WEB服务处理,WEB服务处理完成后直接返回数据给反向代理服务器。负载均衡合理分配请求给后端多台WEB服务器,减轻单台服务器并发负载,并保证服务可用性。主流的负载均衡软件有LVS、HAProxy、Nginx。 - web服务 WEB服务是处理用户请求的,WEB服务处理效率,直接影响到访问速度,为避免这层因素造成访问慢,应对其进行调优,让WEB服务发挥到最佳状态。常见的WEB服务有Apache和Nginx。 - 动静分离 动静分离,顾名思义,是将动态页面和静态页面分离到不同服务器上处理,比如使用web是nginx,可以让fastcgi部署到单独一台服务器,专门解析php动态页面,静态页面默认由nginx处理,并做好缓存策略。再比如一个商城网站,会有大量的图片,可以考虑增加文件服务器组,将请求图片和上传图片的都交给文件服务器处理。文件服务器主流使用NFS,存在单点故障,可以DRBD+HeartBeat+NFS部署高可用,如果单台压力过大,考虑使用分布式文件系统,如GlusterFS、MooseFS等。 - 数据库缓存 运行维护首先需要有扎实的计算机相关知识,包括计算机系统架构,操作系统,网络技术等。通用应用方面需要了解操作系统、网络、安全,存储,CDN,DB等,知道其相关原理。并且对于计算机类工程师来说编程能力是很重要的,小到运维工具的开发大到大型运维系统/平台的开发都需要有良好的编程能力。运维工程师还要有一定的数据分析能力:能够整理、分析系统运行的各项数据,从中发现问题及找到解决方向。当然,要想进行运行维护,首先要对自己进行运维的东西有极其充分的了解,所以丰富的系统知识也是不可或缺的,包括系统工具、典型系统架构、常见的平台选型等;由于运维工程师的工作极其复杂并且设计范围较为广泛,所以综合利用工具和平台的能力也是要有的。当然,不仅要求工程师有以上的专业知识基础,对工程师的心理素质等各个方面的要求也是极为苛刻的。比如说时间管理能力,特别是碎片化时间的处理能力;沉稳的心态,面对紧急情况时需要处变不惊;沟通能力、团队协作,运维工作跨部门、跨工种工作很多,需善于沟通、并且团队协作能力要强;工作中需胆大心细:胆大才能创新、不走寻常路,特别对于运维这种新的工种,更需创新才能促进发展;心细,运维工程师是最高线上权限者,需要谨慎心细;主动性、执行力,能够主动学习国际国内的运维技术,并引入到工作中,提高运维的质量和效率等等。 - 数据库优化 这层在整个网站架构中起着主导型作用,直接决定用户体验,相对架构优化也比较复杂,具体请参考博文:《运维角度浅谈 MySQL 数据库优化》http://blog.jobbole.com/94633/ 核心思路:减少请求层,尽可能让前端层返回用户请求的数据,减少后端服务器访问频率,最重要是数据库层。。 ## 运维的理解 - 运行维护首先需要有扎实的计算机相关知识,包括计算机系统架构,操作系统,网络技术等。通用应用方面需要了解操作系统、网络、安全,存储,CDN,DB等,知道其相关原理。并且对于计算机类工程师来说编程能力是很重要的,小到运维工具的开发大到大型运维系统/平台的开发都需要有良好的编程能力。 - 运维工程师还要有一定的数据分析能力:能够整理、分析系统运行的各项数据,从中发现问题及找到解决方向。 - 当然,要想进行运行维护,首先要对自己进行运维的东西有极其充分的了解,所以丰富的系统知识也是不可或缺的,包括系统工具、典型系统架构、常见的平台选型等;由于运维工程师的工作极其复杂并且设计范围较为广泛,所以综合利用工具和平台的能力也是要有的。 - 当然,不仅要求工程师有以上的专业知识基础,对工程师的心理素质等各个方面的要求也是极为苛刻的。比如说时间管理能力,特别是碎片化时间的处理能力;沉稳的心态,面对紧急情况时需要处变不惊;沟通能力、团队协作,运维工作跨部门、跨工种工作很多,需善于沟通、并且团队协作能力要强;工作中需胆大心细:胆大才能创新、不走寻常路,特别对于运维这种新的工种,更需创新才能促进发展;心细,运维工程师是最高线上权限者,需要谨慎心细;主动性、执行力,能够主动学习国际国内的运维技术,并引入到工作中,提高运维的质量和效率等等。
上一篇:
内核参数优化
下一篇:
nginx 面试题总结
0
赞
629 人读过
新浪微博
微信
腾讯微博
QQ空间
人人网
提交评论
立即登录
, 发表评论.
没有帐号?
立即注册
0
条评论
More...
文档导航
没有帐号? 立即注册