架构案例:从初创互联网公司到分布式存储与反应式编程框架的架构设计

文章目录

  • 引言
  • 一、初创互联网公司架构演化案例
    • 1. 万级日订单级别架构
    • 2. 十万级日订单级别架构
    • 3. 百万级日订单级别架构
  • 二、分布式存储系统 Doris 架构案例
  • 三、反应式编程框架架构案例
  • 总结

在这里插入图片描述

引言

分布式架构

今天我们将探讨三种不同类型的架构案例,分别探讨

  • 一个初创互联网公司如何从简单架构发展到百万级订单的架构演化
  • 一个分布式存储系统(Doris)的架构设计
  • 一个反应式编程框架的架构设计

这三类架构代表了不同领域和技术背景下的架构设计,分别考验着架构师在不同场景下的技术能力和架构思维。


一、初创互联网公司架构演化案例

1. 万级日订单级别架构

在初创互联网公司开始时,系统架构较为简单。系统主要包括前端(移动端应用)通过负载均衡访问 Web 服务器集群,前端服务器再将请求分发到应用服务器集群。每个应用服务器集群(买家系统、卖家系统、供应链系统和运营系统)连接到一台 MySQL 服务器。当订单量达到万级时,架构仍能承受高负载,但随着交易活跃度的增加,系统开始暴露出性能瓶颈。

在这里插入图片描述


2. 十万级日订单级别架构

随着订单量的增加,系统架构经历了一次重构。引入了 CDN 服务来加速静态资源的加载,使用分布式文件系统管理商品图片,提高了访问效率。同时,添加了 Redis 集群用于缓存,优化了数据存取速度。数据库也进行了主从分离,读写分离和数据分析分离,以减轻数据库压力。大数据平台通过 Kafka 消息队列与 MySQL 数据库进行数据同步,支撑着更复杂的统计分析与运营需求。

在这里插入图片描述


3. 百万级日订单级别架构

当订单量突破百万级时,主要的挑战来自于复杂的业务和庞大的数据存储需求。为了解决这些问题,系统进行了微服务化重构,把一些独立的业务模块拆分成单独的服务,进行分布式部署,这大大简化了功能扩展与维护。数据库的冷热分离进一步提升了性能,将已完成的订单数据迁移到 MongoDB 中,减轻 MySQL 的存储压力。微服务架构不仅提升了系统的可扩展性,还提升了团队开发效率。

在这里插入图片描述

微服务拆分

一方面是做了一个微服务方面的重构拆分,将可复用的一些业务拆分为独立的微服务,进行分布式部署,供应用系统调用,典型的就是用户服务、商品服务、订单服务、红包服务等。以前红包作为一个功能,在各个应用系统中可能都有涉及,买家需要使用红包,卖家要发放红包,而运营系统也可能发放系统级的红包,而这些红包的功能在各个子系统都有存在,所以对红包功能进行维护修改的时候,可能在很多个系统都要进行相关的代码变更和维护。产品经理需要跟几个系统开发团队进行合作,开发一个功能一不小心就可能会产生Bug。

重构以后,红包服务作为一个独立的功能,独立部署,其他的所有系统都通过远程调用的方式访问红包服务。红包的发放使用,以及红包的各种记录都通过红包服务进行管理,其他的应用只需要调用服务接口就可以了。如果要修改红包服务相关的功能,进行业务变更,那么大多数情况下只需要修改红包服务就可以。这样使业务系统开发变得更加的简单,因为红包功能相对比较集中,也更容易实施和落地。

数据库冷热分离

另一方面是,对数据库在原来的主从分离的基础上又做了一次冷热分离。因为我们刚才提到经过主从分离后的数据库,读写访问压力已经可以接受,这时候,主要压力来自于订单的持续不断增长和数据表记录的不断扩展,带来的存储方面的压力。而订单的一个特点是当订单已经完成,订单状态被关闭以后,订单就是只读的。这个时候只需要能够对订单提供查询、读服务就可以了,无需为它提供事务性写操作,那么我们就可以从比较宝贵的 MySQL 数据库资源中,把这些已经关闭了的订单分离出来,存储到更容易进行分步式存储的其他的 NoSQL 系统上。

