技术人的内功修炼,究竟修的是啥?
今天我给大家分享的主题是技术人如何修炼好内功,包括技术的内功,也包括我们做人做事的内功。
开发者要学习高并发服务、大数据、操作系统、算法和数据结构;学技术得学它的内功,内功就是基础。
所以对于操作系统,我们一定了解它的 CPU、内存、磁盘 IO 和网络 IO,并且据此粗略评估服务的性能。
应用层面的小伙伴们可能对算法和数据结构的应用比较少,也比较简单,但是它代表了一个人的逻辑思维和思考能力。
在互联网公司,高并发服务和大数据是两大方向:
解决高并发主要使用的是分而治之的思想,但是也会产生一致性的问题。
大数据是近年来比较火的方向,所有的根基都来自 Mapreduce、Gfs 和 Bigtable 这三篇论文,推荐大家阅读。
分布式的服务架构
我们总体看一下分布式的服务架构的目标,主要包含六个方面:
高可用
高性能
可伸缩性
可扩展性
安全性
一致性
我们一个个来说这六个目标,它们是怎么实现的?这六个目标,第一个就是可用性,在一般的公司我们都会用 4 个 9,或者 5 个 9 来衡量。
我们的易宝支付可以达到 4 个 9,那 4 个 9 是怎么实现的呢?这个原因有很多,我们得从影响可用性的原因来分析。
例如我们统计了一下去年影响可用性的主要原因包括什么?主要包括我们上线变更的时候,会影响我们 40%,50% 的可用性。
针对这个情况,我们就增加了架构评审和设计评审,还有技术评审等等。
我们把可用性这一块的窟窿堵住了,可用性就可以提高上来,那下一个最重要的就是性能。
大家常说性能的优化,但是性能的优化用什么方法来保证呢?在我们分布式服务架构里边,最重要的就是一个分而治之的思想。
我们通过分而治之的思想提高整个系统的吞吐量,由于分而治之,它会导致一些问题,这个问题就是一致性问题。
那么,我们怎么解决这个一致性问题呢?这是我们最困难的事,也是最有挑战的事。
第三个就是可伸缩性,它是我们互联网项目中最重要的一个特性,为什么说它是最重要的呢?
因为垂直扩展这个性价比已经变得很低了,所以我们都去采用水平扩展,包含应用层和数据库层,还有缓存等等。
例如数据库的分库分表,缓存的分片,还有消息队列的消峰,我们都是为了让这个系统能够水平伸缩起来,然后提高它的性能。
下一个特性就是安全性,安全性是大家常说的,包含系统安全性,写代码的安全性,数据库的安全性,还有前端外部的安全性。
但是总结起来,安全性有五个目标:
防泄漏
防窜改
防抵赖
防偷窥
防止中间人攻击
所有安全性最后的目标只有这五个,那这五个目标是怎么实现呢?
这就涉及到现在密码学上的几个技术的点:
加密
签名
使用 HTTPS 的双向认证通道,防止中间人攻击
有了这些办法,我们刚才所说的那五个目标,都可以达到。安全性也并没有那么复杂,当然具体的打法和方式还是很多的。
提到可扩展性,大家肯定觉得可扩展性和可伸缩性是同一个概念,但实际上这两个概念是不一样的。
可扩展性指这个系统的可修改性,将来能够进行比较快速的功能迭代,然后快速去满足新的市场需求,我们以前常说的可插拔,属于可扩展性,但并不是可伸缩性。
最后一个就是一致性,一致性是我们实施服务化或者微服务化以后,造成一个大的问题,我们都需要去保证。
我刚才介绍了一些分布式服务架构的分享内容,但实际上我们很难在 20 分钟内讲的比较透彻。
我推荐三本书,第一本书就是京东开涛写的《亿级流量网站架构核心技术》,这本书更偏向于高并发和高可用前端系统的一个架构分析、设计和方法还有实践。
第二本就是我和杨老师共同著的,《分布式服务架构原理设计与实战》,这本书包含了微服务化,一致性,可用性,还有大数据日志系统的建设,以及调用链系统建设,会包含一些 APM 的核心功能,再加上我们线上进行技术攻关和进行线上应急的一些经验总结,以及最后的容器化还有持续集成等主题,所以这些主题总体来讲更偏向于方法论和实战,还有一些案例。
最后一本书就是李智慧老师写的《大型网站技术架构核心原理与案例分析》,这本书应该有好多年了,但是这本书讲的原理还有概念都非常的核心,非常的重要,推荐大家也读一下。
技术人如何修炼技术的内功
如何综合评估一个人的技术能力
如何去修炼技术的内功?如果我们作为面试官,我们去面试一个候选人,我们会从哪些方面全面评估这个人的技术能力?
我会根据三个层面来评估一个候选人,包括技术知识的广度、技术知识的深度,还有技术知识的高度。
对于广度指的是什么呢?指的是这个人做过什么事情?学习过多少的知识?用过多少语言?熟练使用多少工具等等,主要是他的知识面和经验。
什么是技术的深度呢?技术的深度就是期望每个人在某一方面一定是有造诣的,什么是造诣呢?
就比如说在 Java 上,你一定要了解 GC 的原理,你能够通过调节 GC 来提高它的性能,或者是你懂得我们 RDBMS 数据库的索引原理等等。
并且能把这个原理应用到你的生产实践中,你一定要有几个主题或几个方面是非常深入了解和学习过的。
最后就是一个高度,高度这个是我这两年才认识到的,以前我只是拿广度跟深度来看别人和自己,现在又增加了一个高度。
高度是什么呢?就是你学这个技术有什么目的?这个技术能达到什么样的生产?这个技术是不是现在技术的一个前沿,还是说已经淘汰好多年的一门技术?
所以说,我们一定要站在很高的高度来看这些东西,学了是不是有用的?将来是不是有用的?假如将来十年有用,那么将来二十年是不是有用的呢?
所以我们一定要修炼这个内功,因为内功是永远不变的,就算将来你可能过十年,二十年,这个内功还是一样的。
如何修炼技术的内功
我们如何去修炼这个内功?有几个方面需要我们掌握?
今天我给大家分享四个方面:
高并发服务
大数据
操作系统
算法与数据结构
我们先看下面两个主题,那就是操作系统,算法和数据结构。
先说操作系统,我们现在看各种新技术,还有我们用的各种技术,都跟我们操作系统有关,我们发现新技术、新原理的很多东西在这个操作系统的一些核心原理上是能找到缩影的。
举一个非常小的例子,比如大家说的微服务,是不是觉得微服务现在很火很新?但实际上在操作系统中是有微服务的。
第一,它的内核是微内核;第二,想一下命令和管道,在实现一个复杂的日志搜索,我们一个命令接一个管道,再接一个命令和一个管道,每个命令都在完成自己它想做的事,有清晰的输入和输出,然后和其他的命令去配合着使用。
上面这个例子完全就是一个微服务的思想,所以我说学技术得学它的内功,内功就是我们这些基础一定要掌握的很扎实。
所以对于操作系统来讲,我们一定要理解到它的 CPU,内存,磁盘还有网卡的 IO 等等这些原理。
并且能够根据这些资源去评估你服务的吞吐量和 TPS 响应时间等等,这个评估指的是粗略评估,就是评估是没有精确评估的。
然后我们看一下算法跟数据结构,对于我们应用层的小伙伴们,我们很少在应用层直接去使用到它,就算使用也非常的简单。
但是算法和数据结构象征着我们一个人的逻辑思维和思考能力,所以对这个东西也要掌握一些或者是要熟悉一些。
最后,要学习一个高级算法,比如说动态规划,贪婪,还有剪枝,递归等等,那为什么要学高级算法呢?
假设大家每一位都是面试官,如果来了一个面试的小伙伴,小伙伴说我会动态规划,随便一个都可以写出来。
那他要不就是勤奋的,要不就是非常聪明的,所以如果你会这个,一般都是会打动这个面试官的。
然后我们再看上边的两个主题,第一个是高并发服务,第二个是大数据。
在互联网公司里边主要有两个方向,一个就是高并发的服务,一个就是大数据,那高并发的服务的核心思想就是分而治之,就是我们单体系统架构。
不是它的性能不能提高,是它在垂直扩展过程中,它的性价比非常低,非常贵。
所以我们都用伸缩,采用分而治之的思想,但是分而治之以后产生的问题,就是一致性的问题,因为分开了,他们的协调一定会有问题。
大数据这些年特别火,但是大数据所有核心思想都来自于谷歌的三大论文,包括 Mapreduce,Gfs,Bigtable,所有的大数据根基都来自于这三个论文。
技术人如何修炼做事的内功
目标方法论
我要跟大家分享的主要是目标方法论,主要包含几个关键元素:目标原则方法和结果。
目标方法论来自于我们易宝支付的文化,但稍微有一点点变化,为什么说这个方法论非常重要呢?
因为我这两年在面试和评审的时候,发现一些小伙伴在做一些事情,但是他们并不知道做这个事情能解决什么问题?
还有一些小伙伴,他知道是解决什么问题,但是这个问题根本就不需要解决,所以说做任何事情之前,一定要树立一个正确的目标。
如果这个目标是抽象的,一定要把它分解成一些可衡量的目标,只有目标正确了,我们后边做的事情才是有意义的。
接下来就是原则,原则是什么呢?就是我为了实现这个目标不能做的事情,这个是底线,就算是生活中我们也有很多的原则。
接下来就是方法,我们要实现一个目标,有各种各样的方法,那么这些方法我们要去权衡他们的利弊、权衡他们的成本、权衡他们达成的效果。
我们一定要找到一个最合适的方法,而不是找到一个最高大上的方法。
我也见过很多技术方案,是拿很多高大上的技术,最终解决了一个很低端的问题,这种事情性价比很低。
所以一定要选择最适合的方法,例如做架构,要做最适合的架构,要回归架构的简洁之美,不要所有的事情都拿一些高大上的技术招式来应付这个结构。
最后一个就是产出和结果,任何一个事情最后都会看它的产出和结果,这个产出和结果和目标是相对应的。
如果你这个产出结果跟目标不是对应的,那这个事情就是白做了或者是偏离了,也可能有一些副作用,作用有好有坏,但是没有满足我们的初衷。
做人四原则
这一块可能跟我们技术内功不太一致,但这是我和身边的一些小伙伴们总结下来的生活和做事的经验,分享给大家,希望能够起到一定的效果。
大家千万不要觉得这四个原则内容比较少,当你详细的去理解,可能等时间久了,慢慢就理解到了。下面我们一个个来看,为什么我说它非常重要?
第一个就是靠谱,有脑子。衡量一个人或者别人对你的印象,跑不出这两个因素,就是靠谱,有脑子,什么是靠谱呢?
靠谱就是别人一想起你,就会觉得有一种信赖感,他觉得这个人行。那什么是有脑子呢?就是比较灵活,不做作,做事情总是有门路,这个就叫有脑子。
第二个就是胆大心细,乐观。我们做事情一定要胆大,敢于去尝试,然后我们一定要乐观,为什么要乐观呢?
福祸是相通的,有福可能就有祸,有祸就有福。有句古语,福兮祸所伏,祸兮福所倚,就是无论发生什么事情,大家一定要乐观,可能一件坏事,等你过了一个月看仍然可能是一件坏事。
但是过了两个月或者两年或者十年你再来看,这个事有可能是好事,所以一定要乐观。
第三个就是要么忍,要么狠,要么滚。这句话在什么时候适用呢?大家如果真的碰上一些坎坷了,尤其是在工作上碰到一些坎坷,不用纠结,不用懊恼,也不用沮丧,这三条路中挑一个就可以了,往前走,因为纠结也没用。
最后一个就是要善于交流。大家听起来好像是侃侃而谈的人就是善于交流,比较圆滑的人善于交流,但是实际上这个并不是善于交流,那什么是善于交流呢?
第一,你要善于思考,你要善于站在别人的角度来看待你自己,你也要善于站在别人的角度看他自己,这个才叫善于交流,这样你跟别人才能有交流。
就拿现在一个心理学非常流行的话来说,叫同理心,说白了就是你要能站在别人的角度来看事。
但是我刚才说的比这个要求更高,就是你站在别人的角度,不但能看他自己,你还要能看你自己,所以这个才叫善于交流。
作者:李艳鹏
介绍:现任易宝支付产品中心首席架构师,著有《分布式服务架构:原理、设计与实战》一书,是【云时代架构】技术社区的发起者。
编辑:陶家龙、孙淑娟
出处:根据“趣直播”技术人成长交流会的演讲整理而成
精彩文章推荐: