当前位置: 首页 > news >正文

淘宝架构演化

基本功能

在这里插入图片描述
LAMP(Linux+Apache+MySQL+PHP)标准架构,初期采用拿来主义,只具备基本功能。

数据库:读写分离,MyISAM存储引擎

2003年5月—2004年1月

存储瓶颈

mysql达到访问瓶颈,升级成oracle,从开源转向商用。
在这里插入图片描述

oracle是连接池,php是短连接,直连会导致内存打满,引入SQL Relay连接池。

2004年1月—2004年5月

连接瓶颈

SQL Relay的问题无法处理,而Oracle又无可替代,只能替换掉php语言改用java
在这里插入图片描述
MVC框架是阿里的WebX,控制层用了EJB,持久层是ibatis。
另外,为了缓解数据库的压力,商品查询和店铺查询放在搜索引
擎中。

2004年2月—2005年3月

查询瓶颈

在这里插入图片描述
数据库分库分表、放弃EJB、引入Spring、加入缓存、加入CDN

2004年10月—2007年1月

存储瓶颈

多而小的海量图片存储查询问题,自研符合淘宝特性的海量文件存储系统用于存储图片。

借鉴 GFS(Google File System)开发出TFS(TaoBao File System)

在这里插入图片描述
典型的一主多从架构,主保存元数据进行索引,从进行存储,以block为基础单元。

在这里插入图片描述
域名-》DNS-》LVS-》nginx;kong的分布式特性可以代替LVS+nginx

前端有LVS+Haproxy将原图和其所有的缩略图请求都调度到同一台Image Server

在文件定位上,内存用Hash算法做索引,最多一次读盘。另外会有很多相同的图片重复上传上来,去除重复文件也是采用Hash算法来做的。写盘方式则采用Append方式写,并采用了淘汰策略FIFO,主要考虑降低硬盘的写操作,没有必要进一步提高Cache命中率,因为ImageServer和TFS位于同一个数据中心,读盘效率还是非常高的。

在创造了TFS和Tair之后,整个系统的架构如下图所示

在这里插入图片描述

架构之美

一个好的架构一定是可扩展和稳定,目前业内的通用办法是解耦,也就是拆分成微服务。

在这里插入图片描述

  • UIC:用户中心(User Information Center)
  • TC:交易中心(Trade Center)
  • IC:商品中心(Item Center)
  • SC:店铺中心(Shop Center)

这些中心级别的服务只提供原子级的业务逻辑,如根据ID查找商品、创建交易、减少库存等操作。再往上一层是业务系统TM(Trade Manager,交易业务)、IM(ItemManager,商品业务)、SM(Shop Manager,后来改名叫SS,即Shop System,店铺业务)、Detail(商品详情)。

拆分之后,系统之间的交互关系变得非常复杂

在这里插入图片描述
拆分的优点无非就是解耦的优点,但拆分必然伴随着三个问题:

  • 实时调用的中间件:淘宝的HSF,高性能服务框架
  • 异步消息通知的中间件:淘宝的Notify
  • session共享:共享状态信息

涉及到的技术:

  • 集群:大家做一样的事情
  • 分布式:大家做不一样的事情
  • 负载均衡:工作量相当
  • 动态调控:动态增减资源

HSF

在这里插入图片描述

nacos+dubbo:解决服务间的调用,RPC调用

Notify

在这里插入图片描述
异步通知:MQ/Kafka

TDDL

分库分表:Taobao Distributed Data layer,之前一直以为很简单,那是因为没有想实际使用需要解决的问题,只想到一个 hash取模存储问题,其它问题一概没想

  • 如何实现分布式Join(连接)?——在跨节点以后,简单的Join会变成M×N台机器的合并,这个代价比原来的基于数据库的单机Join大太多了。
  • 如何实现高速多维度查询?——就像SNS中的消息系统,A发给B一个消息,那么A要看到的是我发给所有人的消息,而B要看到的是所有人发给我的消息。这种多维度查询,如何能够做到高效快捷呢?
  • 如何实现分布式事务?——原始单机数据库中存在着大量的事务操作,在分布式以后,分布式事务的代价远远大于单机事务,那么这个矛盾也变得非常明显。

目前业内的解决办法:

  • 利用uid进行shardingKey,此时uid相关的查询会本地join,分布式join部分在内存进行聚合。
  • 内存聚合
  • 二阶段提交,分布式事务业内很多解决办法

