在我们公司,我们为相当多的本地报纸制作新闻门户网站(目前有13个,下个月将有30个,将来会有更多),每个页面每天有2到10万页的浏览量.由于我们正在从每个站点大量定制的情况发展到每个站点的配置或自定义模板的问题,我们的软件对于所有站点已经几乎相同.现在我们的部署策略是在16核服务器和12GB RAM上为每个站点(每个站点有1-17个工作站,具体取决于站点流量)的一个gunicorn实例.这种设置的问题是每个工作人员(常规预分叉炮弹)需要110MB,无论是否使用.现在有了新的站点,我们需要添加更多的RAM来提供更多的请求,所以基本上它不会扩展.此外,由于我们正在从每个站点独立的这个模型转移,每个站点都有自己的数据库,我非常喜欢它,特别是因为我们使用关系数据库(mysql,但迁移到pgsql),所以它更容易这样碎片.
我正在做一些研究和试验在一个gunicorn实例上运行所有站点,所以我可以完全使用服务器并在负载均衡器后面添加更多服务器.问题是django假设在很多地方每个进程只运行一个站点,所以对于我到目前为止我想到的,我必须实现:
这就是我想出来的,甚至没有实现它并看到它破坏的地方,我确信我需要更多的更改才能工作.所以我真的不想这样做,特别是我需要额外的维护工作,但我没有看到任何替代方案,并且很想知道有人已经以更好的方式解决了这个问题.当然我也可以完全停止使用django(我已经有很多理由这样做了)但这意味着重大改写并且有两个维护软件的两个不兼容的分支,直到新的一个与django版本达到功能奇偶校验,所以到我似乎比所有丑陋的黑客更糟糕.
我正在为遗留应用程序的输出编写一个解析器,由于没有关于文件语法的规范,我尽可能多地获取这些文件的样本.
现在我在实现解析器之前编写单元测试(因为没有其他理智的方法来执行此操作)但我不确定是否应该:
我倾向于使用第二种选择,因为我只测试我需要的东西,没有实际文件中包含的所有"真实世界"数据,但我担心我可能忘记测试一种或另一种可能性.
你怎么看?
这个问题说明了一切。或者我试图用于zope.interface错误的目的?
我需要的基本上是注册实现特定功能的类(CMS 的小部件或 Portlet)的一种方法。基本上就像 django 对其 ModelAdmin 类所做的那样,但不是自动的,也不是魔法。
我目前在python上使用twisted的透视代理,我在过去曾考虑过切换到类似RabbitMQ的东西,但我不确定它是否可以取代pb - 我觉得我可能会在这里将苹果与橙子进行比较.我最近一直在阅读很多关于REST的内容以及与SOAP的不可避免的争论,这使我开始阅读像SOA这样的"企业级"Web服务.
我有一个项目,我需要在Web和桌面上实现一些类似erp的功能,所以我正在考虑使用哪种方法/技术在服务器和客户端之间进行通信.但我也试图尽可能多地学习所有这些,所以我不想只是解决这个特殊的问题.
您在服务器和客户端之间进行通信时使用了什么?
我理解像透视代理这样的特定于python的协议可以限制我的互操作性,但我是否正确地假设某些AMQP协议可以取代它?
如果我没弄错的话,twisted.pb和amqp都使用永远在线的连接和非常低的开销协议.但一方面,保持大量客户端始终连接可能是一个问题,另一方面,即使使用http keep-alive和他们使用的任何技巧,序列化部分仍然是Web服务的问题.
如果我在任何假设中出错,如果有人能指出我正确的方向来了解更多,我将不胜感激.
python ×2
amqp ×1
certificate ×1
django ×1
gunicorn ×1
interface ×1
ssl ×1
twisted ×1
unit-testing ×1
web-services ×1
zope ×1