Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >架构图解

架构图解

作者头像
dys
发布于 2020-02-12 07:58:52
发布于 2020-02-12 07:58:52
1.8K0
举报
文章被收录于专栏:性能与架构性能与架构

架构图

这是一个很典型的架构描述图,下面我们就以此为例聊聊架构的基础概念。

架构流程示例

假设用户在搜索引擎中搜索“森林里浓雾和阳光”。

用户点击了搜索结果中的一个图片网站链接,打开一张图片的详情页。

这个页面的主要内容包括:

  • 主图
  • 图片信息,如标题、作者、描述、标签、评论 ……
  • 相关类似图片
  • 用户信息

从用户点击了搜索结果中的那条连接,一直到呈现出最终的页面,中间经历了什么?

架构图

(为了便于对照,再放一张)

用户点击链接后,浏览器首先会去请求 DNS 服务器(图中的【1】),获得网站的 IP 地址,然后通过 IP 请求网站。

请求首先会到达网站的负载均衡器(图中的【2】)。

负载均衡器从多个 web server 中选择一个,把请求转过去,让他处理。(图中的【3】)。

web server 从 cache 中获取图片的常用信息,从数据库中获取图片的其他信息。(图中的 【4】【5】)。

如果发现图片还没有被处理过,例如颜色还没调整,就向队列中发一个任务(图中的【6a】),任务处理服务器从队列中接收任务并处理(图中的【6b】)。

架构图

(为了便于对照,再放一张)

web server 接下来需要获取相关类似图片信息,使用“图片标题”请求全文搜索服务(图中的【7】)。

如果发现此用户是已经登录的用户,请求 account service 获取用户的详细信息(图中的【8】)。

web server 现在已经拿到页面展示所需的全部信息。

最后,发送一个页面访问事件,放入流数据处理系统,事件会进入到云存储系统和数据仓库,用于做商业分析(图中的【9a】【9b】【9c】【10】)。

web server 开始组织 HTML 页面,然后通过负载均衡器返回给浏览器。

页面中包含 JS 和 CSS 资源,这些资源会被放入云存储系统,这个系统与CDN连接,所以 JS 和 CSS 就会载入 CDN。

这样,浏览器加载页面中的 JS 和 CSS 时就可以直接从 CDN 中读取(图中的【11】)。

最终,浏览器把页面渲染出来,呈现给用户。

核心部件

1. DNS

全称“Domain Name System”,提供根据域名找 IP 的服务。

例如:google.com -> 85.129.83.120。

2. Load Balancer 负载均衡器

用户的请求先发到负载均衡器(LB)上,LB 再从后面众多的 web 服务器中选一个,把请求交给他处理。

后面的那些web服务器都是一样的,处理逻辑一致。

web 服务器处理完后,把结果交给 LB,LB 再返回给用户。

3. web 服务器

接收请求,执行业务逻辑,返回响应信息。

会调用后端一系列的服务,如数据库、缓存、队列、搜索、其他服务、日志 ……

4. 数据库

数据库可以是 SQL,也可能是 NoSQL,或者混合使用。

5. 缓存

用来进行简单的 key/value 存储,速度快。

例如搜索引擎可以把常用的搜索结果保存在缓存中;内容型网站会把文章放到缓存 ……

6.任务队列、任务处理服务器

用于做异步处理。

队列接收任务,任务处理服务器(worker,可以有多个)从队列中拿出任务进行处理。

队列是一个需要异步执行的任务列表,常用的是先进先出模式,严格按照入队顺序出队,还有优先级模式,入队时给任务添加一个优先级,出队按照优先级出队,相当于给任务赋予了特权。

队列应用的场景非常多,例如:

  • 用户上传图片、视频,后台进行异步处理、转码
  • 用户数据统计聚合
  • 用户注册发送邮件、短信

7. 全文搜索

有一个重要的概念:倒排索引。

例如上图,对标题进行分词,然后以每个词作为关键字,指出谁的标题中含有这个关键字,这就是倒排索引。

主流的全文搜索服务有 Elasticsearch、Sphinx、Apache Solr。

8. Service

不直接暴露给外部,内部调用,例如:

  • 用户服务
  • 内容服务
  • 支付服务
  • HTML 转 PDF 服务

9. Data

如今,数据可以说是企业的命脉,大家都会尽可能的收集数据、分析数据,以便进行有效的商业决策。

