>>与软件开发有关的知识:操作系统,数据库,网络通信等 书籍支持  卫琴直播  品书摘要  在线测试  资源下载  联系我们
发表一个新主题 开启一个新投票 回复文章 您是本文章第 22955 个阅读者 刷新本主题
 * 贴子主题:  分布式架构的那点事 回复文章 点赞(0)  收藏  
作者:flybird    发表时间:2024-04-26 10:38:18     消息  查看  搜索  好友  邮件  复制  引用

我们都知道,当今无论在BAT这样的大公司,还是各种各样的小公司,甚至是传统行业刚转互联网的企业都开始使用分布式架构,那么什么叫分布式架构呢?分布式架构有什么好处呢?分布式架构经过了怎样的发展呢?分布式架构的核心体系又是哪些?让我们一同梳理和认知分布式架构的方方面面吧!

分布式架构的前世今生

自从1946年2月14日,第一台计算机ENIAC在美国宾夕法尼亚大学诞生之日,意味着日新月异的IT时代到来了,直至20世纪60年代,吉恩.阿姆达尔(IBM大型机之父)带领研制第一台IBM大型机SYSTEM/360的诞生,意味着进入了大型机时代。大型主机凭借着大型机超强的计算和I/O处理能力、安全性、稳定性等,在很长一段时间内,大型机引领着计算机行业及商业计算领域的发展。而集中式的计算机系统架构也渐渐成为了主流。

但是随着社会的发展,这种架构越来越难以适应企业的需求,比如说:

1、大型主机复杂性高,培养一个能够熟练运维大型主机的人成本很高。

2、大型主机很贵,一般只有土豪机构(政府、电信、金融)才能用得起。

3、会有单点问题,一旦大型主机出现故障,那整个系统就将处于不可用的状态。而对于大型机的使用机构来说,这种不可用导致的损失是非常巨大的。

随着硬件科技的进步,PC设备性能不断提升,大型主机的优势已大大削弱,很多企业放弃大型机该用小型机及普通PC来搭建系统架构,使用普通PC的架构就是分布式架构吗?回答当然是否定的。

在没有互联网的时代,大家使用集中式系统进行应用设计和开发,所谓的集中式系统就是指由一台或多台主机计算机组成中心节点,数据集中存储于这个中心节点中,并且整个系统的所有业务单元都集中部署在这个中心节点上,系统的所有功能均由其集中处理,但随着业务的发展,局限性也逐渐暴露:

1、升级单机处理能力的性价比越来越低

我们知道单机的处理能力主要依靠CPU、内存、磁盘。通过升级硬件这种垂直扩展的方式来提升性能,成本会越来越高。性价比会越开越低。

2、单机处理能力存在瓶颈

并且单机处理能力存在瓶颈,CPU、内存、磁盘都会有自己的性能瓶颈,就算你是土豪不惜成本去提升硬件,但是硬件的发展速度和性能也还是有限制的。

3、稳定性和可用性这两个指标很难达到。

4、最后就是单机系统存在可用性和稳定性的问题,这两个指标有时我们亟待要去解决的问题。

随着互联网/移动互联网的兴起,用户量的增加,业务功能的扩展逐步完善演变过来的。在这个过程中,开发模式、技术架构等都会发生非常大的变化,“架构师演变而来的,不是设计出来的。没有最好的架构,只有最适合的架构”,在这样的背景下,分布式系统架构得以广泛使用,运用过程中,会有各自的侧重点,比如像淘宝这类的网站,要解决的是海量商品搜索、下单、支付等问题;腾讯,要解决的是数亿级别用户的实时消息传输;百度所要解决的是海量数据的搜索。

分布式架构中常见的概念

集群

我们可以想象一家小饭店,刚开始的时候店里只有一个厨师,切菜洗菜备料炒菜全干。后来由于饭香甜可口,人流量越来越多来,一个厨师忙不过来了,老板又请了两个厨师,那么这时候三个厨师炒一样的菜,做相同的切菜洗菜备料炒菜等工作,那这三个厨师的关系就是集群。也就意味着来一个顾客,只有其中的一个厨师会为这个顾客服务。

分布式

