前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >图解大型网站架构

图解大型网站架构

作者头像
娜姐
发布2020-09-22 10:48:48
1.3K0
发布2020-09-22 10:48:48
举报
文章被收录于专栏:娜姐聊前端娜姐聊前端

对于大部分前端同学来说,后台服务或者整个网站架构是个黑盒,前端工程师所看到所接触的业务只是冰山一角。

本文,从一个前端人的视角,以一张大型网站架构图开始,将这个潘多拉的魔盒打开……只是概述性的介绍,提纲式的分析讲解。

来自李智慧老师《大型网站技术架构-核心原理与案例分析》第一章的图示。

distributed service.png

1. 接收请求

反向代理服务器接受请求,根据具体内容路由到不同的服务器。

  1. 如果浏览器请求的是资源文件,比如HTML文件,JavaScript或样式表……
  • 第三方静态资源:路由到CDN(内容分发网络)服务器上。因为静态资源不经常改动(比如,第三方依赖库,样式表,字体文件等等),所以很适合存储在CDN上。
  • 普通静态资源:由反向代理服务器直接返回。
  1. 如果浏览器请求动态资源,比如REST请求,那么路由到“负载均衡调度服务器”,再由后台应用服务器集群处理。
2. 将业务拆分为多个服务,服务协作完成请求

传统方式是后台只有一个服务,包罗万象。随着项目越来越复杂,以“高内聚,低耦合”的思想,将业务拆分为独立模块,分别部署。这就是图中的“B应用服务器1”,“A应用服务器1”……

那么,如何拆分业务?

  • 根据业务属性进行垂直切分,比如:产品子系统,购物子系统,支付子系统,评论子系统,客服子系统,接口子系统(对接如进销存,短信等外部系统)。
  • 根据业务子系统进行等级定义,分为核心系统和非核心系统。比如:核心系统:产品子系统,购物子系统,支付子系统;非核心:评论子系统,客服子系统,接口子系统。

业务经过拆分,每个子系统可由专门的团队和部门负责,解决模块之间耦合以及扩展性问题;每个子系统单独部署,避免集中部署导致一个应用挂了,全部应用不可用的问题。

下一步,如何组织子业务完成某一具体任务?

举例,用户下单流程:

  1. 用户下单后,写入消息队列,后直接返回客户端;
  2. 库存子系统:读取消息队列信息,完成减库存;
  3. 配送子系统:读取消息队列信息,进行配送;

这个过程,利用“消息队列服务器”异步调度所需的服务,协同完成业务。

3. 部署分布式服务

为了提高高并发处理能力,可将请求分发到应用服务器集群中的任何一台服务器上。也就是说,将同样的服务部署到N台服务器上,让他们一起处理用户请求,这样最大程度上减少每个服务的压力。

可用到的负载均衡算法:

  • 轮询:所有请求被依次发到每台应用服务器上;
  • 加权轮询:在轮询基础上,按照配置的权重将请求分发到每个服务器;
  • 随机:请求被随机分发到应用服务器上;
  • 最少连接:记录每个应用服务器正在处理的连接数,将请求分发到最少连接的服务器上;
  • 源地址散列:根据请求来源的IP进行Hash计算,对应到某台应用服务器,这样,来自同一个IP的请求总会被同一台应用服务器处理;
4. 利用缓存

缓存分为本地缓存和远程缓存。

  • 本地缓存和应用服务共享内存,所以,它的数量不应该太多,适合存储读取最频繁且不易变动的数据。
  • 远程缓存部署在专门的服务器上,可以使一台也可以是多台。如是多台集群,则称为分布式缓存服务器,优点是存储量大,缺点是读取比本地缓存慢。

分布式缓存服务器是将缓存数据分在N台服务器上存储,利用服务器数量的递增而扩大存储容量。

为什么需要分布式缓存?

利用分布式缓存,可以实现单点登录。比如,登录www.site1.a.com之后,希望再访问www.site2.a.comwww.site3.a.com时,无需再次登录。这时,就不应该将与登录相关的session信息存放在本地服务器缓存中(因为各个服务器的session信息不共享),而应该将session存放于分布式缓存,并提供统一访问模块-session服务器。session服务器用于为其他所有应用服务提供session读写功能。

5. 处理数据

处理数据就必须访问存储数据的容器,此容器不仅仅包括常见的关系数据库,比如MySQL,SQL Server,还包括非关系数据库,比如NoSQL,等等。

参考图示和“统一数据访问模块”交互的数据服务器:

  • 分布式缓存服务器:缓存服务器集群;
  • 分布式文件服务器:多台服务器存储文件,可线性扩充;
  • 分布式数据库服务:只有单表规模非常庞大的时候才使用,将大量数据分库分表存储;并将不同业务的数据部署在不同的物理服务器上。 另外,为了进一步减轻数据库负载压力,可以采用“读写分离”模式:配置多台数据库,一台master,只用于写数据;多台slave,只用于读数据。主数据库master的数据实时同步到slave数据库上。
  • NoSQL服务器:非关系数据库,如HBase,单表可以存储海量数据,可线性扩充;
  • 搜索引擎服务器:也是一种非关系数据库,主要用于搜索;

如有错漏之处,望指正。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 接收请求
  • 2. 将业务拆分为多个服务,服务协作完成请求
  • 3. 部署分布式服务
  • 4. 利用缓存
  • 5. 处理数据
相关产品与服务
消息队列 CMQ 版
消息队列 CMQ 版(TDMQ for CMQ,简称 TDMQ CMQ 版)是一款分布式高可用的消息队列服务,它能够提供可靠的,基于消息的异步通信机制,能够将分布式部署的不同应用(或同一应用的不同组件)中的信息传递,存储在可靠有效的 CMQ 队列中,防止消息丢失。TDMQ CMQ 版支持多进程同时读写,收发互不干扰,无需各应用或组件始终处于运行状态。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档