可以选择MongoDB 作为订单数据的冷存储。每天夜里运行批处理任务,执行一个冷订单备份的迁移操作,将已经关闭一个月以上的订单数据,从 MySQL 数据库中迁移到了 MongoDB 中。而订单服务在进行订单操作的时候,所有的写操作依然访问 MySQL 数据库。对于读操作,如果要是查询一个月以内的订单,也还是访问 MySQL 从数据库,而如果是需要查询一个月以上的订单,那么就访问 MongoDB 数据库就好了。

通过这样一个冷热分离来设计数据库,只存储最近一个月的数据,存储访问的压力、数据存储的压力大大的减轻。


二、分布式存储系统 Doris 架构案例

Doris 是一个高性能的分布式存储系统,其设计目标主要包括高可用、线性伸缩、高性能以及低运维成本。

在这里插入图片描述

Doris 的架构包括三个主要部分:

  • 客户端(KV Client):应用程序通过 Doris SDK 进行数据的读写操作。客户端连接到集群的控制中心,获取配置信息,并根据路由算法将数据请求发送到具体的存储节点。

  • 控制中心(Administration):负责集群的故障管理和扩容管理,确保系统的高可用性。

  • 数据存储(Data Server):Doris 的数据存储采用分片存储,并通过一致性哈希和虚拟节点结合的路由算法来实现数据均匀分布。在扩容时,只需要调整虚拟节点和物理节点之间的映射关系,大大降低了集群扩容的复杂性。

Doris 提供高可用性和故障容错机制。在集群发生故障时,Doris 会自动进行故障转移,保证数据的高可用性。对于临时失效(如硬件故障或程序升级),系统仍然可以保证数据的多份写入,确保数据的完整性。在永久性失效的情况下,Doris 会通过恢复正常服务器中的数据来替代失效节点,保证系统的稳定运行。


三、反应式编程框架架构案例

在这里插入图片描述

Flower 是一个基于 Akka 构建的反应式编程框架,它支持开发者使用传统的命令式编程方式构建反应式系统。Flower 具备四个主要特性:

  • 即时响应:系统可以即时响应用户请求,不会阻塞线程。
  • 回弹性:系统能够自我修复,当部分功能失效时,系统仍能正常运行。
  • 弹性:系统根据负载自动伸缩,适应不同的请求压力。
  • 消息驱动:服务之间通过异步消息进行驱动,避免了阻塞式的同步调用。
    在这里插入图片描述

Flower 的设计目标是使开发者能够更容易地创建反应式系统,而无需深入了解反应式编程的细节。与传统的阻塞式编程不同,Flower 使用有限数量的线程处理大量并发请求,极大提高了吞吐量和响应时间。Flower 的服务之间通过异步消息传递,利用 Akka 的 Actor 模型来实现非阻塞的消息处理。异步数据库驱动让数据库操作不会阻塞线程,进一步提高了系统的效率。

在高并发情况下,Flower 能够通过少量的线程处理大量的用户请求,避免了传统阻塞式编程中因线程资源耗尽导致的性能瓶颈。通过这种设计,Flower 能够显著提升系统的吞吐量和响应能力,适应更高的业务需求。


总结

通过这三个架构案例,我们可以看到架构设计如何随着业务的增长和需求的变化而不断演化:

  1. 互联网应用架构的演化:从简单的单一系统架构到复杂的微服务架构和分布式数据库设计,架构的变化反映了业务的成长和技术的不断创新。
  2. 分布式存储系统设计:通过合理的分区算法和高可用设计,Doris 展示了如何构建一个既高效又易于扩展的分布式存储系统。
  3. 反应式编程框架设计:Flower 提供了一个易于使用的反应式编程框架,帮助开发者构建非阻塞、高吞吐量的系统。

