之前参与公司面试和出部分校招题,谈谈个人看法吧,这里我格外强调个人看法,因为这确实就是我的个人看法,不代表所有人,更不代表我公司。说实话,在公司校招的这个问题上还产生过争议。
关于编程语言问题,其实我觉得编程能力和解决问题能力更重要。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玩溜。