【阿里架构设计思想】一线互联网系统的核心架构是什么样子的?淘宝系统架构演进之路_寒泉 淘宝-程序员宅基地

技术标签: 笔记  

学习架构设计思想

以一个网站为例:
网站一开始就是大型的吗?
我们一开始就设计一个大型网站吗?
不一定要做到很好,但一定要先做出来。

淘宝发展过程

第一版

一个无名小网站,没有太多人访问,一台服务器就绰绰有余。使用的是Linux+Apache+MySQL+PHP(典型的LAMP)架设普通小型网站,最便捷。一个月完成淘宝第一版。
发展遇到的问题:用户访问越来越多,性能越来越差,越来越多的数据导致存储空间不足。

发展问题一

第一版性能太差,改用java。java核心技术:高并发、网络编程。应用服务与数据服务分离,拆分成三台服务器:
应用服务器(处理大量的业务逻辑,需要更快更强大的CPU)
文件服务器(存储用户上传的文件,需要更大的硬盘)
数据库服务器(数据库,需要更快的硬盘和更大的内存)
这样,不同的服务器承担不同的角色,使得并发处理能力、数据存储空间得到很大的改善。

发展问题二

随着用户逐渐增多,网站有一次挑战:数据库压力太大导致访问延迟,进而影响整个网站的性能,用户体验收到影响。

使用缓存改善性能

应用程序服务器
文件服务器、分布式缓存服务器、数据库服务器

常用缓存组件:memache,redis
会使用很简单,要学它的原理,架构,怎样实现高可用

发展问题三

随着用户增多,单一应用服务器能够处理的请求连接有限。在网站访问高峰期,应用服务器成为整个网站的瓶颈。

使用服务器集群——改善网站的并发处理能力

负载均衡调度服务器(负责调度) - 应用服务器(本地缓存) - 文件服务器、分布式缓存服务器(远程分布式缓存)、数据库服务器

为什么不使用更强的服务器?一台服务器难以处理。在今天,淘宝的并发量是几百万,上千万。从经济的角度,使用集群更实惠。

负载均衡的实现方式有哪些?
淘宝用过的技术:
软件(应用层的负载均衡):Apache Nginx Reverse-proxy pWEB LVS(LVS在IP层,开源免费,性能高于nginx,nginx可处理十万并发)
硬件:F5
DNS负载均衡(域名到ip地址转换,一个域名可以对应很多个ip地址)

发展问题4

使用缓存后,大大减轻了数据库的度压力,但仍有一部分读操作(缓存访问不命中,缓存过期)和全部的写操作要访问数据库,当用户达到一定规模后,数据库因为负载压力过高而成为整个系统的瓶颈。

读写分离

将并发压力分流。
增加数据访问模块(自己研发的),也可以在MyBatis中开发插件,或者mycat(服务端代理模式),sharding-jdbc(客户端模式)
在这里插入图片描述

发展问题5

用户规模越来越大,发布地狱越来越广,地域网络环境差别很大,如何保证用户的访问体验,不至于因为访问慢而流失用户。
使用反向代理服务器,和CDN服务器。
CDN是内容分发网络,原理是缓存。各大电信运营商服务器上存放的数据中心。
好处:加快用户访问速度,减轻后端服务器压力。

发展问题6

单文件服务器、单数据服务器存不下日益增长的数据

使用分布式文件系统和分布式数据库系统(分库分表)

在这里插入图片描述

适合存储小文件、图片的分布文件系统LFastDFS,TFS
数据访问模块:mycat,sharing-jdbc

发展问题7

随着业务的发展,数据的存储需求和检索需求越来越复杂。存储的字段差异很大,整张表不是所有的数据都会用到(形成骷髅表),需要复杂的文本检索。

使用NoSQL数据库、搜索引擎服务器

搜索引擎用什么?lucene, solr, elasticsearch
NoSQL数据库用什么?mongodb, elasticsearch

发展问题8

网站越做越好,业务不断扩大,越来越复杂,应用程序变得无比庞大,迭代周期越来越快,牵一发儿动全身,怎么应对快速的业务发展需要?

进行业务拆分:拆分成很多子系统。
如,淘宝将首页、商铺、订单、买家等拆分成不同的产品线,分归不同的团队负责,分成不同的应用,独立部署。通过连接、MQ、数据存储系统建立关联。

消息队列MQ:RabbitMQ,ActiveMQ,Kafla

一些开源免费的组件不足以满足业务的需要。
工作会是开发中间件,开发MQ,自己搞一套,而不是写简单的业务代码。

发展问题9

业务规模不断增大,应用拆分越来越小,越来越多。应用之间的关系越来越复杂、应用中存在大量相同的业务操作。后端的数据库要背成千上万太应用服务器连接,数据库连接资源不足。

分布式服务(服务化)

如何做服务化?
服务框架:Dubbo,SpringCloud
配置中心:zookeeper,SpringCloud config,disconf百度,config-toolkit当当,diamond阿里

发展问题10

数据挖掘、分析、推荐等业务需求,庞大系统的监控、问题分析等需求

大数据技术、监控、日志分析系统
集中式日志分析系统、监控系统服务器、大数据系统服务器

比如,如果出现了bug,去找到所有的日志构成完整的数据链;成百上千服务器使用监控系统检测哪台出现故障

大数据:hadoop,spark
系统监控:zabbix,Elasticsearch+beats+kibana
集中式日志分析系统:ELK
在这里插入图片描述

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/sinat_42483341/article/details/103672983

智能推荐

FindBugs插件的安装与使用_findbugs 4.64 安装-程序员宅基地

