我们已经知道了同步的基本定义和一些示例,那么让我们拓宽一-下讨论,看看应用中的同步调用和异步调用。同步调用是在调用返回时才能完全执行它们的动作。如果一个方法被调用了,控制权被转给该方法来行使,那么只有当该方法完成了自己要执行的操作,成功地返回了或者返回有错时,应用中调用该方法的地方才会重新得到控制权。换而言之,同步方法先被调用,然后它们执行操作,当它们完成时,会返还控制权。...
对象缓存用于存储会被应用再用到的对象。这些对象通常来自数据库,或由计算或应用操作生成。这些对象几乎都是有序对象,会被排列或组编成有序的格式,以便最小化内存占用量。在获取这些对象时,它们的排序会被打乱或解编,以转换成原始的数据类型。所谓组编,就是把对象的内存表示形式转换成字节流或字节序列进程,以便存储或传输。所谓解编,就是把字节流表示的对象解码成原始的对象格式的进程。如果使用了对象缓存,应用必须注意到它们,并且实现操作缓存的方法。...
AllScale公司的数据架构师认为数据架构将在三个维度上受到限制,即交易量的增长、第23章所做的扩展应用的决策以及客户和产品的增长。因此,他们需要依靠AKF数据库扩展立方的所有坐标轴。...
要是天上掉馅饼该多好...但故障隔离不是免费的,而且并不便宜。虽然它有很多好处,但如果把平台上的每个功能都设计为故障隔离的,那成本就太高了,而且它可能还不会带来什么股东回报。...
故障隔离程度最好的系统,是那些绝对不调用它们的功能或数据范围以外的东西并且与之没有任何交互的系统。可以想象一组混凝土衬托的房间,每个房间有一扇门,每扇门后面是一个长长的隔离通道,通道的尽头有另一扇门;也就是说,一扇门可以访问混凝土衬托的房间,而另一扇门可以访问一个共享的房间,该房间中有无穷多个桌子和人。在每个混凝土房间中,有一条信息,坐在那许多桌子后面的某个人,可能需要这条信息。要得到这条信息,他就要沿着这个具有他所需信息的房间的专用通道走到其中,然后再返回自己所在的桌子。在...
如果创建的架构允许你以面向服务或者面向资源的方式划分代码,那么你就有了关注的灵活性,能够给这些服务专门指派工程师了。当你还是一家小公司时,这样做可能意义不大。但是随着你的公司发展,代码数量、服务器数量和系统的整体复杂度都在增长。要处理这种复杂度的增长,你就需要集中你的工程师。如果不能让你的员工专注于自己特定的领域,那么就会造成太多的工程师了解太少的整个系统的信息,以致效率低下。...
故障隔离还可以提高可用性,因为故障更容易被检测、发现和解决。如果你有多个泳道,每个泳道分配给一组客户,只要一个泳道出故障了,那么你就会很快知道哪里出故障了,而且故障的影响仅限于一组客户。这样你要解决的问题范围几乎立即缩小了。很可能这个问题是由服务于这组客户的系统或服务造成的,比如这个客户泳道专用的数据库。这时你可以问“我们刚在这个泳道或豆荚中发布过代码吗”或者更一般的“这个泳道或豆荚最近做过什么变更”。...
故障隔离的架构会给平台或产品带来很多好处。其中明显的好处是提高了可用性和可扩展性,而不明品的好处是减少了上市时间和开发成本。公司会发现,采用故障隔离的架构,回退发会更容易,而当站点、平台或产品“上线”后,再推出新功能也会更加容易。...
根据我们的经验,我们通常把故障隔离的架构称为泳道(swim lanes)。虽然这个术语不是我们创造的,但是我们认为它很形象地比喻了我们想在架构中创建的东西。对于泳者来说,泳道既有屏障的作用,又有引导的作用。作为屏障,泳道可以确保泳者不会游到其他的泳道中,干扰到另一个泳者。在比赛中,这样有助于避免发生意外的干扰,影响到泳者夺冠的机会。在实践或练习中,屏障的存在确保了游泳新手不会干扰优秀的泳者。此外,泳道还可以引导泳者以最少的力量向目标前进,因为泳者需要不停地把脑袋没人水中,而每...
那么这些关于成本、质量、速度和范围的权衡决策是如何影响系统的可扩展性呢?正如上一章提到的,对于扩展项目或基础设施项目来说,可扩展性与这些权衡之间有着简单明了的关系。而对于开发功能的项目来说,这些约束的权衡决策从长期来看会影响该功能和整个系统的可扩展性,这是权衡决策与可扩展性之间的间接关系。...