和爬虫上用心外,最核心的部分还是背后那套围绕在bfs(bingfilesystem)文件系统的核心技术体。这套系统的设计目标,与许多传统的分布式文件系统有很多相同之处。比如,性能、可伸缩性、可靠性以及可用性。 但bfs的还是以应用负载情况和技术环境的分析为基础着重考虑,不管现在还是将来,bfs和早期的分布式文件系统的设想都有明显的不同。所以我们重新审视了传统文件系统在设计上的折衷选择,衍生出了完全不同的设计思路。 首先,组件失效被认为是常态而不是意外。bfs需要管理成百上千存储机器,同时被相当数量的用户终端机访问。bfs组件的数量和质量导致在事实上,任何给定时间内都有可能发生某些组件无法工作,某些组件无法从它们目前的失效状态中恢复。 当我们遇到过各种各样的问题,比如应用程序bug、操作系统的bug、人为失误,甚至还有硬盘、内存、连接器、网络以及电源失效等造成的问题。所以,持续的监控、错误侦测、灾难冗余以及自动恢复的机制必须集成在gfs中。 其次,以通常的标准衡量,我们的文件非常巨大。数gb文件都可能非常普遍。每个文件通常都包含许多应用程序对象,比如web文档。 当我们未来需要处理快速增长并由数亿个对象构成的、数以tb的数据集时,采用管理数亿个kb大小的小文件的方式是非常不明智的,尽管有些文件系统支持这样的管理方式。因此,设计的假设条件和参数,比如io操作和block的尺寸都需要重新考虑。 第三,绝大部分文件的修改是采用在文件尾部追加数据,而不是覆盖原有数据的方式。对文件的随机写入操作在实际中几乎不存在。一旦写完之后,对文件的操作就只有读,而且通常是按顺序读。 大量的数据符合这些特性,比如:数据分析程序扫描的超大的数据集;正在运行的应用程序生成的连续的数据流;存档的数据;由一台机器生成、另外一台机器处理的中间数据,这些中间数据的处理可能是同时进行的、也可能是后续才处理的。 对于这种针对海量文件的访问模式,客户端对数据块缓存是没有意义的,数据的追加操作是性能优化和原子性保证的主要考量因素。 第四,应用程序和文件系统api的协同设计提高了整个系统的灵活性。比如,我们放松了对bfs一致性模型的要求,这样就减轻了文件系统对应用程序的苛刻要求,大大简化了bfs的设计。 bfs还引入了原子性的记录追加操作,从而保证多个客户端能够同时进行追加操作,不需要额外的同步操作来保证数据的一致性。” 端起咖啡又喝了一口,宁子默已经习惯了身边这四人目瞪狗呆的状态。 放下杯子,宁子默再也懒得去解释那些技术细节,但还是提点到: “bfs一早就规划了四大核心技术体,其中涵盖了第一个部分的分布式基础设施,包含的模块有文件系统(file),分布式锁服务(chubby)和数据化序列协议(protocolbuffer)。 而第二部分是分布式大规模数据处理模块,其中包含分布式运算程序的编程框架和对应的数据查询语言。他们或许和sql和类似,但实际上它应该被称之为dsl(domain-specificlanguage)。 第三部分则是分布式数据库技术,它包含的模块就有分布式数据存储系统(bigtable)和数据库分区系统(sharding)。 最后一部分当然包含数据中心优化技术,这些技术中包括综合考虑的数据中心高温化,还有电池与服务器相应整合技术等。” 撇了撇嘴,宁子默皱着眉头说,“搜索引擎是一个全盘技术的考虑,但我仅仅只举了一个很简单的例子,并且其应用范围还只是在网页搜索结果当中,并没有提及一整个生态的整体考虑。 但我所说技术方面的内容,远比我现在讲给你们听的内容要复杂的多。每一个单项里都会包含大量工作人员相应的工作成果,确实不是短期内可以去实现的。 但好在我们【bing】团队的目标明确啊。” “梦想还是要有的,万一实现了呢?”宁子默撇着嘴挑了挑眉毛。 这个轻挑的动作,在kaltix三人组的眼里却郑重如斯。 m.PaRTSorDEr63.COM