这三个案例从不同角度展现了架构设计的复杂性与灵活性,同时也为架构师提供了多样的架构设计思路。在日常工作中,架构师需要灵活应对不同的需求与挑战,设计出既能满足当前业务需求,又具备良好扩展性的架构。

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Xshell客户端免费版无需注册Linux连接客户端8.0详细安装教程(2025年最全最详细的图文教程)附安装包

目录 关联链接 前言 一、下载安装程序 二、安装Xshell客户端 1.启动安装 2.下一步 3.许可协议 4.安装目录 5.开始安装 6.安装完成 7.免费许可 8.大功告成! 关联链接 Xftp免费客户端安装教程:https://blog.csdn.net/xiaoguo1001/article/detai…

electron多进程通信

进程间通信 | Electron 进程间通信 (IPC) 是在 Electron 中构建功能丰富的桌面应用程序的关键部分之一。 由于主进程和渲染器进程在 Electron 的进程模型具有不同的职责,因此 IPC 是执行许多常见任务的唯一方法,例如从 UI 调用原生 API 或从原生菜单触发…

登录日志管理:通用分页和排序封装、 查询登录日志列表、删除登录日志、清空登录日志、解锁用户登录状态(解锁密码错误次数超限)

文章目录 引言I 登录日志管理接口列表II 通用分页和排序封装Java 分页和排序封装vue前端排序页面III 工具类字段名转换 : 驼峰转下划线命名引言 I 登录日志管理 接口列表 import request from @/utils/request// 查询登录日志列表 export function list(query) {return

基于MATLAB红外弱小目标检测MPCM算法复现

摘要:本文详细介绍了一种基于人类视觉系统特性的红外弱小目标检测算法——Multiscale patch-based contrast measure (MPCM)。该算法通过增强目标与背景的对比度,有效检测红外图像中的弱小目标,并在MATLAB环境中进行了复现与实验验证。 关键…

Flutter系列教程之(8)——CheckBox多选框及动态更改多选框

目录 1.星级组件使用 2.多选框使用及数据更改 3.完整源码 最近项目需求需要调整页面,记录一下实现过程 这次主要是要实现个评价页面,选择不同的星级显示不同的多选框数据,加上之前也没有使用过CheckBox,今天便是一起讲吧 1.星级组件使用 首先,我们有使用到星级评分组件 在p…

神经网络|(十一)|神经元和神经网络

【1】引言 前序已经了解了基本的神经元知识,相关文章链接为: 神经网络|(一)加权平均法,感知机和神经元-CSDN博客 神经网络|(二)sigmoid神经元函数_sigmoid函数绘制-CSDN博客 神经网络|(三)线性回归基础知识-CSDN博客 把不同的神经元通过…

微软Office 2016-2024 x86直装版 v16.0.18324 32位

微软 Office 是一款由微软公司开发的办公软件套装,能满足各种办公需求。包含 Word、Excel、PowerPoint、Outlook 和 OneNote 等软件。Word 有强大文档编辑功能和多人协作;Excel 可处理分析大量数据及支持宏编程;PowerPoint 用于制作演示文稿且…

Python从0到100(八十九):Resnet、LSTM、Shufflenet、CNN四种网络分析及对比

前言: 零基础学Python:Python从0到100最新最全教程。 想做这件事情很久了,这次我更新了自己所写过的所有博客,汇集成了Python从0到100,共一百节课,帮助大家一个月时间里从零基础到学习Python基础语法、Pyth…

TinyEngine v2.2版本发布:支持页面嵌套路由,提升多层级路由管理能力开发分支调整

2025年春节假期已过,大家都带着慢慢的活力回到了工作岗位。为了让大家在新的一年继续感受到 Tiny Engine 的成长与变化,我们很高兴地宣布:TinyEngine v2.2版本正式发布!本次更新带来了重要的功能增强------页面支持嵌套路由&#…

线程(Thread)

一、概念 线程:线程是一个轻量级的进程 二、线程的创建 1、线程的空间 (1)进程的空间包括:系统数据段、数据段、文本段 (2) 线程位于进程空间内部 (3) 栈区独享、与进程共享文本段、…

