Web应用架构与应用服务器?
我正在搭建一个网页应用程序,需要一种架构,可以让我在两台服务器上运行它。这个应用会定期从其他网站抓取信息,也会根据用户的输入来抓取。为此,我使用Php和curl来抓取信息,然后用Php或Python来解析这些信息,并把结果存储在MySQL数据库中。
接下来,我会用Python对这些数据运行一些算法,这个过程会定期进行,也会根据用户的输入来进行。我打算把一些结果缓存到MySQL数据库中,有时候如果数据是特定于用户的,我会跳过存储这些数据,直接提供给用户。
我在考虑使用Php来做网站的前端,放在一台独立的网络服务器上,而把Php爬虫、MySQL数据库和Python放在另一台服务器上。
对于这种工作,我应该使用什么框架呢?MVC和Cakephp是个好选择吗?如果是的话,我能用它来控制和监控Python代码吗?
谢谢!
2 个回答
我想你已经对如何组织你的层次结构有了清晰的想法。
首先,你需要一个前端的网页框架。
这里有很多选择,据我所知,Cakephp是个不错的选择,它设计得很好,可以强制你遵循一种叫做MVC的设计模式。
接下来,你需要设计一个数据库来存储用户希望被抓取的信息。
你的数据库将被你的网页应用访问,用来存储用户的请求;被你的PHP脚本访问,以了解需要抓取什么;最后被你的Python批处理程序访问,以确认用户请求的数据是否可用。
一个可能的简单场景:
- 用户在你的网站上注册
- 用户请求从维基百科抓取一个随机页面
- 请求通过CakePhp应用存储到数据库
- 定时的PHP批处理程序开始运行,检查数据库中的新请求
- 批处理程序发现新请求,并从维基百科抓取数据
- 批处理程序在数据库中更新抓取标记
- 定时的Python批处理程序开始运行,检查数据库中的新抓取标记
- 批处理程序发现新的抓取标记,并解析维基百科以提取一些标签
- 批处理程序在数据库中更新完成标记
- 用户在他的个人资料中找到了请求的信息。
我该如何实现这个?
这个问题太大了,没法在这里简单回答。你肯定不想为抓取数据写两套代码(一个定时的,一个按需的),而且这样会增加复杂性。你也不想在处理用户请求时,运行一个需要不确定时间才能完成的任务。用户请求抓取数据应该通过调度机制来处理,并反馈给用户(不过如果需要,你可以用Ajax轮询来让用户觉得这个过程是在同一个线程中进行的)。
我应该使用什么框架?
框架并不是万能的解决方案。你不应该仅仅根据你正在编写的应用类型来选择框架。如果某个框架限制了你需要的关键功能,那你可能选错了框架。但根据我的经验,这种情况很少发生,你只需要自己写一些代码就可以了。
使用比定时任务更复杂的东西
是的,定时任务可能不是最好的选择,原因有很多。如果是我,我会考虑写一个守护进程来安排抓取任务(并接受网页脚本的连接,以便添加额外的抓取任务)。不过我会把抓取任务作为独立的进程来运行。
MVC架构适合这个吗?(我对MVC和架构还很陌生)
不适合。不要一开始就考虑某种模式是否适合你的应用。模式是教学的有用工具,它们描述的是代码是什么,而不是它将会是什么。
(你的应用可能会包含一些MVC模式,但也应该包含很多其他的模式。)
C.