简单了解一下分布式的背景
在回答这个问题之前,首先我们要明白,为什么会出现分布式架构技术?要了解这个问题的话我们需要往前回溯,从主流互联网系统发展的历程来看,我们可以看到在不同阶段,流行的系统架构其实是不一样的。比如一开始的单体应用把所有东西都部署在一起就可以满足业务需求,然后随着业务规模的发展,用户量和访问量逐步增加,这时系统会不断面临性能压力和存储压力,具体体现就是:
- 用户多了访问量大了,系统性能跟不上
- 用户多了交易多了,数据存不下
这个时候就需要考虑提升系统的性能和容量了。最传统的方式就是增加硬件配置,比如处理速度跟不上,那么就「增加CPU配置,8c不够就加到16c、32c」;然后数据存不下就「增加硬盘容量,500G不够就增加到1T、2T」;再比如服务器抗不住了,就换小型机,再不行换商用大型机;还有一些有更多预算的特殊项目,还可以用上“超算”(超级计算机)。这种扩展模式我们称之为“纵向扩展”,而这种模式恰恰是以前很多传统大型企业所采用的方式,比如银行、保险、证券行业的IT系统;还有一些大型的系统。这种方式虽然简单,但是越往上设备越昂贵,在当前提倡开源节流的大背景下,显现是不可持续的,架构转型势在必行。
那么“纵向扩展”行不通,就采用“横向扩展”呗。一台服务器干不了的事情就用两台,两台不行就继续加。这种方式的优点很显然,三个臭皮匠顶一个诸葛亮,以前租赁一台小型机的费用都可以租很多台普通服务器了。但这个模式也不是单纯的横向扩展这么简单,这种方式需要考虑很多问题,比如多个节点数据怎么同步?一个交易怎么保证完整一致?节点之间网络出现分区怎么办?这一系列问题随着而来!所以为了提升系统的弹性伸缩能力,缩减硬件成本,采用横向扩展的模式给系统架构设计带来了一些复杂性,但是这些问题,相比起大幅下降的费用成本来说,在老板面前不值得一提。于是各路老板,纷纷拍板,分布式搞起来,复杂的分布式技术问题你们架构师来搞定!好吧受伤的总是憨厚老实的IT(挨踢)工程师 >_<!!
分布式架构面临的问题和挑战
那么既然要解决一个问题,我们就先分析这个问题,我们前面说“横向扩展”,从一个节点横向扩展为多个节点:
- 节点之间要相互交互,在不可靠的网络环境下如何保证系统可靠性
- 节点之间的数据会发生变化,节点之间如何进行同步才能保证一致性
- 节点之间通常以集群的方式存在,个别节点故障时如何保证集群的可用性
- 引入的缓存组件在提升系统性能的同时,如何保护好系统不受大流量冲击
- 分布式微服务架构在提升服务灵活性的同时,如何保证服务之间交易完整性
- 系统不断扩展,服务不断增加,如何做好服务治理、做好流量监控及控制
这些都是分布式架构要研究和解决的问题,而不可避免地,这些也都是每个Java工程师需要去面临的问题和挑战,尤其在当前很多企业大力推行数字化转型的背景下,分布式微服务的系统架构可以说是目前行业主流甚至标准,所以说,学习好分布式架构相关的技术,是当下每位Java工程师必须踏出去的一步。
看看行业现状与招聘要求
而最直观的,我们也可以看看目前招聘市场上主流企业针对 Java工程师的招聘需求,首先从数量上看,企业对 Java 工程师发放的面邀数量远高于其他岗位,说明目前市场对Java工程师的需求量还是巨大的。另外从技能要求上,我们可以看到不管是针对工作2年左右的中级工程师,还是3-5年的高级工程师,或者是5年以上的资深工程师或架构师,这些岗位描述里面都不约而同地提到了:有分布式系统架构设计能力、有大型分布式系统经验的要求。(以下是我从一个知名的招聘网站上简单的找的几个岗位描述供参考)
从上面的分析来看,不论是从公司发展的需要、还是从个人能力提升考虑,分布式架构技术对于每位Java工程师来说,可以说是一项必备技能了!每一位想要在职业发展之路上更进一步的Java从业者,都需要牢牢掌握分布式架构思想,牢牢掌握分布式实战技能