Sesssion

  • 若是分布式则只能放到公共池中存储,例如redis
  • 若是集群则可以考虑分流,保证同一个session的请求始终进入同一个服务

相关文章:

淘宝架构演化

基本功能 LAMP(LinuxApacheMySQLPHP)标准架构,初期采用拿来主义,只具备基本功能。 数据库:读写分离,MyISAM存储引擎 2003年5月—2004年1月 存储瓶颈 mysql达到访问瓶颈,升级成oracle&#x…...

软通动力携子公司鸿湖万联、软通教育助阵首届鸿蒙生态大会成功举办

11月23日中国深圳,首届鸿蒙生态大会上,软通动力及软通动力子公司鸿湖万联作为全球智慧物联网联盟(GIIC)理事单位、鸿蒙生态服务(深圳)有限公司战略合作伙伴,联合软通教育深度参与了大会多项重磅…...

【AI绘画】DALL·E 3 绘图功能与 DALL·E API 探索

博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: AI绘画 文章目录 💯前言💯DALLE 3 图像生成介绍(Introduction to DALLE 3 Image Generation)图像质量与分辨率图像生成机制的解析多图生成功能 💯使用 DALLE…...

【数据事务】.NET开源 ORM 框架 SqlSugar 系列

.NET开源 ORM 框架 SqlSugar 系列 【开篇】.NET开源 ORM 框架 SqlSugar 系列【入门必看】.NET开源 ORM 框架 SqlSugar 系列【实体配置】.NET开源 ORM 框架 SqlSugar 系列【Db First】.NET开源 ORM 框架 SqlSugar 系列【Code First】.NET开源 ORM 框架 SqlSugar 系列【数据事务…...

深入解析下oracle char和varchar2底层存储方式

oracle数据库中,char和varchar2数据类型用来存储字符数据。char类型一旦定义多大,那么它就分配多少字节空间;varchar2类型定义多大,代表它可以扩展的最大大小为多大,一开始空间根据使用来决定。字符数据存储在oracle表…...

Angular v19 (三):增量水合特性详解 - 什么是水合过程?有哪些应用场景?与 Qwik 相比谁更胜一筹?- 哪个技术好我就学哪个,这就是吸心大法吧

Angular在其最新版本 v19 中引入了增量水合(Incremental Hydration)这一特性。这一更新引发了开发者们广泛的讨论,特别是在优化首屏加载速度和改善用户体验方面。本文将详解水合过程的概念、增量水合的应用场景,以及它与类似框架如…...

宠物空气净化器推荐2024超详细测评 希喂VS霍尼韦尔谁能胜出

最近有粉丝一直在评论区和后台探讨宠物空气净化器是不是智商税的问题,有人认为宠物空气净化器肯定不是智商税,有些人认为将其购回家就是个没用的东西,还占地方,双方各有自己的观点。 其实宠物空气净化器和普通的空气净化器是有很大…...

一线、二线、三线技术支持

一线、二线、三线技术支持是企业IT支持体系中常见的分工模式,目的是高效解决技术问题,同时优化资源利用。以下是它们的具体定义和职责划分: 1. 一线技术支持 (Tier 1/Level 1 Support) 定义: 一线技术支持是直接面对最终用户或客…...

智截违规,稳保安全 | 聚铭视频专网违规外联治理系统新品正式发布

“千里之堤,毁于蚁穴”。 违规外联作为网络安全的一大隐患, 加强防护已刻不容缓。 这一次, 我们带着全新的解决方案来了 ——聚铭视频专网违规外联治理系统, 重磅登场!...

FFmpeg 的 codec 和 format

很多人容易混淆这二者区别 pcm_alaw, 这是 codec wav, 这是 format ffmpeg -formats 打印支持的所有 format ffmpeg -codecs 打印支持所有的 codec ffmpeg -i in.wav -y -ac 1 -ar 8000 -acodec pcm_alaw -f wav out.wav 把 in.wav 转换成 out.wav rtp/rtsp 等&#xff…...

分布式锁的实现原理

作者:来自 vivo 互联网服务器团队- Xu Yaoming 介绍分布式锁的实现原理。 一、分布式锁概述 分布式锁,顾名思义,就是在分布式环境下使用的锁。众所周知,在并发编程中,我们经常需要借助并发控制工具,如 mu…...

怎样提高自己的能量

