为何计算机专业的学生要学习使用 Linux 系统?

为何计算机专业的学生要学习使用 Linux 系统?python

 

想要搞清楚为何要学习Linux系统就得先搞清楚Linux和Linux运维的一切。mysql

1.jpg

Linux因其高效率、易于裁剪、应用广等优点,成为了当今中高端服务器的主要操做系统,而且处于一个不可替代的地位。Linux可安装在各类计算机硬件设备中,好比手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。随着Linux在中国市场迅猛发展,国内Linux人才缺口逐渐凸显。Linux人才招聘也成了当前最热门的招聘之一。linux

首先linux是一个很是很是大的概念。想所有吃透是不可能的。理想的说,搞懂linux,就能够作全部工做。我的更倾向于说想作什么样工做,须要学linux的哪部分。android

按我的经验介绍下常见的linux有哪些领域,并对应到什么工做。 1)linux应用。这部分严格来讲不能算是linux,只是跑在linux上的应用,好比web,网络,IT等,职业包括系统研发,后台开发,服务器性能优化,运维等;ios

2)linux定制。这部分涉及linux版本的用户包较多,内核会有一些涉及,主要各类商业linux的订制,服务等。好比redhat之类,很多是外国公司,国内大多招现场支持等。nginx

3)linux内核开发。这部分主要是linux内核驱动的开发。几乎所有是编程工做。主要是芯片公司,以及使用芯片的产品开发公司。前者如intel,marvell,后者如中兴华为。web

4)android衍生品。由于android包括慢慢火爆的tizen都用的linux内核,因此理由同3。因此手机芯片公司和手机开发公司也是linux开发者的雇主之一。好比高通,TI等;redis

1、Linux运维的主要工做内容sql

Linux运维做为众多工做中需求人数最多,薪资待遇最高的岗位,本文重点介绍Linux运维的职业,本文内容由专门研究Linux运维学习和职业发展的机构马哥教育和爱好者们联合撰写。docker

互联网Linux运维工做,以服务为中心,以稳定、安全、高效为三个基本点,确保公司的互联网业务可以7×24小时为用户提供高质量的服务。运维的职责覆盖了产品从设计到发布、运行维护、变动升级及至下线的生命周期。

产品的整个生命周期里运维的职责重要而普遍,但运维工程师们的职责不只限于这部分工做,还须要总结工做中遇到的问题,抽取出相关的技术方向、研发相关的工具和平台以支持/优化业务的发展并提升运维的效率,相关技术工做主要包括:

·         服务监控技术:包括监控平台的研发、应用,服务监控准确性、实时性、全面性的保障

·         服务故障管理:包括服务的故障预案设计,预案的自动化执行,故障的总结并反馈到产品/系统的设计层面进行优化以提升产品的稳定性

·         服务容量管理:测量服务的容量,规划服务的机房建设,扩容、迁移等工做

·         服务性能优化:从各个方向,包括网络优化、操做系统优化、应用优化、客户端优化等,提升服务的性能和响应速度,改善用户体验

·         服务全局流量调度:接入服务的流量,根据容量和服务状态在各个机房间分配流量

·         服务任务调度:服务的各类定时/非定时任务的调度触发及状态监控

·         服务安全保障:包括服务的访问安全、防***、权限控制等

·         数据传输技术:包括p2p等各种传输技术的研发应用,也远距离大数据传输等问题的解决

·         服务自动发布部署:部署平台/工具的研发,及平台/工具的使用,作到安全、高效的发布服务

·         服务集群管理:包括服务的服务器管理、大规模集群管理等

·         服务成本优化:尽量下降服务运行使用的资源,下降服务运行成本

·         数据库管理(DBA):经过设计、开发和管理高性能数据库集群,使数据库服务更稳定、更高效、更易于管理。

·         平台化的开发:类docker等平台的开发管理,及服务接入技术

·         分布式存储平台的开发优化与接入

等等,凡是关系到服务质量、效率、成本、安全等方面的工做,及涉及到的技术、组件、工具、平台都在运维的技术范畴里。作好每个技术方向、完成相应的组件、工具、平台研发都能对履行运维职责起到积极的做用,对业务的发展发挥关键影响。

 

2、Linux运维工做分类

运维的工做方向比较多,随着业务规模的不断发展,越成熟的互联网公司,运维岗位会划分得越细。当前不少大型的互联网公司,在初创时期只有系统运维,随着 模、服务质量的 要求,也逐渐进行了工做细分。通常状况下运维团队的工做分类(见图1-1)和职责以下。

