研发中心各个岗位的设计和配合


本文是《IT研发中心管理思路、策略和制度》专题的一部分。


接着上一篇《研发管理思路和策略(一些经验和思考)》讲。


一、运维团队建设

运维团队主要有两拨人:

一类是和应用打交道的,包括应用运维和中间件运维、DBA,需要熟悉各种软件和操作系统;

另一类是与 主机和网络 打交道的,软件/硬件 都要熟悉。


由于现在的应用和中间件非常复杂,就会给 应用类的运维 带来一些难度,包括 部署、升级、监控、问题排查,举个例子:ElasticSearch,怎么部署,部署时怎么优化,怎么去监控,出现问题时如何排查?一个成熟的MySQL,就足以催生一批DBA,那么无数的比MySQL更不成熟的中间件(ES、Kafka、MongoDB、HBase……),是否也需要专人去维护?

日常的一些简单运维工作,逐渐不需要人工介入了,大部分都可以自动化。

而主机和网络 方面的,其实网络、操作系统、物理设备,知识更新没这么快,而且不会经常变动,但是也有一些新的挑战,来源于新的硬件,云平台,Docker等技术。


另外,注意我没把 运维开发,放到运维团队,因为根据我的经验,运维开发 更靠近开发,而不属于运维,运维于他们更像是需求方,运维开发 放到运维团队,地位和处境很尴尬。我把运维开发,放到了 架构管理部的基础平台技术组,该组负责服务公司其他团队,使用新技术、工具和平台帮助他们提升效率,另外基础技术组还可以孵化创新研究院,负责更先进的技术研究工作,比如AIOps。


1、系统运维(偏应用运维、系统管理)

主要工作:前期,当运维自动化程度不高时 ,负责日常枯燥的上线操作,以及服务监控,操作系统更新维护。可以兼资源分配和管理,以及简单的中间件运维。后期,运维自动化程度高后,大部分的应用上线操作都实现自动化,这方面只需要审核和监督即可。

技能要求:

  1. 掌握操作系统各方面的基础知识,熟悉Linux各种常用的软件和系统服务,掌握shell编程;

  2. 熟悉常用的运维工具软件,包括ansible、zabbix、ftp、vpn、cmdb、堡垒机、jenkins等;

  3. 熟悉常用的中间件,包括tomcat、mysql/oracle、nginx/apache、redis、kafka等,了解Java、Python等编程语言;

  4. 掌握网络、交换机基础知识及配置,熟悉VMWare等虚拟化技术,熟悉Kubernetes等容器相关的技术。

应用运维人员前期不宜招聘过多,日常忙不过来,可以抽调开发顶替,后期运维自动化、DevOps逐渐完善后,再评估所需人数。

PS:可能有人注意到,没有专门的“应用运维组”,是的,应用都由研发自己运维,但系统运维组会提供必要的协助和管理。


2、中间件运维

中间件是一种独立的系统软件或服务程序,泛指处于操作系统软件与应用系统中间的各种软件或服务,常见的中间件包括 数据库、redis、zookeeper、etcd、各种MQ、各种web/http server、Nginx/HA、HBase、Hive、ElasticSearch等。

主要工作:负责各种中间件的部署、优化、监控、维护、数据备份、问题处理等。比较大一点的IT公司,会用到很多中间件,而且许多中间件的至关重要,需要重点维护。中间件维护的重任,理应是运维团队来负责,一个因为是权限问题,二是日常性问题,其他团队不应该来维护中间件。但是,由于中间件涉及的技术范围广,运维工程师通常无法掌握这么多的技术,除了问题也很难去解决,所以中间件的运维,需要开发方面的技术骨干或架构师参与。


中间件运维,前期可以由架构师、开发技术骨干兼职,和运维一起来维护,当各种中间件比较稳定、监控比较完善之后,才完全交予运维进行日常维护,交予运维维护时,要有比较详细的维护文档/手册。运维最好是安排专人来维护。

即,最开始,没有专门的中间件运维人员,后期从 应用运维人员 中分出来 专门的 中间件运维工程师。其技能要求,同应用运维。


注意,我没有单独设DBA岗位,是因为数据库的维护,和其他中间件的维护并无多少区别,数据库的维护由中间件运维来负责。


3、系统运维(偏主机和网络运维)

说明:如果主机和网络维护的工作量不多(小型的数据中心),可以由应用运维和网络专家兼职!(如果使用云服务器,也可以不招聘这个岗位的人)

在建设初期的时候,需要准备好服务器,规划和配置好网络,虽然这些事情有厂商的人来做,但最好是有熟悉主机和网络方面的自己人参与。另外,日常工作,包括 服务器硬件的维护,服务器的虚拟化和操作系统的维护、资源的分配和管理,网络设备的维护,网络的配置等。主机和网络运维工程师,需要保证资源得到合理的利用和回收,网络和服务器的可用、好用。申请资源(服务器、CPU、硬盘等),找他,网络有问题,找他,服务器挂了,找他,网络方面的需求,找他。

职责:

  • 1.负责公司主机、存储和SAN交换等软硬件设备运维、优化及故障处理,负责机房的巡检、维护;

  • 2.负责各业务系统所需服务器的资源管理、环境搭建及部署;

  • 3.负责各种服务器、存储的配置规划、性能调优和资源可用性监控;

  • 4.负责公司网络设备配置及调试,如路由器、交换机、防火墙设置等,及网络流量分析和监控;

  • 5.负责公司主机服务器、网络等相关系统安全策略的配置和管理。

要求:

1.掌握计算机系统、网络、存储、安全等方面的理论及技术;

2.熟悉主流服务器、网络、存储厂商相关的软、硬件产品和设备;

