A. 人工智慧是否會導致程序員失業
自動化和人工智慧技術的快速發展給許多行業帶來了革命性的變化,其中之一就是程序員行業。然而,程序員是否會因為人工智慧失去就業機會,這個問題涉及到許多復雜的因素。
首先,人工智慧使得某些重復性和低級別的編程工作變得更容易自動化,例如數據悔臘清理、測試、調試等,這些工作可以被機器代替。但是,這只是程序員工作的碧消滑一部分,大部分任務都需要程序員具備高級別的技能和知識才能完成,例如設計演算法、優化代碼、架構系統和管理數據等。
其次,雖然人工智慧能夠處理某些重復性和低層次的編程工作橋悉,但是對於那些需要創意性和創新性的技術挑戰,人工智慧仍然無能為力,程序員的角色也將越來越重要,因為他們需要思考新穎的解決方案來處理復雜的問題。
最後,隨著人工智慧技術的發展,需要程序員來開發和維護這種技術的基礎設施,平台和應用程序,這將增加程序員的需求而不是減少。
因此,人工智慧技術可能會改變程序員工作的性質和方向,但不太可能導致程序員失業。相反,程序員需要適應新的技術變革,學習新的技能和知識,以滿足市場上對技術人才的需求。
B. 程序員必須懂的英語單詞詞彙
干程序員這行實在是離不開英語,需要懂的 英語單詞 有很多。下面是我整理的程序員必須懂的英語單詞,以供大家學習參考。
程序員必須懂的英語單詞
CPU(Center Processor Unit)中央處理單元
mainboard主板
RAM(random access memory)隨機存儲器(內存)
ROM(Read Only Memory)只讀存儲器
Floppy Disk軟盤
Hard Disk硬碟
CD-ROM光碟驅動器(光碟機)
monitor監視器
keyboard鍵盤
mouse滑鼠
chip晶元
CD-R光碟刻錄機
HUB集線器
Modem= MOlator-DEMolator,數據機
P-P(Plug and Play)即插即用
UPS(Uninterruptable Power Supply)不間斷電源
BIOS (Basic-input-Output System)基本輸入輸出系統
CMOS(Complementary Metal-Oxide-Semiconctor)互補金屬氧化物半導體
setup安裝
uninstall卸載
wizzard向導
OS(Operation Systrem) 操作系統
OA(Office AutoMation)辦公自動化
exit退出
edit編輯
復制
cut剪切
paste粘貼
delete刪除
select選擇
find查找
程序員常用英語單詞select all全選
replace替換
undo撤消
redo重做
program程序
license許可(證)
back前一步
next下一步
finish結束
folder文件夾
Destination Folder目的文件夾
user用戶
click點擊
double click雙擊
right click右擊
settings設置
update更新
release發布
data數據
data base資料庫
DBMS(Data Base Manege System)資料庫管理系統
view視圖
insert插入
object對象
configuration配置
command命令
document文檔
程序員必備英語單詞彙POST(power-on-self-test)電源自檢程序
cursor游標
attribute屬性
icon圖標
service pack服務補丁
option pack功能補丁
Demo演示
short cut快捷方式
exception異常
debug調試
previous前一個
column行
row列
restart重新啟動
text文本
font字體
size大小
scale比例
interface界面
function函數
access訪問
manual指南
active激活
computer language計算機語言
menu菜單
GUI(graphical user interfaces )圖形用戶界面
template模版
page setup頁面設置
password口令
code密碼
print preview列印預覽
zoom in放大
zoom out縮小
pan漫遊
cruise漫遊
full screen全屏
tool bar工具條
>>>下一頁更多“程序員必備英語單詞”C. 為什麼說低代碼才是程序員的未來
雖然零代碼確實是設計給非專業開發者用的,但其所能支撐的業務場景確實有限,無法真正革新傳統開發模式,替代那些仍需專業開發者參與的復雜業務場景。而狹義上的低代碼卻有潛力做到這一點,因為它天生就是為專業開發者而量身定製的。Gartner最近的一項調研報告顯示,「66%的低代碼開發平台用戶都是企業IT部門的專業開發者」。這充分說明了,專業開發者比平民開發者更需要低代碼。
屏幕前一批穿格子襯衫的同學要發問了:「低代碼都不怎麼寫代碼了,怎麼能算是為我們程序員服務呢?」。雖然程序員討厭重復自己,但重要的事情還是得多說一遍:開發 ≠ 寫代碼。1萬年前蹲在洞穴里的原始人,在用小石子畫遠古圖騰;100年前坐在書桌前的徐志摩,在用鋼筆給林徽因寫情書;而今天趴在屏幕前的很多人,相信都已經開始用上手寫板或iPad塗塗寫寫了。千百年來,人類使用的工具一直在演進,但所從事活動的本質並沒有多大改變。無論是用小石子還是小滑鼠,寫作繪畫的本質都是創造與表達,最終作品的好壞並不取決於當時你手中拿著什麼;同樣地,應用開發的本質是想法和邏輯,最終價值的高低也不取決你實現時是用的純代碼還是低代碼。
而相比純代碼而言,低代碼極有可能成為更好的下一代生產力工具:
減少不必要的工作量
可視化拖拽與參數配置的極簡開發模式,結合模型驅動的代碼自動生成機制,可以消滅絕大部分繁瑣和重復的boilerplate代碼;一站式的部署和運維管理平台,無需自己搭建CI/CD流水線、申請環境資源、配置監控報警;一次搭建同時生成、構建和發布多端應用,免去人工同步維護多個功能重復的端應用;開箱即用的組件庫、模板庫、主題庫、連接器等,讓最大化軟體復用成為可能。總而言之,低代碼能夠讓專業開發者更專注於創新性、有價值、有區分度的工作,而不是把寶貴開發時間都耗費在上面那些不必要兆搜的非業務核心工作上。
強大的平台能力支撐
雖然上面列的技術支撐性工作並不直接產生業務價值,但卻會直接影響業務的性能、成本、穩定性、安全性、可持續發展能力等。有遠見的企業,絕不允許犧牲這些重要指標,來換取短暫的業務加速。低代碼開發平台深知這一點,因此在簡化和屏蔽底層技術細節的同時,也會盡可能把自己所cover的部分做到最好(至少能和純代碼開發方式一樣好),包括但不限於:
現代化的技術架構和實現:現代化的低代碼開發平台,在支撐用戶應用時所選擇的技術架構與實現方案,也會是現代化且符合業界最物猜世佳實踐的,例如,前端基於主流的HTML5/CSS3標准和React框架,後端基於成熟的Java語言、SpringBoot框架和MySQL資料庫,部署環境基於雲原生的Docker鏡像、CI/CD流水線、K8s集群和Service Mesh技術(相關知識可參考《正確入門Service Mesh:起源、發展和現狀》)。
零成本的技術升級和維護:低代碼的高維抽象開發方式,讓應用的核心業務邏輯與底層技術細節解耦。開發者在大部分情況下都不需要關心底層技術選型,同時也無需親自跟進這些技術的版本升級與漏洞修復,免費享受與時俱進的技術紅利和應用安全性提升。即便遇到某些底層技術或工具需要進行更換(比如不再維護的開源項目),開發者也完全不必感知;技術遷移再費勁再難搞,平台自己努力就行,對開發者來說只要服務一直在線,歲月就依然靜好;事後可能還會驚喜地發現,應用訪問突然就變得更快了,彷彿冥冥中自有天助,感激上蒼和低代碼。
一體化生態能力復用
復用(Reuse)是提升軟體開發效率和工程質量的最有效途徑。傳統的代碼開發模式下,開發者可以通過提取公共類/函數、引用共享庫、調用外部API服務、沉澱代碼片段和模板等方式實現復用。在低代碼的世界裡,平台也可以提供對應的多層次多粒度復用手段,比如頁面組件庫、邏輯函數庫、應用模板庫等。
但更重要的是,低代碼平台還可以充分發揮其一體化的生態優勢,提供強用的可復用能力(資產)的發現、集成與共享體系:以頁面組件為例,你可以直接用系統組件,也可以在平台自帶的組件市場上搜索罩肢和引用更合適的組件,還可以自己用代碼開發一個自定義組件並發布到市場中。平台的生態體系越大,積累的可復用能力就越多,應用的開發成本也會越低。
相比而言,雖然傳統代碼世界整體生態更龐大和深厚,但由於各類技術不互通、缺乏統一平台與市場、代碼集成成本高等原因,一直以來都沒有形成有類似規模潛力的生態能力復用體系,導致重復造輪子和低水平重復建設的現象司空見慣,還美名為「新基建」。
說到這里,另一批裹著沖鋒衣頭頂鋥亮的同學也忍不住了:「萬一低代碼真的發展起來了,是不是就不需要那麼多程序員了啊?上有老下有小的,同是碼農身,相煎何太急!」。低代碼雖然是一場應用開發生產力革命,但並不會革掉程序員的飯碗。它去掉的只是難懂的編程語法、繁瑣的技術細節和一切可自動化的重復性工作,並沒有也無法去掉應用開發最核心的東西:嚴謹的業務邏輯、巧妙的演算法設計、良好的工程風格等。對於真正的程序員,即使剝去他一層又一層的編程語言和工具熟練度技能外殼,最終剩下的仍然是一個有價值的硬核開發者。
當然,如果你堅持要用純粹的寫代碼方式來改變世界,也不至於失業。要麼,你可以選擇那些低代碼暫時不太適用的領域,比如底層系統驅動、3D游戲引擎、火箭發射程序;或者,你也可以選擇去寫低代碼中那一部分不可或缺的自定義代碼擴展,為平民開發者提供高質量的積木。最後,你也完全可以選擇為低代碼平台本身的底層代碼添磚加瓦。
D. 機器編程被研究出來了,程序員是不是都要失業了
機器編程被研究出來了,程序員是不是都要失業了?
在 2018 年英特爾研究院和麻省理工學院聯合發布的《機器編程的三大支柱》論文中,「機器編程」一詞首次出現在人們的視野。它融合了機器學習、形式化方法、編程語言、編譯器、計算機系統等多個領域。通俗地說,機器編程就是通過機器學習和自動化方法,設計出可以自己編寫軟體的軟體,即教系統自己編程。除了上文所說,機器編程可以補充跨架構專業編程人員的缺口之外,它還能解決軟體開發和維護上的一大痛點問題:Bug 。機器編程的核心原則是:人類向機器表達他(她)的意圖,機器去自動創建完成該意圖所需的所有軟體。
功能如此優越的機器編程在未來是否會讓部分程序員失業?這種擔憂並不難理解,畢竟如果機器編程可以實現自動化構建程序,那原來做這件事的人該怎麼辦?Justin 其實經常被問到這個問題,但 Justin 始終認為,機器編程如果成功,那未來只會創造數千萬甚至數億個就業機會,而非取代專業程序員使其失業。他的理由很簡單,有兩個方面:
因此, Justin 一直堅持一個觀念:自動化不僅不會取代任何現有的程序員,反而會為全新類型的程序員創造非常大的平台,讓他們可以毫無顧忌地發揮想像力。或許這些程序員的編程技能會稍遜色,但強大的創造性會彌補這個不足,只要有能力表達他們的想法,那麼機器和系統會幫他們把這些想法綜合起來做出軟體。
E. 作為一個程序員,你有沒有想過如果不做程序員了你還能做什麼
首先扒出網上的一張圖,表明程序員工作的路線圖。雖然只是笑資,但也依舊部分真實。
大多數在一線城市的程序員根本買不起房,特別是北京,當然對比其他薪資更低的其他崗位更是如此。所以基本分為兩大塊,一直留在大城市和後期回到二線甚至三線城市,求個輕松安穩的生活。
管理 :大多程序員在沒有怎麼敲代碼後,都是走管理路線,管理項目,統籌兼顧,這也算是沒有脫離程序員的行業,但也不能算是敲代碼的程序員了。不過管理崗位就那麼多,也只會有少數人能夠晉升。
程序行業的獵頭 :現在很多大公司都需要hrbp等崗位,需要懂得編程的人幫忙招聘真正有本事,能夠聊技術的hr,不過hr更多要有資源,能夠會說話,有大概的判斷,因此程序員行業很多人並不能勝任,但總會有人適合,不是么。
培訓老師 :懂的知識,能夠系統理解就能教書育人。同時也是對自己知識體系的梳理過程。無論你是內向還是外向,都可以做講師,因為每個人都有自己的講課風格,但這需要你做一定的適應,最大的難度就是從自己動手做項目到用語言准確表述自己的經驗與技術。
做自媒體 :現在的自媒體已進入成熟期,如果你的技術已經十分嫻熟,可以把專業技能放在自媒體平台上,把你的編程經驗、目經驗寫一寫,以文章、視頻形式展現出來。名氣大了,自然會有人找上你,請教問題或者打廣告,一切都水到渠成。
接私活 :現在也有很多地方可以接私活,自己賺錢,趁著年輕多賺錢,至少被年輕人淘汰時候,手上也有很多錢可以任由自己揮霍。
很多人在做程序員後,都會想有更輕松的人生,錢少點無所謂,但不能委屈自己。那能幹啥呢?
在老家開一個小店鋪,天天刷刷視頻,看看電視,日子也很悠閑愜意。
甚至在老家開滴滴,自由職業,想上班就上班,手頭缺錢就加油跑,
有一點自己愛好的,開個小餐館做作 美食 ,彈彈吉他教教學生。
修修電腦, 游戲 陪玩。或者自己寫一個伺服器,做個網站玩玩。
只有一份工作,並且還是給別人打工,擔心永遠都不會少,有一份副業才是正道。不要等到年紀到了,發現只能依賴一份死工資,變得唯唯諾諾,一點底氣都沒有,從而變成被公司壓榨的理由。
而對於大多數人而言,要多想想除了現在這份工作,我還能幹什麼賺錢,同時,也要加強自己的不可替代性。而程序員的不可替代性依舊是想法和技術。可以關注私聊我發送「 項目 」獲取很多項目的學習視頻哦,當然覺得沒有你想要的可以私聊說說想要什麼資源,大部分都能給你找到。
作為一名從業多年的程序員,或者說作為一名大齡程序員,肯定都會考慮,中年職業危機的事情,達到一定年齡後,自己該何去何從,中年程序員的焦慮隨著年紀增大而增大。
項目管理,軟體經理
很多公司沒有技術專家的崗位,所以很多人都會考慮轉管理,比如項目管理,軟體經理,因為技術沉澱,可以對軟體開發進行管理,這種職業轉換,相對與研發經理會比較簡單,壓力沒有那麼大。
轉換做技術支持,做FAE
假如你之前從事的工作,是做嵌入式軟體開發,寫C語言編程,那麼對於單片機一般會比較熟悉,那麼可以找一些mcu晶元原廠或者大的代理公司,做技術支持FAE,利用自己的技術經驗,幫客戶解決問題,然後有些公司的FAE的工資也會與銷售額掛鉤,有一定提成。
轉換做銷售
轉換做銷售是很多程序員的考慮,但現實是很多公司不會招沒有銷售經驗和資源,且年紀偏大的人做銷售,主要是培養時間長,穩定性差,沒有資源,當然賣房不需要經驗。
跑滴滴,跑美團送外賣
估計很多人也會想,如果真的失業了,就去跑滴滴,送外賣,肯定也是一個門路,肯定是一定收入,但收入肯定沒有做程序員高。
創業自己做點小生意
做程序員,工資相對於其他一些行業工資要高,或許有點積蓄,就考慮開一個小賣部,或者開餐館,做燒烤,做早餐等等,再或者是不是開一個快遞網點也是一個不錯的選擇。
還可以利用自己的專業知識,給別人做產品,方案開發等工作。這種我覺得是程序員重點考慮的方向。
說實話,確實沒想過,作為一個已經在程序員崗位上幹了10年的老鳥,目前還沒想過不做程序員了還能做什麼,做個小生意,不知道從何做起。合夥開公司,也找不到合適的人,而且最重要的是要有人跑市場,天天面對電腦,感覺已經喪失了和人打交道的能力了。
30多歲了,已然變成了00後口中的中年大叔,面對上有老,下有小的窘境,你想不做老本行,辭職去做其他的事情?除非有十足的把握,不然還是勸下自己,不如將現金投放到余額寶,或者買一些基金定投產品來的靠譜。畢竟那個一人吃飽,全家不愁的時代已經過去了。每天睜眼面對的就是父母妻兒,車貸房貸,以及其他的消費生活壓力,想給自己解解壓,還是拋棄不切實際的創業夢想吧。
但是,別忘了,雖然人在江湖,身不由己,對於自己還是要投資的,不論是身體方面,還是職業方面,健身房沒錢去,就到小區路邊多走走,鍛煉好身體,至少用一個強壯的身軀來撐起家庭。編碼之餘,多看下前沿的最新技術,程序員是最喜新厭舊的行業,你所比年輕人多的,不是身份證上的年齡,而是寶貴的項目資歷,不過在層出不窮的新技術面前,保持一顆善學不斷的心,總歸是沒錯的。
就算你要干別的行業,也請你把現在的程序員做好,既然要當斜杠青年,抑或是斜杠中年,也得腳踏實地,一步步的來不是?分享與大家共勉!
都說程序員吃的是年輕飯,過了30歲以後的程序基本上都是行不通的。然而好像事實也是如此,一旦上了年紀的程序員,真的沒辦法和年輕的相比。
三四十歲的年紀,論技術沒有年輕人的跟得上時代,論體力你也拼不過年輕人,我老程序員唯一擁有的話就是經驗。那誰說做程序員就得干一輩子,沒有這種說法。如果說你不做程序員以後的話,其實你可以將你自己的這一身經驗,傳授給別人。
說白點就是直接去當老師吧,當老師待遇也不錯,工資而且還挺高的。如果你有教師資格證的話,可以直接去正規的學校應聘,老師如果說你沒有教師資格證的話,現如今有很多的那種私密的培訓機構,他們都會招收很多的講師。不管是學校還是公立的培訓機構,各自有各自的好處,但整體來說待遇都是非常不錯的。
就以普通的培訓機構為例吧,他們非常需要人才,需要講師,有的培訓機構甚至直接聘請一些在校的大學生去作為他們的講師,但可想而知這些大學生的話,他們也只是學生,真要論起實戰,是遠遠不如退休下來的程序員。
但當老師也不是程序員唯一的屈辱,其實還有很多方向可以去發展,如果你覺得你這個行業做膩了,想換點新鮮的去做一下其他,那你就可以勇敢的去嘗試。不管是各行各業,只要自己喜歡都可以去做,能勝任程序員這個職位的人,我相信都是非常的聰明,去做其他職業只是時間的問題,我相信都能夠勝任。
因為程序員,吃的是一種技術活,頭腦必須靈光。太笨的人真的當不了程序員,所以說那麼聰明的一個人轉行去做其他職業,一點問題都沒有。
有時候我也在想如果有一天我不做程序員了,接下來應該去做什麼。
再回鐵路行業,從鐵路行業出來的我,再去應聘個地鐵公司或者廠家應該不是什麼問題。
去工廠企業做維護,我的專業是自動化專業,做個電務的維護也還算可以,畢竟還記得PLC,DCS編程語言,我還是一個擁有高壓電工證的程序員。
去輔導機構,去做個英語老師,大學英語六級,以後准備考個雅思,教小孩英語,應該綽綽有餘了。
或者回老家包地,再把畢業以後扔下的單片機,FPGA拾起來,做一些農業自動化的東西,再結合我現在的web編程,創造一些農業新生態。
或者開一家燒烤,開一家有情調,有技術氛圍的燒烤,程序員可以憑工作證獲得優惠的燒烤,因為這個世界上太多的程序員需要安慰。
只要你想活下去,總會活下去。
我想每一個程序員都應該想過這個問題吧
首先,程序員行業普遍加班較多,年輕力壯還好,加班身體也扛得住,年紀大了就不一定了。
其次,步入中年後,你的責任可就不止工作了,你是家裡的頂樑柱,你是家裡的一份子,你要抽時間來陪伴你的她或他,陪同孩子老人吧。
第三,程序員行業技術日新月異,新技術層出不窮,你不可能跟小年輕拼記憶里,拼學習能力,所以你需要考慮轉型。
談談出路:一是堅持一個行業,精通業務,轉行做管理;二是年輕時做好技術積累,可以出書,寫博客做技術專欄,也可以做培訓老師;三是轉行自己創業或是轉移到一個對年紀要求不那麼大的行業
最後,祝所有即將步入中年或已入中年的程序員順利找到滿意的發財之路
1、轉產品經理、cto、管理層,如果往這些方向轉的話,建議平時工作中多管一些「閑事」,除了變成之外,例如產品同事的討論也多參與,多思考從產品上怎麼發展這個產品,對於轉型有很大的幫助。
2、未來編程肯定會往中小學生教育方面發展,可以考慮轉型做編程的教師。
推薦一本對我自己影響比較大的書:《軟技能-代碼之外的生存指南》,裡面涉及生活習慣養成、思維方式等等,凸現技術中人的因素,閱讀這本書可以全面了解軟體從業人員所需要知道的所有「軟技能」
F. 程序員應知應會之自動化運維那些事兒
對於一個開發人員來講,可能運維並不是自己的職責所在。但是作為一名開發人員,卻不能不了解自動化運維的整個流程。因為對於一個信息系統而言,開發和運維本質是一體的,尤其對於一些小公司來講,可能運維人員本身就是開發人員抽空兼任的。
而自動化運維,本質上是介於開發和運維之間的,是運維和開發的交集,甚至很多時候都要寫不少代碼。因此,任何一個開發人員,都需要有自動化運維的相關知識。
一個了解好的開發人員,即使自己不做運維相關的工作,也能夠知道自己在將項目交付給運維人員的時候,哪些東西是重要的,那些是必須配置的等等。然而在實際工作中,往往開發人員會給運維人員留下一些坑,一些只有他自己知道,而運維人員不知道的東西。導致運維人員自己試了很多次發現不行的時候,找到開發人員,開發人員研究了一下才會告訴他,在某某環境中必須用哪個埠之類的。這樣不僅白白浪費了運維人員的時間,也增加了很多溝通的工作量。
反過來也是如此,一些現場的問題如果運維人員不能現場給出問題的定位。對於開發人員來講是非常難以復現的。比如之前有某家企業,運維人員在客戶現場發現問題。費了很大力氣從客氣的內網裡面把日誌導出來,發給開發人員,結果開發人員仔細研究了日誌之後,發現是網不通的問題。開發人員顯然是不可能知道為啥網不通的,搞不好是壓根沒連網線。
所以今天我們來聊一聊,對於一個程序員來講,需要了解的自動化運維的那些事。
一、自動化運維的概念
隨著信息時代的持續發展,初期的幾台伺服器已經發展成為了龐大的數據中心,單靠人工已經無法滿足在技術、業務、管理等方面的要求。一個運維人員手工配置幾台伺服器還可能。配置幾百上千台伺服器那就累死了,還容易出錯。那麼就需要對運維工作進行標准化、自動化、架構優化、過程優化等。從面降低運維服務成本。其中,自動化最開始作為代替人工操作為出發點的訴求被廣泛研究和應用。
所謂自 動化運維,即在最少的人工干預下,結合運用腳本與第三方工具,保證業務系統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用的多一些: