您当前的位置:首页 > 电脑百科 > 程序开发 > 架构

大白话给你讲分布式架构,3分钟让你学一遍

时间:2020-10-14 10:40:18  来源:  作者:

引言

随着越来越多的人参与到互联网的浪潮来,曾经的单体应用架构越来越无法满足需求,所以,分布式集群架构出现,也因此,分布式搭建开发成为了Web开发者必掌握的技能之一。

那什么是分布式呢?怎么实现分布式以及怎么处理分布式带来的问题呢?本系列文章就来源于对分布式各组件系统的学习总结。

包含但不限于Zookeeper、Dubbo、消息队列(ActiveMQ、Kafka、RabbitMQ)、Nosql(redis、MongoDB)、Niginx、分库分表MyCat、Netty等内容。

一、什么是分布式

简单的说,“分工协作,专人做专事”就是分布式的概念。

就好比你是你们公司唯一的码农,那么前后端都需要你自己来开发(单体架构),但随着业务的增长,你确实忙不过来了,老板给你招来了一个前端,那么你就只需要专注后端开发就行了(分布式)。

但是软件的分布式搭建远远不像现实例子中这么简单,需要考虑和处理很多方面的问题,我们先了解以下几个常见的概念:

  • 集群:你们公司业务增长的非常快,老板发现你一个后端忙不过来了,就又招了几个后端开发来协助你,这就是后端集群;再往后,发现前端也忙不过来了,又配备几个前端,就是前端集群。所以也不难看出,将应用拆分后,你可以有针对性地扩展单个服务,做成集群,这就是分布式的好处之一。
  • 节点:这个也非常好理解,一个服务就是一个节点,比如你就是后端集群中的一个节点,而集群本身也可以看成是整个应用的一个集群节点。
  • 副本:副本就是为服务和数据提供的冗余,保证高可用。
  • 中间件:为开发者提供便利,屏蔽复杂的底层的一类框架组件。如服务管理通信、序列化、负载均衡等组件。
大白话给你讲分布式架构,3分钟让你学一遍

 

上图就是一个简单的分布式架构,但并不是所有的应用一开始就要设计为分布式架构。

因为一开始业务量并不大,没有必要耗费大量的时间和成本去完成一个分布式架构,甚至有可能到最后都用不上,因此在设计时我们应该遵循演进原则,由简入深。

下面就来简单分析一下分布式架构的演进过程。

二、分布式架构的演化过程

单机版

以商城为例,为了简单说明,这里就只列出用户、订单、配送服务。

大白话给你讲分布式架构,3分钟让你学一遍

 

如图,大部分应用最开始都是将应用和数据库放到一台物理机上提供服务,但随着访问量的提升,服务器负载越来越高。

我们首先会优化代码、对机器做垂直扩容(内存、容量)等,但单台机器的性能是存在上限的,且对单机扩容的性价比会随着性能的提升越来越低,那我们就会想到增加服务器。

将应用服务器和数据库服务器分离

在一开始,我们可能只会增加一台服务器,并将应用和数据库分离:

大白话给你讲分布式架构,3分钟让你学一遍

 

搭建应用服务器集群

随着访问量的继续增加,单台应用服务器也无法满足需求了,我们就需要搭建应用服务器集群来对外提供服务了

大白话给你讲分布式架构,3分钟让你学一遍

 

但是,在搭建应用服务器集群之后,问题就出现了,用户在访问时,应该到哪个服务器上去?

如何平均服务器压力?以及用户的session如何维护(A首先访问了1号应用服务器并登陆,但下次请求可能是去到2号服务器,但这台服务器上并没有用户的session信息)?

我们可以在用户层和应用层之间加上一个负载均衡器来平衡服务器的负载,session可以采取同步的方式,或者增加单独的session共享服务器。

数据库读写分离

应用层的问题暂时解决了,但是此时数据库又顶不住了。那该如何做呢?

只是简单的增加数据库的服务器来提供存储和访问能力么?那肯定不行,这样数据就不一致了。

所以我们需要将数据库分为读库和写库。查询请求都到读库去,而写入请求都到写库去。

大白话给你讲分布式架构,3分钟让你学一遍

 

但这样也存在几个问题:

  • 数据如何同步以及同步延迟如何处理?
  • 应用层数据源的选择
  • 大数据查询搜索,可以引入搜索引擎
  • 避免每次访问直接到达数据库,可以引入redis等缓存数据库缓存热点数据

问题看似都解决了,但是每个数据库都存储的是同样的数据,随着业务继续扩大, 我们就不得不考虑对数据库做水平或垂直拆分:

  • 水平拆分:将同一个表中的数据拆分至多个数据库中
  • 垂直拆分:将不同业务的数据放到不同的数据库中
大白话给你讲分布式架构,3分钟让你学一遍

 


应用拆分

业务继续增长,数据库达到瓶颈时可以继续增加服务器解决,但是应用层呢?也只是单纯的增加服务器么?