又经过一段时间,店里的生意更加火爆了,老板让厨师能专心炒菜,把菜做到极致,又请了个配菜师负责切菜、备菜、备料,那么厨师和配菜师的关系是分布式,后来一个配菜师也忙不过来了,老板又请了两个配菜师,三个配菜师关系也是集群。这样很像福特汽车最初创立的工业流水线,大大提升了产能。

节点


节点是指一个可以独立按照分布式协议完成一组逻辑的程序个体。在具体的项目中,一个节点表示的是一个操作系统上的进程。那这里的每一个配菜师和厨师都是一个节点。

副本


副本(replica/copy)是指在分布式系统中为数据或服务提供的冗余。数据副本指在不同的节点上持久化同一份数据,当某一个节点出现数据丢失时,可以从副本上恢复数据。数据副本是分布式系统中解决数据丢失问题的唯一手段。服务副本表示多个节点提供相同的服务,通过主从关系来实现服务高可用的方案。

中间件


当然此概念并不是分布式架构所带来的,中间件位于操作系统提供的服务之外,但又不属于应用,他是位于应用和系统层之间的、为开发者方便的处理通信、输入输出的一类软件,能够让用户只关心自己应用的部分。

应用、系统、服务、接口
点击在新窗口中浏览原图
CTRL+鼠标滚轮放大或缩小
这四位,平时经常见,但我们会傻傻分不清他们之间的关系和区别


有点抽象,我们还是那开饭店的例子来说:

饭店就是系统,包含了店面、服务员和厨子等软硬件部分;

应用就是各种菜系,例如川菜、湘菜、粤菜之类。

服务就是具体的菜品,例如回锅肉、剁椒鱼头、猪肚鸡。希望你现在不饿!

接口就是这道菜品的食材、配料、佐料等等,还包括为了完成这道菜并呈现给顾客过程中所有工序,传菜、切配等等。

分布式架构系统的难点

相信大家已经明白分布式架构是什么,但需要指出,分布式架构的设计是困难的,没有任何架构是银蛋,所以需要正视它的难点,通过各种设计和技术进行补救和解决。

由于是开篇,请允许我先抛出问题,但不提供解决方案,待后续文章一一解答。

如何设计

首先所有架构都是为了满足业务需求和发展,没有业务需求的架构设计都是耍流氓,分布式架构系统的设计也需要先了解业务需求,划分业务域,在业务域向下进行服务分解,到这步又会遇到问题,服务该如何分解,颗粒感如何?需要考虑哪些因素?

三态

分布式系统的每一次请求与响应,存在特有的“三态”概念,即成功、失败与超时。当出现超时现象时,网络通信的发起方是无法确定当前请求是否被成功处理的,做金融信息化开发的同学,一定不会陌生的名词“单边账”。

分布式事务

这其实是一个老生常谈的问题,我们都知道事务就是一系列操作的原子性保证,在单机的情况下,我们能够依靠本机的数据库链接和组件很轻易的做到事务控制,但在分布式架构下,业务原子性操作很可能是跨服务的,这样就会导致分布式事务。其实根据CAP和BASE理论,不可能在高可用分布式情况下做到一致性,一般都是最终一致性保证。

一致性

数据被分散或者复制到不同的节点上,如何保证各台主机之间的数据一致性将成为一个难点。

故障独立性

分布式系统由多个节点组成,整个分布式系统完全出问题的概率是存在的,但是在实践中出现更多的是某个节点出问题,其他节点都没问题。这种情况下我们实现分布式系统时需要考虑得更加全面些。

总结

分布式系统是一个硬件或软件组件分布在不同的网络计算机上,彼此之间仅仅通过消息传递进行通信和协调的系统,分布式系统中的多台计算机之间在空间位置上可以随意分布,同时机器的分布情况也会随时变动。

后期将于大家一起分享,分布式架构的技术体系、支撑体系、边缘体系。如何进行面向服务设计,选型哪些技术等内容,让我们一起整理知识体系,建立知识图谱,谢谢!




程序猿的技术大观园:www.javathinker.net
网站系统异常


系统异常信息
Request URL: http://www.javathinker.net/WEB-INF/lybbs/jsp/topic.jsp?postID=1064&pages=7

java.lang.NullPointerException

如果你不知道错误发生的原因,请把上面完整的信息提交给本站管理人员