分布式面试题

2023-11-03


前言

  1. 大型网站系统的特点
  2. 拆分 VS 集群
  3. 微服务 VS SOA
  4. 前后端完全分离与Rest规范

一、大型网站系统的特点

高并发,大流量
需要面对高并发用户,大流量访问。Google 日均 PV 35 亿,日 IP 访问数 3 亿;腾讯 QQ 的最大在线用户数 1.4 亿(2011年数据)。
高可用
系统 7 x 24 小时不间断服务。
海量数据
需要存储、管理海量数据,需要使用大量服务器。Facebook 每周上传的照片数量接近 10 亿,百度收录的网页数目有数百亿,Google 有近百万台服务器为全球用户提供服务。
用户分布广泛,网络情况复杂
许多大型互联网站都是为全球用户提供服务的,用户分布范围广,各地网络情况千差万别。在国内,还有各个运营商网络互通难的问题。
安全环境恶劣
由于互联网的开放性,使得互联网站更容易受到攻击,大型网站几乎每天都会被黑客攻击。
需求快速变更,发布频繁
和传统软件的版本发布频率不同,互联网产品为快速适应市场,满足用户需求,其产品发布频率极高。一般大型网站的产品每周都有新版本发布上线,中小型网站的发布更频繁,有时候一天会发布几十次。
渐进式发展
几乎所有的大型互联网网站都是从一个小网站开始,渐进地发展起来的。Facebook 是扎克伯格同学在哈佛大学的宿舍里开发的;Google 的第一台服务器部署在斯坦福大学的实验室;阿里巴巴是在马云家的客厅诞生的。好的互联网产品都是慢慢运营出来的,不是一开始就开发好的,这也正好与网站架构的发展演化过程对应。


二、拆分 VS 集群

  1. 拆分:不同的多台服务器上面部署不同的服务模块,模块之间通过RPC通信和调用,用于拆分业务功能,独立
    部署,多个服务器共同组成一个整体对外提供服务。
  2. 集群:不同的多台服务器上面部署相同的服务模块,通过分布式调度软件进行统一的调度,用于分流容灾,
    降低单个服务器的访问压力

三、微服务 VS SOA

创始人:martin fowler https://martinfowler.com/articles/microservices.html
单体应用:ALL IN ONE
微服务是一种架构风格,一个大型复杂软件应用由一个或多个微服务组成。系统中的各个微服务可被独立部署,各个微服务之间是松耦合的。每个微服务仅关注于完成一件任务并很好地完成该任务。在所有情况下,每个任务代表着一个小的业务能力
微服务,从本质意义上看,还是 SOA 架构。但内涵有所不同,微服务并不绑定某种特殊的技术,在一个微服务的系统中,可以有 Java 编写的服务,也可以有 Python编写的服务,他们是靠Restful架构风格统一成一个系统的。所以微服务本身与具体技术实现无关,扩展性强


四、前后端完全分离与Rest规范

http是目前在互联网上使用最多的协议,没有之一。可是http的创始人一直都觉得,在过去10几年来,所有的人都在错误的使用Http。
这句话怎么说呢?如果说你要删除一个数据,以往的做法通常是 delete/{id},如果你要更新一个数据,可能是Post
数据放Body,然后方法是 update/{id}, 或者是artichle/{id}?method=update。
这种做法让我很暴燥,我觉得这个世界不该这样的,所有的人都在误解而且在严重错误的误解Http的设计初衷,好比是发明了火药却只用它来做烟花爆竹。
那么正确的使用方式是什么呢?如果你要看Rest各种特性,你恐怕真的很难理解Rest,但是如果你看错误的使用http的人倒底儿了哪些错,什么是Rest就特别容易理解了。
第一条,混乱。一万个人心里有一万个Url的命名规则,Url是统一资源定位符,重点是资源。而很多人却把它当成了万金油,每一个独立的虚拟的网页都可以随意使用,各种操作都能够迭加。这是混乱的来源之一。
第二条,贪婪。有状态和无状态全部混在一起。特别是在购物车或者是登录的应用中,经常刷新就丢失带来的用户体验简直棒棒哒。每一个请求并不能单独的响应一些功能,很多的功能混杂在一起里。这是人性贪婪的本质,也是各种Hack的起源,只要能够把问题解决掉,总会有人用他认为最方便的方式去解决问题,比如说汽车门把手坏掉了直接系根绳子当把手,emmmm这样确实很棒啊。
第三条,无序。返回的结果往往是很随意,各种错误信息本来就是用Http的状态码构成的,可是很多人还是喜欢把错误信息返回在返回值中。最常见的就是Code和Message,当然对于这一点,我个人是保留疑问的,我的观点是,Http本身的错误和服务器的内部错误还是需要在不断层面分开的,不能混在一起。可是在大神眼里并非如此,这个再议。