3.熟练掌握主流网络设备配置和管理维护;具有大公司网络系统规划设计、建设及维护经验优先。


二、测试团队建设

偏业务逻辑方面的测试:自动化测试,应用测试;

非业务逻辑方面的测试:安全测试,性能测试;

因为安全测试和性能测试要求的技能水平比较高,而自动化和应用测试要求的技能水平较低,所以分为两个部门:

质量与测试部:自动化测试,应用测试;

质量与安全部:安全测试,性能测试。


自动化测试主要工作:

   接口自动化:一旦接口定义好之后,测试人员就可以针对接口设计测试用例。后端开发人员在开发过程中,可以通过接口自动化测试平台【AutoTestPlat,比如PostMan】及测试人员编写的用例进行接口测试,跑持续集成时,也会执行接口的测试用例。

   程序自动化(非接口自动化):测试的对象,可能不是标准的HTTP接口,可能是其他协议,也可能是一个客户端程序或者模拟器,通过编程的方式去测试服务器的功能是否正常。举个例子,测试的对象可能是一个大数据推送平台,测试人员需要使用SDK模拟客户端编写程序,去推送或接受数据,并对数据的准确性进行验证。常用的编程语言是Java、Python,也可能会遇到Golang。


   技能要求:

     1.有较好的编程能力,熟悉Java、JavaScript、Python等编程语言,熟悉Linux服务器及Shell脚本。

     2.熟悉基本的测试方法,思维缜密,善于寻找和发现问题,有较强的学习能力。


应用测试主要工作:

    【功能和业务测试,UI测试】—— 全流程保障产品质量,参与产品需求分析和系统设计,系统功能模块开发完成后,进行功能和业务测试、UI测试,参与上线测试,及已上线的产品的质量跟踪和问题反馈。

   技能要求

     1.熟悉基本的测试方法,逻辑思维缜密、分析能力好,细心,善于寻找和发现问题,并分析原因。

     2.具备一定的产品意识,能快速理解产品设计、熟悉业务流程。


安全测试,性能测试

    【从开发、运维和黑客的角度,对产品或局部功能、主机、网络及中间件,进行安全和性能方面的测试】

    【设计性能测试方案,测试出各系统的极限性能,为性能优化、系统扩容/缩容提供依据】

    【持续跟踪和优化生产系统的性能和安全性】

   技能要求

     1.有较好的编程和运维能力,熟悉Java、JavaScript、Python等编程语言,熟悉Linux服务器及Shell脚本。

     2.【安全测试】熟悉常见的安全漏洞原理,并有兴趣(和极强的学习能力)去模拟重现,具备一定的hack技能。

     2.【性能测试】熟悉性能测试基础知识,比如响应时间、吞吐量、负载、并发、思考时间等,并了解相关的测试方法。

     3.该岗位要求跨语言、跨技术的复合型人才,具备一定的开发、测试、运维能力,无论什么语言、什么技术、什么软件,都能很快掌握并实践、为我所用。(该岗位不招初级,只招中级以上,最好是有一定的开发经验,并对安全有独到的理解,可以由架构师兼职)


招聘及人员组成原则

1. 每个核心岗位都有人员备份,每个岗位至少两个人;

2. 自动化测试团队,至少要有两名测试开发人员(其中至少有一个为中级以上,最好是会Java、JS和Python),其他人员只需要写Mock数据和用例,可根据任务量动态从系统测试人员中调整;

3. 应用系统测试人员,建议以细心、沟通能力好的女生为主要构成,以平衡整个研发中心的男女数量

4. 安全测试岗位,兼任公司信息安全负责人,至少有两个人,其中一个有等同于高级开发的水平(最好是同时会Java、JS和Python),其他的可以做他的助手;

5. 所有和开发有关的岗位,都主要按开发来招人,征询本人意见,如果同意,招进来后安排到测试相关的团队中。


三、设计师(UI/UE)团队建设

主要分两类:

UI:User Interface 用户界面

UE or UX: User Experience 用户体验

它们的区别参见:https://www.zhihu.com/question/27928975

我们将 UI 和 UE 岗位职责合并,UI 也负责基本的UE


另外,有一个常见的问题:UI设计师要不要负责切图?

参见一文:因ui设计师不愿切图,被人事劝退

或者搜索一下:美工不负责切图吗


注意:此处所说的“切图”,是指“将设计稿切成便于制作成软件界面的图片”。并不包含编写html、css等程序。


我的答案是:UI设计师要负责切图;不但要会切图,还要会Web、Android、iOS各平台的切图,及各种切图技巧。

理由如下:

    1.UI设计师是要负责app项目的,而安卓和ios开发的程序员,是不会切图的。

    2.切图,本质上是对图片进行处理,而处理图片这件事情,显然设计师更擅长,而程序员更擅长的是编程。

    3.设计师切图,更能精确无误的做出UI图片组件,而且做图过程中,更能体会平面设计和UI设计的区别。

    4.切图可能会涉及到一点后端的知识,比如怎么拉伸、重复、定位等,但是这些都是图片操作的简单知识,并没有超出设计师的工作范围。

另外,必须声明,UI设计师只需要提供设计稿中涉及的图片、图标、背景图案即可,不需要编写程序组装界面。所有涉及到编写程序的工作,都由程序员完成。


UI/UE设计师的工作职责:

    1.负责公司各类软件的UI及交互设计,主要包括Web网站 和 Android/iOS App:根据产品文案或者需求,完成界面及交互设计,并根据软件需要完切图图片的制作。

    2.偶尔兼职负责一下非软件类的平面设计,包括Logo、海报、印刷封面、PPT等。


岗位技能要求:参见各大招聘网站的岗位描述。


© 2009-2020 Zollty.com 版权所有。渝ICP备20008982号