[Docker#1] 专栏前言 | 亿级高并发架构演进之路

目录

目标

一.前期演进

1. 单机架构

2. 应用数据分离架构

3. 应用集群架构

4. 读写分离/主从分离架构

5. 冷热分离架构

二. 架构

分布式数据库架构

微服务架构

容器编排架构

三. An Internet Application Architecture

理解

上层传输

框架

数据处理

主要思想


本专栏将根据如上思路 来学习 docker

下面让我们来开启第一部分的学习叭~

目标

  • 理解每种技术架构以及如何演进的,结合电商平台为例
  • 熟悉Docker在架构中的核心作用。

一.前期演进

1. 单机架构

简介

  • 应用服务和数据库服务共用一台服务器

出现原因

  • 出现在互联网早期,访问量比较小,单机足以满足需求。
  • 以电子商城为例,可以看到通过应用(划分了多个模块)和数据库在单个服务器上协作完成业务运行。

抽象

批注:

  • DNS(Domain Name System,域名系统)是互联网的一项服务,它作为将域名和IP地址相互映射的一个分布式数据库
  • 能够使人更方便地访问互联网,而不需要记住能够被机器直接读取的IP数串。
  • 通过主机名,最终得到该主机名对应的IP地址的过程叫做域名解析(或主机名解析)

Tomcat 是一个非常适合初学者和小型项目的Java Web应用服务器

优点

  • 部署简单
  • 成本低

缺点

  • 存在严重的性能瓶颈
  • 数据库和应用互相竞争资源

2. 应用数据分离架构

简介

  • 应用服务和数据库服务使用不同服务器。

出现原因

  • 单机存在严重的资源竞争,导致站点变慢。
  • 以电子商城为例,可以看到应用和数据库在各自的服务器上通过网络协作完成业务运行。

优点

  • 性能相比单机有提升
  • 数据库单独隔离,不会因为应用把数据库搞坏,有一定的容灾能力

缺点

  • 硬件成本变高,显而易见的多了一台服务器~
  • 性能有瓶颈,无法应对海量并发

3. 应用集群架构

简介

  • 引入了负载均衡,应用以集群方式运作。

出现原因

  • 单个应用不足以支持海量的并发请求,高并发的时候站点响应变慢。
  • 以电子商城为例,可以看到应用不再是一个,而是变成了多个,通过负载均衡来支持海量的并发。

说明:

  • LVS/F5 主要负责负载均衡,在多个服务器之间分配流量,确保系统的高可用性和性能。
  • Nginx 既可以作为一个独立的 Web 服务器来提供静态内容,也可以作为反向代理来分发请求到后端服务器。
  • Tomcat 则专注于 Java 应用的部署和运行,是 Java 开发者常用的服务器之一。

优点

  • 应用服务可用性:应用满足高可用,不会一个服务出问题整个站点挂掉
  • 应用服务具备一定高性能:如果不访问数据库,应用相关处理通过扩展可以支持海量请求快速响应
  • 应用支持横向扩展

缺点

  • 数据库成为性能瓶颈,无法应对数据库的海量查询
  • 数据库是单点,没有高可用
  • 运维工作增多,扩展后部署运维工作增多,需要开发对应的工具应对快速部署
  • 硬件成本较高

4. 读写分离/主从分离架构

简介

  • 将数据库读写操作分散到不同的节点上,数据库服务器搭建主从集群,一主一从、一主多从都可以。数据库主机负责写操作,从机只负责读操作。

出现原因

  • 数据库成为瓶颈,而互联网应用一般读多写少,数据库承载压力大,主要是由这些读的请求造成的,那么我们可以把读操作和写操作分开

优点

  • 数据库的读取性能提升
  • 读取被其他服务器分担,写的性能间接提升
  • 数据库有从库,数据库的可用性提高了

缺点

  • 当同步挂掉,或者同步延迟比较大时,写库和读库的数据不一致
  • 服务器成本需要进一步增加

5. 冷热分离架构

简介

  • 引入缓存,实行冷热分离,将热点数据放到缓存中快速响应。

出现原因

  • 海量的请求导致数据库负载过高,站点响应速度变慢。
  • 例如双十一秒杀的时候,秒杀的数据就可以放到 缓存服务器中

优点

  • 大幅降低对数据库的访问请求,性能提升非常明显
  • 带来了缓存一致性,缓存击穿,缓存失效,缓存雪崩等问题

缺点

  • 缓存一致性问题
  • 服务器成本需要进一步增加
  • 业务体量支持变大后,数据不断增加,数据库单表太大,单个表体量也太大,数据查询会很慢,导致数据库再度成为系统瓶颈

二. 架构

分布式数据库架构

简介

  • 数据库的数据被拆分,数据库数据分布式存储,分布式处理,分布式查询,也可以理解为分布式数据库架构。

出现原因

  • 单机的写库会逐渐达到性能瓶颈,需要拆分数据库,数据表的数据量太大,处理压力太大,需要进行分表,为降低运维难度,业界逐渐研发了分布式数据库,库表天然支持分布式。
  • 可以以集群 为单位,进行部署

优点

  • 数据库吞吐量大幅提升,不再是瓶颈
  • 跨库join、分布式事务等问题,这些需要对应的去进行解决,目前的mpp都有对应的解决方案

缺点

  • 数据库和缓存结合目前能够抗住海量的请求,但是应用的代码整体耦合在一起,修改一行代码需要整体重新发布

微服务架构

简介

  • 微服务是一种架构风格,按照业务板块来划分应用代码,使每个应用的职责更清晰,相互之间可以做到独立升级迭代。

出现原因

  • 扩展性差:应用程序无法轻松扩展,因为每次需要更新应用程序时,都必须重新构建整个系统
  • 持续集成困难:一个很小的代码改动,也需要重新部署整个应用,无法频繁并轻松地发布版本
  • 不可靠:即使系统的一个功能不起作用,可能导致整个系统无法工作
  • 不灵活:无法使用不同的技术栈构建单体应用程序
  • 代码维护难:所有功能耦合在一起,新人不知道何从下手

优点

  • 灵活性高:服务独立测试、部署、升级、发布
  • 独立扩展:每个服务可以各自进行扩展
  • 提高容错性:一个服务问题并不会让整个系统瘫痪
  • 新技术的应用容易:支持多种编程语言

缺点

  • 运维复杂度高:业务不断发展,应用和服务都会不断增多,应用和服务的部署变得复杂,同一台服务器上部署多个服务还要解决运行环境冲突的问题,此外,对于如大促这类需要动态扩缩容的场景,需要水平扩展服务的性能,就需要在新增的服务上准备运行环境,部署服务等,运维将变得十分困难(后面引入了 K8S~)
  • 资源使用变多:所有这些独立运行的微服务都需要占用内存和CPU
  • 处理故障困难:一个请求跨多个服务调用,需要查看不同服务的日志完成问题定位

应用

拿用户信息的时候 也可以同时拿取商品信息~


容器编排架构

简介

  • 借助容器化技术(如docker)将应用/服务打包为镜像,通过容器编排工具(如k8s)来进行动态分发和部署镜像,服务以容器化方式运行。

出现原因

  • 微服务拆分细,服务多部署工作量大,而且配置复杂,容易出错
  • 微服务数量多扩缩容麻烦,而且容易出错,每次缩容后再扩容又需要重新配置服务对应的环境参数信息
  • 微服务之间运行环境可能冲突,需要更多的资源来进行部署或者通过修改配置来解决冲突

抽象的理解

  • 应用--快递
  • 容器--docker--箱子
  • 镜像--包裹
  • k8s--快递公司,使几千台 docker 可以快速部署,减少了运维 环境配置 的工作量
  • 服务端--收货地

优点

  • 部署、运维简单快速:一条命令就可以完成几百个服务的部署或者扩缩容
  • 隔离性好:容器与容器之间文件系统、网络等互不影响,不会产生环境冲突
  • 轻松支持滚动更新:版本间切换都可以通过一个命令完成升级或者回滚

缺点

  • 技术栈变多,对研发团队要求高
  • 机器还是需要公司自身来管理,在非大促的时候,还是需要闲置着大量的机器资源来应对大促,机器自身成本和运维成本都很高,资源利用率低,可以通过购买云厂商服务器解决。

三. An Internet Application Architecture

理解

上层传输

一些说明

  1. WAF(Web Application Firewall,Web 应用防火墙
    • 作用:保护 Web 应用程序免受常见的攻击,如 SQL 注入和 XSS(跨站脚本)。
    • 功能:通过监控和过滤 Web 流量,阻止恶意请求,提高网站安全性。
  1. CLB(Cloud Load Balancer,云负载均衡)
    • 作用:将流量分发到多台服务器,保证服务的高可用性和可靠性。
    • 功能:在多台服务器间分摊流量压力,提高系统的稳定性。
  1. SLB(Server Load Balancer,服务器负载均衡)
    • 作用:类似于 CLB,将流量分配到多台服务器,但通常用于私有网络或内网环境。
    • 功能:实现高可用的负载分担,提高资源利用率。
  1. API(Application Programming Interface,应用程序接口)
    • 作用:提供应用之间的通讯标准,使它们能够互相调用功能。
    • 功能:定义了不同软件系统之间如何交互的规则和协议。
  1. 网关(Gateway)
    • 作用:作为系统的入口,控制流量、转发请求、保护后端服务。
    • 功能:实现流量控制、身份验证和日志记录等功能。
  1. K8S(Kubernetes,容器编排平台)

作用:管理和自动化容器化应用的部署、扩展和运维。

功能:支持容器集群的调度和管理,常用于微服务架构。

  • TKE:腾讯云的 Kubernetes 服务。
  • ACK:阿里云的 Kubernetes 服务。

框架

Spring Cloud

  • 作用:用于构建分布式系统的框架,提供配置管理、服务发现、断路器等工具。
  • 功能:让微服务的管理和调用更加便捷,适合云原生应用的开发。

Dubbo

  • 作用:一种 RPC(远程过程调用)框架,用于服务之间的调用。
  • 功能:支持高效的服务发现和负载均衡,适合大规模微服务架构。

TSF(Tencent Service Framework,腾讯服务框架)

  • 作用:腾讯云提供的微服务架构平台,支持微服务治理和监控。
  • 功能:帮助企业快速搭建微服务体系,实现分布式系统管理。

Istio

  • 作用:服务网格(Service Mesh)框架,管理微服务之间的通信。
  • 功能:实现流量管理、故障恢复和安全策略,适合大型微服务集群。

数据处理

缓存数据

  1. Redis
    • 作用:高性能的键值对存储数据库,常用作缓存。
    • 功能:支持数据的快速存储和读取,适用于高并发场景。
  1. Tair
    • 作用:阿里巴巴开发的分布式缓存系统。
    • 功能:提供高性能数据缓存,支持大规模访问。
  1. Keewideb
    • 作用:类似 Redis 的缓存系统,专注于高效的缓存服务。
    • 功能:提供快速的数据读取和写入。

基础数据

  1. MySQL
    • 作用:关系型数据库管理系统,广泛应用于 Web 开发。
    • 功能:支持结构化数据的存储、查询和管理,数据一致性强。
  1. PolarDB
    • 作用:阿里云推出的云数据库,兼具 MySQL 兼容性和高性能。
    • 功能:支持弹性扩展和高并发访问,适合企业级应用。
  1. TDSQL
    • 作用:腾讯云推出的分布式数据库,适合金融级业务。
    • 功能:提供高可用和强一致性,支持海量数据的分布式存储。
  1. TiDB
    • 作用:分布式 NewSQL 数据库,兼容 MySQL,适合大数据处理。
    • 功能:支持水平扩展和强一致性,适合 OLTP 和 OLAP 场景。
  1. GBase
    • 作用:国产数据库,支持事务和分析,适合大数据处理。
    • 功能:适合于高并发访问的大规模数据处理任务。

  1. OSS/COS/MinIO
    • 作用:对象存储服务,用于存储大量非结构化数据,如图片、视频。
    • OSS:阿里云对象存储服务。
    • COS:腾讯云对象存储服务。
    • MinIO:开源对象存储解决方案。
  1. ES 集群(Elasticsearch)
    • 作用:分布式搜索和分析引擎,支持全文检索。
    • 功能:适合日志分析和大规模文本数据的搜索,广泛应用于日志管理和数据分析。
  1. MongoDB 集群
    • 作用:分布式文档数据库,适合处理半结构化数据。
    • 功能:支持高并发和大数据量存储,灵活性高。
  1. MaxCompute/EMR/GFS
    • MaxCompute:阿里云的分布式计算服务,支持大数据分析
    • EMR(Elastic MapReduce):阿里云和 AWS 提供的分布式数据处理服务,基于 Hadoop。
    • GFS(Google File System):谷歌的分布式文件系统,用于存储海量数据。

这些技术广泛应用于分布式系统和云计算,适用于构建可扩展、高效的现代化应用。

主要思想

  1. 一个人扛不住,喊兄弟过来
  2. 软件上,没有什么是加一层 解决不了的

“背锅”演进之路

通过对架构的优化,解决系统的问题

思考

1. 如何决策 要不要演进?

  • 结合 满足 实际业务需求 即可

2. 架构必须这么演进吗?

  • 结合 实际情况

3. 架构必须是这么几个么?

  • 可以自行 增减,结合业务

4.docker 的核心作用?

  • 容器化 实现细化

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

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

相关文章

初识AI大模型,ollama使用,llama factory大模型微调,lama.cpp模型转换guff

最近了解了下生成式AI对话,下面是自己的一些尝试记录。 ollama 安装及使用 1、安装 我是在windows环境下安装的,很简单,访问:https://ollama.com/ ,下载windows安装包,打开安装就行了。 cmd输入ollama -v检…

Mybatis、Mybatis-Plus 调用同一个组件的查询时遇到的坑

Mybatis、Mybatis-Plus 调用同一个组件的查询时遇到的坑 Mybais-plus配置了驼峰自动命名,所以不需要在SQL里转化查询。

ssm070基于SSM框架的校园代购服务订单管理系统的设计与实现+vue(论文+源码)_kaic

毕业设计 题 目: 校园代购服务订单管理系统 作 者: 学 号: 所属学院: 专业年级: 学校导师: 职 称: 班级导师: 职 称: 完成时间…

ECharts折线图背景渐变设置

目录 引入 1.在一个HTML文件中编写两个图表 2.渐变背景 引入 如何在一个HTML文件中编写两个图表:(这个例子基于这个篇文章的基础)一篇搞懂前端获取数据-CSDN博客 一个例子: 1.在一个HTML文件中编写两个图表 重点在于名字的不重…

Webserver(4.6)poll和epoll

目录 pollclient.cpoll.c epollepoll.cclient.c epoll的两种工作模式水平触发边沿触发 poll poll是对select的一个改进 select的缺点在于每次都需要将fd集合从用户态拷贝到内核态,开销很大。每次调用select都需要在内核遍历传递进来的所有fd,这个开销也…

提高交换网络可靠性之认识STP根桥与端口角色

转载请注明出处 该实验旨在学习如何选举根桥与识别端口角色。 1.三台交换机按要求连线,改名,分别为S1,S2,S3,以S1为例: 2.在S1上配置优先级为28672 同理,在交换机S2和S3上配置其优先级为32768&…

qt QTextDocument详解

1、概述 QTextDocument是Qt框架中用于处理文本文档的类,它提供了丰富的功能和接口,用于创建、编辑和格式化文本内容。该类能够保存格式化的文本,是结构化富文本文档的容器,支持样式文本和各种文档元素,如列表、表格、…

【UE5】在材质中实现球形法线技术,常用于改善植物等表面的渲染效果

在材质中实现球形法线,这种技术常用于植被渲染等场景。通过应用球形法线可以显著提升植物再低几何体情况下的光照效果。 三二一上截图! 当然也可以用于任何你希望模型圆润的地方,下图中做了一个Cube倒角

提高交换网络可靠性之链路聚合

转载请注明出处 该实验为链路聚合的配置实验。 1.改名,分别将交换机1和交换机2改名为S1,S2,然后查看S1,S2的STP信息。以交换机1为例👇。 2.交换机S1,S2上创建聚合端口,将端口加入聚合端口。以S…

ZISUOJ 2024算法基础公选课练习一(3)

前言、 接&#xff08;2&#xff09;后完成I-J两道题 一、题目总览 二、具体题目 2.1 问题 I: 帆帆的图&#xff1a; 思路&#xff1a; 考察拓扑排序和图论&#xff08;拓扑排序也是排序&#xff0c;<滑稽>&#xff09;&#xff0c;都是模板&#xff0c;我就直接拿去…

窨井监测遥测终端RTU IP68防水强信号穿透力

在窨井的潮湿 黑暗和腐蚀性环境中 常规物联网设备往往难以生存 如何突破层层环境挑战 轻松应对极端条件 确保信号 24h不掉线&#xff0c;不延迟 不仅是对技术的突破 更是对恶劣环境的征服 ↓↓↓ 坚守 ——严苛环境下的工业设备 计讯物联工业级设备&#xff0c;专为恶劣环境设计…

python opencv3

三、图像预处理2 1、图像滤波 为图像滤波通过滤波器得到另一个图像。也就是加深图像之间的间隙&#xff0c;增强视觉效果&#xff1b;也可以模糊化间隙&#xff0c;造成图像的噪点被抹平。 2、卷积核 在深度学习中&#xff0c;卷积核越大&#xff0c;看到的信息越多&#xff0…

Mac上的免费压缩软件-FastZip使用体验实测

FastZip是Mac上的一款免费的压缩软件&#xff0c;分享一下我在日常使用中的体验 压缩格式支持7Z、Zip&#xff0c;解压支持7Z、ZIP、RAR、TAR、GZIP、BZIP2、XZ、LZIP、ACE、ISO、CAB、PAX、JAR、AR、CPIO等所有常见格式的解压 体验使用下来能满足我所有的压缩与解压的需求&a…

网络自动化04:python实现ACL匹配信息(主机与主机信息)

目录 背景分析代码代码解读代码总体结构1. load_pattern_from_excel 函数2. match_and_append_pattern 函数3. main 函数总结 最终的效果&#xff1a; 今天不分享netmiko&#xff0c;今天分享一个用python提升工作效率的小案例&#xff1a;acl梳理时的信息匹配。 背景 最近同事…

Linux之sed命令详解

文章目录 &#x1f34a;自我介绍&#x1f34a;sed概述&#x1f34a;sed语法讲解格式&#xff1a;options 命令选项{commmand}[flags] &#x1f34a;场景训练 你的点赞评论就是对博主最大的鼓励 当然喜欢的小伙伴可以&#xff1a;点赞关注评论收藏&#xff08;一键四连&#xff…

用ChatGPT完成高质量文献综述全过程实操指南,用高级学术版专业应用gpts轻松搞定

文献综述在学术研究中占据核心地位,不仅为研究提供坚实的理论基础,也是创新观点和理论框架构建的重要支柱。然而,撰写高质量的文献综述往往是一项复杂且繁重的工作,需要研究者对领域内的文献进行广泛筛选、分类、对比和整合。该过程不仅考验研究者的分析能力,还要求对文献…

Java题目笔记(十四)Date +综合练习

一、时间计算时间比较 import java.util.Date; import java.util.Random;public class Main {public static void main(String[] args) {//需求1Date d1new Date(0L); //从时间原点开始经过了0毫秒long timed1.getTime();timetime1000L*60*60*24*365; //一年的时间d1.setTime(…

【C++练习】计算应发利润总数

题目&#xff1a;计算应发利润总数 问题描述&#xff1a; 某公司根据销售额 x&#xff08;单位&#xff1a;元&#xff09;计算应发利润总数 y&#xff08;单位&#xff1a;元&#xff09;&#xff0c;具体计算规则如下&#xff1a; 如果销售额 x 小于等于 100,000 元&#…

Permissions 0755 for ‘/etc/ssh/ssh_host_rsa_key‘ are too open.问题解决

1、问题背景 代码上库公司git后,将项目上出的程序烧录到设备中,wifi能够正常链接&#xff0c;但是通过wifi链接 ssh登录设备失败。把调试串口引出,查看linux启动log,发现如下打印信息&#xff1a; WARNING: UNPROTECTED PRIVATE KEY FILE! Permissions 075…

企业网络架构基础

1.网络宇宙 似宇宙洪荒&#xff0c;浩瀚无边&#xff0c;深不可测&#xff1b;网络案例似璀璨群星&#xff0c;千变万化&#xff0c;闪耀环宇。学习网络技术似夜观星象&#xff0c;每有所得&#xff0c;便拍案惊奇&#xff0c;夜不能寐 2.企业网络 企业网络已经广泛应用在各行…