写在前面
在工作学习中,我们常常听说分布式,集群,容器等等名词,但是当学妹们问你什么是分布式的时候,你是否有一种书到用时方恨少的感觉呢?为了在学妹面前“扬眉吐气”一把,今天开始,我们就去会一会分布式,Let’s go!
为什么有分布式结构
在我们了解为什么会有分布式结构之前,我们想学习一下什么是分布式结构。分布式就是一个业务分拆多个子业务,部署在不同的服务器上。举个例子,假设需要开发一个在线商城。按照微服务的思想,我们需要按照功能模块拆分成多个独立的服务,如:用户服务、产品服务、订单服务、后台管理服务、数据分析服务等等。这一个个服务都是一个个独立的项目,可以独立运行。如果服务之间有依赖关系,那么通过RPC方式调用。了解了什么是分布式结构,是不是就很自然的总结出一系列的原因,比如解耦和,链路更清晰,职责更明确等等。
那么,分布式之间是如何协调与同步呢?针对这个问题,我们通过以下几个问题去解释。
分布式互斥
首先,我们想象一下,对于多个服务去访问同一资源时,就会出现分布式互斥现象,怎么理解呢?想象一下,你正在一家餐厅使用自助咖啡机泡制咖啡,突然有个人过来挪走了你的杯子,开始泡制他自己的咖啡。你耐着性子等他操作完,继续泡制自己的咖啡。结果你开始没多久,他又回来中断了你泡制咖啡的过程。此时,咖啡机就是一个临界资源,两个人表示两个服务,这种现象就叫做分布式互斥。
那么,我们如何去解决这种服务之前互斥访问临界资源的现象呢?
集中式算法
首先,我们最先想到的肯定是增加一个“管理员”,约束大家不要插入别人使用咖啡机的时间,那么做好一个管理员,我们就需要一套完整的管理体系,例如我们打卡上下班一样,放到计算机世界来说,这里就需要一个算法来协调,这就是分布式互斥算法,每个程序在需要访问临界资源时,先给协调者发送一个请求。如果当前没有程序使用这个资源,协调者直接授权请求程序访问;否则,按照先来后到的顺序为请求程序“排一个号”。如果有程序使用完资源,则通知协调者,协调者从“排号”的队列里取出排在最前面的请求&#x