从编程小白到架构总监:大型网站系统架构演化之路

2023-10-28

前言

一个成熟的大型网站(如淘宝、京东等)的系统架构并不是开始设计就具备完整的高性能、高可用、安全等特性,它总是随着用户量的增加,业务功能的扩展逐渐演变完善的,在这个过程中,开发模式、技术架构、设计思想也发生了很大的变化,就连技术人员也从几个人发展到一个部门甚至一条产品线。所以成熟的系统架构是随业务扩展而完善出来的,并不是一蹴而就;不同业务特征的系统,会有各自的侧重点,例如淘宝,要解决海量的商品信息的搜索、下单、支付,例如腾讯,要解决数亿的用户实时消息传输,百度它要处理海量的搜索请求,他们都有各自的业务特性,系统架构也有所不同。尽管如此我们也可以从这些不同的网站背景下,找出其中共用的技术,这些技术和手段可以广泛运行在大型网站系统的架构中,下面就通过介绍大型网站系统的演化过程,来认识这些技术和手段。

一、最开始的网站架构

最初的架构,应用程序、数据库、文件都部署在一台服务器上,如图:

这里写图片描述

二、应用、数据、文件分离

随着业务的扩展,一台服务器已经不能满足性能需求,故将应用程序、数据库、文件各自部署在独立的服务器上,并且根据服务器的用途配置不同的硬件,达到最佳的性能效果。

这里写图片描述

三、利用缓存改善网站性能

在硬件优化性能的同时,同时也通过软件进行性能优化,在大部分的网站系统中,都会利用缓存技术改善系统的性能,使用缓存主要源于热点数据的存在,大部分网站访问都遵循28原则(即80%的访问请求,最终落在20%的数据上),所以我们可以对热点数据进行缓存,减少这些数据的访问路径,提高用户体验。

这里写图片描述

缓存实现常见的方式是本地缓存、分布式缓存。当然还有CDN、反向代理等,这个后面再讲。本地缓存,顾名思义是将数据缓存在应用服务器本地,可以存在内存中,也可以存在文件,OSCache就是常用的本地缓存组件。本地缓存的特点是速度快,但因为本地空间有限所以缓存数据量也有限。分布式缓存的特点是,可以缓存海量的数据,并且扩展非常容易,在门户类网站中常常被使用,速度按理没有本地缓存快,常用的分布式缓存是Membercache、Redis。

四、使用集群改善应用服务器性能

应用服务器作为网站的入口,会承担大量的请求,我们往往通过应用服务器集群来分担请求数。应用服务器前面部署负载均衡服务器调度用户请求,根据分发策略将请求分发到多个应用服务器节点。

这里写图片描述

常用的负载均衡技术硬件的有F5,价格比较贵,软件的有LVS、Nginx、HAProxy。LVS是四层负载均衡,根据目标地址和端口选择内部服务器,Nginx和HAProxy是七层负载均衡,可以根据报文内容选择内部服务器,因此LVS分发路径优于Nginx和HAProxy,性能要高些,而Nginx和HAProxy则更具配置性,如可以用来做动静分离(根据请求报文特征,选择静态资源服务器还是应用服务器)。

五、数据库读写分离和分库分表

随着用户量的增加,数据库成为最大的瓶颈,改善数据库性能常用的手段是进行读写分离以及分表,读写分离顾名思义就是将数据库分为读库和写库,通过主备功能实现数据同步。分库分表则分为水平切分和垂直切分,水平切换则是对一个数据库特大的表进行拆分,例如用户表。垂直切分则是根据业务不同来切换,如用户业务、商品业务相关的表放在不同的数据库中。

这里写图片描述

六、使用CDN和反向代理提高网站性能

假如我们的服务器都部署在成都的机房,对于四川的用户来说访问是较快的,而对于北京的用户访问是较慢的,这是由于四川和北京分别属于电信和联通的不同发达地区,北京用户访问需要通过互联路由器经过较长的路径才能访问到成都的服务器,返回路径也一样,所以数据传输时间比较长。对于这种情况,常常使用CDN解决,CDN将数据内容缓存到运营商的机房,用户访问时先从最近的运营商获取数据,这样大大减少了网络访问的路径。比较专业的CDN运营商有蓝汛、网宿。

而反向代理,则是部署在网站的机房,当用户请求达到时首先访问反向代理服务器,反向代理服务器将缓存的数据返回给用户,如果没有没有缓存数据才会继续走应用服务器获取,也减少了获取数据的成本。反向代理有Squid,Nginx。

