【架构设计】互联网架构项目架构演进以及三高设计概述

news2024/11/18 10:46:39
  • 系统架构并非一蹴而就,架构目标也是随着业务发展而变化,业务推送技术发展,技术反哺业务。
  • 系统架构演进:单机 -->集群 -->分布式微服务

架构演进(日活用户占总用户量大概%4到%10,推测总用户量)

(1)单体应用架构(1千UV以下)

在这里插入图片描述

优点:易于测试,便于集成,对小型项目友好。

缺点:启动时间长,依赖庞大,单机性能瓶颈明显,资源容易出现争夺。

(2)应用数据分离架构(5千UV)

在这里插入图片描述

优点:易于测试,便于集成,对小型项目友好。

缺点:启动时间长,依赖庞大,单机性能瓶颈明显,资源容易出现争夺。

(3)应用集群架构(1万UV)

在这里插入图片描述

优点:避免应用程序单点故障,提高应用处理能力。

缺点:链路存在单点故障-网关-数据库,单机性能瓶颈明显。

(4)应用集群缓存架构(5万UV)

在这里插入图片描述

优点:热点数据缓存,提高性能。

缺点:增加维护成本,包括缓存穿透/击穿/雪崩等问题。

(5)应用集群+读写分离架构(10万UV)

在这里插入图片描述

优点:读写分离,提高数据库性能和可用性。

缺点:增加维护成本,数据量激增单库容易瓶颈。

(6)微服务化-分库分表架构(100万UV)

在这里插入图片描述

优点:易开发、理解和维护独立的部署和启动,数据库性能提升。

缺点:分布式系统-分布式事务问题,管理多个微服务,服务治理问题。

(7)多元化业务-数据异构架构(500万UV)

在这里插入图片描述

优点:数据源多样化,业务性能提升明显,系统复用性高,支撑更高并发+海量数据。

缺点:运维复杂增高,链路分析复杂和技术广度+深度大。

常规互联网项目HTTP请求响应的全链路

在这里插入图片描述

三高下的架构设计概述

  • 对于技术人员的三高为:高并发、高可用、高性能

(1)什么是高并发?

  • QPS/TPS 来衡量系统的对任务的处理能力
    • TPS
      • Transactions Per Second 每秒事务数, 可以是一个接口、多个接口、一个业务流程, 包括增删改操作
    • QPS
      • Queries Per Second, 每秒查询数, 指一台服务器每秒能够响应的查询次数
      • QPS 只是一个简单查询的统计,不能描述增删改等操作
      • 如果只是查询操作 TPS = QPS

(2)什么是高可用?

  • SLA 衡量一个系统可用性有多高,目标系统 7 x 24 小时不间断服务。
  • 分类
    • 时间维度:系统可以正常使用时间与总时间之比(全年为例子)1年 = 365天 = 8760小时
      • 99.9 = 8760 * 0.1% = 8760 * 0.001 = 8.76小时
      • 99.99 = 8760 * 0.0001 = 0.876小时 = 0.876 * 60 = 52.6分钟
      • 99.999 = 8760 * 0.00001 = 0.0876小时 = 0.0876 * 60 = 5.26分钟
    • 请求次数维度:请求总次数和失败的占比 ( 1000次请求为例子,相对简单 )
      • 系统可用性99%:表示1000个请求中允许1000 * (1- 99%) = 10个请求出错
      • 系统可用性99.9%:表示1000个请求中允许1000 * (1- 99.9%) = 1个请求出错。
  • 9越多代表全年服务可用时间越长服务更可靠,停机时间越短
  • 但往往存在网络/机房问题,应用更新发版导致服务不可用
  • 大厂多数业务4个9是刚需,5个9是目标,6个9是理想

(3)什么是高性能?

  • RT来衡量系统的响应速度,程序处理速度非常快延迟低Latency,所占内存少,cpu占用率低

