【阿里架构设计思想】一线互联网系统的核心架构是什么样子的?淘宝系统架构演进之路

学习架构设计思想

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

淘宝发展过程

第一版

一个无名小网站,没有太多人访问,一台服务器就绰绰有余。使用的是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
在这里插入图片描述

发布了552 篇原创文章 · 获赞 201 · 访问量 18万+

猜你喜欢

转载自blog.csdn.net/sinat_42483341/article/details/103672983