写点什么

环信首席架构师梁宇鹏谈架构、管理及成长

  • 2015-10-18
  • 本文字数:4444 字

    阅读完需:约 15 分钟

EGO 是高端技术人聚集和交流的组织,每周我们都会对一位会员进行人物专访,在展示会员风采的同时,也分享会员们对技术、对工作、对人生的感悟,本周,我们邀请到了环信首席架构师梁宇鹏。

擅长的领域

我一直的工作都在即时通讯领域,所以对 IM 相关的业务都比较熟悉。亲手做过的系统规模从十万、百万到千万级别一路增长过来,在分布式系统设计和服务高可用保证等领域也算有些积累。

分布式系统设计方面。曾经把一个百万级天天报警超时的系统,优化为基本零报警的千万级系统,而且期间系统承载用户翻了一番;也曾经把一个系统的速度提高到原来的一百倍性能,机器数量还减少了一半;现在刚刚把一个系统从十万级别做到千万级别,就是环信的这套系统,而且这个过程中用户数是按月指数级增长的。

即时通讯方面。我开始的大多数时间都专注在 XMPP 方面,但是随着移动互联网的兴起,网络情况和用户通讯需求的变化,大概在 12 年左右设计了适应移动互联网的新的通讯协议,现在正在做最新的更简化更通用的版本。

后端服务的云化不可阻挡

后端服务的云化不可阻挡,越来越多的后端服务会挪到云上。如果你做云服务,这服务的规模也会越来越大。亿级的平台应该不在少见,遇到的挑战越来越大,随之而来的技术也会越来越有意思。现在的容器化就是一个例子。

即时通讯领域之前还是在于沟通,从移动互联网开始到后面的物联网,重心应该更在于连接,链路更加不稳定,承载的数据却更加多元。长远来看,万物都将互联。借着云服务的东风,我们将有可能把这样的通讯框架作成基础设施。一个可靠而稳定的通讯框架,将极大促进各种创新应用和服务的出现。

搭建现实与理想桥梁的架构师

架构师最重要的素质,可以搭建现实与理想的桥梁。用总理的话说,既可以仰望星空,又能脚踏实地。

对于一个还不错的工程师来讲,如果他做过百万级的系统,你让他再做一套百万级的系统,他可以做出来。但你再让他做一套千万级的系统,那就未必了。更进一步,你让他做一套十万级的系统,如果他之前没做过,你会发现他做出来的还是一套百万级的系统。

不要奇怪。

所以这里有两点,一是知道理想是什么样子,也就是知道目标系统的架构;二是明白当前的现实情况,发现最需要优化改造的地方。

这对于一个快速发展的创业公司尤其重要,业务发展快,要求系统承载能力可以跟得上,慢一步失去机会,公司的生存都会受影响。与此同时,团队小资源有限,人力尤其紧张,你不可能把所有想做的改造一下子都做完。很多人讲创业需要拼,但是终究需要遵循物理规律。

所以你需要规划这样的演化路线,让系统跟得上公司发展的步伐,又不至于过分透支团队。我们常讲,一个能够运行的系统要好过一个完美的系统,有时候为了能够支撑业务我们会做一些比较脏的事情,但更多的时候,你还需要考虑,如果实在要做这些事情,如果做可以让他们在以后的系统演化中也用得到,至少可以事半功倍。

这也是作为首席架构师最大的挑战。

我们的系统经住了考验,之前刚刚在 QCon2015 上做了分享

架构师与程序员的差别

架构师明显要比工程师有更广度的技术覆盖,仍然有几个能力不可或缺。 一是系统性思维。能从整体上把握系统,又能能够抓住系统的本质,找出系统层面的瓶颈点。工程师思维往往会专注在把一个组件优化到极致,但架构师更多需要想的是这个组件在整个系统的位置,以及它能发挥的作用。如果系统瓶颈点不在这里,这个组件再优化百倍都是没有意义的。 二是规划和设计能力。能够设计出理想的系统,又能迈出设计的第一步,按部就班完成整个系统。

架构师不光能知道系统的未来,重要的是带领团队按照设定的路线走到那一天。这里面就涉及按照规划整个系统的演进方向问题。就算你可以制作搭建房屋的每一个组件,能盖成房子还是需要额外的能力的。

三是推广能力。架构师出现的时候,面对的系统往往不是一个人能做完的。这个时候,你需要向其他工程师来讲解整个系统的设计思路,并能够得到他们的理解和认可。后面这点很重要,如果工程师不认可就不会好好实现,最后的效果必定大打折扣,当然如果不能理解,那就更糟了,你得到的不是你想要的。还有比这更惨的么?

至于如何修炼,我现在能给的建议是,在针对性的训练外,一定要注意归纳总结。你肯定见不全所有系统,但你至少能够了解并分辨同类系统。在你见系统的时候,也就是学习的时候,带着问题的思考可能更有帮助。比如,这个系统是做什么的,为了能够达到设计目标做了哪些事情,这些事情是为了什么,又如何能应用到其他系统中去。

