【问题标题】:How to re-architect a portal for creating mobile app如何重新构建用于创建移动应用程序的门户
【发布时间】:2014-02-27 11:54:53
【问题描述】:

目前我正在开发一个向最终用户公开的门户。该门户是使用 Python 2.7、Django 1.6 和 MySQL 开发的。

现在我们想将此门户公开为移动应用。但是当前的设计不支持这一点,因为模板、视图和数据库彼此紧密耦合。所以我们决定重新设计整个门户。经过一番研究,我发现以下内容:

  1. 客户端:AngularJS 用于所有客户端操作,例如显示数据和使用 ajax 获取数据。
  2. 服务器端:Rest API 暴露给 AngularJS。这个 Rest API 可以使用 Tastypie 或 Django Rest Framework 开发(还没有决定)。 Rest API 将通过 Django 公开。

我有几个问题:

  1. 你们对建筑有什么看法?这是一个好还是坏的设计?如何改进?
  2. 在架构中添加以上层后,门户的性能会下降吗?
  3. 在上述架构中,是否应该使用 2 台服务器来运行它(比如一台用于客户端,另一台用于服务 API)或一台服务器就足够了。目前 Heroku 用于部署。

目前门户网站每天的点击量达到 1 万次,预计 6 个月后将达到每天 10 万次。如果需要,我们很乐意提供更多信息。

【问题讨论】:

  • node.js 和这里有什么关系? API 由 Django 提供服务,另一台服务器会做什么?
  • 是的,如果你使用的是 Django,那么你就不需要使用 node.js 并且只是为了客户端性能,你可以实现 KnockoutJS 或 AngularJS。
  • @DanielRoseman 和 CrazyGeek:- 我的想法是为客户端和服务器使用 2 个不同的服务器。这样它们就可以部署在不同的服务器上。这可能是一个坏主意,但正在寻找您对此的意见。我不适合编写 node.js,但将其替换为一些可用于客户端的 Web 服务器。编辑了我的问题。
  • 但是客户端只是静态模板,不是吗?除了静态服务器之外,您不需要任何东西 - nginx 会做,但可能会为您的 Django 东西提供服务。
  • @DanielRoseman 是的,你是对的。我更想知道使用 2 台服务器是否会对性能有所帮助?你对我的架构有什么看法......它很好还是需要一些改进?

标签: python django angularjs heroku architecture


【解决方案1】:

如果我有机会设计你提到的门户网站,我真的很想设计我已经解释过的架构here

【讨论】:

  • 您的建议将使我们强制重写整个应用程序。目前我们正在使用 MYSQL,我们有很多最终用户数据。但是 PyPy 是一个好主意,请阅读更多相关信息。
  • 您不需要重写整个应用程序,因为您可以使用此导入器code.google.com/p/sql-to-nosql-importer 将 MySQL 数据转换为 mongoDB,并且 mongoengine 支持 ORM like API。在不接触您的作品的情况下,您可以尝试一下。如果它成功了,那么您的门户将会很棒。
  • 即使没有 NoSQL 决策,门户也会很棒。如果 MongoDB 需要事务支持(TX 逻辑将从 DB 迁移到业务逻辑代码 - 这将需要 TX 管理器实现,这不是微不足道的)或者他们有 加入查询。 MySQL 可以被非规范化并变成类似于键值存储的smth。 PostgreSQL 可以变成面向 json-document 的存储。但这是另一个故事......
【解决方案2】:

你们对建筑有什么看法?

这是具有解耦客户端的常见面向服务的架构。您只需在后端拥有 REST 端点,任何客户端都可以使用这些端点。

您还应该考虑:

  1. 您是否需要RESTful 服务(RESTful == 无状态,您会在服务器上存储任何状态吗?)
  2. 未来如何扩展服务? (这是合法的,因为您已经意识到流量的巨大增长并假设有 2 个服务器)

如何改进?

使用 scala 代替 python :)

在架构中添加以上层后,门户的性能会下降吗?

视情况而定。

它会受到一些性能损失(任何额外的抽象层都有它的税),但很可能你不会注意到它。但是,您仍然应该使用一些压力测试衡量它。

在上述架构中,是否应该使用 2 台服务器来运行它(比如一台用于客户端,另一台用于服务 API)或者一台服务器就足够了。目前使用 Heroku 进行部署。

嗯,像往常一样,这取决于

这取决于您现在拥有的使用情况以及可用资源。 如果您对新设计是否会比旧设计更好?感兴趣 - 有很多参数。

简历

对于具有不同客户端的系统来说,这是一个很好的整体方法。

它会让你:

  1. 将移动应用程序和前端开发与后端开发完全解耦。 (可以是不同的独立团队,可外包
  2. 标准化您的 API 层(因为所有客户端都将使用相同的端点)
  3. 让您的服务可扩展更轻松(这包括用于静态资产的单独网络服务器等等)。

【讨论】:

    猜你喜欢
    • 2022-08-03
    • 2013-05-13
    • 1970-01-01
    • 2010-11-11
    • 1970-01-01
    • 1970-01-01
    • 2016-03-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多