对于REST风格的Web服务,我们说服务器不应该存储任何状态。现在,对于每个请求,“用户”必须经过认证,并且必须拥有他/她希望执行的操作的授权。RESTful认证 - 导致高负载性能不佳?
现在每个请求都会包含该用户的授权数据。这里是我的困惑:
假设主页上有一个登录名和密码字段。用户输入发回服务器的用户名/密码,用户验证,然后返回“某个标记”。现在,这个令牌会在每个请求中发送到服务器。问题(S):
- 是否后端数据库需要有一个单独的表来存储这些 令牌通过用户名索引?
- 假设令牌存储在数据库中,则每个请求都需要进行数据库调用。在高负载时这不会使数据库服务器成为瓶颈吗?
- 如果令牌没有真正存储在数据库中什么是最好的“平静”存储的地方?
- 进行会话可能不太安宁,但是我没有看到如何平衡认证/授权(w.r.t.上述几点)?
- 如果它不是一个令牌,那么用户名/密码是否需要被反向发送? (听起来像个坏主意:)
我可能会误解RESTful认证/授权的概念。但是,对于每个http请求,“服务”需要访问数据库来验证凭据,情况真的如此吗?有什么能够缩短流程的时间,并且仍然忠于宁静的原则吗?我可以想到有一个缓存存储细节,并在服务器重启的情况下,它只是让数据库的旅程。这只是一个性能优势,可能会使系统复杂化(也许值得,不知道)。这是唯一的解决方案吗?
因此,从REST的理论/概念角度(不是必需的实现),这个问题是如何处理的(如果完全是问题)?你的专业经验如何处理这个问题以及这种方法有多安静?我有一个Restlet + J2EE + MySQL Restful web服务,我有这个问题弹出,但没有满意的答案(Google,Stackoverflow等),我知道HTTP的基本和摘要授权,但我'根据上面的解释,不熟悉存储/检索的内部。
一般准则:您使用磁盘/数据库的次数越少,应用程序可以实现的负载越高。 – bestsss 2011-03-05 12:17:09