2.jpg

图1-1 运维团队的工做分类

2.1-应用运维(SRE):应用运维负责线上服务的变动、服务状态监控、服务容灾和数据备份等工做,对服务进行例行排查、故障应急处理等工做,工做职责以下:设计评审、服务管理、资源管理、例行检查、预案管理、数据备份。

2.2-系统运维(SYS):负责IDC、网络、CDN和基础服务的建设(LVS、NTP、DNS);负责资产管理,服务器选型、交付和维修,工做职责以下:IDC数据中心建设、网络建设、LVS负载均衡和SNAT建设、CDN规划和建设、服务器选型、交付和维护、内核选型和OS相关维护工做、资产管理、基础服务建设。

2.3-数据库运维(DBA):数据库运维负责数据存储方案设计、数据库表设计、索引设计和SQL优化,对数据库进行变动、监控、备份、高可用设计等工做,详细的工做内容以下:设计评审、容量规划、数据备份与灾备、数据库监控、数据库安全、数据库高可用和性能优化、自动化系统建设、运维研发、运维平台、监控系统、自动化部署系统。

2.4-运维安全(SEC):运维安全负责网络、系统和业务等方面的安全加固工做,进行常规的安全扫描、***测试,进行安全工具和系统研发以及安全事件应急处理,工做内容以下:安全制度创建、安全培训、风险评估、安全建设、安全合规、应急响应。

3、Linux运维平常使用软件和技能

运维工程师使用的运维平台和工具包括:

·         Web服务器:apache、tomcat、nginx、lighttpd

·         监控:nagios、ganglia、cacti、zabbix

·         自动部署:ansible、sshpt、salt

·         配置管理:puppet、cfengine

·         负载均衡:lvs、haproxy、nginx

·         传输工具:scribe、flume

·         备份工具:rsync、wget

·         数据库:mysql、oracle、sqlserver

·         分布式平台:hdfs、mapreduce、spark、storm、hive

·         分布式数据库:hbase、cassandra、redis、MongoDB

·         容器:lxc、docker

·         虚拟化:openstack、xen、kvm

·         安全:kerberos、selinux、acl、iptables

·         问题追查:netstat、top、tcpdump、last

运维以技术为基础,经过技术保障产品提供更高质量的服务。运维工做的职责及在业务中的位置决定了运维工程师须要具有更加广博的知识和深刻的技术能力:

·         扎实的计算机基础知识,包括计算机系统架构,操做系统,网络技术等;

·         通用应用方面须要了解操做系统、网络、安全,存储,CDN,DB等,知道其相关原理;

·         编程能力,小到运维工具的开发大到大型运维系统/平台的开发都须要有良好的编程能力;

·         数据分析能力:可以整理、分析系统运行的各项数据,从中发现问题及找到解决方向;

·         丰富的系统知识,包括系统工具、典型系统架构、常见的平台选型等;

·         综合利用工具和平台的能力;

4、Linux运维工做发展过程

早期的运维团队在人员较少的状况下,主要是进行数据中心建设、基础网络建设、服务器采购和服务器安装交付工做。几乎不多涉及线上服务的变动、监控、管理等工做。这个时候的运维团队更多的属于基础建设的角色,提供一个简单、可用的网络环境和系统环境便可。

随着业务产品的逐渐成熟,对于服务质量方面就有了更高的要求。这个时候的运维团队还会承担一些服务器监控的工做,同时会负责LVS、Nginx等与业务逻辑无关的4/7层运维工做。这个时候服务变动更多的是逐台的手工操做,或者有一些简单批量脚本的出现。监控的焦点更多的在服务器状态和资源使用状况上,对服务应用状态的监控几乎不多,监控更多的使用各类开源系统如Nagios、Cacti等。

因为业务规模和复杂度的持续增长,运维团队会逐渐划分为应用运维和系统运维两大块。应用运维开始接手线上业务,逐步开展服务监控梳理、数据备份以及服务变动的工做。随着对服务的深刻,应用运维工程师有能力开始对服务进行一些简单的优化。同时,为了应对天天大量的服务变动,咱们也开始编写各种运维工具,针对某些特定的服务可以很方便的批量变动。随着业务规模的增大,基础设施因为容量规划不足或抵御风险能力较弱致使的故障也愈来愈多,迫使运维人员开始将更多的精力投入到多数据中心容灾、预案管理的方向上。

