如何提升团队的研发效率?阿里工程师这么做

简介:

背景

大约在5年前,也就是2013年我刚加入阿里的时候,那个时候 DevOps 的风刚吹起来没多久,有家公司宣称能够一天发布几十上百次这意味着相比传统软件公司几周一次的发布来说,他们响应商业需求的能力可以甩后者几条街,而且这差距根本不是加班能赶上的。今天的 AliExpress 技术团队小几百人的规模,可一天发布几十次也已经司空见惯了,这主要得益于三个方面:

 ●   非常彻底地微服务化,拆分粒度很细,且旗帜鲜明地反对重二方库。
 ●   阿里集团整体的运维标准化,尤其是 Docker 技术的全面覆盖。
 ●   AliExpress SRE 团队不断努力保证稳定性。

然而,效能这个东西,你永远不会说:“够了,够快了”,尤其是在当下的消费型社会,人人都是消费者,而消费者恨不得脑子里的欲望刚闪现出来,你的商品或服务瞬间就到他面前。况且,随着我们不断国际化的步伐,新的因素必然会影响原来的高效能。

沟通带宽衰减问题

第一个因素是研发团队自身的发展和变化,今天的 AliExpress 技术团队已经是一个名副其实的分布式国际化团队,工作地是杭州+深圳+莫斯科+马德里+其他欧亚都市,外籍同学的比例是 15%,而且能看到这个比例会不断提高,新的国外工作地点也会增加。而这样的团队,对比在同一层楼里的一群中国人组成的团队,是有本质的区别的。

我们可以将人与人之间的沟通和网络通信做类比,我们知道网络通信是有带宽的,从早期的拨号上网几十K,到现在的家庭宽带主流的几十上百M,再到数据中心内部局域网内部G级别的数量级,带宽越大,能传输的信息也就越多(通常浪费也就越多)。而人与人之间沟通也可以认为是有带宽的,例如充分信任的全由中国工程师组成小团队,平时相互一起吃饭散步聊天,大家彼此都特别了解,沟通起来就特别顺畅,想到一个点子转个朝向说两句对方就懂了。可对于一个分布式国际化团队来说,这个沟通带宽可是衰减得厉害:

 ●   中文到英文的转换,衰减一次。对于大多数人来说,英语不是母语,沟通的效率自然会降低。
 ●   单地到多地,衰减一次。电话,视频,钉钉,都没有面对面沟通来的高效。(否则大家都不会不约而同地刷脸了)
 ●   时差,再衰减一次。杭州和莫斯科的时差是5个小时,所以基本上北京时间上午我们是联系不上莫斯科的同学的。
 ●   文化的差异,再衰减一次。例如很多我们可以用来增强感情的团建方法,撸串K歌王者吃鸡,外籍同学可能完全不感冒。

那有人可能会说,既然沟通成本这么高,那直接在一个地方全部招中国工程师多简单?这么做简单是简单的了,可都这么搞的话,怎么在全球范围吸引优秀的人才呢?更何况 AliExpress 的用户基本都是老外,这后面的人才如果全是中国人,听起来这生意就不太靠谱对不?谷歌微软亚马逊,哪家不是在全世界搜罗顶尖人才?

所以说,既然沟通带宽的衰减是难以避免的,那我们唯有把对这带宽的利用率提上去。具体我们已经做了,或者在做一些事情:

 ●   尽可能和行业主流技术接轨,降低工程师学习成本。我们 基于开源 Spring Boot 做的阿里巴巴生态集成 ,摒弃 antx, webx, pandora,都是这个思路。
 ●   English First:注释,文档,工具,英文必选,中文可选。
 ●   服务发现 ,让所有微服务可见,增强自描述,可搜索。

拥抱 Kotlin

关于开发效率,我个人认为所有 Java 程序员都应该认认真真、仔仔细细去看下 Kotlin,因为这门语言太简洁了,而且和 Java 可以无缝互操作,完全具备生产环境使用的条件。

acec9f50871a0f5391f5fd95d065a88aac7ad9e2

有关简洁,我这两天把一块 Java 代码改成了 Koltin,在丝毫不降低可读性的情况下(实际上可读性是提高了),代码行妥妥地减少了 1/3

此外我忍不住分享一下最近我基于 SergeyKotlin HSF DSL 写的一个将函数发布成 HSF 服务的功能:

f7909caea4201816e26667980ccca133328858c4