能量转换的基本原则是让别人需要你,而不是你去求对方。别人需要你,你的能量就高,你去求别人你的能量就低。 怎样提高自己的能量? 第一,留意你的气场和格局。气场不是说你表现的多么霸道,而是你的信念、决心…...

ospf协议(动态路由协议)

ospf基本概念 定义 OSPF 是典型的链路状态路由协议,是目前业内使用非常广泛的 IGP 协议之一。 目前针对 IPv4 协议使用的是 OSPF Version 2 ( RFC2328 );针对 IPv6 协议使用 OSPF Version 3 ( RFC2740 )。…...

【娱乐项目】竖式算术器

Demo介绍 一个加减法随机数生成器,它能够生成随机的加减法题目,并且支持用户输入答案。系统会根据用户输入的答案判断是否正确,统计正确和错误的次数,并显示历史记录和错题记录。该工具适合用于数学练习,尤其适合练习基…...

Qt中模拟鼠标消息并与系统鼠标消息进行区分

功能使用场景: 开发一个教学系统,包含了教师端、学生端,并且教师端支持示教功能。此时,学生端的鼠标、键盘不响应系统事件,但需要响应教师端发过来的鼠标移动、按下消息。 因为共享页面相同,为了提高局域…...

实时数据开发 | 一文理解Flink窗口机制

窗口操作在流处理和批处理之间起到了桥梁的作用。 Flink引擎本质上是流式引擎,认为批处理是流处理的一个特例。因此,通过窗口将流数据划分为有限大小的集合,使得在这些有界的数据集上可以进行批处理风格的计算。 通过配置窗口的参数&#xf…...

MFC 自定义树控件:树节点的样式与交互

在本教程中,将介绍如何在 MFC 应用程序中使用树控件 (CTreeCtrl) 进行高级定制,包括设置字体、颜色、徽章、图标、节点的高度等。通过这些自定义设置,可以显著提升用户界面的交互性和视觉效果。 1. 树控件基本设置 首先,我们需要…...

YOLOv8-ultralytics-8.2.103部分代码阅读笔记-loss.py

loss.py ultralytics\utils\loss.py 目录 loss.py 1.所需的库和模块 2.class VarifocalLoss(nn.Module): 3.class FocalLoss(nn.Module): 4.class DFLoss(nn.Module): 5.class BboxLoss(nn.Module): 6.class RotatedBboxLoss(BboxLoss): 7.class KeypointLoss(n…...

像素流送api ue多人访问需要什么显卡服务器

关于像素流送UE推流,在之前的文章里其实小芹和大家聊过很多,不过今天偶然搜索发现还是有很多小伙伴,在搜索像素流送相关的问题,搜索引擎给的提示有这些。当然这些都是比较短的词汇,可能每个人真正遇到的问题和想获取的…...

字符型注入‘)闭合

前言 进行sql注入的时候,不要忘记闭合,先闭合再去获取数据 步骤 判断是字符型注入 用order by获取不了显位,select也一样 是因为它是’)闭合,闭合之后,就可以获取数据了 最后就是一样的步骤...

评分规则的建模,用户全选就是满分10分(分数可自定义), 选2个5分, 选2个以下0分

子夜(603***854) 15:11:40 和各位讨论一下设计问题: 有个有业务场景: 有一组产品共4个产品(数目用户可自定义), 需要一套规则,比如如果用户全选就是满分10分(分数可自定义), 选2个5分, 选2个以下0分 又比如另一组产品 产品有个必选属性,如果选了其中所有的必选则5分, 其他项每1…...

Elasticsearch与NLP的深度融合:文本嵌入与向量搜索实战指南

Elasticsearch与NLP的深度融合:文本嵌入与向量搜索实战指南 引言 在当今信息爆炸的时代,如何从海量文本数据中快速准确地检索出相关信息,成为了一个迫切需要解决的问题。自然语言处理(NLP)技术的发展为这一挑战提供了新的解决方案。Elasticsearch,作为一个强大的搜索引…...

4. STM32_定时器

概述 什么是定时器: 定时器核心就是计数器,是使用精准的时基,通过硬件的方式,实现定时功能的器件。 定时器的工作原理: 主频时钟CLK通过PSC进行分频后产生定时器时钟TIM CLK,计数器CNT根据TIM CLK的频率…...

Mysql 深度分页问题及优化方案

