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

了解分布式架构,让你的软件架构之路越走越顺

时间:2019-08-19 10:48:34  来源:  作者:

分布式架构:原理,设计与实战,目前公司每个月都要出账,出账就是每个月有要把之前的一个月的账目盘算清楚,做到错误的0容忍,一笔都不能错,错一笔客户都会找你,偏准确性。4个9,5个9并不是说后面设计的,而是在开发之初就要考虑的。

 

了解分布式架构,让你的软件架构之路越走越顺

 

 

分布式服务的发展历程

  • J2EE架构

俗称JEE。对于大概有5年以上工作经验的老铁,应该都听过这个名词。基本分为3层。

  1. web容器
  2. EJB容器
  3. 数据库和数据存取的ORM

那时候的容器之间都没有进行物理的隔离,都是部署在同一个jvm上的。所以久而久之,它们之间互相的耦合互相的依赖,业务之前有千丝万缕的,添加和修改增加新的业务的时候,他们变的很复杂,经常导致服务不可用。这个时代就是有了层次,但是层次之前没有进行物理的隔离。带来了一些问题。

 

了解分布式架构,让你的软件架构之路越走越顺

 

 

  • SSH架构

开源框架SSH = struts + spring + hibernate,实际上它跟JEE的架构是基本相似的,也把组件分成了三层。

  1. struts MVC UI组件
  2. spring 业务组件,实现业务的逻辑
  3. ORM 对象管理映射层,连接数据库的

那时候的SSH非常流行,因为那个时期都是给传统的行业和制造行业来做的系统,在互联网行业里面ssh架构就不灵了。

 

了解分布式架构,让你的软件架构之路越走越顺

 

 

  • Web Service 架构

互联网行业偏向于服务化,最流行的微服务起源于服务化,服务化最早体现在web service,web service 以IBM为首的各大公司制定的标准,webservice特点服务开发完毕后,不在部署在同一台机器,同一个JVM上面,拆分成不同的服务,例如图中的web service1 ,web service2,web service3 它们3个各自有各自的角色,各自有各自的功能,服务和服务之前都是通过远程调用的方式来实现互相实现和交流的,远程调用是遵循已定的标准,当时标准是SOAP协议,这个协议是在http协议之上的,来传输xml来完成的。有了这些的服务。需要服务的发现机制,通过webservice的目录来实现的。所有的服务对外提供服务的功能,需要在webservice注册。发现服务UDDI,找到服务WSDL找到服务。这个时代服务主要的特点是:职责拆分,服务部署隔离,服务调用遵守协议。webservice定义的协议是非常重的,首先xml序列化,xml有冗余的标签,服务性能上不来的。webservice注册通信化的服务,通信化的注册服务一定要保证高可用。在互联网里面如果不是高可用的,服务也不是最优化的。

 

了解分布式架构,让你的软件架构之路越走越顺

 

 

  • ESB架构

企业服务总线,侧重于企业服务总线。 上边是提供的服务,下面是数据库数据源,消息队列,大数据,ERP。所有的服务和资源只要都进入ESB中,就会进行编排,完成特定的功能。这个时期,ESB功能进行了拆分,也有各自的职责,都进行了拆分,在不同的物理机,在不同JVM中。主要体现在可插拔,快速的添加删除服务,快速的加入资源。

 

了解分布式架构,让你的软件架构之路越走越顺

 

 

  • 微服务架构

最流行的架构,跟传统架构是一脉相承的,并不是矛盾的。采用的是分层的概念,上层的服务依赖下层的服务,基本两层,第一层:业务服务一;第二层:业务服务2,3,4。上一层跟下一层是依赖的,但是不是循环依赖的。每个服务之间自己是用数据库的,实际上数据库缓存和消息队列都是自治的,这就使微服务有自我管理的权限,微服务内可以快速的消化需求,敏捷上线,提高开发和运维的效率,微服务之前是通过远程的服务调用来先实现的。远程服务调用,并没有特定的要求是通过使用restful还是rpc,要求服务之间一定要有契约,契约可以服务生产者提出,也可以服务消费者提出的服务生产者契约,也可以是多个服务消费者一起找服务的生产者提要求,服务生产者提供一个公共的契约,保证通信没有问题的。例如:来了个需求,先进行服务的拆分,拆分到不同的微服务里面,微服务有了良好的通信契约,不在管对外的功能,就在服务内把需求消化掉了。上线和响应市场也是非常敏捷的。微服务每个节点他们的拆分都是比较单一的,都是比较细的,职责单一后,专业的人干专业的事情,这样很难犯错误,这样系统的可用性就提高起来了。

 