只需要不到 15 行代码,就可以启动一个 Spring Boot 应用,把一个字符串小写的功能发布成 HSF 服务,大家可以对比下 Java 需要写多少东西。语言层面的升级,给框架,中间件,API设计带来更多的可能性,这就能使我们砍掉更多的所谓脚手架代码,让业务代码更精简,更优雅,进而带来效率提升。

作为程序员,如果只掌握一种语言,是非常危险的,因为这种语言的各种设计会禁锢你的思维。我自己会在业余看一些其他语言,不过在日常工作中基本也只能写 Java(如果 shell 也算一种语言的话,还是写过些 shell 的)。不过从现在开始,我会开始尽可能地用 Kotlin 写代码,我的团队也全面把日常编程语言从 Java 切换到 Kotlin,其实我们都已经不算 Early Adoptor 啦,雷卷在一年多前就已经不停在鼓吹 Koltin 并上线了一个应用,AliExpress 俄罗斯办公室的 Sergey 等同学也已经在生产用上了 Kotlin,Sergey 个人也在很多地方分享他的经验。

我们会推动 AliExpress 拥抱 Koltin,从语言层面来提升我们的效率。

阿里资深技术专家雷卷,在他最近的一篇谈程序员学习的文章中写了很多东西,我都是很认同的,其中一段话尤其想点赞:

不要和程序员谈自己的编程历史,很多经验今天已经不适用啦,可能有一些,但是会给别人带来甄别成本,别人也懒得来甄别。2-3年不关注技术,基本快和程序员和编程绝缘啦,不是绝对,但是通常不会错。

持续学习,与诸君共勉。

FaaS

Function as a Service,又一个新的 Buzz Word?是的,不过我还真的相信这个 Buzz Word,行业里 AWS Lambda, Google Cloud Functions, Microsoft Azure Functions 等服务相继推出,大家都在尝试把自己的业务往上面搬,这其中的道理在哪?

如果作为云服务提供商,这个道理是很显而易见。你的对手按照 docker instance 收费,2 core 4g 起,一小时多少钱;如果你能做到按调用次数收费,一小时内运行了 30 次。那这个价格差必然是数量级的,用这一招就可以秒杀对手了。

上面所说的纯粹是硬件成本的考量,但我们还需要从效率方面看这个事情。

首先由于 Function 天生是无状态的,而且是足够轻量的,那么理论上做到 ms 级别的 auto scaling 是没有问题的,例如 graalvm 就在这方面很有潜力。

d956c000d94be9c271b3b0b709211c3c6f7010b4

ms 级别的 auto scaling 不仅能够大幅提升资源利用率,更是提升了运维效率,开发几乎就不再需要考虑容量的事情的。例如在双11的时候,我们做大量的压测,很大程度上是为了保证系统各个部分的水位在预测的安全的线上,如果做到了实时扩缩,那么当流量高峰来的时候再扩容好了。

什么是轻量?

今天很多工程师可能已经忘了轻量的概念是什么,大家就是各种侵入,写个简单的应用,打出来的 jar 包,业务代码的占比往往不到 1/10。

2f6253d8dbf1b4fd8535aae248adc99c303e9870

先不说这里可能无谓浪费了多少内存,无谓增加了多少启动时间。这个 client 那个 share 满天飞带来的最麻烦的后果就是,开发经常要做各种升级,而且一升就挂,一查就半天。打着所谓性能旗号的各种重客户端,就是反服务化的;各种缺乏细心设计的 API 导致的不兼容升级(而且是暴力推动,不升级卡发布),就是反工程师操守的。

微服务化做得好的,应该积累一大批轻量的接口,使用这些接口甚至都不需要引入什么 share/open/client 的依赖,直接用 HSF 的泛化调用即可,这样的接口才不对用户有代码侵入。

我们已经在 AliExpress 尝试(并已经上线)基于 Koltin DSL 和 HSF 泛化调用编写 Function,用户只需要依赖很简单的一个 FaaS SDK 就可以编写业务代码,基于前面提到的阿基米德服务发现,他可以快速重用现有服务,做一些聚合和过滤的操作,满足业务需求,这个在贴近无线的业务中非常有用。当然,这个尝试只是一个开始,但我们已经看到,其实有大量的业务逻辑(在 AliExpress 可能是 5/1 至 1/3)其实自身不依赖于数据,可以做成 Function,而且我们可以做到让这些业务不依赖任何业务二方库,甚至借助 Service Mesh 等技术,不依赖于任何中间件 client。这些业务的 owner 不需要关心各种乱七八糟的升级问题,不需要关心容量问题,真正地只关心自己的业务逻辑。

