文档章节

拜托,别再问怎么深入学习分布式架构了!

J
 Java架构资源分享
发布于 10/22 22:30
字数 1550
阅读 79
收藏 1

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

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

  • 负载均衡
  • 分布式缓存
  • 分布式文件系统/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,业界早有成熟方案,在此不再详述。

总结

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

文中的内容有没有学习资料?

欢迎加裙725219329,一起学习,相互讨论。

群内已经有小伙伴将知识体系整理好(源码,PPT,学习视频),欢迎加群免费领取。

分享给喜欢的Java的,喜欢编程,有梦想成为架构师的程序员们,希望能够帮助到你们。

 

 

© 著作权归作者所有

共有 人打赏支持
J
粉丝 286
博文 39
码字总数 140147
作品 0
怀化
私信 提问
Java 后端技术栈,到底如何深入学习?

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/t4i2b10X4c22nF6A/article/details/83118587 很多人做Java开发4,5年后,都会感觉自己遇到瓶颈。什么都会又什...

JAVA高级架构v
10/17
0
0
JAVA面试题「社招篇」

1. hashcode跟equals 2. hashmap的实现原理 3. 如何扩容,为什么要扩容 4. 1.6 1.7 1.8之间的区别 5. 1.8用了树解决冲突,既然是树就有排序,那是怎么排序的 6. 1.8为什么要换成树,什么是h...

JAVA丶学习
2017/12/25
0
0
关于 安卓 与蓝牙仪器的开发(类似智能家居)

关于 安卓 与蓝牙仪器的开发(类似智能家居)是这样的 之前我们公司的技术总监 现在不干了 现在也联系不上 然后 就让我来全权负责技术了 这个蓝牙项目 就是临危受命 项目可以慢慢写 不过 老板...

阿逸多
2015/07/31
56
0
十面阿里 屌丝程序员的逆袭之路

前言 《十面阿里》本屌现今四年开发经验;前前后后为进阿里面试十次(阿里旗下——蚂蚁金服,天猫的offer都被hr因学历而被拒,最后的菜鸟面幸运的被录用,拿到P6offer,真正的“十面”阿里!...

美的让人心动
05/18
0
0
Java程序员如何月薪达到两万,需要技术水平达到什么程度?

有人回答说这只能是大企业或者互联网企业工程师才能拿到。也许是的,小公司或者非互联网企业拿两万的不太可能是码农了,应该已经转管理。还有区域问题,这个不在我的考虑范围内,因为除了北上...

Theriseof
2017/11/09
0
0

没有更多内容

加载失败,请刷新页面

加载更多

day148-2018-11-15-英语流利阅读-待学习

赴美生子恐结束?特朗普中期选举憋大招 毛西 2018-11-15 1.今日导读 在 2013 年,一部《北京遇上西雅图》让赴美生子这个曾经神秘的话题吸引了很多关注。每年,数以万计的父母远赴美国,并在那...

飞鱼说编程
4分钟前
0
0
OSChina 周四乱弹 —— 每次我穿短裙的时候

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @瘟神灬念 :分享DM DOKURO的单曲《Reality Check Through The Skull》: 差点以为手机卡了 《Reality Check Through The Skull》- DM DOKURO...

小小编辑
14分钟前
10
2
Windows 10 设置 Java 环境变量

首先你需要在我的电脑中打开,找到环境变量属性。 找到环境变量属性 找到环境变量属性后单击将会看到下面的设置界面。 在这个界面中设置高级系统设置。 环境变量 在弹出的界面中选择设置环境...

honeymose
今天
2
0
用any-loader封装jQuery的XHR —— 随便写着玩系列

哎,都说没人用JQuery啦,叫你别写这个。 其实我也是好高骛远使用过npm上某个和某个很出名的XHR库,嗯,认识我的人都知道我喜欢喷JQ,以前天天喷,见面第一句,你还用JQ,赶紧丢了吧。但我也...

曾建凯
今天
8
0
SLF4J的正确打开方式

最近公司好几波人过来问日志打印相关的异常,大多是jar包冲突引起的,发现大部分同事不太清楚各种日志框架以及相关jar包之间的关系,所以今天详细的讲解下常见jar包之间的关系,以及如何正确...

lexus90
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部