我要投搞

标签云

收藏小站

爱尚经典语录、名言、句子、散文、日志、唯美图片

当前位置:白小姐 > 分布式应用 >

delphi 分布式架构怎么学

归档日期:07-28       文本归类:分布式应用      文章编辑:爱尚语录

  从事互联网运营推广,3年以上互联网运营推广经验,丰富的实战经验。现负责运营推广工作。

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

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

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

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

  在上图之外,还有广域网负载均衡。这通常发生在域名服务器上,而不是局域网内部。

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

  在上图中,当DB负载过高,我需要为Service机器加缓存时,就遇到一个基本问题:

  如果使用local的内存做缓存,则其他Service机器就没办法共用此缓存。

  因次,我需要一个可以让所有Service机器共享的缓存,这就是分布式缓存。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

本文链接:http://frankstella.net/fenbushiyingyong/920.html