网站开发所需要的时间 知乎,怎么做谷歌这样的网站吗,安徽网站建设开发,备案号查询平台官网由于分布式系统所涉及到的领域众多#xff0c;知识庞杂#xff0c;很多新人在最初往往找不到头绪#xff0c;不知道从何处下手来一步步学习分布式架构。
本文试图通过一个最简单的、常用的分布式系统#xff0c;来阐述分布式系统中的一些基本问题。
负载均衡分布式缓存分…由于分布式系统所涉及到的领域众多知识庞杂很多新人在最初往往找不到头绪不知道从何处下手来一步步学习分布式架构。
本文试图通过一个最简单的、常用的分布式系统来阐述分布式系统中的一些基本问题。
负载均衡分布式缓存分布式文件系统/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/IPSocket。
但一般很少有人会去裸写Socket实现机器之间的通信。这里最常用的组件就是RPC。
最简单的实现RPC的方式就是使用http。当然业界有很多成熟的开源RPC框架如Facebook的Thrift, 阿里的Dubbo点评的Pigeon。。
在RPC内部一般都自己实现了负载均衡。还有更复杂的如多版本服务降级等。
补充一句虽然底层原理都是Socket但使用不同框架/组件时通常都有其自己的跨机器通信方式比如MySQLJDBCRPC 消息中间件等。
分布式数据库 在上图中DB是单一节点。当访问量达到一定程度就会涉及到Mysql的分库分表问题。
分库/分表之后就会涉及到join的问题分布式事务的问题。
关于分库分表业界也早有成熟方案。对上层屏蔽分库分表sql的执行像是在单库一样。
还有像MongoDB这种Nosql数据库天生是分布式的。但同样会面对Mysql分库分表所要面对的问题。
还有像阿里的OceanBase有Mysql的强一致性保证又是分布式的还可以支持分布式事务。
分布式消息中间件 在上图中没有提及到消息中间件。相对其他基本问题这个需要一个更适合的业务场景来谈在以后的章节中会再详述。
常用的消息中间件比如老一辈的ActiveMQ/RabbitMQ 新一点的阿里的RocketMQLinkedIn的Kafka等。
消息中间件的一个典型场景就是通过最终一致性解决上面的分布式事务问题。
分布式session问题 在传统的单机版应用中我们经常使用session。而当单机扩展到多机单机的session就没办法被其他机器所访问。
此时就需要使用分布式session把session存放在一个所有Tomcat都可以访问的地方。
关于分布式session业界早有成熟方案在此不再详述。
总结 本文罗列了分布式系统的各种基本问题和业界常用的技术希望建立起分布式系统的一个宏观图谱。
后续会针对各个领域逐个剖析