自學python和openstack達到怎樣的水平能夠去雲計算公司上班?

雲計算,換工作


之前參與公司面試和出部分校招題,談談個人看法吧,這裡我格外強調個人看法,因為這確實就是我的個人看法,不代表所有人,更不代表我公司。說實話,在公司校招的這個問題上還產生過爭議。

關於編程語言問題,其實我覺得編程能力和解決問題能力更重要。OpenStack是基於Python語言實現的沒錯,掌握Python是作為OpenStack開發的基本功。但Python需要掌握到什麼程度呢?我個人並不認同死摳語法(諸如空字元串、空列表、"False"、[False]...,轉化成bool類型哪個是True,哪個是False),掌握基本的語法、熟悉debug以及常用的Python庫就夠了。OpenStack連lambda表達式其實都很少用,相對高級的語法也就裝飾器、反射機制了。編程語言大多是共通的,如果熟悉C、Java,轉向Python並不需要花很多的學習精力,僅僅需要一個適應的過程而已。相對編程語言本身,我認為演算法能力、數據結構、建模能力、設計模式、編程藝術、代碼規範更重要,花費大量時間在摳語法上,不如多學點方法論。當然為了考察Python的基礎,也會問幾個Python的相關問題(本人隨意列舉,與實際面試無關),比如:

  • Python是否支持重載?
  • Python的屬性和方法是否支持許可權訪問控制?
  • Python是否支持運算符重載?
  • range和xrange區別是什麼(何謂生成器)?

關於第二個問題,OpenStack需要達到什麼樣的水平?這個沒有絕對的評判標準。因為OpenStack不僅包含一個龐大的項目集(計算服務Nova、塊存儲服務Cinder、對象存儲Swift、編排服務Heat、裸機服務Ironic、容器編排服務Magnum...),還涵蓋了龐大的技術生態(數據中心、運維、高可用、虛擬化技術、存儲、網路技術...),要想精通OpenStack的所有方方面面,難度較大。所以,首先得明確你想要做什麼,才好有針對性的學習什麼,而不是鬍子眉毛一把抓。

當然從事OpenStack相關的任何工作,對OpenStack的基本感性認識是必須的,不可能精通每個項目,但至少得熟悉OpenStack的幾個核心項目(Keystone、Glance、Nova、Cinder、Neutron、Swift),知道它們都是幹嘛的,包含哪些服務,各個服務是什麼作用,服務之間是如何通信的,最好能理清各個服務的數據流。下面針對不同工作進一步細分:

  • OpenStack開發:主要參與社區開發或者內部patch。除了以上提到的Python語法,還需要掌握OpenStack項目的代碼結構,可參考int32bit/openstack-workflow。追蹤焦點項目的社區開發進度和新特性,參與社區討論並貢獻代碼。打開一個模塊的一個方法,需要快速地定位是在哪個組件運行的(nova-api?nova-conductor?nova-compute?)。OpenStack的項目結構還是相對統一的,掌握了一個項目,其它項目的骨骼也就基本清晰了。以上是OpenStack開發的通識基礎。當然如果你對Nova感興趣,則還需要對Nova的架構和原理非常熟悉,掌握調度演算法和常用的filters,熟悉libvirt以及虛擬化技術。如果研究Cinder,Cinder通常都會使用Ceph作為存儲後端,因此通常還需要學習Ceph的知識,Cinder如何支持多存儲後端?為什麼cinder-volume不支持AA高可用模式。而如果是Neutron的話,其實更多的知識是網路技術,對ovs的熟悉是必要的。其它的高級服務,比如Sahara,當然還需要對Hadoop/Spark有一定的了解,尤其是CDH的部署,而Magnum則需要對K8S以及Swarm有一定的了解。
  • OpenStack運維: OpenStack的實現原理、架構,熟悉OpenStack的API。還有一些傳統運維相關的技能,如排錯、資料庫調優、網路故障、服務監控等。
  • OpenStack部署實施: OpenStack的部署架構、配置優化,通用技術如網路規劃和配置、自動化部署(如Puppet、Ansible)等。
  • 架構師:OpenStack服務和組件原理、高可用技術、故障恢復、異地容災等。
  • OpenStack測試:測試是所有項目都必須的,並不是OpenStack所特有的,測試方法和場景也類似,包括功能測試和驗證(PoC驗證)、集成測試、性能和壓力測試等,測試方法如monkey測試、冒煙測試等。OpenStack測試相關的項目如Tempest、Rally。
  • OpenStack產品設計:熟悉OpenStack所包含實體的概念以及作用,比如server、volume、flavor、stack等。熟悉OpenStack的API。其它產品設計的通用技術,比如UI設計、用戶體驗和交互、前端技術等。
  • OpenStack方案、售前、售後:對整個OpenStack生態有基本認識,OpenStack有什麼優勢,市場情況如何,前沿技術調研,與別家產品有什麼差別等等。

以上是針對OpenStack直接相關的,還有與OpenStack生態相關的技術,如存儲相關技術(分散式存儲原理、數據一致性、對Ceph有研究等)、網路相關的SDN技術等。除了以上的硬實力,其它的諸如心理素質、溝通能力、學習能力以及對技術熱愛、開源社區貢獻、對前沿技術敏感等也是十分有用的。

新手的話,建議從手動部署開始,推薦按照官方文檔一步一步執行Ocata Installation Tutorials and Guides,安裝文檔還包含對各個服務的功能介紹,這是非常不錯的入門學習資源,最好能夠從頭到尾過一遍,順便還能熟悉OpenStack的CLI。安裝完成後,好好折騰折騰,先把OpenStack玩溜。