这里写图片描述

七、使用分布式文件系统

用户一天天增加,业务量越来越大,产生的文件越来越多,单台的文件服务器已经不能满足需求。需要分布式的文件系统支撑。常用的分布式文件系统有NFS。

这里写图片描述

八、使用NoSql和搜索引擎

对于海量数据的查询,我们使用nosql数据库加上搜索引擎可以达到更好的性能。并不是所有的数据都要放在关系型数据中。常用的NOSQL有mongodb和redis,搜索引擎有lucene。

这里写图片描述

九、将应用服务器进行业务拆分

随着业务进一步扩展,应用程序变得非常臃肿,这时我们需要将应用程序进行业务拆分,如百度分为新闻、网页、图片等业务。每个业务应用负责相对独立的业务运作。业务之间通过消息进行通信或者同享数据库来实现。

这里写图片描述

十、搭建分布式服务

这时我们发现各个业务应用都会使用到一些基本的业务服务,例如用户服务、订单服务、支付服务、安全服务,这些服务是支撑各业务应用的基本要素。我们将这些服务抽取出来利用分部式服务框架搭建分布式服务。淘宝的Dubbo是一个不错的选择。

这里写图片描述

小结

大型网站的架构是根据业务需求不断完善的,根据不同的业务特征会做特定的设计和考虑,本文只是讲述一个常规大型网站会涉及的一些技术和手段。

文章来自:http://www.codeceo.com/article/web-artch-road.html

版权申明:内容来源网络,版权归原创者所有。除非无法确认,我们都会标明作者及出处,如有侵权烦请告知,我们会立即删除并表示歉意。谢谢。

更多原创文章详见: http://chillyc.info
近期文章:
* Lambda表达式与图灵完备
* 针对java9 Flow的吐槽
* java9 modular功能

微信号 chillyc_info

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从编程小白到架构总监:大型网站系统架构演化之路 的相关文章

  • Python :=海象运算符最简单的解释

    背景 python 3 8正式版最近更新了 其中PEP572中的海象运算符获得正式python版本的支持 我看了官网的文档还有其它大神写的这个东西 我感觉在将来的python语句中是非常实用的一个东西 所以写下这篇博客来介绍 介绍 同时也是
  • Ubuntu16.04 Cuda11.1 Cudnn8.1 Tensorflow2.4 PyTorch1.7 环境配置

    未经允许 不得转载 文章目录 1 环境 2 驱动安装 3 cuda安装 4 cudnn安装 5 Tensorflow2 4安装 6 PyTorch 1 7 安装 1 环境 显卡 Gtx 1080Ti 系统 Ubuntu16 04 并行 cu

