分布式面试题

文章目录


前言

  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规范
相关推荐
懒洋洋的华3692 小时前
消息队列-Kafka(概念篇)
分布式·中间件·kafka
March€2 小时前
分布式事务的基本实现
分布式
DieSnowK4 小时前
[Redis][环境配置]详细讲解
数据库·redis·分布式·缓存·环境配置·新手向·详细讲解
Lill_bin4 小时前
深入理解ElasticSearch集群:架构、高可用性与数据一致性
大数据·分布式·elasticsearch·搜索引擎·zookeeper·架构·全文检索
qingcyb12 小时前
下载Kafka 3.0.0教程
分布式·kafka
杰信步迈入C++之路14 小时前
【RabbitMQ】快速上手
分布式·rabbitmq·ruby
妙龄少女郭德纲17 小时前
基于Spark框架实现XGBoost模型
大数据·分布式·spark
晚枫200017 小时前
kafka发送事件的几种方式
spring boot·分布式·docker·容器·kafka·intellij-idea·linq
二进制杯莫停17 小时前
初识zookeeper
分布式·zookeeper·云原生
happycao12318 小时前
kafka消息发送几种方式
分布式·kafka