总结

  1. 大型网站系统的特点
  2. 拆分 VS 集群
  3. 微服务 VS SOA
  4. 前后端完全分离与Rest规范
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

分布式面试题 的相关文章

  • uniapp开发小程序,上传图片和视频功能

    1 需求 可以上传图片和视频 并且都可以删除 图片可以预览 2 效果图 3 代码
  • JS金额千分位加逗号,多种实例

    涉及到金额展示的都需要在千分位上加逗号 以下为vue项目的实例 1 在main js下挂载一个全局方法 金额千分位加逗号 Vue prototype amountRule amount gt let defaultAmount let se
  • 初探生物信息数据库——生信原理第一次实验报告(华农)

    初探生物信息数据库 生信原理第一次实验报告 华农 1 实验目的 熟悉NCBI数据库Entrez检索系统 会使用关键词检索NCBI UnitProtKB PubMed等数据库 能理解检索结果页面各条目含义 2 实验题目与解答 2 1 水稻抗病
  • quartus18.1--下载设置

    一 quartus下载流程 1 打开Quartus工程 点击 Start Compilation 按钮进行程序全编译 如下图所示 2 程序全编译无错误 编译信息如下图所示 3 3 点击 Programmer 快捷按钮 进入程序下载页面 如下
  • git修改历史提交(commit)信息

    一 修改最近一次提交的commit信息 1 首先通过 git log 查看commit信息 2 使用指令 git commit amend 进入命令模式 修改号commit信息保存后退出编辑模式 3 git push force 到远程仓库

