提起运维,大家都会想到又苦又累,又不被人重视的网管,机房运维,认为这个工种很low,入门门槛低,做的事比较杂,从搬服务器上架到修打印机,修电脑,处理网络小故障等杂七杂八的活,究其原因,多年来小公司都把运维当做一种打杂的小工使。其实运维从分类可以分为很多专业领域,比如网络工程师,系统工程师,备份存储工程师,CDN工程师,数据库管理员,应用运维,运维开发,运维架构师等等岗位,本章暂不对运维岗位做过多解释,我就个人的经验,我是从运维实施、系统管理员、DBA最后到运维开发的,简单说说各大互联网公司对岗位的面试要求:
WEB篇:
1、负载均衡篇:熟悉常用的负载均衡技术,LVS,dpdk,Nginx等四层/七层负载均衡,除了硬件负载均衡设备F5,有搭建、维护并熟悉负载均衡原理;
2、Nginx 重要配置、优化及使用、与lua的结合,接入、降级、限流、隔离、熔断、动静分离、反向代理、负载均衡,反爬虫,黑白名单等 另Nginx 和Apache的比较;
3、TCP/HTTPs协议及三次握手,四次挥手,get/post的差异,协议头,跳转,常见返回码的含义200/30x/40x/50x等知识及导致返回码的可能故障原因,如果可能请详细了解TCP/TP协议内容;
4、web的优化,web 访问的流程,从浏览器-DNS-CDN-缓存(本地缓存,负载均衡层,缓存层,接入层,应用层,数据库层)-应用-数据库整个流程,需要陈述过程,并能解释调优排障的思路;
http 连接越快越好,越快建立连接越好,中间DNS解析, tcp握手都是可以优化的点
http 请求少并且小,减少请求的数量,请求的体积,比如 cookie的大小
解析html 的速度,dom树解析,js 执行和首屏渲染是串行的,页面渲染,把js放到body后面
加载页面,下载资源,利用上面的原则,尽量少的发http请求,比如图片,字体,以及js文件等等
网络篇:
网络抖动,网卡打满,大面积断网,网络丢包,网络劫持,接口响应超时等,常用网络故障排查的手段,工具等,如tcpdump/iftop/traceroute/netstat等
故障篇:
网络失败,业务异常(参数错误、业务逻辑处理错误,返回数据格式错误等下游业务不可用),机器故障
cpu 负载太高,内存溢出,磁盘打满,网卡打满,超时
监控快速反馈
监控:正面预防,快速发现、定位问题进行报警
降级:反向止损,遇到故障自动处理,降低损失
监控篇:
常规监控: zabbix 、Ganglia、Cacti、Nagios等
业务监控:业务指标的监控
调用链监控:CAT、zipkin、阿里鹰眼等
其他新兴监控: Prometheus open-falcon
日志监控:ELK等
另外时序数据库是监控领域比较火的技术,大家可以多研究一下
应用篇
Java,weblogic,tomcat,jetty等Java中间件,涉及jvm 的调优,监控,GC的调优,cpu高的诊断
dubbo spring cloud sprin boot sping 全家桶,微服务的搭建,部署,监控(调用链监控)鉴于微服务领域还不成熟,很多公司还没有实践,另外有必要了解K8S等编排工具
消息中间库 rabbitmq 、rocketmq,Kafka 等对比使用,如吞吐量、时延等优缺点,运维中遇到的问题及故障处置
redis 的架构,有单节点,官方cluster集群,复制,读写分离,分片等,业界使用的proxy 方案,对比优缺点,常遇到的故障及问题,再就是容灾,跨机房,业界的解决方案,一般是通过流复制
redis 和memcache的区别,优缺点
增加对项目的架构,集群规模,QPS/TPS等数据的认知
mongodb 集群的运维,分片集群的规模,运维监控,处理过的问题及优化,主要有cpu高,慢查询,占用内存高,夯死等问题
应用部署的问题,涉及发布,构建,编译等
大数据篇:
Hadoop 生态圈 hdfs,habase ,hive,mapreduse,zookeerer,kafka,tez,impla,spark等组件,zeppelin,kylin,侧重生产机器的规模,遇到的问题,踩到的坑,有的侧重原理
数据库篇:
MySQL oracle、简单了解,sql 语句的查询,索引的类型,数据库高可用架构,主从、双主、MHA架构、Proxy方案等,另外了解数据库中间件,例如mycat等
存储篇:
ceph 的搭建,对象存储的原理,各种存储(NAS/SAN/对象存储等)的优缺点及使用场景
公有云、私有云篇:
openstack ,zstack ,虚拟化 vm 的原理
docker 篇
docker的基本原理、编排工具k8s 的使用,k8s 的概念,pod ,网络的解决方案遇到的坑及解决方案,当然也要防止某些辣鸡公司套你方案
docker 自建仓库,docker file的使用
自动化运维篇
自动化运维工具的使用,ansible ,saltstack 等使用,
Django 的开发 cmdb/自动化部署,任务调度系统,数据库运维系统
CI/CD的构建,自动化发布,灰度发布,金丝雀发布,蓝绿发布等等
devops的概念及实施,对AIops的见解及作出的变革
开发篇:
shell 脚本 基础运维命令
python 开发 ,主要是web开发,表单的设计,数据库或者orm的设计,高并发,消息队列 restapi等 前端比较弱是运维的通病
salca 略了解,多用于大数据开发
go 略了解,如果熟悉并开发过项目,一定是加分项,求之不得;
面试篇:
个人自我介绍
目前的工作内容,负责的项目,遇到的故障,印象深刻的项目,遇到的挑战,遇到的棘手问题,自己负责过的项目,项目规模,集群规模,人数等等