(4)如何做到高并发-高性能技术?

  • 系统架构

    • 无状态业务-水平扩展(Scale Out),只要增加服务器数量,就能线性扩充系统性能
    • 架构的难点是难做到全链路的水平扩展
  • 【负载均衡】思想

    • 节点轮询、随机、加权轮询、节点固定hash
      • 网络 DNS解析轮询
      • 网关分发请求后端服务
      • 应用服务内部RPC负载均衡
      • 数据存储-分库分表-负载分发
  • 【缓存】思想

    • 本地缓存/分布式缓存
      • 前端浏览器缓存静态资源
      • 网络DNS解析缓存
      • 应用程序 内存缓存/分布式缓存
      • 数据存储Mysql Query Cache
  • 【池化复用】思想

    • 线程池/对象池/连接池/内存池
      • java线程池技术
      • Jdbc/Redis/HttpClient连接池
      • SpringIOC容器对象池
  • 【异步】思想

    • 多线程/消息队列
      • 前端ajax异步请求
      • RocketMQ/Kafka 同步双写-异步刷盘
      • 应用程序多线程异步处理
  • 【预处理-惰性更新】思想

    • 定时任务/懒加载
      • 运营后台报表数据,定时任务提前计算好

      • Mybatis懒加载

  • 【分而治之】思想

    • Mater-worker
      • Hadoop中的MapReduce
      • JDK. Fork/Join Framework
      • 消息队列的广播消息
      • 归并排序算法

(4)如何做到高可用技术?

(冗余集群化 + 自动故障转移failover)

  • 集群架构

    • 将多个相同的应用程序集中起来提供同一种服务,某个节点故障不影响系统
    • 可以横向扩展性增加节点提高并发处理能力
      • 微服务集群

      • Redis集群/Kafka集群/Nginx集群

      • Nacos集群/Mysql集群/ZK集群

  • 熔断降级

    • 保险丝,熔断服务,为了防止整个系统故障,抛弃一些非核心的接口和数据,返回兜底数据
  • 限流

    • 当访问频率或者并发请求超过其承受范围的时候,考虑限流来保证接口的可用性

    • 漏斗模型,不管流量多大均匀的流入容器,令牌桶算法,漏桶算法

  • 隔离

    • 服务和资源互相隔离,比如网络资源,机器资源,线程资源等,不会因为某个服务的资源不足而抢占其他服务的资源
  • 多活架构

    • 同城双活-双机房

      • 两个机房部署在同城,物理距离较近,两个机房用「专线」网络连接,比单个机房内延迟要大一些,但整体的延迟是可以接受的
    • 参考

      • 同机房:0.1ms
      • 同城双机房:1ms(100公里内)
      • 北京到广州:55ms
  • 异地多活-两地三中心

    • 两地是指 2 个城市,三中心是指有 3 个机房,其中 2 个机房在同一个城市
    • 同时提供服务,第 3 个机房部署在异地,只做数据灾备

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/63186.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python配置OpenCV

一、背景 有个任务需要进行图像样本扩充,本人想要使用cv2来帮忙扩充电脑重装过系统,之前的环境都没有了参考之前自己写的博客,使用Anaconda安装失败了,一直显示下面的错误,目前还没有解决这个问题 Script file H:\An…

手把手教你音乐服务器搭建

最近发现,经常用的网易云音乐,有很多歌曲下架了,能听的越来越少了;歌单里的一些歌曲,现在要开通 VIP 才能听了。其实自己常听的歌曲不是很多,现在却有很多听不了了。 怎么办呢,付费吗?花钱当然是一个好方式,花 1 分钟开通 VIP,立马就可以畅听起来。 不过前两天翻东西…

RabbitMQ-全面详解(学习总结---从入门到深化)

RabbitMQ概念_MQ 消息队列 MQ全称Message Queue(消息队列),是在消息的传输过程中保 存消息的容器。多用于系统之间的异步通信。 1、同步通信相当于两个人当面对话,你一言我一语。必须及时回复 2、异步通信相当于通过第三方转述对话…

看完这套 Java 笔记,才明白笔者同时斩获 7 份大厂 offer 是有原因的

不知道各位程序员朋友有没有做笔记的习惯?不过,我觉得大家还是蛮喜欢收藏笔记的,嘿嘿,我也是。 前几天恰好看到一篇文章,里面详细罗列了关于 Java 的所有知识点。看目录,是从 Jvm 开始,再讲集合…

百趣土壤非靶标代谢组学文献分享,来自Microbiome的灵感

​今天小编要和大家分享的是BIOTREE协助客户发表在Microbiome上的关于土壤抗性遗传的一篇文章。 发表期刊:《Microbiome》 影响因子:9.133 合作单位:南京农业大学 据百趣代谢组学小趣了解,植物方面的高分文章并不好发&#xff…

二分查找详解