基于二八原则,其实大部分访问量是集中在20%的功能上的,如果我们只是单纯的增加服务器,那么无疑会浪费掉许多的资源,所以我们会想到能不能针对这20%的应用做扩展呢?

当然是可以的,只不过我们需要先将应用拆分为多个子系统(一般是根据业务):

大白话给你讲分布式架构,3分钟让你学一遍

 

随着应用拆分随之而来的问题是,公用的代码如何处理?各服务之间如何通信?

公用代码我们不可能放到每个服务中去,而是应该提出来对外提供服务,同时服务之间的调用可以通过RPC或者HTTP方式来实现。

演化至此,这样的架构就是一个成熟的分布式架构了。

但是,架构还是会随着业务和技术的提升不停地演化;而此时你有没有发现这样的一个架构和冯诺伊曼结构很像呢!

输入输出设备对应用户和服务之间的输入输出,数据库服务器就像是存储设备,而整个应用层就像是一个CPU(控制器、运算器)。

所以,分布式架构可以简单的理解为将多台计算机组成的一台超级计算机。

三、分布式架构的设计

在设计分布式架构时,我们需要了解几个基本的概念。

  • 主流架构模型-SOA和微服务
  • CAP和BASE理论
  • DDD(领域驱动设计)

这些理论限于篇幅原因,这里就不展开详述,读者可自行查阅。下面主要来谈谈分布式架构的高可用设计。

分布式架构的高可用设计

在分布式架构中,常常面临的两个矛盾的问题是一致性高可用,这两个是无法同时满足的,那我们舍谁取谁呢?

从用户的角度分析,我们宁可获取到旧数据,也不愿意等半天都打不开应用,所以常常是保证高可用,让数据达到最终一致性,那么如何设计高可用的分布式架构呢?主要从以下几个方面:

  • 搭建服务集群,提高负载,避免单点故障。尤其是特别重要的服务,如访问量较高的服务和核心服务(一旦挂掉就会导致整个应用不可用的服务)。
  • 应对灾难,搭建异地灾备,预防地区因发生地震、台风等自然灾害导致地区的集群服务器都不可用。
  • 接口限流以及服务降级。为防止过高的并发量造成服务器负载过高而出现故障,应对接口限流,同时,当某个或多个服务出现故障时,应当服务降级,避免拖累整个应用。比如支付时因网络故障等导致无法支付,但搜索商品和下单仍然可用。
  • 故障监控报警。
  • 服务的可伸缩性,易于水平扩张服务器数量。
  • 使用缓存降低数据库压力。
  • 使用CDN等加速静态资源的访问。

高可用的分布式架构需要考虑非常多的方面,针对不同的场景有不同的解决方案,而对于不同的公司而言也不需要一应俱全,需要在实践中多思考总结,根据自己的业务情况来设计。

总结

本文从理论层面讲述了分布式的基本概念、演化过程,以及设计,从宏观角度搞清楚分布式的起源以及分布式带来的一系列问题,也就能明白各项技术出现的原因以及应用的场景。

作者:夜勿语 来源:https://blog.csdn.net/l6108003/article/details/94835586



