目录
由于疫情的原因,我这里被分配的任务也不是很多,所以就会空闲出一点时间,一般这个时候我都会做自己的事情,比如看看源码、翻翻csdn的博客、然后就是写写博客,正当我沉迷在源码中不能自拔的时候,总监突然来到我旁边,应该是知道了我最近不怎么忙,他轻声的对我说道:最近这段时间大家的任务也不是特别多,空闲时间比较足,你这边能不能做点技术分享什么的,一来可以联络一下同事之间的感情,二来也可以增加同事之间的学习氛围,你觉得怎么样?
听到这个我就知道,我可能干不了自己的事情了,毕竟技术分享也能增加与同事之间的感情,所以我就答应了,但是我愁啊,我该分享一个什么东西呢?如果讲的是java方向,除了java的同事,其他同事听起来就会很吃力,但是讲其他方面,我也不知道能讲什么。。。。。。。。
宝宝心里难受啊,一直在想我要将一个什么样的话题才能让大部分的人都能听得懂并且感兴趣呢?这里面肯定不时出现太多的代码,既然这样,那我就讲一讲分布式的架构演进吧,这个话题既高端,也能让大部分的人听懂,我就是个天才。
好了,不废话了,开始这次的主题,分布式架构的演变。
单体服务
我记得在我实习的时候用的就是单体的服务,那个时候的架构很简单,前后端分离都还没有,直接jsp+java实现一套项目,整个流程相当简单,就连nginx都没有用到,我们一起来看看当时的架构是什么样的。
引入nginx
没错,就是这么简单,浏览器通过接口访问服务器,服务器通过用户的请求操作数据库,然后再相应给浏览器,这就是一个最简单的单体服务的流程,后来领导觉得直接将端口暴露出去相当危险,我们需要做一层代理,让用户直接通过域名访问。然后流程就被设计成了这样:
这是引入nginx之后的架构图,在这样运行了一段时间之后,突然有一天,领导找到我并说到:你写的代码是不是有问题,为什么一个普通的查询需要很长的时间?基本操作都卡的要死,给你一周时间,赶紧给我解决!
引入redis单体
经过我的排查之后发现导致程序变卡的原因是数据库受到了瓶颈,压力太大,承受不住那么大的请求,既然问题找到了,那解决就很简单了,我在程序和数据库之间增加一个中间件:redis,使用它来降低数据库的访问,这样性能自然会得到提升。
舒服,引入redis,并且对代码做了一些优化之后,发现速度上来了,我有可以快乐的写bug了,就这样过去了大概一个月左右,这天我正在和同事讨论一些八卦,突然感觉背后一阵阴风 ,我知道,出事了,没想到是领导又来找我麻烦了,他说由于我们的产品太火了,下载注册人数都几十万了,日活跃人数也是上万,我们现在的这套架构撑不住了,你有没有什么好的建议?我惊讶了一下,我们的产品这么受欢迎吗?于是我和领导说,我们可以将数据做一下读写分离,这样也可以提升一下程序的性能,但是对于现在的情况,就算加了读写分离,作用应该也不大,我们应该将单体多部署几台,提升程序的吞吐量。
引入mysql读写分离
这就是将数据库改造成读写分离之后的架构,读操作和写操作分别在不同的库中,这样,查询和写入就不会那么长的时间了,因为再读库中没有写操作,写库中没有读操作,由于我们一般是读的操作比较多,所以这个时候我们我们可以将读库的配置设置的好一点,写库的设置的差一点,均衡分配,但仅仅这样是也是不能支撑那么大流量的,所以这个时候我们还需要将服务器做集群。
引入服务器集群
这就是我们单体的最终架构,改造完成之后性能确实得到了很大的提升,因为服务做了集群之后,分散了很多的请求,比如一个tomcat能支持的最高并发是200,那现在三个服务就能支持600的并发,性能提升了3倍,最终扩充了多少台服务器我也不清楚,因为这个是运维做的,集群算是做完了,总算可以满足领导的要求了,为了搞定这一套一套的升级,不知道熬了多少夜,看到电脑旁边掉落的那几根头发,我满意的点了点头。
在后面的两个月的时间里,我们再不停的做迭代更新,几乎每周都会有版本上线,两个月过后版本终于稳定下来了,不怎么有更新了,所以又来到了程序猿的空闲时间,同事们每天上班都做着自己的事情,有学习的,有逛淘宝的,有玩游戏的,更夸张的是居然有个同事闲着没事居然去撩产品小姐姐,握草,这是想要自掘坟墓吗?
我们大概空闲了一周的时间左右,我们的技术总监说话了,今天下午3点,所有后端开发人员会议室开会,听到这个消息,我就知道,有活干了,难道是接了新的项目?
到了下午3点,我们来到会议室,只见技术总监已经提前到了,并且屏幕上写着五个大字,看到这5个字,我心里想,该来的还是会来,躲不过去的,那就是:分布式架构。
分布式架构
因为我知道,我们产品注册人数已经高达几十万,以我们现在的架构肯定会有撑不住的一天,这个产品肯定会被重构,并且是以分布式的架构进行重构,果然,今天技术总监就召开了这个会议。
技术总监:我们的产品现在比较火热,不管是注册人数还是日活跃人数都是比较高的,为了让程序能有更好的健壮性,我希望我们可以对这个项目进行重构,以分布式的架构,今天开会就是我们一起来做个技术选型,你们对分布式熟悉吗?
同事A:分布式系统(distribut