随机推荐

  • 基于C++的带权无向图的实现 (二)- 遍历算法

    该系列文章是本人整理的有关带权无向图的数据结构和算法的分析与实现 若要查看源码可以访问我的github仓库 如有问题或者建议欢迎各位指出 目录 基于C 的带权无向图的实现 一 数据结构 基于C 的带权无向图的实现 二 遍历算法 基于C 的带
  • AD10创建自己的元器件库——PCB设计第二节

    一 在自己的元器件库里面添加一个七段数码管 绘制七段数码管的原理图 1 新建一个元器件库 如图所示 2 在集成库中新建两个文件并命名保存 3 打开First Schlib1 SchLib文件 在第四象限绘制一个矩形 4 添加引脚 如图所示
  • Vue中引入外部字体

    项目开发过程中 系统自带的字体通常美观性没那么强 所以有时候就需要我们自己引入字体包 来实现各种个性字体的效果 以下就是在vue项目中如何引入外部字体包并使用的方法 一 放置字体包 在assets下创建一个font文件夹 把下载的字体文件放
  • 微信小程序卡券样式

    微信小程序卡券样式 微信小程序 卡券 html
  • AndroidManifest.xml中android:configChanges的简介

    程序在运行时 一些设备的配置可能会改变 如 横竖屏的切换 键盘的可用性等 这样的事情一发生 Activity会重新启动 其中的过程是 在销毁之前会先 called onSaveInstanceState 去保存你应用中的一些数据 然后cal
  • 文档开发中预览/编辑/格式转换/内容提取/语言识别/文件服务器/相关的开源/商业组件和库

    能用于项目开发的office文件功能 pageoffice 在线编辑office http www zhuozhengsoft com java WebOffice java jsp 在线编辑office 商业版贵 kkFileView 文
  • 【Rust 日报】2021-09-26 RustConf 2021 项目精选

    RustConf 2021 项目精选 以下项目来自 RustConf 2021 移动构造函数 有可能吗 自引用 类型是一种对自身引用的类型 异步 Features 是当今 Rust 中最常见的自引用类型 但是 它们不能在不使引用无效的情况下
  • 【Python 1-15】Python手把手教程之——详解类Class以及类的使用

    作者 弗拉德 来源 弗拉德 公众号 fulade me 创建和使用类 使用类几乎可以模拟任何东西 下面来编写一个表示小狗的简单类Dog 它表示的不是特定的小狗 而是任何小狗 对于大多数宠物狗 我们都知道些什么呢 它们都有名字和年龄 我们还知
  • Scrapy笔记(2)- 完整示例

    这篇文章我们通过一个比较完整的例子来教你使用Scrapy 我选择爬取虎嗅网首页的新闻列表 这里我们将完成如下几个步骤 创建一个新的Scrapy工程 定义你所需要要抽取的Item对象 编写一个spider来爬取某个网站并提取出所有的Item对
  • 斐波纳契数列(f(n)=f(n-1)+f(n-2))问题

    package org nxt algorithm series import java math BigInteger fibonacci series author nanxiaotao public class FibonacciSe
  • C++的auto类型说明符详解 附易错实例

    博客内容 C 读取一行内个数不定的整数的方式 作 者 陈大大陈 个人简介 一个正在努力学技术的准前端 专注基础和实战分享 欢迎私信 欢迎大家 这里是CSDN 我总结知识和写笔记的地方 喜欢的话请三连 有问题请私信 目录 基本概念 易错点 易
  • 激光雷达建图之cartographer建图

    环境 ubuntu20 04 双系统 ros noetic 1 按照官网的方式安装 主要安装包括三个部分 cartographer cartographer ros ceres solver 如果完全按照官网进行安装 前两个没什么问题 但如
  • Git学习使用

    慢慢学习Git 探索Git上各路大神的佳作 good good study day day up Git初学 1 Git下载安装配置 2 Git架构浅谈 3 Git分支合并和解决冲突
  • 矩阵论的一些问题(最小多项式,jordan标准型,矩阵范数)

    1 最小多项式求法 比如例题A 1 2
  • Code Review 工具

    Crucible Atlassian 内部代码审查工具 Gerrit Google 开源的 git 代码审查工具 GitHub 程序员应该很熟悉了 上面的 Pull Request 在代码审查这里很好用 LGTM 可用于 GitHub 和
  • java基础速通(一)

    1 java基础语法 对象 类 方法 实例变量 2 java基本语法 大小写敏感 类名首字母大写 方法名首字母小写 源文件名与类名相同 主方法入口 3 类名 方法名 变量名命名规则 3 1 字母 下划线开头 3 2 首字符后可以是字母 下划
  • 黑马JVM总结(十二)

    1 五种引用 强软弱 实线箭头表示强引用 虚心线表示软弱虚终结器引用 在平时我们用的引用 基本都为强引用 比如说创建一个对象通过 运算符赋值给了一个变量 那么这个变量呢就强引用了刚刚的对象 强引用的特点 通过GC Root的引用链 能够找到
  • 最长公共子序列-Python-动态规划

    1 题目内容 题名为 最长公共子序列 题目要求 1 用动态规划算法思想设计最长公共子序列问题求解算法 并且对给定的数据 分两类 统一和自选 进行验证 2 要求分析算法的时间复杂性 3 与穷举算法 直接递归法 备忘录法进行对比并且形成分析报告
  • 如何释放已使用的EOS RAM,然后就可以自由买卖了

    昨天到今天 EOS RAM价格大跌 有一些用户想卖RAM 但是却发现大量RAM被占用 比如下图 这位伙伴找到我时 他说啥都没做但他的内存使用量怎么高达189k 然后我查了一下该账号的交易记录 发现他曾经部署过智能合约 然后他告诉我是他不小心
  • 分布式面试题

    文章目录 前言 一 大型网站系统的特点 二 拆分 VS 集群 三 微服务 VS SOA 四 前后端完全分离与Rest规范 总结 前言 大型网站系统的特点 拆分 VS 集群 微服务 VS SOA 前后端完全分离与Rest规范 一 大型网站系统