当前位置:首页 > 芯闻号 > 充电吧
[导读]由于分布式系统所涉及到的领域众多,知识庞杂,很多新人在最初往往找不到头绪,不知道从何处下手来一步步学习分布式架构。本文试图通过一个最简单的、常用的分布式系统,来阐述分布式系统中的一些基本问题。•负载均

由于分布式系统所涉及到的领域众多,知识庞杂,很多新人在最初往往找不到头绪,不知道从何处下手来一步步学习分布式架构。

本文试图通过一个最简单的、常用的分布式系统,来阐述分布式系统中的一些基本问题。

•负载均衡

•分布式缓存

•分布式文件系统/CDN

•分布式RPC

•分布式数据库/Nosql

•分布式消息中间件

•分布式session问题 
•总结

下图为一个中大型网站/App的基本架构: 


在这个架构中,涉及到以上所列的基本问题:

负载均衡

负载均衡是分布式系统中的一个最最基本的问题。在上图中:

网关需要把请求分发给不同的Tomcat; 
Tomcat需要把收到的请求,分发给不同的Service;

这都需要负载均衡。一句话:凡是请求从一个入口进来,需要分发给后端不同的机器时,就需要负载均衡。

局域网负载均衡

在上图中,负载均衡发生在局域网内部。在这里,常用的网关软件有Nginx/HAProxy/F5/LVS/各种云上的SLB等。

广域网负载均衡

在上图之外,还有广域网负载均衡。这通常发生在域名服务器上,而不是局域网内部。 
同1个域名,映射到不同的局域网集群。

负载均衡算法

常用的负载均衡算法:随机,轮询(Round Robin),最小资源数,hash。

分布式缓存

在上图中,当DB负载过高,我需要为Service机器加缓存时,就遇到一个基本问题: 
如果使用local的内存做缓存,则其他Service机器就没办法共用此缓存。 
因次,我需要一个可以让所有Service机器共享的缓存,这就是分布式缓存。

常用的分布式缓存组件:Memcached/Redis/Tair等

分布式文件系统

在上图中,当我要存储客户端上传的图片文件时,就会遇到另一个基本问题:我不能把图片存在每个Tomcat的本地文件系统里面,这样的话,其他机器就没办法访问了。我需要一个让所有机器可以共享的文件系统,这就是分布式文件系统。

常用的分布式文件系统:MogileFS/TFS/HDFS/Amazon S3/OpenStack Swift等

当使用了分布式文件系统,对外提供图片url访问服务时,就会遇到另一个基本问题:如果每次文件的访问,都要到分布式文件系统里面去取,效率和负载就可能成为问题。 
为此,就需要引入CDN。

常用的CDN厂商,比如ChinCache。当然,现在的各种云存储,比如七牛云,阿里云,腾讯云,已经自带了CDN。

分布式RPC

分布式系统的一个基本问题就是:机器与机器之间如何通信? 我们都知道底层原理是TCP/IP,Socket。

但一般很少有人会去裸写Socket,实现机器之间的通信。这里,最常用的组件就是RPC。

最简单的实现RPC的方式就是使用http。当然,业界有很多成熟的开源RPC框架,如Facebook的Thrift, 阿里的Dubbo,点评的Pigeon。。

在RPC内部,一般都自己实现了负载均衡。还有更复杂的,如多版本,服务降级等。

补充一句:虽然底层原理都是Socket,但使用不同框架/组件时,通常都有其自己的跨机器通信方式,比如Mysql JDBC,RPC, 消息中间件等。

分布式数据库

在上图中,DB是单一节点。当访问量达到一定程度,就会涉及到Mysql的分库分表问题。

分库/分表之后,就会涉及到join的问题,分布式事务的问题。

关于分库分表,业界也早有成熟方案。对上层屏蔽分库分表,sql的执行,像是在单库一样。

还有像MongoDB这种Nosql数据库,天生是分布式的。但同样会面对Mysql分库分表所要面对的问题。

还有像阿里的OceanBase,有Mysql的强一致性保证,又是分布式的,还可以支持分布式事务。

分布式消息中间件

在上图中,没有提及到消息中间件。相对其他基本问题,这个需要一个更适合的业务场景来谈,在以后的章节中,会再详述。

常用的消息中间件,比如老一辈的ActiveMQ/RabbitMQ, 新一点的,阿里的RocketMQ,LinkedIn的Kafka等。

消息中间件的一个典型场景就是:通过最终一致性,解决上面的分布式事务问题。

分布式session问题

在传统的单机版应用中,我们经常使用session。而当单机扩展到多机,单机的session就没办法被其他机器所访问。

此时就需要使用分布式session,把session存放在一个所有Tomcat都可以访问的地方。

关于分布式session,业界早有成熟方案,在此不再详述。

总结

本文罗列了分布式系统的各种基本问题和业界常用的技术,希望建立起分布式系统的一个宏观图谱。

后续,会针对各个领域,逐个剖析!

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

可调电源是用于电路测试和实验的重要工具,其主要作用是控制负载的电压和电流。在实际应用中,有时候需要调节电流,这时候就需要了解可调电源调节电流的相关知识。

关键字: 可调电源 电流 负载

许多可调电源都配有电流调节旋钮,通过旋转电流调节旋钮,可以调节电源输出电流大小。需要注意的是,电流调节旋钮的旋转方向与具体电源不同,用户需要结合电源说明书或者尝试旋转来确定调节方向。

关键字: 可调电源 负载 电流

鸿蒙系统(HarmonyOS)是华为公司自主研发的全场景分布式操作系统。它被设计为一个统一的、可扩展的操作系统,旨在支持各种类型的智能设备,包括手机、平板电脑、智能手表、智能电视、车载娱乐系统等。

关键字: 鸿蒙系统 分布式架构

模块电源是能直接在装贴在印刷电路板上的电源供应器,可以作为微处理器,专用集成电路,存储器或者模仿负载的供电应用场所。

关键字: 电源模块 负载 集成电路

能为负载提供稳定直流电源的电子装置。直流稳压电源的供电电源大都是交流电源,当交流供电电源的电压或负载电阻变化时,稳压器的直流输出电压都会保持稳定。

关键字: 直流稳压 电源 负载

电子镇流器的负载是一种特殊负载,要求电子镇流器工作时具有能为负载提供稳定电流的能力。由于它具有节能、效率高、节省金属材料(铜、硅钢)等优点,具有很高的经济效益和社会效益,所以引起社会各界的广泛关注。

关键字: 电子镇流器 负载 硅钢

为了增进大家对变频器的认识,本文将对变频器的负载性质、变频器的选型以及变频器的维护予以介绍。

关键字: 变频器 指数 负载

在这篇文章中,小编将为大家带来CPU的相关报道。如果你对本文即将要讲解的内容存在一定兴趣,不妨继续往下阅读哦。

关键字: CPU 缓存 负载

摘 要:当为控制系统选择数字信号输入/输出模块的接口类型时,正确理解Sinking Current (灌电流)和Sourcing Current (拉电流)的概念是非常重要的。讨论数字信号输入/输出接口/连接电路时会经常...

关键字: 数字信号输入/输出 灌电流/吸入电流 拉电流/流出电流 公共端 现场设备 负载

电子负载可以模拟真实环境中的负载(用电器),一般对电源要求比较严格的厂家都会用电子负载来检测电源的好坏。可以调节负载大小,以及短路,过流,动态等等,应该说所有的电源厂家都会有用,而且也必须有。

关键字: 负载 用电器
关闭
关闭