有的人,见山始终是山,他就只能做业务系统,因为在他眼中系统都是独立的;有的人,见山不是山,他在一个系统内学到的东西可以应用到同类系统内,但始终跨不出同类。修炼的目标要是,见山还是山,你在能看到所有细节的设计后,仍然能看到整体的系统。

最有成就感的事

人总是容易对第一次印象深刻,讲一下关于单元化架构的事情吧。

微博的粉丝服务平台(类似微信公众号)有一个重要功能是群发。开始做的时候,已经有一个老的系统只能发送一万条每秒左右。由于系统的限制,我们通过一些批量操作方面的优化,也加了很多机器,也只能提高到十倍左右。因为微博的用户里有粉丝是亿级别的,按照十万的速度,也要二十分钟左右才能覆盖所有粉丝,这对于时效性要求比较高的资讯类信息是比较难以接受的,因为首发就意味着关注,粉丝的关注就是金钱。

所以我们就在思考新的方案来解决这个问题。当然粉丝规模还不是唯一比微信公众号更难的一点,还有一点是,微信公众号是单独的用户体系,数据规模都在可控范围内,但微博的粉丝服务平台却是基于当前的微博用户,用户规模更大。最终的解决方案就是现在用到的单元化架构。

之所以说有成就感,除了刚才说的技术方面,还有一些其他原因。这是我第二次不按常理出牌,第一次就是前面提到的千万级系统的优化,但这次步子更大。在此之前,国内很少听到对单元化架构的讨论,印象中当时的资料也只有Facebook 提到过,虽然最近跟他们的人交流好像还处在很不成熟的状态。

这就带来了一个问题,你是在创新还是在折腾?我不仅要回答团队内部,因为这个项目是公司当时的战略重点,不过这倒还简单,反正我带团队做,失败了我自己负责;还要回答给我们的运维支持团队,因为所有服务用单元化集中后,运维平台的监控都需要一些改动,原来他们是按照服务来分团队的,现在我一台机器几个服务好多人管。管过机器你就知道,大家做事方法不一样,很容易你删掉我的文件我停掉你的权限。

好在最后,我得到了所有团队的大力支持,这个实验性的改造得以落地。最终用一半的机器达到了原系统一百倍的性能,效果非常不错。

这个事情我也在13 年的 QCon 上海分享过。

技术人要找到自己的道路

最开始系统不稳定人又少的时候,我大部分精力都放在技术上,很多事几个人一讨论就开工了。最近几个月系统规模上来了团队规模也大了,非技术工作就多了起来。基本上,我百分之三十的精力在纯技术上,设计系统和协议、代码编写以及复审,百分之五十的精力在人员招聘、培训和管理上,还有百分之二十左右是在社区分享和交流。后面的时间,可能技术工作又要占到百分之五十吧,因为要做秘密项目了。

我想说的是,对于一个技术人来讲,如何调整不重要,重要的是要了解自己应该做什么,方向明确了再调整都是简单的事。而这个了解其实很难,你需要不断调整自己的思考角度,思考做的事情对团队的价值,然后让自己发挥的作用最大化。

阮一峰曾经翻译过的一篇 Nicholas C. Zakas 的文章,“七个对我最好的职业建议”。虽然我觉得这些东西大部分是知者知之,不知者不知,还是建议阅读一下。

提倡社区分享和交流

太多的人忽视了社区分享和交流,或者由于对新技术玩心太重,或者由于过于忙碌,导致很长时间都难有提高。

分享与交流最直接的好处是可以促进思考。为了分享,你需要对过去进行总结,有效的思考可以将经历变成经验沉淀下来。而为了交流,你又需要跳出自身的角度审视遇到问题,这样又会引发更深层次的思考。这是个人成长的第一步。

就算你自己思考再多,到了真正的交流之时,你必然还会发现很多没有想周全的地方。不过你大可以放轻松,这是个体逃不出去的局限所致。但你确可以借交流的机会,让自己的思考变得更加全面。当然还有一些时候,你会发现自己思考的完全是错的,或者别人已经发明了更好的方法,原来你解决的问题根本就不是问题了,这个时候,交流实际上是在拯救你了。 另一方面,技术人需要产生自己的影响力,并为整个社区的发展贡献力量,这是所有技术人的成长最难的一步,如果不是最后一步的话。想做到这点,就需要重视分享和交流。这个Tim Yang 前几天也强调过,就不在此赘述。

故障是推动技术进步的机会

团队开始的时候有一部分人并没有太多互联网服务相关的经验,做事情比较Geek,对于性能变化和系统兼容性方面不够敏感,导致经常出现升级问题,而且由于系统降级方面设计不足,线上问题能做的补救措施也有限。我们的服务有一个时期不够稳定。

