有很多读者经常问我,程序员的学习、成长之路应该怎么规划,才能早日成为一名架构师。
作为一个曾经的架构师,在我走上技术管理这条路之后,管理的团队越来越大,现在我管理的技术团队有一百多人,最大的体会就是操心的事情太多、会议太多,写代码的时间越来越少了。
趁我现在还有技术的底子,代码还没完全忘光,我觉得应该给大家说说架构师的成长之路了。接下来我准备写一系列关于架构师、分布式系统的技术文章。今天这篇文章相当于是一个综述,相当于我们学 Java 语言的开篇:Hello World
好,正文开始。
作为一个资深架构师,一路走来,发现自己的技术水平很多时候其实是随着项目的发展被迫成长的。其实,很多时候,自身水平达不到能顺利完成架构项目的水平,但是,为了挑战,为了技术成长,更是为了高薪资,只能咬牙坚持,熬夜学习,最终让自己能顺利设计和把控项目的架构。
其中,最为艰难的,就是去设计、架构、规划一整套,规模大的分布式系统。但是,正是经历了这些异常艰难的磨炼,我们才能毫不恐惧所谓的技术人员 35 岁大限。
但是,要做到这些,首要做的是能明白分布式系统到底是个什么东西。
1. 什么是分布式系统
分布式系统大家从网络上看到的学术定义简单来说就是一套由一组计算机协同工作,让用户感觉像是一个统一的整体的系统。
但是,由于这个定义定的过于简练,很多初入门的人会毫无感知的潜意识就会混淆了分布式系统的概念。
什么意思?我这里问下,当我们用 keepalived 做高可用集群的时候,我们是在搞分布式系统吗?当我们并发不够,搞了一堆机器做负载均衡,我们是在搞分布式系统吗?
当你心里默默回答是,或者不清楚是不是的时候,你本身对分布式系统这个概念就已经糊涂了。
这里,就需要为分布式系统画出一个边界来,并以此告知大家,并不是多台机器堆在一起了就是分布式系统了。对于刚才那两个问题,正确的答案就是 keepalived 做的高可用集群,用 Nginx 或者 lvs 后面跟着一堆应用集群配合搞的负载均衡,他们都不是分布式系统,他们就仅仅是个集群而已。
类似的,数据库比如 MySQL 的主从,双主什么的当然也不是分布式系统。因为这些集群少了分布式系统最核心的东西:
应用所在服务器之间的相互协作
为了说清集群和分布式,我再给大家举一个通俗易懂的例子:
假设有一天我开了个软件公司,公司就我一个程序员,前端、后端、测试的活儿,都是我干,一个月我能做完一个项目。
后来项目多了,我忙不过来了,为了多赚钱,怎么办呢,我想了两条路
-
再招一个和我一样强的全栈工程师,我俩每个人独立做项目,这样我们一个月能做完两个项目。我俩就组成了一个集群。
-
招一个前端、一个测试配合我,前端、后端、测试分头干。通过协作,我们半个月能干完一个项目。这时候我们的关系就是分布式。
从上面例子你就能看出:
-
集群中的多个服务器都在做相同的事情,