随机推荐

  • 用markdown写作

    Markdown 的优点如下 1 纯文本 所以兼容性极强 可以用所有文本编辑器打开 2 让你专注于文字而不是排版 3 格式转换方便 Markdown 的文本你可以轻松转换为 html 电子书等 4 Markdown 的标记语法有极好的可读性
  • 用Idea运行Javaweb代码时,修改代码后页面内容没有更新

    UU们有没有遇到过这种情况 用Idea运行Javaweb代码时 修改代码并更新资源或重启tomcat后 浏览器上面的页面内容没有更新 然后查了一系列的配置原因 愣是没解决 这种情况则有可能是缓存的问题 解决办法很简单 首先 你可以尝试在to
  • 国内外优秀的源码网站

    国内外优秀的源码网站 不管你是初学一门计算机语言或技术 还是想学习别人的经验和创意 做为一个开发人员 都会经常需要到搜索一些代码 下面是7个地方可以帮助你快速寻找到你需要的代码 GitHub Code Search http github
  • 用python制作一个简单的扇形图

    首先需要安装库 pip install matplotlib 安装好后我们开始写代码 import matplotlib pyplot as plt x 2 5 12 70 2 9 plt pie x autopct 1 1f plt sh
  • Linux应用开发自学之路

    前言 在 关于我 那篇博文里 朋友们应该知道了我不是科班出身 是由机械强行转行到Linux应用开发方向 下面我就详细向大家介绍自己这一路上的转行历程 希望对大家有所启发 我是学机械专业的 对于机械专业我还是很感兴趣 而且当年这个专业也是我自
  • C++bind

    C 11中提供了std bind bind 函数的意义就像它的函数名一样 是用来绑定函数调用的某些参数的 bind的思想实际上是一种延迟计算的思想 将可调用对象保存起来 然后在需要的时候再调用 而且这种绑定是非常灵活的 不论是普通函数 函数
  • elastic search8安装及使用

    一 elasticsearch 安装 下载地址 https www elastic co cn start 下载 elasticsearch 8 0 0 linux x86 64 tar gz 完成后复制到虚拟机 安装java8环境 yum
  • Android 网络请求框架 OkHttp 的使用

    一 OkHttp的历史和意义 一个处理网络请求的开源项目 是安卓端最火热的轻量级框架 由移动支付Square公司贡献 该公司还贡献了Picasso 用于替代HttpUrlConnection和Apache HttpClient androi
  • Centos 8 安装google浏览器(yum)

    1 下载google浏览器安装包 下载地址 root localhost install ls google chrome stable current x86 64 rpm 2 安装 root localhost install sudo
  • 解析 FBX 模型文件作为 Direct3D 的渲染模型

    一般自己写一些D3D的程序时比较头疼的就是缺少资源 毕竟不是学习如何使用3Dmax不是一天两天的事 而且使用Max制作的模型还不能直接使用 除非你能解析 max文件 或者给Max写导出插件 这又是另一码事了 然而互联网上免费的FBX模型很多
  • CTF练题(4)misc杂项-----音频隐写x摩斯密码

    题目详情 解题步骤 1 打开压缩包获得一个音频文件 可判断为音频隐写类题目 使用音频处理工具Audacity打开该音频文件 展示如下 2 上方音频谱线图提示其中藏有一段摩斯密码 较宽的为 窄的为 中间的间隔为 可以得到一段摩斯电码为 解码后
  • 支持Vulkan的移动GPU

    去年差不多这个时候 Vulkan标准发布 NVIDIA和AMD随之发布了显卡的Vulkan驱动 虽然都是实验版本 但是毕竟能够工作的 Intel的速度就慢了不少 时隔一年 Intel终于推出了Vulkan认证的驱动 虽然之前就有了实验性质的
  • 最通俗易懂的多线程面试60题

    多线程面试60题 1 多线程有什么用 2 线程和进程的区别是什么 3 Java 实现线程有哪几种方式 4 启动线程方法 start 和 run 有什么区别 5 怎么终止一个线程 6 一个线程的生命周期有哪几种状态 它们之间如何流转的 7 线
  • 希沃展台如何使用_峄城区教体局率团指导希沃教学一体机培训

    秋风起兮白云飞 草木黄兮雁南归 历经漫长的暑假 学生返回校园 城郊中学迎来了一批新装备 希沃教学一体机 为了让老师们更快更好的掌握使用新设备 提高课堂教学效率 9月16日城郊中学启动希沃教学一体机培训工程 峄城区教体局教研室 政工股 安全办
  • 【MATLAB第22期】基于MATLAB的xgboost算法多输入多输出回归模型 已购用户可在之前下载链接免费获取

    MATLAB第22期 基于MATLAB的xgboost算法多输入多输出回归模型 已购用户可在之前下载链接免费获取 往期文章 xgboost安装教程 最近有很多小伙伴私信我有关xgboost预测的问题 被问到最多的问题总结如下 1 xgboo
  • Laravel报错:ErrorException (E_ERROR) Route [*] not defined.

    问题介绍 使用环境 laravel58 我想使用资源管理器进行跳转 路由代码如下 Route group namespace gt Admin prefix gt admin middleware gt adminLogin functio
  • Android 减包 - 减少APK大小

    用户经常会避免下载看起来体积较大的应用 特别是在不稳定的2G 3G网络或者在以字节付费的网络 这篇文章描述了怎样减少你的APK大小 这会让更多的用户愿意下载你的应用 理解APK的结构 在讨论怎样减少应用大小之前 先了解APK的结构是有用的
  • ETH标准合约

    pragma solidity 0 4 16 contract owned address public owner function owned public owner msg sender modifier onlyOwner req
  • Sass、LESS 和 Stylus区别总结

    CSS 预处理器技术已经非常的成熟了 而且也涌现出了越来越多的 CSS 的预处理器框架 本文便总结下 Sass Less CSS Stylus这三个预处理器的区别和各自的基本语法 1 什么是 CSS 预处理器 CSS 预处理器是一种语言用来
  • 从编程小白到架构总监:大型网站系统架构演化之路

    前言 一个成熟的大型网站 如淘宝 京东等 的系统架构并不是开始设计就具备完整的高性能 高可用 安全等特性 它总是随着用户量的增加 业务功能的扩展逐渐演变完善的 在这个过程中 开发模式 技术架构 设计思想也发生了很大的变化 就连技术人员也从几