豆瓣的框架

洪强宁:关于豆瓣的系统架构图,首先我们在Web server上做个划分,把网站内容分为动态内容和静态内容。在豆瓣上所有的html都是动态内容,图片都是静态内容。分成两个Web 服务可以做不同的调优。 对动态内容,我们用的是nginx和lighttpd的混合,nginx做负载的平衡,lighttpd通过 SCGi 与application server相连,application server是基于 quixote这个框架写的。 


application server拿到用户的请求,分析用户的url,并且利用外部的资源,比如数据库,组合成一个html,返回。从数据库存取会比较慢,数据库有大量的IO,我们使用cache,我们使用的是Memcached,这是一个分布式的内存的cache,比如你可以用很多机器,每个机器有两个G的内存,我们自己开发了client端来使用它,另外如果用户有搜索请求,我们会用搜索引擎。Xapian是一个C++写的开源的搜索引擎,我们通过Web service去访问它。其他,我们还提供了另外的Web service接口响应用户的请求,比如要访问某个文件。spread是我们最近加了一部分,用户有的请求可以采用这样的异步服务。 


数据库是这样的,两个MySQL做成一对,一个master ,一个 slave,根据应用划分,使得load不会太高。这个图上??的是两对,实际上有三对。还有一个slave,一方面作为备份,一方面用作数据挖掘,因为不能对线上的数据做直接操作。 


对于静态部分,我们也是用nginx,你注意到豆瓣现在有日记的贴图功能系统,用户可能上传很多图片,我们采用的方案是用了mogile FS ,这是一个分布式的文件系统,同时可以做备份,保持高可用性,可以提高很大的IO。 


关于application server,它都是用Python写的。我们是用的MVC方式,Controller我们用的是quixote ,它接受用户的请求,根据这个URL去找到Model的某个具体的函数来执行,它是一个dispatcher,当中会判断用户的权限等。然后再传给View,View根据模版进行渲染,形成网页。View的模版,我们以前是用的是PTL,PTL很高效,最近引用了mako,这是一个比较现代的开源的模版,用它写出的代码比较好维护,比PTL好维护一些.。同时,在使用mako的同时,我们的工程师做了很多加速的工作,现在mako的代码有很多是豆瓣的人写的。 


你如果注意过Python的Web开发框架的话,你会发现Python的有三个比较著名的框架,Django,Pylons,TurboGears,Pylons默认的模版就是Mako。 


下面的就是Model,业务模块,核心是类是User,因为Web2.0是以人为本,我们肯定会有一个User。只有人也做不了事情,还要有物。豆瓣的物,就是Subject,比如书,比如评论,比如小组等。 


与数据库进行链接,我们一个很轻量级的与数据库进行链接,这也是一个开源项目,SQL Farm Manager。这个Web service,豆瓣中有很多用的都是Web service。 
### Vue与豆瓣框架示例代码 在Vue.js中,可以结合豆瓣API来创建一个简单的电影查询应用。以下是一个使用Vue.js和豆瓣API的示例代码[^1],展示了如何通过组件化的方式构建用户界面,并实现数据的动态加载。 #### 1. 创建Vue项目 首先需要安装Vue CLI并创建一个新的Vue项目: ```bash npm install -g @vue/cli vue create douban-movie-app ``` #### 2. 安装Axios库 为了方便地发送HTTP请求,可以安装Axios库: ```bash npm install axios ``` #### 3. 编写组件代码 以下是一个简单的Vue组件示例,用于从豆瓣API获取电影数据并展示: ```vue <template> <div class="movie-list"> <h1>豆瓣电影排行榜</h1> <input type="text" v-model="searchQuery" placeholder="输入电影名称" /> <ul> <li v-for="(movie, index) in filteredMovies" :key="index"> <h2>{{ movie.title }}</h2> <p>评分: {{ movie.rating.average }}</p> <img :src="movie.images.medium" alt="电影封面" /> </li> </ul> </div> </template> <script> import axios from 'axios'; export default { data() { return { movies: [], searchQuery: '' }; }, computed: { filteredMovies() { if (!this.searchQuery) { return this.movies; } return this.movies.filter(movie => movie.title.toLowerCase().includes(this.searchQuery.toLowerCase()) ); } }, mounted() { this.fetchMovies(); }, methods: { async fetchMovies() { try { const response = await axios.get( 'https://api.douban.com/v2/movie/top250?count=10' ); this.movies = response.data.subjects; } catch (error) { console.error('获取电影数据失败:', error); } } } }; </script> <style scoped> .movie-list { text-align: center; } ul { list-style-type: none; padding: 0; } li { margin: 20px 0; } img { max-width: 100px; } </style> ``` #### 4. 运行项目 完成上述步骤后,运行项目以查看效果: ```bash npm run serve ``` 访问 `http://localhost:8080` 即可看到运行中的应用。 --- ### 注意事项 - 豆瓣API可能需要申请密钥才能正常使用。如果遇到限制,请参考豆瓣开发者文档[^1]。 - 上述代码仅作为示例,实际开发中可能需要处理更多边界情况,例如错误处理、分页加载等。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值