阅读了豆瓣的基础架构,接触了很多新名词,有很多都是没有接触过甚至是没有听过的,说明离就业要求还差着很多,以下是阅读这篇文章我学到的东西:
豆瓣整个基础架构可以粗略的分为在线和离线两大块。在线的部分和大部分网站类似:前面用LVS做HA,用Nginx做反向代理,形成负载均衡的一 层;应用层主要是做运算,将运算结果返回给前面的用户,DAE平台是这两年建起来的,现在大部分豆瓣的应用基本都跑在DAE上面了;应用后面的基础服务也 跟其他网站差不多,MySQL、memcached、redis、beanstalkd,不一样的是NoSQL的选择——BeansDB。
BeansDB(豆瓣开源数据存储系统),豆瓣公司以New BSD许可证发布了分布式key/value存储系统BeansDB,开发者称BeansDB是简化版的Dynamo,Dynamo是亚马逊公司开发的高可用性key/value存储系统。BeansDB采用类似memcached的去中心化结构,在客户端实现数据路由。目前只提供了Python版本的客户端,其它语言的客户端可以由memcached的客户端稍加改造得到。主要特性包括: 高可用:通过多个可读写的用于备份实现高可用;
最终一致性:通过哈希树实现快速完整数据同步(短时间内数据可能不一致);
容易扩展:可以在不中断服务的情况下进行容量扩展;
高性能:异步IO和高性能的KeyValue数据TokyoCabinet:
可配置的可用性和一致性:通过N,W,R进行配置;
简单协议:Memcache兼容协议,大量可用客户端。
豆瓣内部建立了两个不同的BeansDB集群,一个是doubandb,一个是doubanfs,分别针对不同的场景。doubandb主要存储 小型文本数据,如影评、用户个人介绍、帖子内容等,这样的好处是可以大大降低我们对MySQL的性能依赖,算是给MySQL减负;doubanfs主要存 放图片和音频等中型数据。
DAE平台的基本信息:DAE度假交换作为知名全球度假交易平台,其核心价值为“提供全球交换服务”,并在全球各大区域构建本土化特色,通过线上交换联动线下运营为不同项目提供具体的产品建议。
我自己也用过豆瓣,什么电影评分排行,图书评分排行等等等等,数据非常多,如此庞大的数据无论是挖掘还是存储都是一个问题,对此,豆瓣的技术组件是海量分布式文件系统MooseFS,这个文 件系统的结构类似HDFS,用C语言编写,其好处在于FUSE模块实现的比较好,用文件系统就可以直接进行操作,而不需要专门的命令,可以支持的数据量也 很大。另外就是自己开发的分布式计算平台DPark。
DPark顾名思义是Spark的Python实现,不过现在已经跟Spark越来越不一样了。和 Hadoop 相比,Spark可以使用内存做为缓存加速分布式计算,DPark继承了这个优点,这对于大规模数据的迭代计算非常有用。在豆瓣的应用场景下,因为我们的 离线计算很多是推荐算法计算,这种计算涉及大量的迭代算法,如果每次计算的结果都入磁盘再在下一轮计算加载,那性能是很差的,所以DPark能够大幅提升 性能。另外,因为DPark的编写使用了函数式语言的特点,所以可以写的非常简洁:
以上是我读完文章学到的东西,对于作者,作者原先是学习硬件的,后来转战软件技术,加上对硬件的熟悉,结合熟练地编程语言,在豆瓣工作的很顺利,因此,对一项技术的深刻理解不但要对算法理解,还要把对硬件的理解加进去。另外文章最后提到了豆瓣对于新技术的看法,豆瓣对于新技术的引入比较偏激,公司鼓励大家学习新技术,但不会盲目引入新技术,对于新技术,必须深刻理解,保证用了之后如果出现问题有能力解决才行。
原文地址:https://www.cnblogs.com/zhangliqiangvictory/p/10503494.html