文章浏览阅读529次。1 什么是FindBugsFindBugs 是一个静态分析工具,它检查类或者 JAR 文件,将字节码与一组缺陷模式进行对比以发现可能的问题。有了静态分析工具,就可以在不实际运行程序的情况对软件进行分析。不是通过分析类文件的形式或结构来确定程序的意图,而是通常使用 Visitor 模式来鉴别代码是否符合一些固定的规范。2 如何安装FindBugs?作为Eclipse的一个插件,可以将Fi_findbugs 4.64 安装

cuda安装出现 Log file not open. Segmentation fault (core dumped) 错误_sh cuda_11.8.0_520.61.05_linux.run log file not op-程序员宅基地

文章浏览阅读6.3k次,点赞9次,收藏11次。在运行./cuda_xxx.run安装之后,出现Log file not open.Segmentation fault (core dumped)_sh cuda_11.8.0_520.61.05_linux.run log file not open. segmentation fault (co

vue.js路由vue-router(一)——简单路由基础_<router-link>标签主要实现跳转链接功能,属性 to='/'即是跳转到 path 为'/'-程序员宅基地

文章浏览阅读1.3k次,点赞2次,收藏2次。前言vue.js除了拥有组件开发体系之外,还有自己的路由vue-router。在没有使用路由之前,我们页面的跳转要么是后台进行管控,要么是用a标签写链接。使用vue-router后,我们可以自己定义组件路由之间的跳转,还可以设置稍复杂的嵌套路由,创建真正的spa(单页面应用)。我之前用vue-cli脚手架写了一个简单的人员管理实例,现在我们不用脚手架,就用原生的vue来写,本文也主要是通过_标签主要实现跳转链接功能,属性 to='/'即是跳转到 path 为'/'的

rsync本地传文件到Linux服务器_rsync windows to linux-程序员宅基地

文章浏览阅读389次。简单记录一下,以前一直都是用x-shell或者termius等远程软件传文件,最近了解到Rclone等工具,直接采用命令行的方式更加高效便捷!还有个疑惑,就是,本地为啥一定要进入bin目录下才可以运行,可不可以直接打开cmd就能直接执行传输命令呢?下载,解压到任意位置,然后进入bin目录下,就可以直接使用命令。1/安装sqlite: sudo apt-get install sqlite。5、接着便可以sudo apt-get install rsync安装了。3、然后在末尾加入下方代码,然后保存。_rsync windows to linux

c# 中DataSet示例_c# dataset实例-程序员宅基地

文章浏览阅读787次。1.获取信息 #region 产生学生列表 /// /// 产生学生列表 /// private void GenStudentList(string strStu) {_c# dataset实例

我所经历的大数据平台发展史1:非互联网时代-上篇-程序员宅基地

文章浏览阅读930次。origin: http://www.linuxeden.com/html/news/20160222/164888.html编者按:本文是松子(李博源)的大数据平台发展史系列文章的第一篇(共四篇),本系列以独特的视角,比较了非互联网和互联网两个时代以及传统与非传统两个行业。是对数据平台发展的一个回忆,对非互联网、互联网,从数据平台的用户角度、数据架构演进、模型等进行了阐述。前言,_我所经历的大数据平台发展史

随便推点

mysql 使用位运算_数据库使用位运算-程序员宅基地

文章浏览阅读1.1k次。与运算 a & b , 或运算 a | b , 异或运算 a ^ b ,或者 你也可以将 与运算理解为 + 法 例如 1|2 = 3 (1+2 = 3)1|2|4 = 7 (1+2+4 = 7)将 异或运算理解为 - 法例如 3^2 = 1 (3-2 = 1)3^1 = 2 (3-1 = 2)最后将 与运算 作为判断例如_数据库使用位运算

XILINX FPGA各型号差异对比_ultrascale和7系列区别-程序员宅基地

文章浏览阅读6k次,点赞9次,收藏44次。快速了解xilinx 不同型号/系列FPGA的基本差异_ultrascale和7系列区别

Compose 布局-程序员宅基地

文章浏览阅读410次,点赞12次,收藏12次。ColumnRowBoxConstraintLayoutLazyColumnLazyRowLazyVerticalGrid

81.点到轮廓的距离_opencv点到轮廓的距离-程序员宅基地

文章浏览阅读141次。(2)如果measureDist设置为false,函数将返回一个正负值,表示点在轮廓内部(负值)还是外部(正值),点在轮廓上(0)。点到轮廓的距离是指一个点到给定轮廓的最短距离。(1)输入的轮廓必须是一个单个轮廓(即单个闭合轮廓),而不是包含多个轮廓的容器。特征提取:通过计算点到轮廓的距离,可以获得描述对象形状特征的信息。目标识别:通过比较点到轮廓的距离,可以判断两个对象是否相似或匹配。边界检测:通过检测点到轮廓的距离变化,可以找到轮廓的边界。_opencv点到轮廓的距离

vue双向绑定解析_vue数据双向绑定介绍-程序员宅基地

文章浏览阅读3k次。Vue介绍Vue是当前很火的一款MVVM的轻量级框架,它是以数据驱动和组件化的思想构建的。因为它提供了简洁易于理解的api,使得我们很容易上手。_vue数据双向绑定介绍

408机是考c语言吗,计算机考研408操作系统考试内容-程序员宅基地

文章浏览阅读1.1k次。1.进程概念2.进程的状态与转换3.进程控制4.进程组织5.进程通信共享存储系统;消息传递系统;管道通信。6.线程概念与多线程模型(二)处理机调度1.调度的基本概念2.调度时机、切换与过程3.调度的基本准则4.调度方式5.典型调度算法先来先服务调度算法;短作业(短进程、短线程)优先调度算法;时间片轮转调度算法;优先级调度算法;高响应比优先调度算法;多级反馈队列调度算法。(三)同步与互斥1.进程同步..._408要学c++吗