【问题标题】:Web application architecture, and application servers?Web 应用架构和应用服务器?
【发布时间】:2011-03-02 14:30:05
【问题描述】:

我正在构建一个 Web 应用程序,我需要使用一种允许我在两台服务器上运行它的架构。该应用程序定期从其他站点抓取信息,并根据最终用户的输入。为此,我使用 Php+curl 来抓取信息,使用 Php 或 python 来解析它并将结果存储在 MySQLDB 中。

然后我将使用 Python 对数据运行一些算法,这将定期发生并在最终用户输入时发生。我将在 MySQL 数据库中缓存一些结果,有时如果它是特定于用户的,则跳过存储数据并将其提供给用户。

我正在考虑在单独的 Web 服务器上使用 Php 作为网站前端,在另一台服务器上运行 Php 蜘蛛、MySQL DB 和 python。

我应该为这种工作使用什么框架? MVC 和 Cakephp 是一个好的解决方案吗?如果是这样,我是否能够使用它来控制和监视 Python 代码?

谢谢

【问题讨论】:

    标签: php python model-view-controller cakephp application-server


    【解决方案1】:

    我认为您已经对如何组织图层有了清晰的想法。

    首先,您需要一个用于前端的 Web 框架。
    你这里有很多choices,Cakephp afaik 是一个不错的选择,它旨在迫使你遵循设计模式MVC
    然后,您需要设计数据库来存储用户希望被抓取的内容。
    您的 Web 应用程序将访问您的数据库以存储用户请求,您的 php 脚本将访问您的数据库以了解要抓取的内容,最后您的 python 批处理将向用户确认请求的数据可用。

    一个可能过于简化的场景:

    1. 用户注册到您的网站
    2. 从维基百科抓取随机页面的用户命令
    3. 请求通过 CakePhp 应用程序存储到 db
    4. Cron php 批处理启动并检查数据库是否有新请求
    5. Batch 发现新请求并从 Wikipedia 抓取
    6. 使用刮掉的标志批量更新数据库
    7. Cron python 批处理启动并检查 db 是否有新的抓取标志
    8. Batch 找到新的抓取标志并解析 Wikipedia 以提取一些标签
    9. 使用完成标志批量更新数据库
    10. 用户在他的个人资料中找到了请求的信息。

    【讨论】:

      【解决方案2】:

      如何实现这个?

      这里的问题太大了,无法回答。当然,除了增加的复杂性之外,您不希望有 2 组代码用于抓取(1 组用于计划,1 组用于需求),您真的不希望正在运行需要无限时间才能在线程内完成的作业由对您的网络服务器的请求生成 - 用户对抓取的请求应通过调度机制运行并报告给用户(尽管如有必要,您可以使用 Ajax 轮询来产生它发生在同一个线程中的错觉)。

      我应该使用什么框架?

      框架不是灵丹妙药。而且您不应该主要根据您正在编写的应用程序的性质来选择框架。当然,如果特定框架排除了特定的关键功能,那么您使用的框架是错误的——但根据我的经验,从未出现过这种情况——您只需要自己编写一些代码。

      使用比 cron 作业更复杂的东西

      是的,由于很多原因,cron 作业可能不是正确的方法。如果是我,我会考虑编写一个守护进程来安排抓取(并接受来自网页脚本的连接以将额外的抓取排入队列)。但我会将刮擦作为单独的进程运行。

      MVC 是一个很好的架构吗? (我是 MVC、架构等方面的新手)

      没有。不要从思考模式是否适合应用程序开始 - 模式是一种有用的教学工具,但描述的是什么代码而不是将是什么

      (您的应用程序可能包含一些 MVC 模式 - 但它也应该包含许多其他模式)。

      C.

      【讨论】:

        猜你喜欢
        • 2018-06-26
        • 2017-09-13
        • 1970-01-01
        • 2015-02-15
        • 1970-01-01
        • 2019-12-19
        • 2013-12-14
        • 2013-06-26
        • 1970-01-01
        相关资源
        最近更新 更多