城市站点
海外
登录 注册 购物车 方案咨询

拆分不同的东西(Y轴原则)

发表于 2024-07-27 浏览量
有时该原则被称为通过服务或资源进行扩展,重点是扩展数据集合、事务和程序员小组。非常大的数据集合,数据间关系并不重要口大型的复杂系统,需要特别扩展编程资源。

用动词拆分操作,用名词拆分资源,或者兼而有之口根据动词/名词方法的定义,拆分服务和数据。不仅能有效地扩展事务,还能有效地扩展与事务相关的大型数据集合。Y轴拆分,或者说面向数据服务的拆分,能够有效地扩展事务、大型数据集合,并且有助于故障隔离。

抛开关于面向服务的架构(SOA)和面向资源的架构(ROA)这两个概念的争论,深入了解它们的基本前提就会发现,它们至少有一点是相同的,即都要求架构师和程序员考虑架构中的职责拆分。大体上就是采用动词(服务)和名词(资源)的概念来实现拆分。即扩展立方上的第二个轴,采用的就是这种方法。简而言之,是通过拆分站点中的各种功能和数据,从而实现扩展。采用简单方法就是把产品拆分为名词和动词,或者两者的组合。



首先,我们看看怎么用动词拆分站点。如果我们的站点是相对简单的电子商务站点,那么可以用动词把它拆分为注册、登录、搜索、浏览、查看、加入购物车、购买。在这些事务中,每一个事务所需要执行的数据可能都与其他事务需要的大不相同。例如,可能有人会说,注册和登录需要的数据是相同的,但其实它们都需要一些特有的数据。例如,注册可能需要检查该用户选择的ID是不是已经被别人选用了,而登录时则无需了解其他用户的ID。注册时可能需要把大量的数据写入持久数据存储中,而登录则是一种验证用户身份的只读应用。注册可能需要用户存储许多识别个人身份的信息,包括信用卡号等,而在用户只是想建立登录连接时则无需访问这些信息。

在研究搜索和登录这两种截然不同功能时,依据动词拆分的扩展方法的不同之处以及带来的好处就更加明显了。在登录时,我们关心的通常是验证用户身份,可能会建立某些会话(这里我们采用术语会话,而不是采用状态)。登录功能关心的是用户,因此需要缓存用户数据并与之进行交互操作。另一方面,搜索关心的是查找数据项,而最重要的是用户的意图(通常是用户在搜索框内输入的搜索字符串、查询或搜索项)以及我们存储在目录中的目录项。拆分这些数据集,可以使我们在系统有限的内存中缓存更多的数据,而且,由此产生的高缓存命中率也会加快事务的处理。在后端的持久性系统(如数据库)中标分数据,就能够在这些系统中分配更多的专用内存,加速对客户(应用服务器)请求的响应。由于更好地利用了系统资源,这两个系统都会相应地更快。显然,这是拓展这些系统最容易的方法,受内存限制地更少。此外,通过采用X轴扩展)相同的方法拆分事务,Y轴的事务扩展能力也增加了。

稍等!如果我们想把用户和产品信息合并在一起,例如向客户推荐产品,又该怎么办呢?注意,这里用了新的动词一一推荐。这是另一种需要拆分数据和事务的情况。我们可能会加入一种推荐服务,根据用户过去的购买行为,与具有相似购买行为的用户进行异步评估。这样可能会把数据移植到登录功能或搜索功能(当用户与系统交互时就会向他显示)。或者也可能是用户浏览器发出的一个单独的同步调用,显示在专门分配给这个推荐调用的区域。

现在可以考虑如何用名词来拆分项了。还是拿电子商务的例子来说,我们可以标识一些最终会对其进行操作的资源(而不是表示要执行的操作的动词)。我们可以认为电子商务站点是由产品目录、产品库存清单、用户账户信息、市场营销信息等构成的。采用名词拆分的方法,可以根据这些分类拆分数据,然后定义一套高级的原函数,如创建、读、更新和删除等,对这些原数据进行操作。

Y轴拆分不仅适用于扩展数据集合,还适用于扩展代码库。由于服务和资源都被拆分了,那么执行的操作和执行它们所必需的代码也会被拆分。这就意味着可以把开发复杂系统的大型编程小组拆分成各个子系统的专家组,程序员不用再担心自己必须是网站建设系统每一部分的全能专家了。当然,由于可以拆分服务,所以扩展事务也就相当容易了。