🌈🌈😄😄 欢迎小伙伴来到茶色岛独家岛屿,本期会对二分查找进行详细的讲解,做好准备了么,那么开始吧。 🌲🌲🐴🐴 一、简介 二、查找思路&#xff…

更快更稳更安全!天翼云CDN了解一下

近年来,数字化转型正催生各行各业掀起新一轮的信息变革。作为我国经济发展的“血液”,金融行业的一举一动都牵动着国民经济的神经。相对于其他行业,金融业务因其“高敏感性、高价值”等特点,行业数字化转型需要在保障安全和隐私等…

【基础算法】圆周率的多种方法求算 C++实现

●割圆法 一个圆如下面左图所示,其半径为1,其内部内接一个正六边形。设正六边形的边长为y1。由几何知识可得知y11,所以圆的周长可近似为正六边形的周长C6y16.所以圆周率为前面的近似圆周长与圆直径之比,即C/2 3≈π,这…

关于腾讯股票api股票接口的功能分析

因为国内外股价的上涨都可以在界面上去查询,所以公司能准确地判断股价上涨,并适时买入、卖出,以此获得一定的利润。 腾讯股票api股票接口还可以把以往的数据表示成一条折线,让公司在进行分析时更形象、更有参考意义。在连接界面后…

【数据结构与算法】线性表的查找

🔥 本文由 程序喵正在路上 原创,CSDN首发! 💖 系列专栏:数据结构与算法 🌠 首发时间:2022年12月5日 🦋 欢迎关注🖱点赞👍收藏🌟留言🐾…

Java入门教程(5)——开发第一个Java程序

文章目录1.1. 新建一个记事本,将后缀名改为java 如图示: 2.双击,选择打开方式为记事本 输入代码: public class HelloWorld{public static void main(String[] args){System.out.println("Hello world!");…

基于DIPUM工具箱对图书数字图像进行处理(Matlab代码实现)

目录 💥1 概述 📚2 运行结果 🎉3 参考文献 👨‍💻4 Matlab代码 💥1 概述 数字图像处理(Digital Image Processing)将图像信号转换成数字信号并利用计算机对其进行处理,起源于20世纪20年代,目前已广泛地…

电脑硬盘就一个c盘怎么分区,新电脑买回来只有一个c盘怎么分区

电脑硬盘就一个c盘怎么分区?为了方便存储数据,需要对磁盘分区那么,在本文中,易我小编将讲解电脑磁盘分区的实操方法。 一、Diskpart对C盘分区 在Windows操作系统中,Diskpart是命令提示符,可以实现创建分区…

安全面试之基础总结篇【超详细!】

前言 作者简介:不知名白帽,网络安全学习者。 博客主页:不知名白帽的博客_CSDN博客-网络安全,CTF,内网渗透领域博主 安全面试专栏:https://blog.csdn.net/m0_63127854/category_11869916.html 网络安全交流社区:https:…

华为网络模拟器ENSP安装(附安装包)

一、安装前注意事项 1、安装路径 以下所有软件,安装时不建议修改默认路径,尤其ENSP绝对不能安装在电脑主机的中文路径下,否则没法启动。 2、先安装依赖软件 VirtualBox不能安装目录不能有中文,只能装5.0至5.2版本。 WireShark为驱动级软件,需要重启生效,可以在三个软…

WebDAV之葫芦儿·派盘+恒星播放器

恒星播放器 支持WebDAV方式连接葫芦儿派盘。 想要拥有一款万能视频播放器,全能解码播放器,无需转码,支持所有格式的视频和音频,直接播放的播放器?那就选恒星播放器。 恒星播放器支持视屏投屏,倍速播放,后台播放等功能,还能一键截图和录制gif动图。支持全格式超高清真…

企业架构MySQL数据库架构读写分离

学习目标与内容 运维解决方案 读写分离常见的实现方式 MySQL读写分离案列实现 主从复制master配置 主从复制slave配置 简单业务代码实现 用以下代码通过停启主从服务器来检查主从复制原理~ <?php //创建类 class Mysql {//构造方法//当类被实例化时,会触发此方法public fu…

[附源码]Python计算机毕业设计Django居家养老服务系统小程序

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

[附源码]计算机毕业设计JAVA疫情居家隔离服务系统

[附源码]计算机毕业设计JAVA疫情居家隔离服务系统 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM my…