
对于一个开发人员来讲,可能运维并不是自己的职责所在。但是作为一名开发人员,却不能不了解自动化运维的整个流程。因为对于一个信息系统而言,开发和运维本质是一体的,尤其对于一些小公司来讲,可能运维人员本身就是开发人员抽空兼任的。
而自动化运维,本质上是介于开发和运维之间的,是运维和开发的交集,甚至很多时候都要写不少代码。因此,任何一个开发人员,都需要有自动化运维的相关知识。
一个了解好的开发人员,即使自己不做运维相关的工作,也能够知道自己在将项目交付给运维人员的时候,哪些东西是重要的,那些是必须配置的等等。然而在实际工作中,往往开发人员会给运维人员留下一些坑,一些只有他自己知道,而运维人员不知道的东西。导致运维人员自己试了很多次发现不行的时候,找到开发人员,开发人员研究了一下才会告诉他,在某某环境中必须用哪个端口之类的。这样不仅白白浪费了运维人员的时间,也增加了很多沟通的工作量。
反过来也是如此,一些现场的问题如果运维人员不能现场给出问题的定位。对于开发人员来讲是非常难以复现的。比如之前有某家企业,运维人员在客户现场发现问题。费了很大力气从客气的内网里面把日志导出来,发给开发人员,结果开发人员仔细研究了日志之后,发现是网不通的问题。开发人员显然是不可能知道为啥网不通的,搞不好是压根没连网线。
所以今天我们来聊一聊,对于一个程序员来讲,需要了解的自动化运维的那些事。
一、自动化运维的概念
随着信息时代的持续发展,初期的几台服务器已经发展成为了庞大的数据中心,单靠人工已经无法满足在技术、业务、管理等方面的要求。一个运维人员手工配置几台服务器还可能。配置几百上千台服务器那就累死了,还容易出错。那么就需要对运维工作进行标准化、自动化、架构优化、过程优化等。从面降低运维服务成本。其中,自动化最开始作为代替人工 *** 作为出发点的诉求被广泛研究和应用。
所谓自 动化运维,即在最少的人工干预下,结合运用脚本与第三方工具,保证业务系统7*24小时高效稳定运行 。这是所有业务系统运维的终极目标。
按照运维的发展成熟度来看, 运维大致可分为三个阶段 :
(1)依靠纯手工,重复地进行软件的部署与运维;
(2)通过编写脚本,方便地进行软件的部署与运维;
(3)借助第三方工具,高效地进行软件的部署与运维;
二、自动化运维需要解决的问题
自动化运维通常来讲,需要解决以下几个问题: 自动部署配置、风险事前预警、故障事中解决、和故障事后管理 。
三、自动化运维的常用工具
自动化运维常用的工具包括以下几种:
1、Ansible
ansible是基于Python开发的自动化运维工具,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。
ansible具有如下一些特性:
(1)模块化:调用特定的模块,完成特殊的任务。
(2)Paramiko(python对ssh的实现),PyYaml,jinja2(模块语言)三个关键模块。
(3)支持自定义模块,可使用任何编程语言写模块。
(4)基于python语言实现。
(5)部署简单,基于python和SSH(默认已安装),agentless,无需代理不依赖KPI(无需SSL)。
(6)安全,基于OpenSSH
(7)幂等性:一个任务执行一次和执行n遍效果一样,不因重复执行带来意外情况。
(8)支持playbook编排任务,YAML格式,编排任务,支持丰富的数据结构。
(9)较强大的多层解决方案role。
2、Chef
Chef是一个功能强大的自动化工具,可以部署,修复和更新以及管理服务器和应用程序到任何环境。
Chef 主要分为三个部分 Chef Server、Workstation 以及 Chef Client。用户在 Workstation 上编写 Cookbook。然后,通过 knife 命令上传到 Chef Server。最后,在 Chef Client 上面实施安装和部署工作。所以,对于 Cookbook 地编写在整个自动化部署中起到了重要的作用。
Chef Server 包含所有配置数据,并存储描述Chef-Client中每个Nodes的Recipe,Cookbook和元数据。配置详细信息通过Chef-Client提供给Nodes。所做的任何更改都必须通过Chef Server进行部署。在推送更改之前,它通过使用授权密钥来验证Nodes和Workstations是否与服务器配对,然后允许Workstations和Nodes之间进行通信。
Workstations 用于与Chef-server进行交互,还用于与Chef-nodes进行交互。它还用于创建Cookbook。Workstations是所有交互发生的地方,在这里创建,测试和部署Cookbook,并在Workstations中测试代码。
Chef命令行工具 是创建,测试和部署Cookbook的地方,并通过此策略将其上载到Chef Server。
Knife 用于与ChefNodes进行交互。
Test Kitchen 用于验证Chef代码
Chef-Repo 是一个通过Chef命令行工具在其中创建,测试和维护Cookbook的存储库。
Nodes 由Chef管理,每个Nodes通过在其上安装Chef-Client进行配置。 ChefNodes 是一台机器,例如物理云,云主机等。
Chef-Client 负责注册和认证Nodes,构建Nodes对象以及配置Nodes。Chef-Client在每个Nodes上本地运行以配置该Nodes。
Cookbook 是Chef 框架的重要基础功能之一。在 Chef Server 对目标机器做安装部署的时候,是通过 Runlist。而 Runlist 里面又包含了一个一个具体的 Cookbook,所以,最终对一个目标机器的部署任务就落到了 Cookbook 上。而对于 Cookbook 来说,其中包含了多个组件,我们可以将 Cookbook 简单地理解成一个容器或者可以理解为一个包,里面包含了 recipes、files、templates、libraries、metadata 等信息。这些信息用于配置我们的目标机器。
3、Puppet
puppet是一种Linux、Unix平台的集中配置管理系统,所谓配置管理系统,就是管理其里面诸如文件、用户、进程、软件包等资源。它可以运行在一台服务器端,每个客户端通过SSL证书连接到服务端,得到本机器的配置列表,然后根据列表来完成配置工作,所以如果硬件性能比较高,维护管理上千上万台机器是非常轻松的,前提是客户端的配置、服务器路径、软件需要保持一致。
客户端Puppet会调用本地facter,facter探测出该主机的常用变量,例如主机名、内存大小、IP地址等。然后Puppetd把这些信息发送到Puppet服务端;
Puppet服务端检测到客户端的主机名,然后会检测manifest中对应的node配置,并对这段内容进行解析,facter发送过来的信息可以作为变量进行处理;
Puppet服务器匹配Puppet客户端相关联的代码才能进行解析,其他的代码不解析,解析分为几个过程,首先是语法检查,然后会生成一个中间的伪代码,之后再把伪代码发给Puppet客户端;
Puppet客户端接收到伪代码之后就会执行,执行完后会将执行的结果发送给Puppet服务器;
Puppet服务端再把客户端的执行结果写入日志。
4、Saltstack
SaltStack是基于python开发的一套C/S自动化运维工具。部署轻松,扩展性好,很容易管理上万台服务器,速度够快。与服务器之间的交流,以毫秒为单位。SaltStack提供了一个动态基础设施通信总线用于编排,远程执行、配置管理等等。它的底层使用ZeroMQ消息队列pub/sub方式通信,使用SSL证书签发的方式进行认证管理,传输采用AES加密。
在saltstack架构中服务器端叫Master,客户端叫Minion。
在Master和Minion端都是以守护进程的模式运行,一直监听配置文件里面定义的ret_port(接受minion请求)和publish_port(发布消息)的端口。当Minion运行时会自动连接到配置文件里面定义的Master地址ret_port端口进行连接认证。
saltstack除了传统的C/S架构外,其实还有一种叫做masterless的架构,其不需要单独安装一台 master 服务器,只需要在每台机器上安装 Minion端,然后采用本机只负责对本机的配置管理机制服务的模式。
saltstack提供如下一些功能:
(1)远程执行:(批量执行命令)在master上执行命令时,会在所有的minion上执行。
(2)配置管理/状态管理 :(描述想到达到的状态,saltstack就会去执行)
(3)云管理(cloud):用于管理云主机
(4)事件驱动:被动执行,当达到某个值会自动触发
这四种自动化运维工具的比较如下,现在主流的基本上ansible和saltstack用的多一些:
程序员跳槽那些事,怎么正确选择下一家公司?
程序员想要跳槽,选择公司很重要。如果想要锻炼自己,去大一点的公司比较好,待遇也不错。工作中只有两种人,正在跳槽的人和准备跳槽的人,尤其是对于互联网行业来说,程序员跳槽是很正常的,频率是很高的。如何选择下一个公司,根据自己的需要来决定。但无论你想进入大公司还是小公司,你首先需要技术。
在大工厂和小工厂工作过的人很多,如果你是一名新生或工作年限短五年以内的,你必须找到在大工厂工作的机会。虽然很多大工厂都加班,但作为工人阶级的一员,为什么不加班呢?此外,大型工厂的规章制度和福利也比较完善,你可以看到很多成熟的系统和优秀的实践。在福利方面,大工厂的工资高于普通小公司,即使你离开一家大工厂,你可以很容易地得到加薪,然后去另一家大工厂,这些都是小公司没有的优势。
刚毕业时,无法进入大工厂,所以起点比同时进入大工厂的人低很多。在工资收入方面,那些没有进入大工厂的人,可能在社会上挣扎了很多年,才勉强达到月薪20000到30000,在大工厂工作一到两年就足够了。因此,如果你一毕业就进入一家大工厂,你的第一份工作将比同龄人有更高的收入、起点。这就是为什么建议毕业生咬紧牙关,在毕业前夕争取一个大工厂的理由。
虽然大工厂很好,但进入大工厂对个人资质、素质和技术水平都有一定的要求,不是每个人都有机会。这里提到的个人资历,如学历和毕业机构的水平。一般来说,大型工厂只接受学士或以上学位,学士或以下学位的新生将不予考虑。并将优先考虑具有良好学校水平的毕业生。学校和教育已成为强制性要求。即使你的能力很强,HR在筛选简历时也会看一看,你可能没有面试机会。
第一篇 生存法则
第1章 知己知彼,百战不殆
1.1 问题1:这个职业赚钱吗?赚多少钱
1.1.1 修炼第一层境界:剑指四方,试问天下谁与争锋
1.1.2 修炼第二层境界:世界如此之大,要学的东西很多
1.1.3 修炼第三层境界:最深即最浅,最浅即最深,不过如此
1.1.4 点评“修炼三层境界”
1.1.5 回答这个问题
1.2 问题2:大学毕业生找不到职业入口
1.2.1 工作经验都是什么经验
1.2.2 他们为什么面试的时候这么问?
1.2.3 程序员的笔试
1.2.4 回答这个问题
1.3 问题3:跨行业真的这么难吗?
1.3.1 跨行业最难的是什么
1.3.2 跨行业的入口——原来从事行业的业务知识
1.3.3 农民造出了飞机,为什么他还是农民
1.3.4 回答这个问题
1.4 秘诀:经营自己的优势
1.4.1 善于发掘和积累自己的优势
1.4.2 善于展示与利用自己的优势
1.5 点评“经营自我”
第2章 软件开发职业的误区
2.1 误区1:软件开发职业是青春饭
2.1.1 不必为30岁以后烦恼
2.1.2 岁以后照样可以编程序
2.1.3 多岁的程序员多的是
2.1.4 点评“青春饭”
2.2 误区2:做软件开发必须要加班熬夜的工作
2.2.1 程序员们熬夜工作的借口
2.2.2 常态加班的危害
2.2.3 控制好工作的一日时间表才是关键
2.2.4 “偏执与狂热”不等于加班加点
2.2.5 程序员的大脑与第二大脑
2.2.6 点评“加班熬夜”
2.3 误区3:开发一个软件产品一定是集团作战
2.3.1 几百人的公司其他人都在干什么
2.3.2 需要较全的人员配置的项目
2.3.3 坚信,只要是“人”做到的我就能做到
2.3.4 点评“集团作战”
2.4 误区4:程序员不是一般人
2.4.1 程序员的与众不同与平凡
2.4.2 程序员们就是一般人
2.4.3 点评“一般人”
2.5 误区5:存在“软件蓝领”岗位
2.5.1 “软件蓝领”是个“美梦”
2.5.2 “让程序员放弃思考?”是个“噩梦”
2.5.3 软件开发流程“理想”的“不理想”
2.5.4 “软件蓝领概念”忽略的东西
2.5.5 现实中的软件开发团队
2.5.6 点评“拧螺丝”
2.6 关于误区
第3章 程序员的“菜鸟心态综合症”
3.1 症状1:指望着公司里有一个老师
3.1.1 临床表现
3.1.2 治疗1:弄明白她为什么辞职
3.1.3 治疗2:理解公司的本质是什么
3.1.4 治疗3:要搞清楚你的主管是你的老板,他绝对不是你的老师
3.2 症状2:不知道怎么让自己前进
3.2.1 临床表现
3.2.2 治疗1:你只管低着头上山,暂时不要向山上看
3.2.3 治疗2:明知山有虎,偏向虎山行
3.2.4 治疗3:没有过不去的火焰山
3.2.5 治疗4:虚心使人进步,骄傲自满要不得
3.3 症状3:想做圈养的羊,不想做野生的狼
3.3.1 临床表现
3.3.2 治疗1:理解“丛林法则”生存的法则
3.3.3 治疗2:向掠食动物学习如何生存
3.4 症状4:缺乏自信,总对自己说No
3.4.1 临床表现
3.4.2 治疗1:生活取决于自己
3.4.3 治疗2:找到通往高楼的那扇门
3.4.4 治疗3:逐个排除你恐惧的理由
3.5 症状5:缺少幸福感,内心总在跳跃
3.5.1 临床表现
3.5.2 治疗1:比一比到底谁最幸福
3.5.3 治疗2:要努力进取也要找到幸福的理由
3.6 症状6:困兽心态,焦躁与不安
3.6.1 临床表现
3.6.2 治疗1:像猴子一样生活
3.6.3 治疗2:多和团队成员沟通
3.7 症状7:缺少感激心,心存感激让你受益匪浅
3.7.1 临床表现
3.7.2 治疗1:心存感激不等于低人一等
3.7.3 治疗2:首先应该对你的领导心存感激
3.7.4 真心换真心
3.8 症状8:不知道什么是“团队合作”
3.8.1 临床表现
3.8.2 治疗1:分析在公司上班的三个目标
3.8.3 治疗2:团队合作——就是团队主管的目标
3.9 点评“心态”
第4章 换位思考,项目主管的招聘技巧
4.1 招聘就像大海捞针
4.2 技巧1:是否有独立完成项目的经验
4.2.1 独立完成一个项目的经验是什么经验
4.2.2 没有独立生存的能力不能有最佳团队合作
4.2.3 测试手段
4.2.4 锻炼攻略:需要主动寻找独立工作的机会
4.3 技巧2:是否有独立解决问题的能力
4.3.1 见招拆招的能力
4.3.2 程序员的韧性
4.3.3 测试手段
4.3.4 锻炼攻略:训练创意思维
4.4 技巧3:评价程序员的思考方式
4.4.1 一切皆程序
4.4.2 找到规律
4.4.3 锻炼攻略:抓住中心把复杂的事情变简单
4.5 点评“换位思考”
第5章 程序员,保持你前进的步伐
5.1 程序员前进的四个阶段
5.1.1 第一阶段,找到一个编程语言去入门
5.1.2 第二阶段,用所这门语言去分析和推理
5.1.3 第三个阶段,新知识新技术的积累
5.1.4 第四个阶段,大道无形
5.2 学习与积累
5.2.1 找到好书,相当于找到一个好老师
5.2.2 每本书都没有从头看到尾是不是等于不用功?
5.2.3 学会建立沉淀目录
第二卷 制胜法宝
第6章 Java程序员的七种武器
6.1 武器1:编程IDE开发工具
6.1.1 Team Leader的嗜好
6.1.2 什么功能是程序员最需要的
6.1.3 下面这些IDE你都用得到
6.1.4 点评“开发工具”
6.2 武器2:数据库系统
6.2.1 广告与市场的力量
6.2.2 不要盲目选择数据库,根据用途选择合适的数据库
6.2.3 以下这些数据库绝不能仅仅是“眼熟”
6.2.4 研究一下JDBC源程序
6.2.5 不熟悉数据库就会“绕远”
6.2.6 点评“真相”
6.3 武器3:Web服务器软件
6.3.1 Web服务器是如何工作的
6.3.2 支持JSP的Web服务器的原理
6.3.3 常用的WebServer
6.3.4 研究一下Web Server的源程序
6.3.5 点评“深入研究”
6.4 武器4: *** 作系统
6.4.1 让我们看看这个招聘启事
6.4.2 Java程序员为什么需要研究 *** 作系统
6.4.3 我们应该更关心 *** 作系统的哪些方面
6.4.4 哪些 *** 作系统我们要重点关注
6.4.5 点评“Linux”
6.5 武器5:编程语言
6.5.1 Java程序员只会Java语言行吗
6.5.2 各个编程语言的特长
6.5.3 点评“第二门语言”
6.6 武器6:辅助设计工具
6.6.1 UML图设计工具
6.6.2 常用UML设计工具
6.6.3 UML要“灵活”的掌握
6.7 武器7:版本控制工具
6.7.1 工作原理
6.7.2 常用版本控制工具
6.7.3 融入团队的开发氛围
6.8 点评“武器”
第7章 破除Java开发中的封建迷信
7.1 迷信1:Java占内存到底大不大
7.1.1 测试一:让程序去裸奔
7.1.2 测试二:针尖对麦芒
7.1.3 让人不再“迷信”的测试结果
7.1.4 先天与后天
7.2 迷信2:Java和C到底谁快
7.2.1 测试一:让程序转起来
7.2.2 测试二:读取个大文件吧
7.2.3 测试三:内存处理的速度
7.2.4 测试结果分析
7.2.5 也不要过于迷信C语言
7.2.6 Java语言与C语言之间的应用比较
7.3 迷信3:Java就等于JSP吗
7.3.1 一个面试的现象
7.3.2 JSP开发时间长了的误解
7.3.3 Java的纯真年代
7.3.4 Java绝对不等于JSP
7.3.5 努力保持一个纯真的心态
7.3.6 点评“纯真”
7.4 迷信5:C/S与B/S相比一无是处
7.4.1 B/S是一个很好的创意
7.4.2 B/S程序本身也是一个C/S程序
7.4.3 C/S程序的优势——速度
7.4.4 C/S程序的应用领域
7.5 迷信6:J2EE的开发必须用EJB
7.5.1 EJB真人真事
7.5.2 我们不禁要问,什么是“服务集群”?什么是“企业级开发”?
7.5.3 把EJB掰开了揉碎了
7.5.4 EJB的最底层究竟是什么
7.5.5 EJB中所谓的“服务群集”
7.5.6 这种部署难道是无懈可击
7.5.7 EJB活学活用,J2EE不是必须使用EJB
7.5.8 “技术”不是神,不要动不动就“崇拜”
7.6 点评“迷信”
第8章 揭秘中大型应用系统
8.1 何谓“中大型应用系统”?
8.2 无法学习与模拟
8.3 资深程序员的“经验”
8.4 为什么要熟悉系统的运行环境
8.5 带你进机房里去看看硬件设备
8.5.1 机房的基本情况
8.5.2 U的概念
8.5.3 机房中的设备
8.5.4 在机房里发现了什么
8.6 安全与效率——永恒的主题
8.6.1 绝对安全是不存在的
8.6.2 RAID
8.6.3 负载均衡
8.6.4 双机、集群的配置模式
8.6.5 网络流量与速率
8.6.6 带宽
8.7 一个软硬件部署方案实例
8.8 点评“经验”
第9章 为什么要学习用框架开发
9.1 学习框架是因为它“火”
9.2 使用框架开发的好处
9.2.1 框架的目的是简化编程工作
9.2.2 框架是一个应用程序的半成品
9.2.3 框架的好处是代码重用
9.3 框架不仅仅只有“SSH”
9.3.1 WebWork
9.3.2 EasyJWeb
9.3.3 Click
9.3.4 JBlooming
9.4 用框架的思想去“自由思考”
9.5 自己也可以试着做一个
9.5.1 先看看不用框架怎么编写程序
9.5.2 从应用程序中找到共性的东西
9.5.3 我们试着做一个最简单的框架
9.5.4 有了这个框架开发工作被简化
9.6 点评“自由思考”
第三卷 达人策略
第10章 高手有多高菜鸟有多菜
10.1 五年工作经验的“菜鸟”
10.2 高手是怎样炼成的
10.2.1 修炼1:Java悟道
10.2.2 修炼2:关注程序的品质
10.2.3 修炼3:“技术”与“技巧”都很重要
10.2.4 修炼4:走入Java的底层程序开发
10.2.5 修炼5:从Worker到Maker
10.3 点评“高手有多高,菜鸟有多菜”
第11章 控制内存的功力
11.1 别指望Java和内存无关
11.2 容易被搞晕的——堆和栈
11.2.1 堆——用new建立,垃圾自动回收负责回收
11.2.2 栈——存放基本数类型,速度快
11.2.3 何谓栈的“数据共享”
11.2.4 实例化对象的两种方法
11.3 内存控制心中有数
11.3.1 两个读取内存信息函数
11.3.2 开发Java程序内存看的见
11.3.3 必须要介绍的虚拟机的参数“-Xmx”
11.4 内存控制效率优化的启示
11.4.1 启示1:String和StringBuffer的不同之处
11.4.2 启示2:用“-Xmx”参数来提高内存可控制量
11.4.3 启示3:二维数组比一维数组占用更多内存空间
11.4.4 启示4:用HashMap提高内存查询速度
11.4.5 启示5:用“arrayCopy()”提高数组截取速度
11.5 内存垃圾回收问题
11.5.1 什么是内存垃圾,哪些内存符合垃圾的标准
11.5.2 JVM垃圾回收的相关知识
11.6 点评“功力”
第12章 产品和项目是程序员永恒的主题
12.1 项目和产品
12.1.1 “产品”的定义
12.1.2 “项目”的定义
12.1.3 “产品”和“项目”的区别
12.2 软件产品开发是“艺术”
12.2.1 软件产品开发需要灵感
12.2.2 程序作品是你的一个传世的艺术作品
12.2.3 软件产品开发需要“前瞻性”
12.3 软件项目开发是“军事行动”
12.3.1 开发者就是这个程序的“三军统帅”
12.3.2 “项目”开发需要“运筹帷幄”
12.3.3 项目控制,一艘船的故事
12.3.4 点评“军事行动”
第13章 非技术知识对工作的辅助
13.1 辅助1:“英语”不需要专业,因为它只是工具
13.1.1 英语与编程序无关
13.1.2 用英语可以看一些英文文档
13.1.3 掌握基本的工作交流时的英语词汇
13.2 辅助2:“Google”不是万能的,但不会用万万不能
13.2.1 在网页标题中搜索关键字:intitle
13.2.2 在特定站点中搜索关键字:site
13.2.3 在url链接中搜索关键字:inurl
13.2.4 精确匹配搜索:双引号
13.2.5 搜索结果中不希望含某特定查询词:减号
13.3 辅助3:程序员的常用文档写作
13.3.1 程序员在软件开发过程中需要提交的文档
13.3.2 程序员在日常工作中需要提交的文档
13.4 点评“非技术”
结束语
致谢
读者来信选登
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)