机器学习平台

我的团队建设历程

2019-11-05  本文已影响0人  王勇1024

不知不觉,从去年9月份入职到现在的公司,已经过去一年了。这一年付出了很多,也收获了很多,在此想把这一年的经历做一下简单的总结。

团队的问题

在我到公司之前,团队有两个人:一个是混日子的老员工gy,一个是未毕业的实习生。团队管理一塌糊涂,几乎没有任何管理可言。下面我列举了一些典型的问题(排序不分先后):

真的是我工作以来见过的最差的团队和员工了,没有之一。不管怎样,既然来了,我就得想办法做好

制定团队目标

一个没有目标的团队,就是无头苍蝇。
通过和领导讨论,以及团队内部多次讨论,我提出一个一站式机器学习管理平台的团队目标,得到了领导的认同。

基本制度建设

从上面的各种问题来看,根本原因是缺乏基本的管理规范,所以团队才会这么混乱。所以我就首先制定了一些管理规范(包括Git分支规范、Java编码规范、测试规范、发布规范等)。为了便于推行,我制定的这些规范都非常简单且实用。比如Git分支管理:

还参照阿里巴巴Java代码规范制定了一套极简版的Java代码规范,并在团队内推行,确保每个团队成员都能正确理解。

文档化管理

文档的缺失是团队管理的重大失误,也是团队的头号风险。
我在入职后第一步就开始边看代码变完善文档,一个月后就把大面上的文档基本都完善了,写了十几篇,一篇一篇与gy确认。gy每次都是“差不多”、“基本就是这样”几句评论,我就拉上领导一起看,多次修改确保自己真正理解正确。
我本来想在团队内推广文档规范,gy完全不配合,领导多次督促,gy也压根儿不当回事儿(遇到佛系员工,CEO来了都不好使),为了避免引起矛盾,我就自己主动替他完善文档(付出终究会有回报的吧,我是这么认为的)。

技术建设

技术架构

在我加入团队之前,团队有个简单的管理后台,是基于Spring Boot开发的,虽说是一个Spring Boot项目,使用方式却非常的low,连基本的多环境支持都没有,更别提微服务架构了。

所以,我就抽时间去设计项目的技术架构,解决了一系列技术问题后,基于Spring Boot开发出一套包括(不限于)如下功能的微服务架构:

在此架构的基础上,我将原来的代码进行拆分,合理地拆分成几个微服务,并对这几个服务进行独立部署和维护,bug数量下降非常明显。

也正是得益于这套微服务架构,开发速度提升了至少3倍,我后来一个人仅用了一个月就把项目做了重新设计和实现,后来又用了两个月开发了很多实用的功能,用户反馈非常好。

重写管理后台

最初的这个管理后台,用户体验只能用一个字来形容,连比我早来3个月产品同学都不知道怎么用(一点儿不夸张),更别说用户了。所以,很多用户宁愿用脚本也不愿意用这个管理后台

另外,平台上的所有操作都无记录,实验归属也非常混乱,很多都没有负责人。

针对这个问题,我和gy讨论过很多次,他都坚决不做,还自认为自己做的已经非常好了,没必要修改(通过后来对他的了解加深,其实他根本就是不想做,只要不让他干活就行)。

和他讨论了几次,他都以各种理由拒绝。我本着以数据说话的原则,把用户的操作记录下来,并输出了图表,这样就一眼能看出用户的使用频率和使用习惯。图表的结果比我预期还差,用户平均每天操作次数不超过10次

有数据后,我再此找gy讨论,他态度不再强硬,但依然什么都不想动。讨论无果后,我只好拉上领导一起讨论,领导对我的想法非常赞成,也表达了对现状的不满。gy看到推脱不了了,就直接撂挑子不干了,说这块让我来负责,以后自己就不管了,从大局考虑,我就果断接受了。鉴于他那些让人无语的编码风格,我也实在不敢让他写代码,就自己动手去做。

于是,我推翻了之前混乱的设计(如果这也算设计的话),做了全新的设计,重新编码。用了两个月的时间,把用户平均操作次数从不足10次,提升到了100次以上
我主要的策略是:

训练页面

后来由增加了对TensorFlow训练的支持,用户纷纷点赞,目前平均每天用户操作总次数超过2500次,较之前提升了15倍

资源优化

最初对资源的分配处于一种几乎完全无管制的状态,用户可以随意申请资源,经常用户启动训练时没有资源,而实际资源利用率不足30%,造成大量资源浪费,经济损失超过200万元人民币。
详见:机器学习平台——资源优化之路

在短短两个月的时间里为公司节省了43台高配物理机,经济价值超过120万元

监控报警

监控实在太重要了,可以帮助我们快速发现系统中存在的风险和问题,从而可以快速响应,消除风险,解决问题。所以,我就给系统添加了负载监控(磁盘、内存、CPU)、进程监控、各种业务监控。使问题发现时间缩短到3分钟以内,问题响应时间缩短到10分钟以内。

自动化运维

借助ansible实现了自动化运维,使每周人工运维时间从20小时缩短到不到0.5小时。宕机次数从20+次/月减少到1次/月

摒弃非核心业务

在很长一段时间内,我们的团队几乎是处于与世隔绝、完全独立的状态,整个系统所有的外部系统都是自己来搞,redis、mongodb、监控系统都是自己搭建和维护。这些系统的建设花费了不少的时间,但没给我们带来任何收益。所以,gy离职后,我就逐步下线这些外部系统,积极与公司已有系统进行对接。这也节省了一定的时间。

总结

经过一年的努力,我的团队创造了一下收益:

这一年是充满挑战和收获的一年。

上一篇 下一篇

猜你喜欢

热点阅读