我曾经写过一篇文章“什么不要做?关于失败和优化”,专门讲解这个问题。

好在我们还是典型的技术公司,最终大家经过讨论,技术问题还总能通过技术手段解决。这里要提醒的一点是,事故其实是最好的达成共识并推动技术进步的机会。当然前提是,你们有良好的复盘习惯。 曾经写过的一篇文章“故障之后”,也许可以作为一个例子。

自组织的团队管理

团队之所以称为团队,因为他们在为一个目标而努力,因此我觉得愿景管理是第一位的。在此基础上,你需要建立规则来让协作更加顺畅,如果还能有些指标可以量化,那你的团队就可以在技术上保证公平,并且基本可以正常地运转了。

但这样的团队至少可能存在两个问题,一是管理者的单点,如果没人管理马上变为一团散沙;二是创新能力不足,因为团队的目标都来自于指派,并以此调动资源进行配合。

为了解决这些问题,我们正在尝试和探索新的方式,旨在发动所有成员的能动性,这就是自组织的团队。

在“自组织是不是团队管理的乌托邦?”一文中详谈过这个问题,包括自组织相关的思维方式、创新问题、开发模式和团队管理等,有兴趣的可以看看。

有一点需要指出,就是跟赋权一节里讲的一样,管理者需要不断从具体事务中抽离出来,让成员之间自行形成协作,以摆脱对管理者的依赖。这样下去,管理工作才不至于越来越重。

希望EGO 做好桥梁纽带的作用

期望EGO 做一个真正属于技术人的学习型组织。

技术路越往前走,同行的人就越少。EGO 把这帮人联系在一起,让这条路不那么孤单。我相信这只是起点。

EGO 想要帮助技术人提高,学习就不可或缺。但这种学习未必是一个课程。就像前面提到的,技术人之间的交流本身就是学习的过程。当然,加上成员背景各异,你将更有机会通过他们了解不同行业和领域的信息,打开视野看另外的世界。

另一方面,我个人觉得,组织应该是属于所有成员的组织,应该在意所有成员的关切。所以如果你有想要学习的领域或者知识,都可以通过组织来寻找解决方案。而这也是我对自己作为学习委员的要求,我会帮助大家对接整个组织内的成员,让我们的专家发挥应有的价值,从而让每个成员都得到提高。

让 EGO 真正属于每一个人。

2015-10-18 21:143494

评论

发布
暂无评论
发现更多内容

MySQL 基准测试

多选参数

MySQL

解析 HashMap 源码之基本操作 put

shengjk1

Java hashmap

解析 hashMap 源码之基本操作 get

shengjk1

Java hashmap

华为的“少年天才”攀登者,出发向智能存储的“奥林帕斯山”

脑极体

如何隐藏你的数据库密码

Rayjun

安全 服务器

Elasticsearch学习

张明森

翻译: Effective Go (6)

申屠鹏会

翻译 Go 语言

平均负载是什么?

我是程序员小贱

【DevOps】我们忽视了Daily Build(每日构建)吗?

Man

DevOps jenkins 每日构建

如何学习一个框架?

云帆

敏捷到底是个什么鬼?

刘华Kenneth

程序员 敏捷 change

解析 HashMap 源码概括

shengjk1

Java hashmap

1 学习性能优化的要点

我是程序员小贱

翻译: Effective Go (7)

申屠鹏会

翻译 Go 语言

Spring如何选择类构造器

申屠鹏会

翻译 Go 语言

1 时间复杂度总结

我是程序员小贱

Rust特征与泛型区别点

编号94530

rust 泛型 封装、继承、多态

Docker搭建PHP+Nginx+MySQL+Redis

书旅

Docker 镜像 lnmp

鲲鹏一粤,智算万里

脑极体

真正的异步API网关Agate

dinstone

Async API Gateway

让你起飞的20个Linux命令骚操作

我是程序员小贱

学习技术先从学会使用搜索引擎开始

我是程序员小贱

阿里、力扣、政采云的15位专家分享前端面试与招聘视角

三钻

面试 大前端

为什么考研,考研能给你带来什么?说说我的感受!

我是程序员小贱

毕玄大佬的分享以及给我的感悟

白色蜗牛

Java 程序员 技术 职场 架构师

MEDO 项目开发中遇到的问题汇总

陈皮

高效程序员的45个习惯:敏捷开发修炼之道(1)

石云升

读书笔记 敏捷开发

Apache Mina和Netty的历史

dinstone

docker入个门

书旅

Docker 容器 Dockerfile

troubleshoot之:使用JFR分析性能问题

程序那些事

Java 性能分析 jfr

你生日那天的宇宙什么样子知道?我全部给你吧!

我是程序员小贱

环信首席架构师梁宇鹏谈架构、管理及成长_QCon_陈园园_InfoQ精选文章