你的位置:首页 > ASP.net教程

[ASP.net教程]聊聊分布式那点事:抛砖篇


工作几年,也写过了不少服务端项目,一直想把这方面的经验总结出来,每次总结也是一次更加深入思考的过程。

要聊分布式,可以延伸到负载均衡、服务发现、服务依赖管理、异地冷备、异地双活、应用层协议、消息队列......

以上还仅仅只是一部分,如果在做架构设计时,全部想着这些概念,瞬间就凌乱了......

抛开场景谈架构,都是吹牛逼,好吧,这篇文章的目的就是把牛逼吹响!


什么是分布式?

好吧,刚刚手贱,百科了一下:

很多人就是这么被误导的,把分布式误导成了并行计算,所以说“做环保的程序员,从不用百度开始”~~~

分布式的本质是拆分+连接,重要的事情说三遍:

分布式的本质是拆分+连接~~~

分布式的本质是拆分+连接~~~

分布式的本质是拆分+连接~~~

所谓分布式,就是”把一个系统拆分成多个子系统并散布到不同设备“的过程。

如果按照这个角度去理解,其实你已经分布式好多年了,比如你做的网站系统,在使用数据库的过程中需要连接独立的数据库,这其实就是分布式的。


如何拆分?如何连接?

好吧,别着急,还是先说说为什么要拆分?

拆分的目的无非两个:高可用+可伸缩,重要的事情说三遍:

拆分的目的无非两个:高可用+可伸缩~~~

拆分的目的无非两个:高可用+可伸缩~~~

拆分的目的无非两个:高可用+可伸缩~~~

高可用,就是思考如何避免因为单台机器或单一服务当机导致整体不可用;

可伸缩,就是思考如何避免在容量不足时导致整体不可扩展。

如何拆分?

在架构设计时,以高可用和可伸缩的目标,就分别出现了两种拆分方式:水平拆分+垂直拆分,重要的事情说三遍:

两种拆分方式:水平拆分+垂直拆分~~~

两种拆分方式:水平拆分+垂直拆分~~~

两种拆分方式:水平拆分+垂直拆分~~~

(打了太多三遍,累死了,喝点水 - -)

水平拆分,就是为了实现可伸缩,就是业务逻辑层支持水平扩展,系统负载高时,可以通过加机器的方式来提供系统的负载能力;

垂直拆分,就是为了实现高可用,将众多业务逻辑拆分成若干独立的子服务,某一服务挂掉时,不会导致整体不可用。


拆分时要注意什么?

无状态、去中心化、一致性哈希,重要的事情说三遍:

无状态、去中心化、一致性哈希~~~

无状态、去中心化、一致性哈希~~~

无状态、去中心化、一致性哈希~~~

(未完待续)