diff --git a/ch8.md b/ch8.md index 7d6520dc..954511ee 100644 --- a/ch8.md +++ b/ch8.md @@ -232,7 +232,7 @@ > > ​ 假设两台电话交换机之间有一条线路,可以同时进行10,000个呼叫。通过此线路切换的每个电路都占用其中一个呼叫插槽。因此,您可以将线路视为可由多达10,000个并发用户共享的资源。资源以静态方式分配:即使您现在是电话上唯一的电话,并且所有其他9,999个插槽都未使用,您的电路仍将分配与导线充分利用时相同的固定数量的带宽。 > -> ​ 相比之下,互联网动态分享网络带宽。发送者互相推挤并互相推挤以尽可能快地通过网络获得它们的分组,并且网络交换机决定从一个时刻到另一个时刻发送哪个分组(即,带宽分配)。这种方法有排队的缺点,但其优点是它最大限度地利用了电线。电线固定成本,所以如果你更好地利用它,你通过电线发送的每个字节都会更便宜。 +> ​ 相比之下,互联网动态分享网络带宽。发送者互相推挤和争夺,以尽可能快地通过网络获得它们的分组,并且网络交换机决定从一个时刻到另一个时刻发送哪个分组(即,带宽分配)。这种方法有排队的缺点,但其优点是它最大限度地利用了电线。电线固定成本,所以如果你更好地利用它,你通过电线发送的每个字节都会更便宜。 > > ​ CPU也会出现类似的情况:如果您在多个线程间动态共享每个CPU内核,则有一个线程有时必须等待操作系统的运行队列,而另一个线程正在运行,这样线程可以暂停不同的时间长度。但是,与为每个线程分配静态数量的CPU周期相比,这会更好地利用硬件(参阅“[响应时间保证](#响应时间保证)”)。更好的硬件利用率也是使用虚拟机的重要动机。 > @@ -534,7 +534,7 @@ while(true){ 然而,在本书讨论的那些系统中,我们通常可以安全地假设没有拜占庭式的错误。在你的数据中心里,所有的节点都是由你的组织控制的(所以他们可以信任),辐射水平足够低,内存损坏不是一个大问题。制作拜占庭容错系统的协议相当复杂【84】,而容错嵌入式系统依赖于硬件层面的支持【81】。在大多数服务器端数据系统中,部署拜占庭容错解决方案的成本使其变得不切实际。 -​ Web应用程序确实需要预期受终端用户控制的客户端(如Web浏览器)的任意和恶意行为。这就是为什么输入验证,数据清洗和输出转义如此重要:例如,防止SQL注入和跨站点脚本。但是,我们通常不使用拜占庭容错协议,而只是让服务器决定什么是客户端行为,而不是允许的。在没有这种中心授权的对等网络中,拜占庭容错更为重要。 +​ Web应用程序确实需要预期受终端用户控制的客户端(如Web浏览器)的任意和恶意行为。这就是为什么输入验证,数据清洗和输出转义如此重要:例如,防止SQL注入和跨站点脚本。但是,我们通常不使用拜占庭容错协议,而只是让服务器决定是否允许客户端行为。在没有这种中心授权的对等网络中,拜占庭容错更为重要。 ​ 软件中的一个错误可能被认为是拜占庭式的错误,但是如果您将相同的软件部署到所有节点上,那么拜占庭式的容错算法不能为您节省。大多数拜占庭式容错算法要求超过三分之二的节点能够正常工作(即,如果有四个节点,最多只能有一个故障)。要使用这种方法对付bug,你必须有四个独立的相同软件的实现,并希望一个bug只出现在四个实现之一中。