另外可參考從職業規劃方面考慮,openstack的就業前景如何? - int32bit 的回答 - 知乎。


你們要認識到,自學面前的面試門檻,不是技術,是HR。。。


1、首先要請問你一個問題,你能寫代碼解決問題嗎?

看看下面的題目能不能寫出代碼,如果不能,需要認真學習編程,從基礎訓練起。

Python習題:Python 判讀是不是等差數列,要求演算法時間複雜度為O(NlogN)

Python習題:Python 判讀是不是等差數列,要求演算法時間複雜度為O(NlogN) - 知乎專欄

Python 練習題:走迷宮

Python 練習題:走迷宮 - 知乎專欄

Python列表元素分組

Python列表元素分組 - 知乎專欄

Python 面試題:相同字母異序詞。

Python 面試題:相同字母異序詞。 - 知乎專欄

python剪刀石頭布編程思路

Python剪刀石頭布編程思路 - 知乎專欄

2、如果自己會編程了,將運維中需求,以前用shell 寫的,全部用Python實現。

運維過程中,有很多需求,用Python 實現自動化。

3、自己寫一個cmdb 系統,就可以去找運維開發的工作了。

4、openstack 會配置,能二次開發等等。


吶上班之前簡答一發

入職雲計算公司一年多了, 雲計算這個東西其實是個很大的範圍, 從提供的服務分類來說的話就有Iaas, Paas, SaaS, 不知道題主對哪個感興趣.

和Openstack相關的就是Iaas.然而, Iaas又可以粗略分為三大塊, 即就是:計算虛擬化, 網路虛擬化,存儲虛擬化.其實雲計算/OpenStack的系統底層基礎不就是虛擬化嗎?

如果你對計算虛擬化感興趣,可以去看看kvm, Qemu.

如果你對網路虛擬化感興趣, 可以先去看看傳統網路,然後就是openVswitch, Openflow,還有什麼"軟體定義網路啊(SDN)", 比如,openstack中的Neutron組件就是軟體定義網路的一個實現.

如果你對存儲虛擬化感興趣, 還是要先了解看看傳統的存儲,推薦&<存儲技術原理分析:基於Linux_2.6內核源代碼&>這本書,前幾章可以對傳統存儲有個了解, 然後可以去試著了解Ceph.畢竟Ceph是Openstack後端存儲最流行的解決方案了.當然Ceph也可以不結合Openstack,單獨使用也是可以的.當然, Openstack中的Cinder或者Swift就可以算作是Ceph的前端了.


前後兩份工作都是雲計算的,最簡單的一個標準是看看你能不能給openstack提個有意義的補丁?不是那種注釋或拼寫錯誤的補丁。

雲計算涉及很多方面,如虛擬化,網路,存儲,最好選一個方向深入。面試時大都也在這些方面,例如虛擬化原理qemu是怎麼模擬CPU/內存/IO的?三次握手是怎麼回事?簡述下文件系統的簡單實現?


對於安裝devstack而不能的同學,推薦使用 OpenStack Docs: Quick Start

openstack/openstack-ansible

順便貼一下我去年怎麼裝devstack的,不保證現在還能用。

adduser stack
sudo visudo
#Find the part of the file that is labeled "User privilege specification" #and change it to the following

# User privilege specification
root ALL=(ALL:ALL) ALL
stack ALL=(ALL:ALL) ALL
#Close the file, exit and log in as "stack". Download devstack and create #/opt/stack

cd /home/stack
git clone https://github.com/openstack-dev/devstack -b stable/liberty
sudo mkdir /opt/stack
#Create your local.conf file under /home/stack/devstack and give the #following permissions.

cp /home/stack/devstack/samples/local.conf /home/stack/devstack

sudo chown -R stack:stack /home/stack/devstack
sudo chown -R stack:stack /opt/stack
sudo chmod 770 /home/stack/devstack
sudo chmod 770 /opt/stack
#then run
./stack.sh

------------

直接去互聯網吧,不然辛辛苦苦混了這麼久還得回互聯網公司上班,何必那?女怕嫁錯郎,男怕選錯行。後悔三年前拒了灣區的offer來了什麼勞么子云計算。

順便打個求職廣告。

openstack contributor, leetcode 出題人. COA(certified openstack administrator) reviewer, n年職業老碼農,3年多openstack,干過相當規模的私有雲(osic),熟悉部署,熟悉定製,熟悉linux bridge和各類存儲後端。位於美國,現在誠心求職國內,手下少打工的大牛們請給我介紹工作,謝謝。要求真不高.


自學到什麼程度,能夠去雲計算公司上班,自己能夠面試成功,這是大多人的目標,也是短期的夢想,雲計算公司,主要是提供資源計算,這和大數據、人工智慧具有一定的關係,互聯網產生了數據、雲計算和大數據成就了人工智慧。

自學Pyhton有什麼用,為什麼學會了Python能夠去雲計算公司上班呢,主要還是因為Python與大數據、人工智慧之間的關係,相互依託,互為支撐。

其實,首先要對自己有一定的定位,前期肯定是數據公司,數據是智能革命的驅動,個人建議,自學Python,Hadoop、實時計算,然後去BAT,這些大公司上班,都是有可能的,不過,在此之前,一定要知道,大數據時代,在各行各業的具體應用是什麼? - 大數據 多智時代


更直接的,找一個小型的公司,在實踐中學習


本人28,國企it運維4年,計算機小碩,現在的工作看不到希望且枯燥乏味,考慮通過自學,轉型雲計算運維,甚至是開發。或者知友有其他出路建議,請知友指點和幫助,謝謝。


推薦閱讀:

TAG:雲計算 | 跳槽 | Python | OpenStack |