004 | Linux云计算架构师课程介绍
本文为《跟马哥学Linux》系列文章的第四篇,上一篇文章为《 Linux云计算高端课程上课纪律》。
在正式开始之前,简单说明一下整个Linux整个课程体系。Linux运维课程体系大纲有哪些,让各位充分了解一下课程主要有哪些,会涉及哪些要点。大体上将课程分为两个阶段。分为中级和高级的内容,我对他做一下简单说明:
首先,讲一下Linux入门课程主要讲解:Linux操作系统的基础概念、常见的发行版本之间的差异化以及一些基础命令的使用,比如与文件系统相关的和除文件系统以外,与系统管理相关的工具。
Linux系统管理课程主要包括程序包管理、分区管理等。还有,Linux服务及安全管理课程。
这三个课程对应红帽课程体系的认证考试的RHCSA(红帽认证助理工程师)和RHCE(红帽认证工程师)课程,是Linux学习的基础知识,是运维工作中最经常用到的知识。对于零基础同学,后面相对较简单,因为入门很难,后面无非是学知识或者学习新概念,这些新概念是建构在基础知识之上的。对于有基础的同学,希望可以有不同的收获,可以把更多的精力放在后面知识的深入学习上。
再往后,学习Linux Cluster叫做Linux集群。
主要学习常见集群的两种,第一种是负载均衡集群,可称做LB Cluster。在第一阶段,主要讲解LB Cluster中,如何实现基于Nginx完成对于http协议反代模式的七层负载均衡,以及借助LVS实现四层负载均衡,并且会对比说明二者之间的区别和适用场景。
而后,会讲解高可用集群,即HA Cluster。主要讲解Keepalived来保证Nginx和LVS服务的高可用。
接下来,会讲解Linux Ops运维工具,它非常简单好用,目前炙手可热的,叫做ansible,在中小型企业,无大型服务器的企业,ansible非常好用。
这一阶段后,主要讲解Linux监控工具Monitoring,会讲zabbix。
以上为第一阶段的重点内容,接下来讲解第二阶段。
第二阶段,首先会讲解http服务的相关功能,在第一阶段,在讲到Linux服务及安全管理课程时,除了会讲如http这样非常关键的服务,还会讲各位了解的lamp,lnmp等,我们额外会讲cache的工具,会讲到memcached和varnish等缓存系统。
接着,我们回头说,第二阶段首先会讲解http服务,不过我们此处主要讲解tomcat,tomcat会花很长时间讲GAM运行环境,tomcat的整体运行框架,tomcat内置的cast等,tomcat服务所涉及到的方方面面,都会讲到。并且,在tomcat服务下,会讲解如何运用tomcat构建lnmt或者lamt,以及会话集群session replication cluster 。
在第一阶段中,会讲数据存储的相关内容mysql(mariadb),他们有什么区别,我们会今后解释。会讲解mysql的基本使用、用户、权限使用、复制。。
接着,会讲http的会话集群session replication,这是tomcat。
tomcat这阶段中,会引用另外一个概念分布式存储系统,先会讲分布式系统的基本概念及原理,接着讲分布式存储系统的基本概念及原理并且会用一个实例MoglileFS或者GlusterFS来讲解:什么是分布式文件系统,什么是分布式存储,何为有中心节点的分布式,何为无中心节点的分布式。并且会讲解如何用Nginx反代用户请求整合MoglileFS,以构建一个企业级应用当中的分布式图片存储系统。
还讲HA Cluster中的另外一种实现:Corosync集群+pacemaker集群,以及RHCS套件,命令行管理工具pcs/crmsh。接下来讲解Mysql,如HA Cluster、MHA机制、备份和恢复工具使用、MySQL Replcation(复制功能)、Read-Write splitting(读写分离机制)。还有NoSQL,包括redis(KV存储),mongodb(文档存储),HBase等。接下来讲一下Linux运维工具Ops,包括puppet(自动化运维工具),saltstack(基于puppet编写),cobbler等
接下来讲解虚拟化,会讲到Linux操作系统原理,如CPU、进程、内存、磁盘管理、I/O、文件系统等,借助于虚拟化技术原理,深入理解像VMware、KVM、容器技术的LSC的实现。以及kvm虚拟化应用详解,例如xen虚拟化解决方案等。紧接着,会讲虚拟化网络,它是基于软件构建网络,利用纯软件构建交换机、路由器,需要了解SDN(软件定义网络)。还会讲到OpenStack云栈,会涉及到Docker(容器):基础:卷管理、虚拟化网络、映像文件,容器云等。会介绍ELK Stack(日志分析工具),即为ElasticSearch搜索引擎,Logstash(日志搜寻工具)Kibana(日志展示工具)。接下来,会讲炙手可热的大数据,讲到Hadoop v2版,分布式并行存储及分析平台等,而HBase是运行在Hadoop之上的,还包括Hive,Storm,Spark等。
还有一个知识点叫做系统优化,系统优化在红帽教材中被称作black art,是黑色艺术。叫这个的原因是,它百分之九十五是讲理论,百分之五是动手调参数。而对于中小型企业来讲,除了那些特别有影响的关键参数我们需要调,其他的不调,真正有能力调参数的大公司是进行二次研发的。不要随意的优化,因为,你所看到的瓶颈未必是瓶颈。
你看到CPU慢了,有可能是内存太小导致的,系统优化需谨慎。后面我们学习Python编程,它是一种技能,我们要想学好一门编程语言,学习它的语法非常容易,想用它来建构工具是非常困难度,所以,Python课程不以培养Python开发工程师为目标,对于运维人员来说,能是看懂别人写的工具就可以,培养你自己写,不是让你自己开发。
在第一阶段,还会学习另一个内容,叫做shell脚本编程。这些内容远远超过RHCA的课程。这些课程是很难的。
讲一下学习阶段,第一个是教室学习,大概是4个月时间,第二阶段是工作学习阶段,我们学的东西,交给你了,你毕业了不要全还给老师,找工作没信心。这很正常,面对任何事情,你永远不可能准备好,准备全面就可以了。你只需要按要求写好博客,笔记做好,在课程结束之前把所有的笔记和博客梳理出来,做成一本书,拿着去面试,不断的看书面试。
即便没有任何基础,不断的根据面试的问题,查找自己的不足。差不多是个面试,会找到自己合适的工作,然后可以上班了。工作的过程中,不断的看笔记,看视频,让自己的知识不断的扩充和加深。第二个阶段大概有八个月或者一年多时间。不求工资高,找一个对自己运维生涯有帮助的公司。
把课堂的知识转换为在生产环境中可用的技能,才可以踏入第二个阶段。
接下来,讲解IT技术领域的岗位做一下简单的描述,岗位主要分为研发和应用,对于研发,又分为硬件研发和软件研发。硬件研发就是设计电路板。另外是软件研发,为什么会用到软件,很容易理解,就像买到一个自动洗衣机,没有任何操作接口或者按钮是不可能转动起来的。操作接口背后的逻辑,比硬件要复杂很多。注意,硬件的接口很简陋。任何的硬件生产出来后,依然以洗衣机为例,刚刚生产出洗衣机,如果没有便捷的你能看到的控制接口的话,你想让他转起来,非常不方便开启和使用,但他给我们一个按钮或者遥控器,这是一种使用方案,让双方进行交互的使用工具,我们通常称之为接口,这是在计算机中,常用的称呼。而各种硬件的接口的底层是非常丑陋的,为了尽可能让用户方便使用,接口做的越简单越好,并不是你看上去简单,他就真的简单,而是背后的复杂逻辑层次隐藏了。
跟我们以前任何领域所涉及到的复杂逻辑层次是近似的,当任何层次太复杂了,我们该如何解决。我们就在这个复杂层次上建构一个抽象层,让抽象层把底层复杂逻辑结构隐藏起来,输出出来就极为简单。
在计算机硬件设备刚生产出来的时候,他只有硬件连接接口,在硬件上实现复杂逻辑接口是很困难的,他需要的代价是非常大的,而且是写死的。利用硬件实现功能的话,想变个花样,非常困难,因为他是固化的。只能使用软件的方式,在此之上附加一层更复杂的逻辑来解决这个问题。而这个逻辑其实就是软件,所以,硬件所提供的接口过于底层和难操作,我们需要软件把他的接口做的更人性化一点,同时把底层的复杂性,利用逻辑把他隐藏起来。但这样一来,并不是复杂性不存在,只是他的复杂性由软件来承接了。这样一来,硬件就只提供最基本的功能,各种复杂的功能由软件来呈现。我们所提供的工具,越接近于最终的形态,他的适用领域也就越窄。我们的学历越高,我们所能做的工作机会就越少。我们硬件也是一样,把硬件保持最原始形态,所有的功能都由软件来实现,硬件的通用性就越大。
计算机也是如此,计算机的基本功能只有极为简单的运算,任何智能的东西,想要明白基本的命令或指令,这些指令通常由CPU接收的,CPU有运算器和控制器,他能接收一些命令给他,可以让他做加减法、清空内存等,他能做最基础的事情,至于你让他编辑图像,只能依靠软件来实现,但软件所形成的逻辑可以在底层硬件完成。CPU是用来加工数据的,数据需要有问题是我们把数据放进去,怎么把加工后的又拿出来,这就需要输入和输出设备,这是我们计算机的基本硬件,目前所有计算机都是在这个框架上运作的,这个机制,我们称之为“冯.诺依曼体制”。
冯.诺依曼在数学领域、经济学领域、计算机领域都称之为世界上的顶级人物。这些硬件保持了最底层的功能,所以我们需要用软件来实现接近于最终产品形态。但计算机自己的说明语言太难懂了,都是二进制指令,都是0101001……,用来加工二进制数据太难了,人类难以理解。程序员写程序只能用二进制指令来加工二进制数据去写,这是非人的能力。
所以,我们需要一门语言,让人说起来非常容易,但计算机不理解,计算机只能理解二进制数据。我们现在的编程语言都是离人很近,计算机理解不了。当两个层次彼此间无法衔接时,加个中间层,而对于计算机来说,叫做编译器。
所谓软件,是程序员写的程序代码,这个程序代码用编程语言来实现,编程语言并不是机器所说的语言,及其所说的叫做机器语言。机器语言就是你可以想象成让机器工作的接口。而程序员直接用接口来编写的话太难了,于是发明高级编程语言。
后来,任何一款芯片的制造商,他们都把芯片的机器代码提供了一个较为简单的,稍微好一点,但依旧很简陋的编程接口,成为微码编语言,或者称为汇编语言。汇编语言仅仅是二进制数据转变为人类自然语言符号,他离最终形态依然很远,程序员需要做很多。汇编语言是低级语言的代表,芯片制造商会给自己的芯片提供汇编语言。汇编语言和芯片语言类似,你学了一种汇编语言,第二种未必会用,他和芯片紧密相关,适用性很差,没有普适性。于是有了高级语言,如C,C++,虽然兼具低级语言特性,但也是高级语言。任何语言,只要不是机器语言,机器都无法理解。对于汇编语言,称为汇编器,对于高级语言,称之为编译器,来翻译成机器语言。
方框代表硬件,六边形代表数据,需要把数据转换为硬件识别的形态,需要中间的形态,如果是汇编语言,叫做汇编器。如果是高级语言,叫做编译器。
但一般来讲,高级语言所写的程序,最终需要转换为机器语言,但中间会经过汇编过程,所以大多数情况下,比如C程序,要先转换为汇编格式,由汇编格式在转换为机器格式,可以理解为任何一个机器都有汇编,要想到达机器,就必须经过汇编。
而程序员就是写高级程序语言,让底层具有非常简陋功能的机器,可以完成复杂逻辑功能。
高级语言是建立在汇编语言之上的,接近人类的思维方式,所以写起来容易很多。但翻译起来却需要更多的机器语言来解释。
汇编语言经常用于写驱动程序。高级语言又分为两类,一类是系统级高级语言,如C,C++,通常开发大型的对系统要求高的程序,像mysql、oracl、sql server,甚至到操作系统,像Linux、windows。这种语言对人而言,代码量较大,很难达到所见即所得。一类是应用级高级语言,如JAVA,Python,这种程序非常接近人类的语言,但离机器越来越远。
如图所示,假如最长线为机器语言,汇编语言在机器语言之上,再往上是C和C++,再往上是java和Python,人在他们之上(笑脸代表人),而电脑在最底层(方盒子代表电脑),你会发现,高级语言就是离人较近的语言,低级语言就是离机器较近的语言。他的特点是,机器语言离机器近,机器运行快,而高级语言离机器远,中间需要层层转换,所以机器运行比较慢,但人写起来比较快。
这就是所谓的高级语言和低级语言。而高级语言又分为系统级和应用级。系统级别的语言主要写操作系统等对性能要求较高的服务类程序,像oracl、mysql、Linux等,如果只是开发网站,开发图书馆管理系统等可以使用应用级语言,应用程序对性能要求不高,对程序员来讲,希望他能快速出活的程序,像ansible,puppet。puppet使用ruby语言所研发,等等。要想写驱动,就使用汇编,想去写关键程序,就使用C、c++,学习应用级程序,使用java,Python性能比java要差,但在研发上所用的时间,足以抵消他在性能上降低的时间,所以,会用到Python。
什么叫做应用领域?应用领域就是把别人写好的软件用好而已。对我们来说,领域通常称为运维。在Linux运维中,就是Linux生态圈中的各应用程序的应用。如果仅是手动运维就太低级,尽可能用编程的视角,把这些管理Linux应用的工作,让程序帮我们去完成,也就是shell脚本编程的工作,让某些应用工作能自动完成,他不是完整的编程语言,他是建构在解释器之上,让别的程序更好的程序逻辑工具。我们要想实现更为复杂的功能,就需要专业级完整的编程语言,像Python。
要想找所谓的socket编程,shell脚本实现不了,除非借助于工具,有socket功能的,我们能操作的细节程度就非常拙劣了,但Python要好很多。Python是非常高级的语言,比java都高级,所以性能差,学起来很容易。因此,在所有的编程语言中,不考虑shell的话,Python是最容易学的。Python是专业编程语言,能实现很多功能,如ansible,openstack都是运用Python完成的。如果你能写Python,又能做运维,这就证明你可以写运维工具了。
不以研发为目的,只是为了运维更为灵活和自动,叫做DevOps,即为Development(研发)和Operations(运维),将来可以把这个作为发展方向。
运行维护就是把别人写的软件,拿到我们公司,根据我们的业务需要把他组织起来,满足我们运行的需要,能完成公司需要我们完成的任务即可。这是我们这个课程的大体框架的描述,下节课会将Linux发展历史。