聊聊分布式那点事:抛砖篇
工作几年,也写过了不少服务端项目,一直想把这方面的经验总结出来,每次总结也是一次更加深入思考的过程。
要聊分布式,可以延伸到负载均衡、服务发现、服务依赖管理、异地冷备、异地双活、应用层协议、消息队列......
以上还仅仅只是一部分,如果在做架构设计时,全部想着这些概念,瞬间就凌乱了......
抛开场景谈架构,都是吹牛逼,好吧,这篇文章的目的就是把牛逼吹响!
什么是分布式?
好吧,刚刚手贱,百科了一下:
很多人就是这么被误导的,把分布式误导成了并行计算,所以说“做环保的程序员,从不用百度开始”~~~
分布式的本质是拆分+连接,重要的事情说三遍:
分布式的本质是拆分+连接~~~
分布式的本质是拆分+连接~~~
分布式的本质是拆分+连接~~~
所谓分布式,就是”把一个系统拆分成多个子系统并散布到不同设备“的过程。
如果按照这个角度去理解,其实你已经分布式好多年了,比如你做的网站系统,在使用数据库的过程中需要连接独立的数据库,这其实就是分布式的。
如何拆分?如何连接?
好吧,别着急,还是先说说为什么要拆分?
拆分的目的无非两个:高可用+可伸缩,重要的事情说三遍:
拆分的目的无非两个:高可用+可伸缩~~~
拆分的目的无非两个:高可用+可伸缩~~~
拆分的目的无非两个:高可用+可伸缩~~~
高可用,就是思考如何避免因为单台机器或单一服务当机导致整体不可用;
可伸缩,就是思考如何避免在容量不足时导致整体不可扩展。
如何拆分?
在架构设计时,以高可用和可伸缩的目标,就分别出现了两种拆分方式:水平拆分+垂直拆分,重要的事情说三遍:
两种拆分方式:水平拆分+垂直拆分~~~
两种拆分方式:水平拆分+垂直拆分~~~
两种拆分方式:水平拆分+垂直拆分~~~
(打了太多三遍,累死了,喝点水 - -)
水平拆分,就是为了实现可伸缩,就是业务逻辑层支持水平扩展,系统负载高时,可以通过加机器的方式来提供系统的负载能力;
垂直拆分,就是为了实现高可用,将众多业务逻辑拆分成若干独立的子服务,某一服务挂掉时,不会导致整体不可用。
拆分时要注意什么?
无状态、去中心化、一致性哈希,重要的事情说三遍:
无状态、去中心化、一致性哈希~~~
无状态、去中心化、一致性哈希~~~
无状态、去中心化、一致性哈希~~~
(未完待续)