分布式系统的架构思路

转载来源:https://chulung.com/article/19

1、前言

  在计算机领域,当单机性能达到瓶颈时,有两种方式能够解决性能问题,一是堆硬件,进一步提高配置,二是分布式,水平扩展。固然,二者都是同样的烧钱。
  今天聊聊我所理解的分布式系统的架构思路。nginx

2、分布式系统的两种方式

  平时接触到的分布式系统有不少种,好比分布式文件系统,分布式数据库,分布式WebService,分布式计算等等,面向的情景不一样,但分布式的思路是不是同样的呢?web

  1.简单的例子

  假设咱们有一台服务器,它能够承担1百万/秒的请求,这个请求能够的是经过http访问网页,经过tcp下载文件,jdbc执行sql,RPC调用接口…,如今咱们有一条数据的请求是2百万/秒,很显然服务器hold不住了,会各类拒绝访问,甚至崩溃,宕机,怎么办呢。一台机器解决不了的问题,那就两台。因此咱们加一台机器,每台承担1百万。若是请求继续增长呢,两台解决不了的问题,那就三台呗。这种方式咱们称之为水平扩展。如何实现请求的平均分配即是负载均衡了。算法

  另外一个例子,咱们如今有两个数据请求,数据1 90万,数据2 80万,上面那台机器也hold不住,咱们加一台机器来负载均衡一下,每台机器处理45万数据1和40万数据2,可是平分太麻烦,不如一台处理数据1,一台处理数据2,一样能解决问题,这种方式咱们称之为垂直拆分。sql

  水平扩展和垂直拆分是分布式架构的两种思路,但并非一个二选一的问题,更多的是兼并合用。下面介绍一个实际的场景。这也是许多互联网的公司架构思路。数据库

  2.实际的例子

  我此时所在的公司的计算机系统很庞大,天然是一个整的分布式系统,为了方便组织管理,公司将整个技术部按业务和平台拆分为部门,订单的,会员的,商家的等等,每一个部门有本身的web服务器集群,数据库服务器集群,经过同一个网站访问的连接可能来自于不一样的服务器和数据库,对网站及底层对数据库的访问被分配到了不一样的服务器集群,这个即是典型的按业务作的垂直拆分,每一个部门的服务器在hold不住时,会有弹性的扩展,这即是水平扩展。服务器

  在数据库层,有些表很是大,数据量在亿级,若是只是纯粹的水平的扩展并不必定最好,若是对表进行拆分,好比能够按用户id进行水平拆表,经过对id取模的方式,将用户划分到多张表中,同时这些表也能够处在不一样的服务器。按业务的垂直拆库和按用户水平拆表是分布式数据库中通用的解决方案。架构

3、负载均衡

  前面咱们谈到了分布式来解决性能问题,但其附带的问题是怎么分布,即如何负载均衡。这里要解决的问题是当客户端请求时,应该让它请求分布式系统中哪一台服务器,一般的作法是经过一台中间服务器来给客服端分配目标服务器。负载均衡

这里一样拿两个不一样的分布式系统作说明,下图左边是分布式文件系统FastDFS,右边是一个用于分布式的RPC中间件。
框架

  • FastDFS的一次文件下载请求过程是这样的
    1.client询问tracker能够下载指定文件的storage;
    2.tracker返回一台可用的storage;
    3.client直接和storage通讯完成文件下载。

  其中tracker即是负载均衡服务器,storage是存储文件和处理上传下载请求的服务器。tcp

  • 而另外一个RPC中间件Hedwig也是相似的
    1.client询问zookeeper哪台server能够执行请求;
    2.zookeeper返回一台可用server;
    3.client直接与service完成一次RPC。

  zookeeper是分布式系统中一个负载均衡框架,google的chubby的一个开源实现,是是Hadoop和Hbase的重要组件。

  一样的在http中,常据说的nginx也是一个负载均衡服务器,它面向的是分布式web服务器。至于具体的负载均衡算法轮询,hash等这里就不深刻了。

4、同步

  分布式系统中,解决了负载均衡的问题后,另一个问题就是数据的一致性了,这个就须要经过同步来保障。根据不一样的场景和需求,同步的方式也是有选择的。

  在分布式文件系统中,好比商品页面的图片,若是进行了修改,同步要求并不高,就算有数秒甚至数分钟的延迟都是能够接受的,由于通常不会产生损失性的影响,所以能够简单的经过文件修改的时间戳,隔必定时间扫描同步一次,能够牺牲一致性来提升效率。

  但银行中的分布式数据库就不同了,一丁点不一样步就是没法接受的,甚至能够经过加锁等牺牲性能的方式来保障彻底的一致。

  在一致性算法中paxos算法是公认的最好的算法,chubby、zookeeper中paxos是它保证一致性的核心。这个算法比较难懂,我目前也没弄懂,这里就不深刻了。

5、结语

  接触过这么多分布式系统后发现,它们的设计思路是如此的类似,这或许就是万法归一吧。

相关文章
相关标签/搜索