Mysql 深度分页问题及优化方案 一、为什么 MySQL 深度分页慢?二、优化方案三、补充 一、为什么 MySQL 深度分页慢? 在数据量大时,深分页查询速度缓慢,主要原因是多次回表查询。 前言:N个条件为索引,id为主…...

前端性能优化技巧

前端性能优化技巧 1. 介绍 前端性能优化是确保网站或应用程序快速、响应迅速和流畅的关键。本文档将详细探讨提升前端性能的各种策略和最佳实践。 2. 资源加载优化 2.1 资源压缩 代码压缩:使用 Webpack、Terser 等工具压缩 JavaScript、CSS 文件文件大小压缩&a…...

taro使用createAsyncThunk报错ReferenceError: AbortController is not defined

解决办法: 1,安装这俩包:yet-another-abortcontroller-polyfill,event-target-polyfill 2,app.js import: import ‘event-target-polyfill’; import ‘yet-another-abortcontroller-polyfill’; 补充 但…...

Linux:systemd进程管理【1】

整体理解 要快速掌握Linux的systemd并覆盖80%的使用场景,以下是最重要的20%知识点: Systemd简介与核心功能: Systemd是一个系统和服务管理器,作为Linux系统的PID 1进程,负责启动和管理其他系统组件。它提供并行启动服…...

【Maven】继承和聚合

5. Maven的继承和聚合 5.1 什么是继承 Maven 的依赖传递机制可以一定程度上简化 POM 的配置,但这仅限于存在依赖关系的项目或模块中。当一个项目的多个模块都依赖于相同 jar 包的相同版本,且这些模块之间不存在依赖关系,这就导致同一个依赖…...

【线上问题记录 | 排查网络连接问题】

问题描述 现在有我们程序是部署在服务器A的,A链接的是B。程序从B的redis进行存储和取数据的。 我们的业务是: 信息展示,也就是如果发现机器有异常了,实时进行监控。突然发现有一天,信息显示延迟了。 然后我们就开始排查究竟什么原…...

springboot车辆管理系统设计与实现(代码+数据库+LW)

摘要 随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟。本文介绍了车辆管理系统的开发全过程。通过分析车辆管理系统管理的不足,创建了一个计算机管理车辆管理系统的方案。文章介绍了车辆管理系统的系统分析部分&…...

苏州cms模板建站/关键词优化公司

nali,名字取自中文“哪里”的拼音。nali包含一组命令行程序,其主要功能就是把一些网络工具的输出的IP字符串,附加上地理位置信息(使用纯真数据库)。例如218.65.137.1会变成218.65.137.1[广西南宁市 电信]。查询是在本地进行,并不会…...

专业做鞋子的网站有哪些/短视频运营方案策划书

我用的网络摄像头是 极速公司的产品,135元人民币。Windows 下驱动为 极速三型。 芯片可能是301P 的。 首先下载驱动。网址: http://mxhaard.free.fr/download.html 就是spca5xx-20050116.tar.gz 文件。 解压缩后,读 INSTALL 文档,…...

政府网站建设管理典型经验材料/厨师培训机构 厨师短期培训班

iptables 的安装与配置 由于centos7默认是使用firewall作为防火墙,下面介绍如何将系统的防火墙设置为iptables。 #停止firewall systemctl stop firewall.service #禁止firewall开机启动 systemctl disable firewall.service #安装iptables yum install iptab…...

做网站多钱一年/个人优秀网页设计

波普艺术鼎盛于50年代中期的美国,也被称为流行艺术、通俗艺术。在这一艺术风格的影响下,作为创作灵感的来源,可以在对肖像创作上下一番功夫,将人像转而绘制成波普风插图,在此基础上再来制作出新颖别致的波普风格的海报…...

怎样申请做p2p融资网站/seo基础优化包括哪些内容

开卷语: 2009年8月6号,A公司ERP项目顺利启动,按照项目进度的安排,项目组成员立即投入到紧张而又忙碌的的业务调研之中。这次为期3周的业务调研面向企业所有业务部门,包括产品部门、采购部门、计划部门、生产部门、品质…...

wordpress菜单保存不/网站开发教程

1.作用域 作用域是根据名称找变量的一套规则。 变量的赋值操作会执行两个动作,首先编译器会在当前作用域中声明一个变量(如果之前没有声明过),然后在运行时引擎会在作用域中查找该变量,如果能够找到就会对它赋值。 引擎在查找变量时执行怎样的…...