架构演进-从单体架构到分布式架构 2021-10-11

本文探讨了单体架构的特点、瓶颈及其解决方案。在数据库层面,从单库调优、数据库集群到分库分表,解决性能问题。在架构层面上,介绍了从单体架构到微服务架构的演进,通过垂直或水平拆分提高系统容量和可用性。接入层的突破则涉及DNS循环和CDN,实现负载均衡和高可用。分布式架构虽带来诸多优势,但也增加了复杂性。
摘要由CSDN通过智能技术生成

一、单体架构

在这里插入图片描述

特点:

1、所有的功能集成在一个项目工程中。
2、所有的功能打一个war包部署到服务器。
3、应用与数据库分开部署。
4、通过部署应用集群和数据库集群来提高系统的性能。

优点:

项目架构简单,前期开发成本低,周期短,小型项目的首选。

缺点:

1、全部功能集成在一个工程中,对于大型项目不易开发、扩展及维护。
2、系统性能扩展只能通过扩展集群结点,成本高、有瓶颈。
3、技术栈受限。

二、瓶颈的突破

单体架构存在瓶颈:并发量等方面,为解决相关的问题。

2.1 持久层突破

关系型数据库以MySQL为例,单机的存储能力、连接数是有限的,它自身就很容易会成为系统的瓶颈。当单表数据量在百万级时,我们还可以通过添加从库、优化索引提升性能。一旦数据量朝着千万以上趋势增长,再怎么优化数据库,很多操作性能仍下降严重。

以支付宝用户为例,8亿;微信用户更是10亿。订单表更夸张,比如美团外卖,每天都是几千万的订单。淘宝的历史订单总量应该百亿,甚至千亿级别,这些海量数据远不是一张表能Hold住的。事实上MySQL单表可以存储10亿级数据,只是这时候性能比较差,业界公认MySQL单表容量在1KW量级是最佳状态,因为这时它的BTREE索引树高在3~5之间。

持久层的优化可以从以下几个步骤开始入手

  1. 单数据库调优
  2. 数据库集群(读写分离)
  3. 分库分表

既然一张表无法搞定,那么就想办法将数据放到多个地方,目前比较普遍的方案有3个:

  1. 分区;
  2. 分库分表;
  3. NoSQL/NewSQL;

说明:只分库,或者只分表,或者分库分表融合方案都统一认为是分库分表方案,因为分库,或者分表只是一种特殊的分库分表而已。NoSQL比较具有代表性的是MongoDB,ElasticSearch。NewSQL比较具有代表性的是TiDB。

在这里插入图片描述

2.2 架构层突破

合适架构的架构适应业务场景,满足当前的业务场景。

针对瓶颈进行突破。单体架构无法满足,增加机器水平扩展部署多个单体服务提高能力(通过硬件解决)。并发量高的业务模块只有个别几个,对并发量模块高的提升能力,提高总体的并发能力(垂直架构)。

互联网产品常常面临庞大的用户量,日均数十亿PV的高并发,PB级别的数据存储等问题的挑战,同时要求保证系统的高可用和弹性伸缩,并且能够根据需要进行快速迭代扩展,这些都对于系统架构提出了很高的要求。

互联网架构从简到繁的演进经历了单体架构-水平分层架构/SOA架构-微服务架构以及最新的service mesh的演进过程。
在这里插入图片描述
monoliths:(单块巨石,独石柱)单体架构
horizontal layered/SOA:水平分层,垂直架构,SOA基于服务的架构
microservice:微服务架构
service mesh:服务网格架构

垂直架构其实就已经是分布式架构了,将原有系统拆分成多个独立的子系统,每个系统各司其职,系统总体的流量分散到不同的系统中处理,从而提高了系统的吞吐量。

使用分布式架构的优势如下:

  1. 增大系统容量。我们的业务量越来越大,而要能应对越来越大的业务量,一台机器的性能已经无法满足
    了,我们需要多台机器才能应对大规模的应用场景。所以,我们需要垂直或是水平拆分业务系统,让其变成一个分布式的架构。
  2. 加强系统可用。我们的业务越来越关键,需要提高整个系统架构的可用性,这就意味着架构中不能存在单点故障。这样,整个系统不会因为一台机器出故障而导致整体不可用。所以,需要通过分布式架构来冗余系统以消除单点故障,从而提高系统的可用性。
  3. 因为模块化,所以系统模块重用度更高
  4. 因为软件服务模块被拆分,开发和发布速度可以并行而变得更快
  5. 系统扩展性更高
  6. 团队协作流程也会得到改善

当然凡事都需要辩证的来看待,分布式架构有自己的优势,但是其缺点也不能回避

  1. 架构设计变得复杂(尤其是其中的分布式事务)
  2. 部署单个服务会比较快,但是如果一次部署需要多个服务,部署会变得复杂
  3. 系统的吞吐量会变大,但是响应时间会变长
  4. 运维复杂度会因为服务变多而变得很复杂
  5. 架构复杂导致学习曲线变大
  6. 测试和查错的复杂度增大
  7. 技术可以很多样,这会带来维护和运维的复杂度
  8. 管理分布式系统中的服务和调度变得困难和复杂

2.3 .接入层的突破

DNS循环:

当权威 DNS 发现一个域名映射多个 IP 时,会使用 IP 轮询的方式来将 IP 平均分配给多个
DNS 请求,从而达到负载均衡的效果。 建立多机房,接入最近的机房,需要同接入商处理。

CDN:

由于 DNS 循环时平均分配,不能根据不同服务器的负载情况优化分配,甚至如果有一台服务器宕机了,DNS 不能及时了解到该情况把该服务器的 IP 分配出去,便会造成无法访问;因此,在权威 DNS 和 服务器之间加上一个 CDN 层就显得很必要了;CDN 在具备调度分配服务器能力的基础上,能够同步服务器运行情况,然后根据该情况及时适当调整调度策略,从而使得负载均衡能力大大提高.

CDN功能:

  • 调度分配主机;负载均衡,根据 IP,网络流量情况分配最靠近,网络最通畅的 CDN 节点实现加速
  • 反向代理
  • 静态缓存;缓存静态资源(html,图片,音乐,视频等)
  • 防止 DDOS 攻击

在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值