- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
志不强者智不达,言不信者行不果。——墨翟
怎么理解分布式、⾼并发、多线程?(含⾯试题和答案解析)
看到分布式、⾼并发、多线程这三个词的时候,很多⼈是不是都认为分布式=⾼并发=多线程?
当⾯试官问到⾼并发系统可以采⽤哪些⼿段来解决,或者被问到分布式系统如何解决⼀致性的问题,是不是⼀脸懵逼?
确实,在⼀开始接触的时候,不少⼈都会分布式、⾼并发、多线程将三者混淆,误以为所谓的分布式⾼并发的系统就是能同时供海量⽤户访
问,⽽采⽤多线程⼿段不就是可以提供系统的并发能⼒吗?实际上,他们三个总是相伴⽽⽣,但侧重点⼜有不同。
接下来我就看看分布式、⾼并发、多线程这三者之间到底有什么区别?
什么是分布式?
分布式更多的⼀个概念,是为了解决单个物理服务器容量和性能瓶颈问题⽽采⽤的优化⼿段。该领域需要解决的问题极多,在不同的技术层
⾯上,⼜包括:分布式⽂件系统、分布式缓存、分布式数据库、分布式计算等,⼀些名词如Hadoop、zookeeper、MQ等都跟分布式有
关。从理念上讲,分布式的实现有两种形式:
⽔平扩展:当⼀台机器扛不住流量时,就通过添加机器的⽅式,将流量平分到所有服务器上,所有机器都可以提供相当的服务;
垂直拆分:前端有多种查询需求时,⼀台机器扛不住,可以将不同的需求分发到不同的机器上,⽐如A机器处理余票查询的请求,B机器处
理⽀付的请求。
什么是⾼并发?
相对于分布式来讲,⾼并发在解决的问题上会集中⼀些,其反应的是同时有多少量:⽐如在线直播服务,同时有上万⼈观看。
⾼并发可以通过分布式技术去解决,将并发流量分到不同的物理服务器上。但除此之外,还可以有很多其他优化⼿段:⽐如使⽤缓存系统,
将所有的,静态内容放到CDN等;还可以使⽤多线程技术将⼀台服务器的服务能⼒最⼤化。
什么是多线程?
穷则独善其身,达则兼善天下。——《孟子》
谋事在人,成事在天!——《增广贤文》
多线程是指从软件或者硬件上实现多个线程并发执⾏的技术,它更多的是解决CPU调度多个进程的问题,从⽽让这些进程看上去是同时执⾏
(实际是交替运⾏的)。
这⼏个概念中,多线程解决的问题是最明确的,⼿段也是⽐较单⼀的,基本上遇到的最⼤问题就是线程安全。在JAVA语⾔中,需要对JVM
内存模型、指令重排等深⼊了解,才能写出⼀份⾼质量的多线程代码。
总结⼀下:
分布式是从物理资源的⾓度去将不同的机器组成⼀个整体对外服务,技术范围⾮常⼴且难度⾮常⼤,有了这个基础,⾼并发、⾼吞吐等系统
很容易构建;
⾼并发是从业务⾓度去描述系统的能⼒,实现⾼并发的⼿段可以采⽤分布式,也可以采⽤诸如缓存、CDN等,当然也包括多线程;
多线程则聚焦于如何使⽤编程语⾔将CPU调度能⼒最⼤化。
下⾯给⼤家分享⼀些⾯试官常问的分布式、⾼并发、多线程的⾯试题
1、分布式系统怎么做服务治理
针对互联⽹业务的特点,eg 突发的流量⾼峰、⽹络延时、机房故障等,重点针对⼤规模跨机房的海量服务进⾏运⾏态治理,保障线上服务
的⾼SLA,满⾜⽤户的体验,常⽤的策略包括限流降级、服务嵌⼊迁出、服务动态路由和灰度发布等
2、对分布式事务的理解
本质上来说,分布式事务就是为了保证不同数据库的数据⼀致性。
事务的ACID特性 原⼦性 ⼀致性 隔离性 持久性
消息事务+最终⼀致性
CC提供了⼀个编程框架,将整个业务逻辑分为三块 :Try、Confirm和Cancel三个操作。以在线下单为例,Try阶段会去扣库存,Confirm
阶段则是去更新订单状态,如果更新订单失败,则进⼊Cancel阶段,会去恢复库存。总之,TCC就是通过代码⼈为实现了两阶段提交,不
同的业务场景所写的代码都不⼀样,复杂度也不⼀样,因此,这种模式并不能很好地被复⽤。
3、如何实现负载均衡,有哪些算法可以实现?
经常会⽤到以下四种算法:随机(random)、轮训 (round-robin)、⼀致哈希 (consistent-hash)和主备 (master-slave)。
4、分布式集群下如何做到唯⼀序列号
Redis⽣成ID 这主要依赖于Redis是单线程的,所以也可以⽤⽣成全局唯⼀的ID。可以⽤Redis的原⼦操作 INCR和INCRBY来实现。
5. 什么是进程
进程是指运⾏中的应⽤程序,每个进程都有 ⾃⼰独⽴的地址空间 (内存空间)。
⽐如⽤户点击桌⾯的IE浏览器,就启动了⼀个进程,操作系统就会为该进程分配独⽴的地址空间。当⽤户再次点击左边的IE浏览器,⼜启动
了⼀个进程,操作系统将为新的进程分配新的独⽴的地址空间。⽬前操作系统都⽀持多进程。
6. 什么是线程
进程是表⽰⾃愿分配的基本单位。⽽线程则是进程中执⾏运算的最⼩单位
文档评论(0)