典型的数据管道包括:

  • 应用发送数据,例如用户交互行为,发送到流数据系统中,如 kafka。
  • 保存原始数据,就是从应用端发送来的数据,未经处理的,保存起来,例如保存到云存储系统中。
  • 放入数据仓库进行分析,根据自己的分析模型对数据进行处理。

10. Cloud storage 云存储

云存储太方便了,使用简单、扩展性好、性能强。

本地的文件都可以放到云存储上,例如图片、音频、视频、JS、CSS ……

11. CDN

CDN 是内容分发网络,可以简单理解为资源缓存,图片、音频、视频、JS、CSS 都可以加载到 CDN。

没有CDN时,需要直接请求从服务器,如果用户距离服务器很远,那就非常慢了。

有了CDN以后,用户可以从距离自己最近的 CDN 节点中拿到资源,速度快,还减轻了服务器的压力。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-01-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 JAVA高性能架构 微信公众号,前往查看

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【万人收藏】Twitter工程师从0到1教你设计百万级并发应用
万里征途总是从第一步开始的,构建一个复杂系统也是如此。我们从简单的部分着手,先让所有的功能都在一个服务器上运行。图1-1展示了如何配置单台服务器,让一切都在其上运行,包括Web应用、数据库、缓存等。
博文视点Broadview
2024/01/15
2420
【万人收藏】Twitter工程师从0到1教你设计百万级并发应用
【译】给小白准备的Web架构基础知识
上图很好的展示了我们在Storyblocks的架构。如果你是一个新手工程师,可能会觉得这个架构非常复杂。在我们深入研究每个组件的细节之前,首先应该对它们有个大概的了解。
Jackeyzhe
2020/03/11
5970
【译】给小白准备的Web架构基础知识
美团面试:能不能画一下你们项目架构图?(文末福利)
我们以Java Web 为例,来搭建一个简单的电商系统,看看这个系统可以如何一步步演变。
田维常
2021/09/27
9040
怎么画微服务架构图?
怎么画一个微服务架构图? 要画一个微服务架构图,你需要遵循以下步骤: 确定服务:首先,你需要确定你的微服务架构需要哪些服务。每个服务都应该具有明确定义的功能和目的。 绘制图表:使用一个绘图工具,比如
coderidea
2023/05/17
1.1K0
怎么画微服务架构图?
从 0 到 1,Java Web 网站架构搭建的技术演进
Linuxer
2017/11/01
3.1K0
从 0 到 1,Java Web 网站架构搭建的技术演进
你管这破玩意儿叫负载均衡?
相信大家都听过这样的一道经典面试题:「请说出在淘宝网输入一个关键词到最终展示网页的整个流程,越详细越好」
kunge
2021/07/16
6130
电商网站架构图_电商架构图
大家好,我是架构君,一个会写代码吟诗的架构师。今天说一说电商网站架构图_电商架构图,希望能够帮助大家进步!!!
Java架构师必看
2022/06/19
5K0
电商网站架构图_电商架构图
图解:从单个服务器扩展到百万用户的系统
你开发了一个网站(例如网上商店、社交网站或者其他任何东西),之后你把它发布到了网上,网站运行良好,每天有几百的访问量,能快速地相响应用户的请求。
刘盼
2019/05/14
1.6K2
架构 | 大型网站分布式高并发架构设计汇总
本文多数内容为小编精心总结,呕心沥血完成,切勿抄袭沿用。 参考文献《架构知识》、《深入理解java》 ---- 章节目录: 前言 前端架构 应用层架构 服务层架构 存储层架构 后台架构 数据采集、监控 安全架构 大型网站特点 系统的演变 大型网站架构模式 架构要素 性能优化 前端性能优化 服务器端性能优化 存储性能优化 高可用性能优化 伸缩性优化 分布式缓存 NOSQL 安全架构常见的攻击方式 加密 信息过滤 1前言 网站架构包括:前端架构+应用层架构+服务层架构+存储层架构+后台架构+数据中心机房架构+
码神联盟
2018/04/02
1.6K0
JAVAEE大型金融支付-第1章-讲义-项目介绍
随着移动支付的盛行,商业银行、第三方支付公司、其它清算机构、消费金融公司等众多类型的机构,都在为商户 提供网络(移动)支付解决方案。另一方面,用户的支付需求繁多,支付渠道已呈“碎片化”状态,并且“碎片化”程 度将逐渐加深。惠民支付顾名思义就是将目前主流的支付进行整合,形成第三方支付的惠民通道,也被称为“第四方支付”。
张哥编程
2024/12/07
910
JAVAEE大型金融支付-第1章-讲义-项目介绍
可扩展的Web架构和分布式系统(翻译)
原文:Scalable Web Architecture and Distributed Systems
早起的鸟儿有虫吃
2019/06/03
1.1K0
简明入门讲义——如何实现可扩展的 Web 服务
可扩展的应用服务器(Application Server)集群藏身于负载均衡器(Load balance,LB)背后,LB 将负载(即用户请求)平均地分配到各个组或集群的应用服务器上,此时负载均衡器可能运行在 TCP 层(Layer 4),分配请求的方式默认是简单的轮询(Round-Robin),即假设有服务器 A-D,请求依次从 A 分配到 D,列表循环。
FesonX
2021/05/05
9340
简明入门讲义——如何实现可扩展的 Web 服务
「全栈之路」Web前端开发的后端指南
在若干次前的一场面试,面试官看我做过 python爬虫/后端 的工作,顺带问了我些后端相关的问题:你觉得什么是后端?
前端劝退师
2019/09/17
1.4K0
「全栈之路」Web前端开发的后端指南
浅谈Web网站架构演变过程及各阶段所用的技术和架构设计(转)
  我们以javaweb为例,来搭建一个简单的电商系统,看看这个系统可以如何一步步演变。