我认为这是 FaaS 该成为的样子,而我及我的团队,正不断努力去实现之。


原文发布时间为:2018-10-8

本文作者:许晓斌

本文来自云栖社区合作伙伴“阿里技术”,了解相关信息可以关注“阿里技术”。

相关文章
|
新零售 测试技术 持续交付
阿里如何定义团队的研发效能?
作者:何勉,阿里巴巴研发效能部资深技术专家 相关阅读:都996了,研发效能还是提不起来,关键在这里 因为身处研发效能部,我接触了公司很多产品技术团队。他们几乎都把研发效能提升列为了本财年的重要目标,大部分还为此成立专项。
18561 0
阿里如何定义团队的研发效能?
|
5月前
|
监控 安全 开发者
项目管理软件:提升研发团队效率的关键
项目管理软件解决软件研发团队的周期长、迭代多、需求跟踪混乱等问题,提供工时评估、甘特图监控、任务管理等功能,增强团队效率和协作。通过集中文档管理,保证信息安全;移动应用确保实时通讯。软件助于绩效考核、项目节点把控,以透明化任务分配减少信息不对称,提升团队合作。
86 9
|
搜索推荐 测试技术
持续提高软件研发团队效能
提高软件研发团队效能是一个持续的过程,想要快速提高效能的实践几乎都是以失败告终。
179 0
|
数据采集 数据挖掘 BI
数据研发“新人”如何快速落地?
本文将以“如何快速落地”、“快速适应新环境”为出发点,探讨数据研发“新人”如何快速了解公司业务、领域模型和业务系统,然后快速高效的推进相关工作,赢得合作伙伴的信任和支持。
41018 36
|
敏捷开发 机器学习/深度学习 搜索推荐
如何做好创业公司研发团队的项目管理?
探讨创业公司中的软件研发项目管理问题: 大部创业公司的软件研发管理处于什么阶段? 如何改善软件研发过程和提高效率? 软件研发过程会涉及哪些工程理论和方法?
357 0
如何做好创业公司研发团队的项目管理?
|
敏捷开发 搜索推荐 架构师
|
监控 前端开发 数据可视化
大厂机密!30 个提升团队研发效能的锦囊
万字长文不想看,那就听一听叭 ↑互联网大公司价值上亿的项目背后,团队成员是怎么高效协作开发的?和我自己开发辣条项目时有什么区别?看完本文,保证让你大开眼界!鱼皮在学校的时候...
302 0
|
人工智能 运维 监控
8 年产品经验,我总结了这些持续高效研发实践经验 · 研发篇
在产研全链路流程上,协同最大的目标就是团队信息的透明化,即在清晰目标的指引下进行团队信息透明的日常研发工作,助力项目/产品成功发布。基于此,研发过程是否行之有效就成为我们关注的另一重点要素。通常「研发过程」是指:代码到制品再到部署上线的全链路,这个过程是持续集成的重中之重。
670 0
8 年产品经验,我总结了这些持续高效研发实践经验 · 研发篇
|
存储 监控 API
如何提高团队的研发效率?
  研发效率是在现代企业都关注的,注意是因为靠谱的工程师是有限的,而且软件工程师的人力成本较高,时间成本更高。在大多数情况下,软件工程是一个团队活动,通过协作实现突破。好的想法从不匮乏,但高速执行却不那么容易。高效团队会习惯于更高的标准。当研发速度停滞时,人们会创造性地寻找重建高速产出的方法,但是如果长时间停滞,也会造成人员的流失。   如何提升研发效率呢?或者说,研发速度是否可控呢?   速度是位移和时间的函数,很多时候,位移方向的目标更容易被忽视。然而,项目失败的最常见原因是团队构建了错误的东西。“绕树三匝,何枝可依。”,实际上,方向错了,停止就是进步。
548 0
|
运维 测试技术 Java
精华集锦 | 阿里如何提升团队的研发效能?
云效鼓励师:以下是我们整理的云效公众号上【研发效能】相关的爆款文章,这些内容中有许多都曾获得阿里技术、infoQ等多家技术自媒体大号的转载。总之,篇篇都是精华,篇篇都值得细读,送给正在提升研发效能路上的你,强烈建议收藏哟! 研发效能实践图谱 注:下划线文章,点击即可跳转 1、阿里如何定义团队的研发效能? 要想改进研发效能,先从明确定义开始。
8371 0
精华集锦 | 阿里如何提升团队的研发效能?