归档 2011年7月

最后更新于 .


之前已经已经写过一篇《从开放平台建设者角度对应用开发者的一点架构建议(1)》,主要是介绍了最基本的openid、平台数据、应用内部数据的存储建议,这一次我们更深入一点。

对之前的文章,我们提到了三种数据:


  • openid-id

  • id-平台数据

  • id-应用数据

相信大部分个人开发者的第一反应是,上面每份数据建一张表,之间建立很多外键关系。这样的确会有很大的好处,很多数据查询操作都可以直接通过sql语句完成,比如:


  1. 通过openid查询id

  2. 通过id查询openid

  3. 通过用户名查询openid/id

  4. 通过应用数据查询openid/id


上面的架构都很好的,并且开发成本非常低,但是这一切的前提是你的应用的用户量有多少。

100w是个坎,100w之前没有任何问题,100w之后,这种架构就是垃圾

很多人会说,对于一个小应用,考虑那么大量用户干嘛?你这是过度设计了吧。

有这种思想的人不少,没错,当年facebook过100w用户的时候,已经是一家有很多职员的公司了。那你会不会觉得,当我们的小应用成长为100w用户的时候,我们已经有了足够的资金,足够的职员,可以考虑重构了?

然而事实是,zynga新推出的游戏《帝国与同盟》在facebook上上线一周,日活跃就达到3000w,更别说注册用户量。而就国内的情况来说,在朋友网上面的任何一款应用,只要不是太差,1~2个月 ...

最后更新于 .

之前的文章已经提到了 django+fastcgi的运行并不如意(web.py+spawn-fcgi却正常很多……),所以特意抽时间研究了一下uwsgi,试了一下,运行的很好,也很快,哈哈。 所以笔者的所有之前用apache+django搭建的项目(如fuload等)都已经替换成了nginx+django+uwsgi。 一.安装uwsgi
  1. http://projects.unbit.it/uwsgi/wiki/WikiStart#Getit 下载最新版本的uwsg。
  2. 解压后,如果没有安装libxml2,又不想安装的话,那么编辑文件 buildconf/default.ini, 把
    xml_implementation = libxml2
    
    改成
    xml_implementation = false
    
  3. 执行编译
    python uwsgiconfig.py --build
    
  4. 执行安装
    python setup.py install
    
这样 ...

最后更新于 .


在上一篇文章linux下nginx+python+fastcgi部署总结(django版)中,我们部署了nginx+django+fastcgi的环境,这次我们来部署一下nginx+web.py+fastcgi。
其实web.py上的官方网站已经说的比较清楚了,原文如下:
http://webpy.org/cookbook/fastcgi-nginx
这里主要讲一下一些原文没有照顾到的地方。

一.安装依赖
spawn-cgi
flup

二.配置nginx
在server配置项下增加


location / {
#这两种方法都可以,只不过spawn-cgi启动的方法不同
#fastcgi_pass 127.0.0.1:9002;
fastcgi_pass unix:webpy.sock;

fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param QUERY_STRING $query_string;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
fastcgi_param ...

最后更新于 .

最近因为项目上的需要开始大量使用nginx,因此也想趁机将以前常用的django+apache的架构换成django+nginx+fastcgi,此文是整个搭建的步骤,主要留作备忘,也希望对大家有所帮助。 注意:虽然本文成功的搭建了django运行fastcgi的实例,但是在实际运行中发现了很多问题,比如程序执行异常,进程在每次请求之后退出之类的。可能是我机器的问题,也可能是程序本身bug,大家如果用来搭建外网环境,请务必多多测试。 一.编译nginx 在网上买了一本《实战nginx-取代Apache的高性能服务器》,写的比较浅,主要是些配置方面的东西,不过却正是目前我所需要的。由于需要支持https和rewrite,所以除了nginx的源码之外,又下载了 openssl-0.9.8r.tar.gz 和 pcre-8.12.tar.gz,把他们和nginx-1.0.4.tar.gz放到同一个目录。 为了方便编译,笔者写了一个脚本,代码如下:
#!/bin/bash

#=============================================================================
#脚本所在绝对目录
abs_path(){
    local path=$1
    local basename=$( basename ...

最后更新于 .

本文来自于Unix对话录的博主刺猬的投稿。 很高兴有朋友能够制作这样的翻译作品来分享给大家,笔者也仔细看了一下,都是些非常常用的命令,因此对Vim初学者应该会很有帮助。 截一部分图给大家预览一下,如果觉得不错请点击这里下载。

1

最后更新于 .

2011年,各大平台相继开放,相信关注的朋友都应该知道,6月15日,腾讯也召开了开发者大会,在这里笔者不想就开放本身做太多讨论,作为一个技术博客,我们还是专注讨论技术架构吧。

笔者在腾讯主要负责腾讯开放openapi的开发,也确实见到了不少应用由于架构不当,导致开发维护成本非常高的例子,更重要的是接入成本非常高导致落在了别的应用后面,所以,笔者在这里会结合腾讯开放的一些特点,给应用开发者一点建议。

如果有朋友致力于应用的开放,希望能有所帮助。

我们就从最基本的地方开始说起吧。

开放平台都会提供一个openid,一个openid对应平台上面的一个真实帐号,在腾讯当然就代表的是QQ号。通过openid就可以或者某个人的个人信息,他的好友关系链等等信息。

那么,怎么让openid与应用自身的数据关联起来呢?

这是我所见到的第一种架构:

一.openid直接作为主键


























openid 主键
名称
性别
地点
头像
应用内部数据

应用直接将平台的openid来做主键,即应用没有自身的id。
这种方式有什么问题呢?假设说你做的是一个有发展前景的应用,你的应用以后可能会接入facebook,人人,等等开放平台,而每个开放平台的openid格式又都不一样,那么你的数据库表设计将会每个平台的都有一部分不一样,而大部分业务逻辑又都一样,严重违反了“DRY”原则,增加了开发和维护的成本。
所以这种方式不好。

二.有自己的id,并且id、openid、数据放到一起 ...

每日归档

上个月

2011年6月

下个月

2011年8月

归档