HTML5技术

服务的扩展性 - loveis715(2)

字号+ 作者:H5之家 来源:博客园 2016-01-04 09:43 我要评论( )

就像上图中所展示的那样,虽然我们的服务器已经安装了4个CPU,但是在单个服务器实例提供服务的情况下,CPU使用率还是一直处于警戒线之上。如果我们再在应用中添加一个相同的服务器来共同处理用户的请求,那么每台服

  就像上图中所展示的那样,虽然我们的服务器已经安装了4个CPU,但是在单个服务器实例提供服务的情况下,CPU使用率还是一直处于警戒线之上。如果我们再在应用中添加一个相同的服务器来共同处理用户的请求,那么每台服务器的负载将会降到原有负载的一半左右,从而使得CPU使用率保持在警戒线之下。

  在这种情况下,该服务所提供的一系列其它功能也随之得到了扩充。例如对处理结果进行保存的功能的性能也将变成原来的两倍。只是由于我们暂时并不需要这种扩充,因此该部分性能的增强实际上是毫无用处的,甚至造成了服务资源的浪费:

  从上图中可以看到,在没有横向扩展之前,橙色组成的负载已经达到了90%,接近单个服务实例的极限。为了解决这个问题,我们再引入一个服务器实例来分担工作。但是这样会导致其它几个本来资源利用率就已经不高的组成的利用率降得更低。而更为正确的扩展方式则是只扩展橙色组成:

  从上面的讲解中可以看出,横向扩展实际上包含了很多种方式。相应地,《The Art of Scalability》一书则介绍了一个横向扩展所需要遵守的AKF扩展模型。根据AKF扩展模型,横向扩展实际上包含了三个维度,而横向扩展解决方案则是这三个维度上所做工作的结合:

  上图中展示了AKF扩展模型的最通用的表示形式。在该图中,原点O表示的是应用实例并没有能力执行任何横向扩展,而只能通过纵向扩展来提高它的服务能力。如果您的系统朝着某个坐标轴的方向前进,那么它就将得到一定程度的横向扩展能力。当然,这三个坐标轴并不互斥,因此您的应用可能同时拥有XYZ三个轴向的扩展能力:

  现在就让我们来看一下AKF扩展模型中各个坐标轴的意义。首先要讲解的就是X轴。在AKF扩展模型中,X轴表示的是应用可以通过部署更多的服务实例来解决扩展性的问题。在这种情况下,原本需要少量服务实例处理的大量负载就可以通过新添加的其它服务实例分担,从而扩大了系统容量,降低了单个服务实例的压力。

  我们刚刚提到过,一个服务的扩展性可以同时由多个轴向的扩展性共同组成,因此在该服务中,这种X轴方向的扩展性不仅仅存在于服务这个层次上,更可以由子服务,甚至服务组成的扩展性来共同完成:

  请注意上图中的橙色方块。在该服务中,橙色方块作为一个子服务来向整个服务提供特定功能。在需要扩展时,我们可以通过添加一个新的橙色子服务实例来解决橙色服务负载过大的问题。因此就整个服务而言,其X轴的横向扩展能力并不是通过重新部署整套服务来完成的,而是对独立的子服务进行扩容。

  相信您会问:既然只通过添加新的服务或子服务实例就能够完成对服务容量的扩充,那么我们还需要其它两个轴向的横向扩展能力么?

  答案是肯定的。首先,最为现实的问题就是服务运行场景的约束。例如在对服务进行X轴横向扩展的时候,我们常常需要一个负载平衡服务。在《企业级负载平衡简介》一文中我们已经说过,负载平衡服务器常常具有一定的性能限制。因此横向扩展并非全无止境。除此之外,我们也看到了横向扩展有时是使用在子服务上的,而将一个大的服务分割为多个子服务,本身也是沿着其它轴向的横向扩展。

  Y轴横向扩展的意义则在于将所有的工作根据数据的类型或业务逻辑进行划分。而就一个Web服务而言,Y轴横向扩展所做的最主要工作就是将一个Monolith服务划分为一系列子服务,从而使不同的子服务独立工作并拥有独立地进行横向扩展的能力。这一方面可以将原本一个服务所处理的所有请求分担给一系列子服务实例来运行,更可以让您根据应用的实际运行情况来对某个成为系统瓶颈的子服务进行X轴横向扩展,避免由于对整个服务进行X轴横向扩展所造成的资源浪费:

  这种组织各个子服务的方式被称为Microservice。使用Microservice组织子服务还可以帮助您实现一系列其它非功能性需求,如高可用性,可测试性等等。具体内容详见《Microservice架构模式简介》一文。

  相较而言,执行Y轴扩展要比执行X轴扩展困难一些。但是其常常会使得其它一系列非功能性需求具有更高的质量。

  而在Z轴上的横向扩展可能是大家所最不熟悉的情况。其表示需要根据用户的某些特性对用户的请求进行划分。例如使用基于DNS的负载平衡。

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • net.sz.framework 框架 登录服务器架构 单服2 万 TPS(QPS) - 失足程序员

    net.sz.framework 框架 登录服务器架构 单服2 万 TPS(QPS) - 失足

    2017-04-13 11:05

  • 面向个人的技术咨询服务 - 思想瞭望者

    面向个人的技术咨询服务 - 思想瞭望者

    2017-04-05 12:07

  • net.sz.framework 框架 轻松搭建服务---让你更专注逻辑功能---初探 - 失足程序员

    net.sz.framework 框架 轻松搭建服务---让你更专注逻辑功能---初探 -

    2017-04-02 10:11

  • 微服务--webapi实现,脱离iis,脱离tomcat - 失足程序员

    微服务--webapi实现,脱离iis,脱离tomcat - 失足程序员

    2017-03-30 11:00

网友点评
v