wuweixiang
2019/03/12
2K0
浅谈Web网站架构演变过程及各阶段所用的技术和架构设计(转)
中小型网站架构分析及优化
第一层:CDN 国内网络分布主要南电信北联通,造成跨地区访问延迟大问题,对于有一定访问量网站来说,增加CDN(内容分发网络)层可有效改善此现象,也是网站加速的最好选择。CDN把网站页面缓存到全国分布的节点上,用户访问时从最近的机房获取数据,这样大大减少网络访问的路径。如果想自己搭建CDN,不建议这么做,因为什么呢?其实说白了,就是什么事别往运维上拦。CDN架构部署不复杂,影响效果的因素却很多,后期管理维护也比较复杂,想达到预期的效果确非易事,这是一个费力不讨好的活,最后老板还是感觉是你能力不足。建议找专做C
老七Linux
2018/05/31
1.8K0
Web架构基础101
大型动态应用系统平台主要是针对于大流量、高并发网站建立的底层系统架构。大型网站的运行需要一个可靠、安全、可扩展、易维护的应用系统平台做为支撑,以保证网站应用的平稳运行。
用户1324186
2018/10/25
2.2K0
Web架构基础101
搞定系统设计 01:从 0 到百万用户的系统
这是本书第一章的内容,浅显易懂,把常见的套路组合了一下,没有具体的技术细节,过一遍也没什么负担。
haohongfan
2021/11/12
1.2K0
搞定系统设计 01:从 0 到百万用户的系统
如何构建可伸缩的Web应用?
想象一下,你的营销活动吸引了很多用户,在某个时候,应用必须同时为成千上万的用户提供服务,这么大的并发量,服务器的负载会很大,如果设计不当,系统将无法处理。
dys
2019/12/31
8970
如何构建可伸缩的Web应用?
可伸缩系统的架构经验
最近,阅读了Will Larson的文章Introduction to Architecting System for Scale,感觉很有价值。作者分享了他在Yahoo!与Digg收获的设计可伸缩系统的架构经验。在我过往的架构经验中,由于主要参与开发企业软件系统,这种面向企业内部的软件系统通常不会有太大的负载量,太多的并发量,因而对于系统的可伸缩性考虑较少。大体而言,只要在系统部署上考虑集群以及负载均衡即可。本文给了我很多启发,现把本文的主要内容摘译出来,并结合自己对此的理解。 Larson首先认为,一个
张逸
2018/03/07
8670
可伸缩系统的架构经验
大型互联网系统架构是如何设计的?
如果服务性能的增长与资源的增加是成比例的,服务就是可扩展的。通常,提高性能意味着服务于更多的工作单元,另一方面,当数据集增长时,同样也可以处理更大的工作单位。1
李红
2019/05/29
1K0
相关推荐
【万人收藏】Twitter工程师从0到1教你设计百万级并发应用
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档