了解分布式架构,让你的软件架构之路越走越顺

 

 

  • 微服务的团队管理

团队其实也是自治的。微服务团队里面可能是有产品,运营,测试,开发。如果系统分配到某个团队内,在团队内的开发可以非常敏捷的沟通,很快的开发上线,并不需要跨团队的沟通,跨团队的协调,回顾下当初的SSH,公司分为UI组,开发组,测试组,DB人团队沟通,都不是微服务的团队导致沟通效率很低。所以这就是微服务倡导的敏捷,专业的人干专业的事。

 

了解分布式架构,让你的软件架构之路越走越顺

 

 

  • 分布式服务架构的精髓

敏捷上线,微服务下的自治,有效的减少不可用的因素。服务化和微服务都使用了分而治之的思想,分布式服务和分布式系统架构里面,无论是提高性能,提高吞吐量,提高敏捷性。

 

了解分布式架构,让你的软件架构之路越走越顺

 

 

  • 微服务架构的痛点
  1. 一致性

强一致性和弱一致性

  1. 高性能

容量评估和性能测试

  1. 高可用

4个9和5个9

  1. 可扩展

可修改,迭代新功能,可插拔

  1. 可伸缩

应用层和资源层,随着硬件投入的增加性能和能力相应的增长

  1. 安全性

防偷窥,防泄漏,防抵赖,防篡改,防中间人攻击

保证分布式一致性的最佳方案

周朝的时候,分而治之,后来都不听周王的话,导致不一致。不一致导致的痛点是很大的。如何去解决不一致的问题。线上趟过的坑和总结的经验分享。

  • 一致性原理

本质上需要理解下面的3种,本身是什么,应用的场景。

 

了解分布式架构,让你的软件架构之路越走越顺

 

 

image.png

ACID,数据库理论的时候,我们都学过ACID就是强一致性。四个名词代表的是一个事务是不可以在进行拆分的,要么都成功,要么都失败。在传统的数据库里面都是单体的应用,单体的应用必须保持强一致性的,尤其是我们的关系型数据库。犹豫在互联网高并发的线上。用户量非常大,上千,上万,上亿的,单体的服务架构和单体数据库很难撑起来这么大的量,所以就需要它们之前进行分而治之,在网上进行分开,进行分开,分片。带来的问题,当网络出现问题的时候,这些应用是否可以正常的工作。这就引入了CAP原则。

CAP,之间肯定是网络通信,一定要有分区容错性,也就是某个节点网络不能正常的通信时。网络断了,或者闪断的话,各自之间还要继续的工作。P肯定是要有的。这个原则是如果三者只能选择其中的二个,P已经必须要了,那就需要在C和A之间选择一个。例如:网络上有一份数据,数据是通过复制来完成的。一份是主数据,一份是从数据,当你存一份数据的时候到主数据的时候,同时也需要往从数据中存一份,如果从出现问题,是继续还是返回给主,这就是一致性和可用性的解读。如果主从必须保持一致,主从都存起来后才可以返回的话,那就保证一致性,可用性就不好,如果网络出问题,就一致等待都一致才返回。不会在有限的时间内返回给客户端的请求,可用性就很差,所以一致性和可用性就是互斥的。如果是很快的返回客户端,那就可能牺牲了一致性保持了可用性。总结就是在容错性的基础之上,可用性和一致性是互斥的。不可兼得。

BASE,基本可用,中间有软状态,最终保持了一致。基本可用是条件,最终保持一致是目标。软状态就是事先的BASE的方法,就是我们要做一个事,达到目的中间的过程需要2,3个阶段,做完一个阶段记录状态信息,然后做第二个阶段,我们可以从出问题的那个位置恢复到出问题的地方。互联网上很多的高并发项目,都使用了分布式事务都进行打折了,完成了最终一致性。使用了BASE原理,CAP限制了它不可能三者同时存在。

  • 一致性协议

