在你常用的搜索引上简单搜索一下,就能找到关于该主题的免费好建议。我们要介绍的是两个基础要点:
第一,如果你想以具有成本效益的方式进行扩展,必须采用应用层缓存;
口第二,这种缓存方式必须从系统架构的角度开发,以使其长期有效。
按照服务或资源(Y轴)划分平台(或架构),或者按照你对请求者或客户了解的某一项进行划分(Z轴),会为服务请求提供巨大的数据可缓存性。问题是,采用不同的轴或原则划分各自能获得多大的好处随着开发了新特性或功能,有了新的数据需求,这个问题的答案会改变。
那么实现方法就要随之改变,以适应不断改变的业务需求。但识别这些改变的需求的过程是相同的。学习型的组织需要不断分析产品流量、每个交易的成本以及用户感知的响应时间,以便在生产环境中出现瓶颈的早期迹象时就识别出来,把数据交给架构组对产品进行修改。
这个问题的关键是,哪种类型的划分或细致划分可以使系统或平台在扩展性和成本方面获得最大的好处。通过实现正确的划分并在应用服务器上缓存数据,完全可能用100台或10万台服务器处理相当于当前生产环境流量的两倍、三倍甚至十倍的流量。为了说明这一点,让我们看个常用的电子商务站点的例子,这是一个相当典型的专注于满足业务需求SaaS站点,还是一个社交网络或在社交网站。
我们的电子商务站点具有很多功能,包括搜素、浏览、图像查看(包括缩放)、账户更新、登录、购物车、登出、建议物品,等等。对当前生产环境流量的分析表明,最常用的功能(包括搜索、浏览和建议物品)涉及80%的交易,而这些交易涉及的商品不到总量的20%。这里可以利用帕累托法则,对这些类型的服务进行Y轴(功能性的)划分,让相对较少的对象获得较高的命中率。这种方法的缓存性比较高,动态系统可以受益于以前相似的请求得到的结果。
我们还发现存在大量的超级用户,他们的请求相当频繁。对于那些与用户相关的功能,如登录、购物车、账户更新(或其他账户信息)等,可以采用Z轴划分。虽然我们可以对这些事件进行假设,但显然从现有的盈利站点获取真正的产品数据更有助于我们做决定。
再举一个例子,假设我们有一个SaaS业务,通过电话服务、电子邮件服务、聊天服务和关系管理系统帮助公司进行客户支持。在这个系统中,任何特定业务都有许多特有的原则。对于每个业务,这些原则可能都需要大量的内存来缓存这些规则以及业务运维所必需的数据。如果你已经得出了结论,即面向客户的划分或者说Z轴划分是正确的方法,那么你是对的。但我们还想在数据库和应用方面都维持多租户的假象。如何实现这一点,并且把最常访问的用户缓存起来,以便进行具有成本效
益的扩展呢?我们]的答案还是帕累托法则。最大业务的20%可能占总交易量的80%(我们的大部分客户都存在这种情况),我们可以将它们分布在几个划分的数据库上。要获得成本的杠杆作用,可以把80%6较小的用户平均分布到所有划分的数据库上。这里的理论依据是访问较少的公司缓存命中率较低,即使它们存在于自己之中。因此,我们可以让较大的客户从缓存中获益,同时从较小的客户那里得到成本杠杆。除非我们把较小的客户放在它们专用的系统中,否则它们的的体验与大客户不会有明显的不同,而众所周知,这样做,我们]不能得到SaaS环境带给我们的预期收益。
最后一个例子是处理社交网络或交互式站点。你可能已经预料到了我们仍然要应用帕累托法则和从我们的生产环境得到的信息,帮助我们进行决策。社交网络通常会有少量的用户产生令人难以置信的大流量。有时,这些用户可能是活跃的消费者,有时他们则是活跃的生产者(其他用户的目的地),而有时则两者兼备。
第一步,我们要识别是否有一小部分信息或子站点占据了大量的“读”流量。在社交网络中,这种节点可以在我们设计架构时提供指引,使我们对那些生产者执行Z轴划分,从而在读操作方面,使它们的节高具有高缓存性。假设帕累托法则成立(通常成立),我们用少量的服务器提供了将近80%的读流量。我们的股东会很高兴,因为以非常低的资本密集度就可以服务于那些请求。
对于社交网络中非常积极的内容生产者和更新,又该如何呢?根据它们的内容是否具有很高的消费(读)率或是否基本处于休眠状态,这个问题的答案有所不同。对于用户具有高生产(写更新)率和高消费(读) 率的情况,可以直接把它的内容存发布到读取它的那个分区或节点上。如果随着这些节点越来越热门,读写冲突成为问题了,那么我们可以使用读复制和水平扩展技术(X轴划分),或者开始考虑如何对这些更新进行排序,并异步地应用它们随着我们不断地成熟,可以把这些技术混合起来使用。如果使用了从浏览器到CDN到页面缓存和应用缓存的各种缓存技术之后,仍然有问题,那么可以继续细化我们的划分。我们可以给特定用户的更新分出级别,根据内容分界线划分它们(另一种类型的Y轴划分),或者,我们可以继续创建数据实例的副本(X轴划分)。也许我们发现要读的信息有特殊的地理偏向性,某些类型的新闻就属于这种情况,那么可以根据请求的地理位置决定的边界划分数据,请求是我们了解的有关请求者的信息,因此,这是另一种类型的Z轴划分。
但愿你已经发现了这个原则中的模式。第一步是推测可能使用的划分方法,并决定采用哪种划分方法可以最大化网站建设缓存性。在应用和支持层面的永久性数据存储中实现这些划分后,在生产环境中评估它们的有效性。基于生产数据进一步细化你的方法,并迭代性地应用帕累托法则和AKF扩展立方,来细化和提高缓存命中率。
本文地址://www.qlpinke.com//article/3478.html