AI智能
改变未来

分布式架构的演进概述


分布式架构的演进

单体架构的现状:
1.部署和维护很困难;
2.业务的耦合度很高;
3.性能瓶颈;
4.测试很困难;
5.服务的可用性的要求.
单体架构需要考虑的问题: 人员问题, 时间周期

单台服务器访问压力增加的时候:
影响性能: CPU, 文件IO, 内存和网络IO->提高带宽
阀值达到之后只能增加服务器, 对于电脑来说就是单核变多核
1.水平扩容;
2.垂直扩容;

一台服务器->多台服务器
客户端访问网站基于域名->DNS返回一个IP, 进行请求
请求如何分发->
1.DNS解析路由,
2.负载均衡算法: 中间增加一台服务器, 对服务请求或者流量进行分发
轮询: 按照顺序给服务器分发;
加权轮询, 随机算法, 最小连接数根据后端处理的连接数处理, hash算法
服务: 1.通过Session保存数据; 2.Session服务端保存状态+cookie客户端保存状态. 产生的问题: 多台服务器同步Session.

多台服务器同步Session:
1.Session复制适合小的负载均衡: 同步Session会增加网络带宽, 消耗内存;
2.统一存储: 通过redis共享session: redis与memcache一样,都是将数据放在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。
3.无状态存储: 生成一个标识access_token: 存在安全性问题;
4.通过cookie共享Session: 以cookie为中转站, 安全性不高容易伪造(如客户端禁止cookie就无法共享);

架构一般可分业务架构、应用架构、技术架构

  1. 业务架构从概念层面帮助开发人员更好的理解系统,比如业务流程、业务模块、输入输出、业务域
  2. 应用架构从逻辑层面帮助开发落地系统,如数据交互关系、应用形式、交互方式,使得整
    个系统逻辑上更容易理解,步入大家熟知的 SOA 就属于应用架构的范畴
  3. 技术架构主要解决技术平台选型、如操作系统、中间件、设备、多机房、水平扩展、高可用等问题.

从计算机本身的角度来考虑的话, 一个请求的访问到处理最终到返回,
性能瓶颈只会是: CPU、文件 IO、网络 IO、内存等因素。

CPU/IO/内存:

  1. 主要是上下文的切换,因为每个 CPU 核心在同一时刻只能执行一个线程, 而 CPU 的调度有几种方式,比如抢占式和轮询等,以抢占式为例, 每个线程会分配一定的执行时间,当达到执行时间、线程中有 IO 阻塞或者有高优先级的线程要执行时。 CPU 会切换执行其他线程。 而在切换的过程中,需要存储当前线程的执行状态并恢复要执行的线程状态,这个过程就是上下文切换。 比如 IO、锁等待等场景下也会触发上下文切换,当上下文切换
    过多时会造成内核占用比较多的 CPU;
  2. 文件 IO,比如频繁的日志写入,磁盘本身的处理速度较慢、都会造成 IO 性能问题;
  3. 网络 IO,带宽不够;
  4. 内存,包括内存溢出、内存泄漏、内存不足;
    实际上不管是应用层的调优也好,还是硬件的升级也好。其实无非就是这几个因素的调整。

一个软件系统随着功能越来越多,调用量急剧增加会导致无法维护和扩展
所以架构的本质就是对系统进行有序化重构使系统不断进化.

架构实现无序->有序
1.分:把系统拆分成各个子系统/模块/组件;
2.合:把各个分离的组件有机整合在一起.
拆分的目的: 是开发人员聚焦业务, 技能, 从而实现开发敏捷;
合并: 使得系统可以因需而变实现业务敏捷.

分布式架构的演进过程总结为以下几点:
一: 系统架构演化历程-初始阶段架构:
应用程序、数据库、文件等所有的资源都在一台服务器上.

二: 系统架构演化历程-应用服务和数据服务分离:
数据量增加,单台服务器性能及存储空间不足,需要将应用和数据分离,并发处理能力和数据存储空间得到了很大改善。

三: 系统架构演化历程-使用缓存改善性能:
数据库中访问较集中的一小部分数据存储在缓存服务器中,减少数据库的访问次数,降低数据库的访问压力。
系统访问特点遵循二八定律,即80%的业务访问集中在20%的数据上。

四: 系统架构演化历程-使用应用服务器集群:
多台服务器通过负载均衡同时向外部提供服务,解决单台服务器处理能力和存储空间上限的问题。
通过向集群中追加资源,提升系统的并发处理能力,使得服务器的负载压力不再成为整个系统的瓶颈。

五: 系统架构演化历程-数据库读写分离:
数据库写入、更新的这些操作的部分数据库连接的资源竞争非常激烈,导致了系统变慢.
1.主从分离; 2.读写分离: 主数据库master只负责数据的读取, 从数据库slave只负责数据的写入;3.最后采用数据库自身的复制机制将数据复制实现数据的同步.
六: 系统架构演化历程-分布式文件系统和分布式数据库:
1.水平分库分表: 将系统数据按照业务水平拆分; 2.垂直分库分表: 单个数据库数据的访问压力过大可采用垂直分库.

七: 系统架构演化历程-使用NoSQL和搜索引擎:
随着业务越来越复杂,对数据存储和检索的需求也越来越复杂,系统需要采用一些非关系型数据库如NoSQL和分数据库查询技术如搜索引擎。
应用服务器通过统一数据访问模块访问各种数据,减轻应用程序管理诸多数据源的麻烦。

八: 系统架构演化历程-业务拆分:
为了应对日益复杂的业务场景,通常使用分而治之的手段将整个系统业务分成不同的产品线,应用之间通过超链接建立关系,也可以通过消息队列进行数据分发

九: 系统架构演化历程-分布式服务:
公共的应用模块被提取出来,部署在分布式服务器上供应用服务器调用。

赞(0) 打赏
未经允许不得转载:爱站程序员基地 » 分布式架构的演进概述