前往小程序,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 删除。

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
百度前端必会react面试题汇总
通常,render props和高阶组件仅渲染一个子组件。React团队认为,Hooks 是服务此用例的更简单方法。
flyzz177
2022/09/14
1.7K0
高级前端react面试题总结
(1)不要在循环,条件或嵌套函数中调用Hook,必须始终在 React函数的顶层使用Hook
beifeng1996
2022/12/15
4.4K0
社招前端一面react面试题汇总
在 super() 被调用之前,子类是不能使用 this 的,在 ES2015 中,子类必须在 constructor 中调用 super()。传递 props 给 super() 的原因则是便于(在子类中)能在 constructor 访问 this.props。
goClient1992
2022/09/13
3.2K0
美团前端react面试题汇总
服务端渲染是数据与模版组成的html,即 HTML = 数据 + 模版。将组件或页面通过服务器生成html字符串,再发送到浏览器,最后将静态标记"混合"为客户端上完全交互的应用程序。页面没使用服务渲染,当请求页面时,返回的body里为空,之后执行js将html结构注入到body里,结合css显示出来;
goClient1992
2022/09/13
5.4K0
高频React面试题及详解
以下面试题来源于github项目前端面试指南,那里有超过200道高频前端面试题及答案,目前拥有1400star.
前端小tips
2021/11/30
2.6K0
高频React面试题及详解
react高频面试题总结(一)
那为什么会有这样的限制呢?Hooks 的设计初衷是为了改进 React 组件的开发模式。在旧有的开发模式下遇到了三个问题。
helloworld1024
2022/08/02
1.5K0
百度前端高频react面试题(持续更新中)_2023-02-27
2. 尽量不要在 componentWillReviceProps 里使用 setState,如果一定要使用,那么需要判断结束条件,不然会出现无限重渲染,导致页面崩溃
用户10358021
2023/02/27
2.5K0
前端react面试题总结
如果您尝试直接改变组件的状态,React 将无法得知它需要重新渲染组件。通过使用setState()方法,React 可以更新组件的UI。
beifeng1996
2022/10/29
2.7K0
React高频面试题合集(二)
虚拟 DOM (VDOM)是真实 DOM 在内存中的表示。UI 的表示形式保存在内存中,并与实际的 DOM 同步。这是一个发生在渲染函数被调用和元素在屏幕上显示之间的步骤,整个过程被称为调和。
helloworld1024
2022/08/02
1.4K0
2022社招react面试题 附答案
React的异步请求到底应该放在哪个⽣命周期⾥,有⼈认为在componentWillMount中可以提前进⾏异步请求,避免⽩屏,其实这个观点是有问题的。
用户9264421
2021/12/07
2.3K0
一天梳理完react面试题
setState 是 React 中最常用的命令,通常情况下,执行 setState 会触发 render。但是这里有个点值得关注,执行 setState 的时候不一定会重新渲染。当 setState 传入 null 时,并不会触发 render。
beifeng1996
2022/11/14
5.7K0
关于前端面试你需要知道的知识点
当应用程序在开发模式下运行时,React 将自动检查咱们在组件上设置的所有 props,以确保它们具有正确的数据类型。对于不正确的类型,开发模式下会在控制台中生成警告消息,而在生产模式中由于性能影响而禁用它。强制的 props 用 isRequired定义的。
beifeng1996
2022/10/31
5.6K0
2022前端二面react面试题
(2)如果已经创建了 Create React App 项目,需要将 typescript 引入到已有项目中
hellocoder2028
2022/09/14
1.5K0
前端二面高频react面试题集锦_2023-02-23
若虚拟DOM中的内容发生改变了,则生成新真实的DOM,随后替换页面中之前的真实DOM
用户10376779
2023/02/23
3K0
前端高频react面试题
以 store 为核心,可以把它看成数据存储中心,但是他要更改数据的时候不能直接修改,数据修改更新的角色由Reducers来担任,store只做存储,中间人,当Reducers的更新完成以后会通过store的订阅来通知react component,组件把新的状态重新获取渲染,组件中也能主动发送action,创建action后这个动作是不会执行的,所以要dispatch这个action,让store通过reducers去做更新React Component 就是react的每个组件。
beifeng1996
2022/12/16
3.6K0
前端高频react面试题整理5
createElement是JSX被转载得到的,在 React中用来创建 React元素(即虚拟DOM)的内容。cloneElement用于复制元素并传递新的 props。
beifeng1996
2023/01/09
9770
前端常见react面试题合集_2023-03-15
简言之,HOC是一种组件的设计模式,HOC接受一个组件和额外的参数(如果需要),返回一个新的组件。HOC 是纯函数,没有副作用。
用户10376779
2023/03/15
2.6K0
美团前端一面必会react面试题4
props 更新流程: 相对于 state 更新,props 更新后唯一的区别是增加了对 componentWillReceiveProps 的调用。关于 componentWillReceiveProps,需要知道这些事情:
beifeng1996
2023/01/06
3.2K0
前端一面react面试题总结
mobx相对来说⽐较简单,在其中有很多的抽象,mobx更多的使⽤⾯向对象的编程思维;redux会⽐较复杂,因为其中的函数式编程思想掌握起来不是那么容易,同时需要借助⼀系列的中间件来处理异步和副作⽤
beifeng1996
2023/01/06
3K0
2021高频前端面试题汇总之React篇
React并不是将click事件绑定到了div的真实DOM上,而是在document处监听了所有的事件,当事件发生并且冒泡到document处的时候,React将事件内容封装并交由真正的处理函数运行。这样的方式不仅仅减少了内存的消耗,还能在组件挂在销毁时统一订阅和移除事件。
zz1998
2021/09/15
2.1K0
相关推荐
百度前端必会react面试题汇总
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档