业务规模达到必定程度后,开源的监控系统在性能和功能方面,已经没法知足业务需求;大量的服务变动、复杂的服务关系,之前靠人工记录、工具变动的方式无论在效率仍是准确性方面也都没法知足业务需求;在安全方面也出现了各类大大小小的事件,迫使咱们投入更多的精力在安全防护上。逐渐的,运维团队造成以前提到的5个大的工做分类,每一个分类都须要有专精的人才。这个时候系统运维更专一于基础设施的建设和运维,提供稳定、高效的网络环境,交付服务器等资源给应用运维工程师。应用运维更专一于服务运行状态和效率。数据库运维属于应用运维工做的细化,更专一于数据库领域的自动化、性能优化和安全防护。运维研发和运维安全提供各种平台、工具,进一步提高运维工程师的工做效率,使业务服务运行得更加稳定、高效和安全。

咱们将运维发展过程划分为4个阶段:

手工管理阶段:业务流量不大,服务器数量相对较少,系统复杂度不高。对于平常的业务管理操做,你们更多的是逐台登陆服务器进行手工操做,属于各自为战,每一个人都有本身的操做方式,缺乏必要的操做标准、流程机制,好比业务目录环境都是各式各样的。

工具批量操做阶段:随着服务器规模、系统复杂度的增长,全人工的操做方式已经不能知足业务的快速发展须要。所以,运维人员逐渐开始使用批量化的操做工具,针对不一样操做类型出现了不一样的脚本程序。但各团队都有本身的工具,每次操做需求发生变化时都须要调整工具。这主要是由于对于环境、操做的规范不够,致使可程序化处理能力较弱。此时,虽然效率提高了一部分,但很快又遇到了瓶颈。操做的质量并无太多的提高,甚至可能由于批量执行而致使更大规模的问题出现。咱们开始创建大量的流程规范,好比复查机制,先上线一台服务器观察10分钟后再继续后面的操做,一次升级完成后至少要观察20分钟等。这些主要仍是靠人来监督和执行,但在实际过程当中执行每每不到位,反而下降了工做效率。

平台管理阶段:在这个阶段,对于运维效率和误操做率有了更高的要求,咱们决定开始建设运维平台,经过平台承载标准、流程,进而解放人力和提升质量。这个时候对服务的变动动做进行了抽象,造成了操做方法、服务目录环境、服务运行方式等统一的标准,如程序的启停接口必须包括启动、中止、重载等。经过平台来约束操做流程,如上面提到的上线一台服务器观察10分钟。在平台中强制设定暂停检查点,在第一台服务器操做完成后,须要运维人员填写相应的检查项,而后才能够继续执行后续的部署动做。

系统自调度阶段:更大规模的服务数量、更复杂的服务关联关系、各个运维平台的林立,原有的将批量操做转化成平台操做的方式已经再也不适合,须要对服务变动进行更高一层的抽象。将每一台服务器抽象成一个容器,由调度系统根据资源使用状况,将服务调度、部署到合适的服务器上,自动化完成与周边各个运维系统的联动,好比监控系统、日志系统、备份系统等。经过自调度系统,根据服务运行状况动态伸缩容量,可以自动化处理常见的服务故障。运维人员的工做也会前置到产品设计阶段,协助研发人员改造服务使其能够接入到自调度系统中。

在整个运维的发展过程当中,但愿全部的工做都自动化起来,减小人的重复工做,下降知识传递的成本,使咱们的运维交付更高效、更安全,使产品运行更稳定。对于故障的处理,也但愿由过后处理变成提早发现,由人工处理变成系统自动容灾。

 

5、2018年Linux运维必须抓住的前沿技能

这是技术世界正在发生的深入变革的冰山一角,那么问题来了? 做为传统的运维该如何转型呢?

这里给出一点小的建议: 大体须要学习下这四个部分:

·         自动化运维(Ansible,Puppet,Saltstack等)

·         Devops(Docker,K8s,Jenkins,Jira等),

·         云服务技术(虚拟化、OpenStack、AWS及阿里云各类产品服务架构等)

·         python


最后,若是你还有Linux运维的发展困惑,你也能够在下面留言讨论?

想学习Linux入门课程,这个视频对你很是有帮助的。

Linux运维及云计算年薪30W入门经典教程【马哥亲讲】_腾讯课堂