Tags:分布式架构   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
一个软件系统随着功能越来越多,调用量急剧增长,整个系统逐渐碎片化,越来越无序,最终无法维护和扩展,所以系统在一段时间的野蛮生长后,也需要及时干预,避免越来越无序。架构的本质就...【详细内容】
2021-09-24  Tags: 分布式架构  点击:(47)  评论:(0)  加入收藏
大约一年前,我在一致性模型上写了这篇文章的第一个版本,但我从来没有对它感到满意,因为它写得很匆忙,而且这个主题足够重要,需要得到更彻底的处理。ACM Queue要求我修改它以便在...【详细内容】
2020-12-22  Tags: 分布式架构  点击:(145)  评论:(0)  加入收藏
引言随着越来越多的人参与到互联网的浪潮来,曾经的单体应用架构越来越无法满足需求,所以,分布式集群架构出现,也因此,分布式搭建开发成为了Web开发者必掌握的技能之一。那什么是...【详细内容】
2020-10-14  Tags: 分布式架构  点击:(70)  评论:(0)  加入收藏
围绕Database、Bigdata、AiOps的企业级专业社群。顶级大咖、技术干货,每天精品原创文章推送,每周线上技术分享,每月线下技术沙龙,受众20W+。...【详细内容】
2020-08-10  Tags: 分布式架构  点击:(59)  评论:(0)  加入收藏
近年来,随着银行业务量的快速增长,一些大型商业银行早已布局分布式架构转型,这不仅是国家安全战略的要求,也是随着互联网发展,商业银行提升自身金融服务能力的需要。商业银行系...【详细内容】
2020-08-04  Tags: 分布式架构  点击:(67)  评论:(0)  加入收藏
一为什么要做分布式数据库架构改造?云计算大数据时代,传统的数据库架构已经无法支撑企业高容量的数据增长,满足高并发的业务需求。对企业数据库进行分布式架构设计,打破了数据库...【详细内容】
2020-06-10  Tags: 分布式架构  点击:(52)  评论:(0)  加入收藏
开发排查系统问题用得最多的手段就是查看系统日志,在分布式环境中一般使用ELK来统一收集日志,但是在并发大时使用日志定位问题还是比较麻烦,我们来看下面的图 上图一个用户请...【详细内容】
2020-06-09  Tags: 分布式架构  点击:(39)  评论:(0)  加入收藏
一、前言​  随着社会的发展,技术的进步,以前的大型机架构很显然由于高成本、难维护等原因渐渐地变得不再那么主流了,替代它的就是当下最火的分布式架构,从大型机到分布式,经历...【详细内容】
2020-05-21  Tags: 分布式架构  点击:(56)  评论:(0)  加入收藏
转载本文需注明出处:微信公众号EAWorld,违者必究。针对分布式架构下的数据一致性,大家也许会问这样的问题:跨系统间分布式事务如何解决?系统内多个服务的分布式事务如何解决?一个...【详细内容】
2020-05-09  Tags: 分布式架构  点击:(49)  评论:(0)  加入收藏
基于springboot+dubbo分布式架构,提供分布式缓存、分布式锁、分布式Session、读写分离等统一组件及RBAC权限管理等模块。前言以分布式基础架构为依托,包含但不仅限于分布式架...【详细内容】
2020-03-16  Tags: 分布式架构  点击:(153)  评论:(0)  加入收藏
▌简易百科推荐
为了构建高并发、高可用的系统架构,压测、容量预估必不可少,在发现系统瓶颈后,需要有针对性地扩容、优化。结合楼主的经验和知识,本文做一个简单的总结,欢迎探讨。1、QPS保障目标...【详细内容】
2021-12-27  大数据架构师    Tags:架构   点击:(3)  评论:(0)  加入收藏
前言 单片机开发中,我们往往首先接触裸机系统,然后到RTOS,那么它们的软件架构是什么?这是我们开发人员必须认真考虑的问题。在实际项目中,首先选择软件架构是非常重要的,接下来我...【详细内容】
2021-12-23  正点原子原子哥    Tags:架构   点击:(7)  评论:(0)  加入收藏
现有数据架构难以支撑现代化应用的实现。 随着云计算产业的快速崛起,带动着各行各业开始自己的基于云的业务创新和信息架构现代化,云计算的可靠性、灵活性、按需计费的高性价...【详细内容】
2021-12-22    CSDN  Tags:数据架构   点击:(10)  评论:(0)  加入收藏
▶ 企业级项目结构封装释义 如果你刚毕业,作为Java新手程序员进入一家企业,拿到代码之后,你有什么感觉呢?如果你没有听过多模块、分布式这类的概念,那么多半会傻眼。为什么一个项...【详细内容】
2021-12-20  蜗牛学苑    Tags:微服务   点击:(8)  评论:(0)  加入收藏
我是一名程序员关注我们吧,我们会多多分享技术和资源。进来的朋友,可以多了解下青锋的产品,已开源多个产品的架构版本。Thymeleaf版(开源)1、采用技术: springboot、layui、Thymel...【详细内容】
2021-12-14  青锋爱编程    Tags:后台架构   点击:(20)  评论:(0)  加入收藏
在了解连接池之前,我们需要对长、短链接建立初步认识。我们都知道,网络通信大部分都是基于TCP/IP协议,数据传输之前,双方通过“三次握手”建立连接,当数据传输完成之后,又通过“四次挥手”释放连接,以下是“三次握手”与“四...【详细内容】
2021-12-14  架构即人生    Tags:连接池   点击:(16)  评论:(0)  加入收藏
随着移动互联网技术的快速发展,在新业务、新领域、新场景的驱动下,基于传统大型机的服务部署方式,不仅难以适应快速增长的业务需求,而且持续耗费高昂的成本,从而使得各大生产厂商...【详细内容】
2021-12-08  架构驿站    Tags:分布式系统   点击:(23)  评论:(0)  加入收藏
本系列为 Netty 学习笔记,本篇介绍总结Java NIO 网络编程。Netty 作为一个异步的、事件驱动的网络应用程序框架,也是基于NIO的客户、服务器端的编程框架。其对 Java NIO 底层...【详细内容】
2021-12-07  大数据架构师    Tags:Netty   点击:(16)  评论:(0)  加入收藏
前面谈过很多关于数字化转型,云原生,微服务方面的文章。虽然自己一直做大集团的SOA集成平台咨询规划和建设项目,但是当前传统企业数字化转型,国产化和自主可控,云原生,微服务是不...【详细内容】
2021-12-06  人月聊IT    Tags:架构   点击:(23)  评论:(0)  加入收藏
微服务看似是完美的解决方案。从理论上来说,微服务提高了开发速度,而且还可以单独扩展应用的某个部分。但实际上,微服务带有一定的隐形成本。我认为,没有亲自动手构建微服务的经历,就无法真正了解其复杂性。...【详细内容】
2021-11-26  GreekDataGuy  CSDN  Tags:单体应用   点击:(35)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条