天天看点

到底为什么要用分布式

近年来分布式架构火遍了大江南北,自己也去学习了一些诸如dubbo,springcloud之类的分布式框架,可是学了之后不由得就会问自己一个问题,为什么非得用这个东西啊?

看了一些博客文章,总结了下,分布式架构其实是偏向于,大型网站,高并发,高QPS的情况。对于一些访问量较小的应用和网站,考虑到项目成本,其实没有必要强行分布式。所以技术选型要根据实际情况,敏捷开发的大环境下,炫技什么的没有意义。

但这并不影响我学习分布式的热情。

那我们先看一下传统单节点应用的优缺点吧

优点:

1.开发简单:你开发需要调用的接口,查的表,都可以在你这一套应用中找到,即使是跨业务模块,也没关系,因为其他业务的代码你是看得到的,对你而言是透明的。

2.测试简单:

3.部署简单:

测试和部署一起说,其实就是一句话,单个应用,一个包,甚至说一个库,相当于一整个生态都在你手中,与外系统交互少,两个字:可控。

缺点:

1.项目臃肿,维护成本高,业务代码犬牙交错,不易定位bug,即使定位到bug,也有可能解决了旧bug,引发了新bug。

2.资源无法隔离,共享一个数据库,或者一块内存,一旦某个功能出现故障,很可能导致整个系统性能下降甚至不可用 --这是最不能忍的

3.无法灵活扩展。我相信你又要说了,单体应用也可以集群部署啊,咋不能扩展啦。那我问你,如果我只是某一个功能模块出现瓶颈,你告诉我要整个系统水平扩展,这灵活吗?成本是不是太高了?

4.交付周期长,单个应用你是不是要等所有的功能开发测试完成一起上线交付?这样风险太大,任何一个环节出了问题,都有可能拖慢交付周期。

那么分布式架构的优点就不言而喻了吧,分布式就是为了解决这些问题的。

我们重点关注的应该是他的缺点:

1.性能,分布式系统是跨进程,跨网络的,受带宽和网络延迟的影响

2.还是对于网络的依赖,任何一次远程调用都可能会失败,故障点会更多。

3.引入各种中间件,异步操作,增加了功能实现的复杂度

4.需要在C(一致性) A(可用性)P(分区容错性)中做出取舍

5.运维成本变高,每个独立的应用都要部署,日志,监控

什么是架构?两个字,取舍。

继续阅读