分布式架构

架构师的学习可从如下几个方面着手:

第一、基础方面:包括数据结构、操作系统、算法应用、设计模式等一切拥有优秀编程能力
所应该熟知的软件基础知识;
第二、技术方面:如何使用优秀的技术产品去构建自己的系统,这些技术产品各自的特点是
什么,有什么优缺点、具体原理是怎样的?都要有深刻掌握和理解。对大型互联网系统而言,
主要包括缓存、异步、分布式存储、微服务等;
第三、架构方面:考虑点主要包括高可用、高性能、高扩展这三部分。
总之,作为一名技术人,我们既然选择了这个职业,就一定要有上进的决心,不能只顾写代
码,一定要提升架构设计能力。因为即使代码写得再好,做的也是执行层面的事儿,就会有
收入的天花板,想要突破它,就要突破你做事儿的边界,让自己成为一个架构师或技术负责
人。

分布式

什么是分布式架构?

当系统的并发处理能力,存储能力等不足时,我们可能会创建多个 Web 服务 ( 多个 tomcat
服务器 ), 多个数据库服务 ( 主动架构等 ) ,这些服务器通过网络进行连接,然后协同处理客
户端的并发请求,这样的系统我们称之为分布式系统。(这里要说明的一点是微服务架构是
分布式架构,但分布式架构不一定是微服务架构)例如: 分布式架构_第1张图片

为什么需要分布式架构?

当一个系统的业务 越来越大时,我们需要垂直或是水平拆分业务系统,同时为了避免所有
业务都部署在一台机器上时,一旦机器出现故障从而导致整体不可用,就需要将这些业务部
署在多台计算机上,来构建一个分布式架构。
分布式架构可以更好的提高系统的容量、可靠性(避免单点故障)、性能 。同时因为模块化,
系统的可重用性以及并行开发的效率也会提高。

分布式架构有哪些优势?

1. 可以实现更大数据量的存储。(字节跳动每天几十个 PB 的数据)
2. 可以更好提高系统的高可用性。(业务冗余、业务拆分、限流、降级 ….
3. 可以更好提高系统的可重用性。 ( 公共模块 - 例如订单系统、支付系统,日志收集系统,
监控系统,。。。 )
4. 可以更好提高系统的性能。(并行处理能力)

分布式架构有什么劣势?

分布式系统架构虽然解决 “单点”、“性能”和”容 “的问题,但却新增 一些新的问题。
①会增加架构设计的难度。
②部署和维护的成本也会加大。
很多技术方案都是“按下葫芦浮起瓢”,都是有得有失,分布式架构也是如此,理性面对即
可。

分布式架构有哪些关键技术?

服务治
服务治 的最大意义是需要把服务间的依赖关系、服务调用链,以及关键的服务给梳 出来,
并对这些服务进 性能和可用性方面的管
架构管
基于服务所形成的架构需要有架构版本管 、整体架构的生命周期管 ,以及对服务的编排、
聚合、事务处 等服务调度功能。
DevOps
分布式系统可以 为快速地 新服务,但是对于服务的测试和部署都会是挑战。所以,还需
DevOps 的全流程,其中包括环境构建、持续集成、持续部署等。自动化运维。有 DevOps
后,我们就可以对服务进 自动伸缩、故障迁移、配置管 、状态管 等 一系 的自动化
运维技术
资源调度管
应用层的自动化运维需要基础层的调度支持,也就是云计算 IaaS 层的计算、存储、网络等
资源调度、隔离和管
整体架构监控。
如果没有一个好的监控系统,那么自动化运维和资源调度管 只可能成为一个泡影, 因为
监控系统是你的眼睛。没有眼睛,没有数据,就无法进 高效的运维。所以说,监控是非常
重要 的部分。这 的监控需要对三层系统(应用层、中间件层、基础层)进 监控。
控制。
我们的流 控制,负载均衡、服务 由、熔断、降级、限流等和流 相关的调度都 会在这
,包括灰度发布之类的功能也在这

基于分布式架构如何提高其高性能?

一般面对这样的问题,从整体维度去思考时,通常要分析问题,例如影响系统性能的因素有
哪些?
1) 请求数据传输时间
2) 请求数据的处理时间
3) 响应数据的传输时间
4) 响应数据的渲染时间 ( json->html/css/js
解决方案如下:
1) 减少数据传输时间? ( 加带宽,减少数据传输量,减少传输距离,数据压缩 )
2) 提高请求数据的处理速度? ( 分布式架构,缓存,算法, sql 调优,索引的设计,异步,
硬件 )
3) 提高数据在客户端的渲染时间? ( 局部更新,减少不必要的元素等 )
具体从架构层面进行设计的话可以从如下几个维度进行思考:
应用缓存。
为系统添加缓存,可以有效地提高系统的访问能 。从前端的浏览 ,到网络,再到后端的
服务,底层的数据库、文件系统、硬盘和 CPU ,全都有缓存,这是提高快速访问能 最有效
的手段。
负载均衡。
负载均衡是做水平扩展的关键技术,我们可以使用多台机 来共同分担一部分流 请求。
异步调用。
异步系统主要通过消息队 来对请求做排队处 ,这样可以把前端的请求的峰值给“削平”
,而后端通过自己能够处 的速度来处 请求。
数据分区和数据镜像
数据分区是把数据按一定的方式分成多个区(比如通过地 位置), 同的数据区来分担
同区的流

如何基于架构提高系统的稳定性?

服务拆分。
服务拆分可以更好的实现故障隔离,同时也可以重用服务模块。
服务冗余。
服务冗余是为了去除单点故障,支持服务的弹性伸缩,以及故障迁移。
限流降级。
当系统扛 住压 时,只能通过限流或者功能降级的方式来停掉一部
分服务,或是拒绝一部分用户,以确保整个架构 会挂掉。
高可用架构。
高可用就是从冗余架构的角度来保障可用性。比如多租户隔离,灾备
多活等。总之,就是为 了不 出单点故障。
高可用运维。
指的是 DevOps 中的 CI(持续集成)/CD(持续部署)。一个良
好的运维应做 足够的自动化测试,做了相应的灰度发布,以及对线
上系统的自动化控制。这样,可以做到“计划内”或是“非计划内”的宕机
事件的时长最短。

分布式架构有什么难点?

异构系统存在很多不标准问题。
构建软件时使用的编程语言、通讯协议、数据格式、运维标准可能不同,进而导致架构设计
的复杂度越来越高。
系统架构中的服务依赖问题。
传统的单体应用,一台机器挂了,整个软件就挂掉了,分布式架构下也可能会出现这样的问
题,因为一个服务可能会依赖于另一个服务,某个服务挂掉了,会导致调用链上的服务都出
现故障(这就是多米诺骨牌效应)
故障发生的概率更大。
分布式系统中,服务和机器都会比较多,故障发生的频率会更大,只是影响面没有单体应用
的影响面大,分布式系统中故障可以被隔离。还有就是分布式架构管理相对于单体架构也更
加复杂,没有优秀的架构管理人员,故障的频率还是会非常高。
多层架构的运维复杂度更大。
分布式架构中,我们可以将系统分为四层 ( 基础层、平台层、应用层、接入层 )
1) 基础层 : 包括机器、网络和存储设备。
2) 平台层 : 就是中间件层包括 tomcat MySQL Redis Kafka 类似的软件。
3) 应用层 : 就是我们的业务软件,包括各种业务服务。
4) 接入层 : 就是接入用户请求的网关、负载均衡、 CDN DNS 等。

 

你可能感兴趣的:(架构,微服务,分布式)