【含文档+PPT+源码】基于微信小程序的校园志愿者管理系统的设计与实现

项目介绍 本课程演示的是一款 基于微信小程序的校园志愿者管理系统的设计与实现,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的 Java 学习者。 1.包含:项目源码、项目文档、数据库脚本、软件工具等所有资料 2.带你从零开始部署运行本…

yolov8,yolo11,yolo12 服务器训练到部署全流程 笔记

正在进行中,随时更新 一. Anaconda配置 1.安装anaconda (1)下载.sh文件 Index of /anaconda/archive/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror (2)scp到服务器后,运行安装包 bash Anaconda3-2020.07-Linux-x86_64.sh (3)安装anacond…

CentOS vs Ubuntu - 常用命令深度对比及最佳实践指南20250302

CentOS vs Ubuntu - 常用命令深度对比及最佳实践指南 引言 在 Linux 服务器操作系统领域,CentOS 和 Ubuntu 是广泛采用的发行版。它们在命令集、默认工具链及生态系统方面各有特点。本文深入剖析 CentOS 与 Ubuntu 在常用命令层面的异同,并结合实践案例…

Java并发编程之可见性、原子性和有序性

引言 CPU缓存与内存产生的一致性问题(可见性) CPU时间片切换产生的原子性问题 CPU指令编译优化产生的有序性问题 并发编程问题的根源 CPU、内存、I/O设备三者速度差异一直是 核心矛盾 三者速度差异可形象描述为:天上一天(CPU),地上一年(内存),地下十年(I/O) 根据木桶理…

【Maui】系统找不到指定的文件Xamarin.Android.Aapt2.targets

文章目录 前言一、问题描述二、解决方案三、软件开发(源码)四、项目展示 前言 .NET 多平台应用 UI (.NET MAUI) 是一个跨平台框架,用于使用 C# 和 XAML 创建本机移动和桌面应用。 使用 .NET MAUI,可从单个共享代码库开发可在 And…

【STM32+cubemx】0024 HAL库开发:IAP(在应用编程)的实现

IAP在应用编程(In-Application Programming),指的是MCU在运行应用程序时,能接收新的烧写文件,并更新到自身的程序存储器中。即可以在应用程序运行时在线升级。 本节我们通过一个简单的例子,来实现STM32的IA…

【源码】【Java并发】【线程池】邀请您从0-1阅读ThreadPoolExecutor源码

👋hi,我不是一名外包公司的员工,也不会偷吃茶水间的零食,我的梦想是能写高端CRUD 🔥 2025本人正在沉淀中… 博客更新速度 👍 欢迎点赞、收藏、关注,跟上我的更新节奏 📚欢迎订阅专栏…

【Linux第一弹】Linux基础指令(上)

目录 1.ls指令 1.1 ls使用实例 2.pwd指令 3.cd指令 3.1 cd使用实例 4.touch指令 4.1touch使用实例 5.mkdir指令 5.1mkdir使用实例 6.rmdir指令和rm指令 6.1 rmdir指令使用实例->: 6.2 rm指令使用实例 7.man指令 8.cp指令 8.1 cp 使用实例 9.mv指令 9.1mv使用…

智能合约安全 | 合约无效化攻击

目录: 智能合约安全 合约无效化攻击 合约自毁函数 selfdestruct 攻击实现 漏洞防御 总结 智能合约安全 合约无效化攻击 合约无效化攻击类同于web安全中的逻辑漏洞中的一种 我们这里拿一个典型的例子来讲解 有这样一份智能合约, 每个人可以向其中发送1 eth 第七个…

蓝桥 发现环

0发现环 - 蓝桥云课 找到环 不过在最近一次维护网络时,管理员误操作使得某两台电脑之间增加了一条数据链接,于是网络中出现了环路。环路上的电脑由于两两之间不再是只有一条路径,使得这些电脑上的数据传输出现了BUG。 为了恢复正常传输&am…