前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >架构设计方法论沉淀

架构设计方法论沉淀

原创
作者头像
vitofliu
修改2021-09-03 20:53:08
1.1K0
修改2021-09-03 20:53:08
举报
文章被收录于专栏:云架构云架构

1.概述

架构设计的主要目的: 解决软件系统复杂度带来的问题。

架构设计复杂度的来源: 高性能、高可用、高可扩展以及低成本.

架构设计的原则:合适、简单、演化.

架构设计流程:识别系统复杂度->设计备选方案->评估和选择备选方案->详细方案设计

2.容量评估

这是架构设计的基本功,什么样的场景需要进行容量预估、容量设计呢?

(1)容量有质变性增长

(2)临时运营活动(如双11,春节红包)

(3)新系统上线

评估哪些指标?

看具体业务,对应到系统测的主要矛盾是什么?例如:

(1)数据量 (新鲜事评论, 视频点播平台)

(2)并发量,吞吐量(12306抢票,商品抢购)

(3)带宽(直播,推流,音视频业务)

(4)CPU/MEM/DISK IO等

如何进行容量评估?(QPS吞吐量)

1). 评估总访问量:参考产品品和运营预估数据

2). 评估平均吞吐量:总访问量/总时间,一天按4W秒(一天总共60x60x24=86400秒;一般认为请求都发生在白天即4W秒)

3). 评估高峰吞吐量:根据业务访问曲线来评估(二八原则,秒杀等特殊业务除外)

4). 评估单机极限吞吐量:压测

5). 根据线上冗余度做决策:计算需求与线上冗余差值(灾备)

3.高性能

1). 高性能常见指标

1. 响应时间(Response Time)

2. 吞吐量(Throughput)

3. 每秒查询率QPS(Query Per Second)

4. 并发用户数

2).提升系统性能的方法:

1. 垂直扩展(Scale Up) 增强单集硬件性能,提升单集架构性能

2. 水平扩展(Scale Out) 只要增加机器数量,就能线性扩展系统性能 每一层都必须支持水平扩展, 才能理论上性能无限.

3) .常用方法: 读写分离, 动静分离(页面静态化),数据库水平切分(水平分表、分库),高性能缓存架构, CDN加速.

CDN适合静态资源的加速访问:通过“智能DNS”来实现的!智能DNS通过用户ip来解析域名实现就近访问

4)缓存架构

进程内缓存可以节省内网带宽 并且 时延更低, 但保证数据一致性 复杂性很高.且违背了””服务无状态”的设计准则,数据和状态尽量存储到后端统一存储.

什么时候可以使用进程内缓存?

1. 只读数据

2. 并发极高,透传后端压力极大 (秒杀类业务)

3. 允许一定程度上数据不一致 (计数业务)

如何保证进程内缓存的一致性?

方案一:单节点通知其他节点

同一功能在一个集群的多个节点相互耦合在一起,节点比较多时,连接关系会比较复杂

方案二:MQ解耦合,但引入MQ系统复杂性提高

方案三:放弃实时一致性,定期从后端更新数据

4.高可用

Cap理论

高可用HA(High Avaliability),是分布式系统架构设计必须考虑的因素,如何保障系统的高可用?

(1)集群化(冗余)

(2)故障自动转移

高可用存储架构:双机架构

高可用存储架构:集群和分区

业务高可用的保障:异地多活架构

主从一致性,究竟如何解决?

主从不一致发生原因:写请求发生后,数据还没同步到从库,立刻发生读请求(主从同步时延)

主从数据冗余,主从不一致:

1. 忽略不计(业务接受很短的时延内读到老数据)

2. 强制读主(放弃读写分离,一主多从的分组架构;使用缓存来提升读性能,引入缓存与数据库的数据不一致问题)

3. 借助缓存,选着性读主(主从同步的时延范围内读主库,否则读冲库,缓存记录写的数据库,表,主键)

主主不一致发生原因:主库使用自增长主键;两个主库同时发生写请求,自增主键冲突,同步失败,造成数据永久性丢失

主主数据冗余,主主不一致:

1. 数据库自增id设置不同初始值,相同增长步长

2. 应用层生成不冲突的id (雪花算法等)

3. 只有一个主库提供服务,影子主不服务(牺牲资源利用率,数据一致性与资源利用率的折中)

5.高可扩展

可扩展的基本思想:拆分. 就是将原本大一统的系统拆分成多个规模小的部分,扩展时只修改其中一部分即可,无须整个系统到处都改,通过这种方式来减少改动范围,降低改动风险。

按照不同的思路来拆分软件系统,就会得到不同的架构。常见的拆分思路有如下三种,不同的拆分方式,将得到不同的系统架构:

面向流程拆分:分层架构。将整个业务流程拆分为几个阶段,每个阶段作为一部分。

面向服务拆分:SOA、微服务。将系统提供的服务拆分,每个服务作为一部分。

面向功能拆分:微内核架构。将系统提供的功能拆分,每个功能作为一部分。

架构分层方法论:

(1)分层架构,是一个“数据移动”,被“处理”,然后被“呈现”的过程

(2)架构分层方法论:

让上游更高效的获取与处理数据,复用

让下游能屏蔽数据的获取细节,封装

MQ (消息总线,Message queue)是互联网架构中最常见的结构利器

6.微服务

服务化有什么好处:

1. 复用性,消除代码拷贝2. 专注性,防止复杂性扩散

3. 解耦合,消除公共库耦合

4. 高质量,SQL稳定性有保障

5. 易扩展,消除数据库解耦合

6. 高效率,调用方研发效率提升

但是如果服务化不合理,将个性化的数据下沉到了底层的微服务,耦合和瓶颈会更加严重。

如何解耦: 个性化代码上浮,公共代码下沉,服务化更彻底!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
作者已关闭评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档