sar*_*rat 4 api postgresql memcached json redis
我有一个服务器,其中包含要从移动客户端的API请求提供的数据.数据有点持久,更新频率非常低(比如一周一次).但是表格设计非常繁重,这使得API请求的缓慢提供
Web服务使用Yii + Postgre SQL实现.
Jan*_*itz 12
您可以使用memcached,但是每个人都会遇到数据库服务器.在您的情况下,您说查询结果是持久性的,因此从Web服务缓存JSON响应可能更有意义.
这可以使用具有内置缓存的反向代理来完成.我想一个例子可能会帮助你最好地利用Jetty(Java)和NGINX来做到这一点:
在我们的设置中,我们有一个Jetty(Java)实例,为我们的移动客户端提供API.API正在侦听localhost:8080/api并返回从本地Mysql数据库上的某些查询获取的JSON结果.
此时,我们可以直接向我们的客户提供API,但这里是反向代理:
在API前面是一个NGINX网络服务器,从0.0.0.0:80/收听(无处不在,端口80)当移动客户端连接到0.0.0.0:80/api时,内置的反向代理尝试从中获取确切的查询字符串它的缓存.如果失败,则从localhost:8080/api获取它,将其放入缓存中并提供缓存中找到的新值.
优点:
考虑缓存失效:
你必须考虑缓存失效.您可以告诉NGINX保留它的缓存,例如,对于localhost:8080/api的所有HTTP 200请求持续一周,或者对所有其他HTTP状态代码持有1分钟.但是如果有时间,你想要在一周内更新API,缓存是无效的,所以你必须以某种方式删除它或将缓存时间调低到一小时或一天(这样大多数人都会点击高速缓存).
这就是我们所做的:当它是脏的时,我们选择删除缓存.我们在服务器上运行另一个JOB,监听通过Puppet触发的Update-API事件.JOB将负责为我们清除NGINX缓存.
另一个想法是在Web服务中添加清除缓存功能.我们决定不采用这种解决方案的原因是:Web服务必须知道它在反向代理之后运行,这会破坏关注点的分离.但我想说,这取决于你的计划.
另一件可以使您的Web服务更正确的事情是为每个JSON文件提供正确的ETAG和缓存过期标头.同样,我们没有这样做,因为我们有一个大的更新事件,而不是每个文件的小事件.
附注:
因此,如果您在Web Service + SSL前使用Varnish,您将使用如下配置:NGINX - > Varnish - > Web Service.
参考文献: - NGINX服务器:http://nginx.com - Varnish Reverse Proxy:https : //www.varnish-cache.org - Puppet IT Automation:https://puppetlabs.com - NGINX反向代理教程:http:/ /www.cyberciti.biz/faq/howto-linux-unix-setup-nginx-ssl-proxy/ http://www.cyberciti.biz/tips/using-nginx-as-reverse-proxy.html
| 归档时间: |
|
| 查看次数: |
7369 次 |
| 最近记录: |