赞
踩
在计算机领域,当单机性能达到瓶颈时,一般有两种方式解决性能问题,
分布式系统有很多种:分布式文件系统、分布式数据库、分布式WebService、分布式计算等等,
面向的情景不同,但分布式的思路大致相同,万法归一吧!
以下内容主要来自:分布式系统架构思想
假设我们有一台服务器,它可以承担1百万/秒的请求,这个请求可以的是:通过http访问网页、通过tcp下载文件、jdbc执行sql、RPC调用接口等等方式,现在我们有一条数据的请求是2百万/秒,很显然服务器很难hold住,会各种拒绝访问,甚至宕机,怎么办呢?
一台机器解决不了的问题,那就两台。所以我们加一台机器,每台承担1百万。如果请求继续增加呢,两台解决不了的问题,那就三台呗。这种方式我们称之为水平扩展,如果实现请求的平均分配便是负载均衡了。
另一个例子,我们现在有两个数据请求,数据190万,数据280万,上面那台机器也hold不住,我们加一台机器来负载均衡一下,每台机器处理45万数据1和40万数据2,但是平分太麻烦,不如一台处理数据1,一台处理数据2,同样能解决问题,这种方式我们称之为垂直拆分。
水平扩展和垂直拆分是分布式架构的两种思路,但并不是一个二选一的问题,更多的是兼并合用。下面介绍一个实际的场景。这也是许多互联网的公司架构思路。
某些公司的计算机系统很是庞大,自然是一个整的分布式系统,为了方便组织管理,公司将整个技术部按业务和平台拆分为部门:订单的、会员的、商家的等等,而每个部门有自己的web服务器集群、数据库服务器集群,
通过同一个网站访问的链接可能来自于不同的服务器和数据库,对网站及底层对数据库的访问被分配到了不同的服务器集群,这个便是典型的按业务做的垂直拆分,每个部门的服务器在hold不住时,会有弹性的扩展,这便是水平扩展。
在数据库层,有些表非常大,数据量在亿级,如果只是纯粹的水平的扩展并不一定最好,
如果对表进行拆分,比如可以按用户id进行水平拆表,通过对id取模的方式,将用户划分到多张表中,同时这些表也可以处在不同的服务器。
按业务的垂直拆库 和 按用户水平拆表 是分布式数据库中通用的解决方案。
前面我们谈到了分布式来解决性能问题,但其附带的问题是怎么分布,即如何负载均衡。这里要解决的问题是当客户端请求时,应该让它请求分布式系统中哪一台服务器,例如我们做的微信云控通常的做法是通过一台中间服务器来给客服端分配目标服务器。
这里同样拿两个不同的分布式系统做说明,
下图左边 是分布式文件系统FastDFS,
下图右边
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。