两个阶段的协调者

 

了解分布式架构,让你的软件架构之路越走越顺

 

 

image.png

三阶段的协调者

 

了解分布式架构,让你的软件架构之路越走越顺

 

 

TCC(Try)

 

了解分布式架构,让你的软件架构之路越走越顺

 

 

  • 最终一致性

查询模式

 

了解分布式架构,让你的软件架构之路越走越顺

 

 

补偿模式

 

了解分布式架构,让你的软件架构之路越走越顺

 

 

异步确保模式

 

了解分布式架构,让你的软件架构之路越走越顺

 

 

定期校对模式

 

了解分布式架构,让你的软件架构之路越走越顺

 

 

可靠消息模式

 

了解分布式架构,让你的软件架构之路越走越顺

 

 

了解分布式架构,让你的软件架构之路越走越顺

 

 

image.png

  • 服务交互的模式

同步模式

 

了解分布式架构,让你的软件架构之路越走越顺

 

 

异步模式

 

了解分布式架构,让你的软件架构之路越走越顺

 

 

image.png

消息模式

 

了解分布式架构,让你的软件架构之路越走越顺

 

 

  • 同步与异步的抉择

尽量使用异步来替换同步操作

能用同步解决的问题,不要引入异步

  • 超时模式

同步两个状态的接口超时

 

了解分布式架构,让你的软件架构之路越走越顺

 

 

同步两个状态的内部超时

 

了解分布式架构,让你的软件架构之路越走越顺

 

 

同步三状态的内部超时

 

了解分布式架构,让你的软件架构之路越走越顺

 

 

异步受理超时

 

了解分布式架构,让你的软件架构之路越走越顺

 

 

消息队列发送超时

 

了解分布式架构,让你的软件架构之路越走越顺

 

 

消息对垒接收超时

 

了解分布式架构,让你的软件架构之路越走越顺

 

 

  • 补偿的博弈

 

了解分布式架构,让你的软件架构之路越走越顺

 

 

服务1调用服务2,如果服务2响应服务1,并且告诉服务1消息我接收了,那么服务1的任务就结束了,如果服务2处理失败,服务2应该负责重试或者补偿。在这种情况下,服务2通常先持久化消息后再告诉服务1接收成功,随后服务2才开始处理持久的消息,避免服务进程被傻吊丢失消息的情况。

 

了解分布式架构,让你的软件架构之路越走越顺

 

 

服务1调用服务2,如果服务2没有给出明确的接收响应,那么服务1应该持久尝试重试,知道服务2明确表达已经接收消息,这种情况下,容易出现消息重复,因此在服务2中通常要保证滤重或者幂等性。

 

了解分布式架构,让你的软件架构之路越走越顺

 

 

  • 缓存使用的一致性模式

缓存是用来加速的,牺牲了一致性,获得高性能,只适合特殊场景。

保持数据库和缓存的强一致性是个伪命题

如果性能要求不是非常的高,尽量使用分布式缓存,而不是使用本地缓存,本地缓存可能你现在读的时候本地是开,其实另一个时间其他人读的是关,你想想多可怕。

种缓存的时候一定种完全,如果缓存数据的一部分有效,一部分无效,宁可放弃种缓存,也不要把部分数据中入缓存

通常情况下读的顺序要先缓存,后数据库,写的顺序要先数据库,后缓存

  • 迁移开关的设计模式

新旧系统的迁移。

不要用统一配置开关,开关是定义在某个业务上。在一个系统做滤重,比在多个系统做滤重简单。

不要用节点独立的开关

迁移开关必须使用订单开关

开关要用权限控制。开关的重要,特定经验的人来操作。

开关要能开能关

迁移开关要大小力度都有

PS:了解分布式架构,是对自己从心智上的一种提升,敲代码只是往下看,建议多往前方看看。架构这条路不好走,需要多接触,多趟多走,才能前方一路小平破。



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