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發展歷史。