Cloud Foundry samples学习笔记8: Grails Twitter

这个样例程序是一个Grails应用程序,它模拟了类似于twitter的微博场景,旨在演示如何在一个Grails应用程序中将标准的SQL数据库、MongoDB和Redis三者结合使用,并使其能够部署到Cloud Foundry上运行。
程序repository地址:https://github.com/SpringSource/cloudfoundry-samples/tree/master/grailstwitter

一、MySQL用户管理

应用程序使用MySQL对用户信息进行管理,并进行访问控制。访问控制是通过Spring Security框架来处理的。domain.org.grails.twitter.auth 包内的Person、Authority两个域类分别表示用户信息及权限信息,均通过Hibernate进行OR映射,而PersonAuthority类则作为事务类与MySQL数据库交互。
用户所发布的状态(status)消息通过 domain.org.grails.twitter 包内的Status类表示,它分别持有1个Person和1个Authority引用来与状态的发布者关联并提供简单的访问权限。

二、MongoDB状态消息存储

用户发布的状态消息使用MongoDB面向文档数据库存储。之所以做出这种选择,是由于在微博网站应用中,需要存储用户会发布的大量状态消息数据,因此MongoDB是一个比较理想的选择;另外MongoDB也可以良好支持一些简单类型的内嵌集合数据结构,如String类型的列表。

用户状态类Status如下:

package org.grails.twitter

import org.grails.twitter.auth.Person

class Status {
    static mapWith = "mongo"
    static transients = ["author"]

    static searchable = {
        only = ["message", "dateCreated"]
        authorId index: "no", store: "yes"
    }
	
    String message
    Long authorId
    List<String> tags = []
    Date dateCreated
	
    Person getAuthor() {
        return Person.get(authorId)
    }

    static constraints = {
        message maxSize: 160
    }
}

通过代码可以看到,Status类与MongoDB绑定,并限定状态消息为160字符以内。它持有一个String类型的列表属性tag,用来存储status中的标签,也就是两个#号之间用来标记话题的部分。将tag嵌在Status类内部而不是用单独的域类表示,这使得对tag的查询变得复杂并且低效,本程序对此的处理是建立另一个后台服务线程 service.org.grails.twitter.TagService,从status中提取tag以及对tag信息的搜集等工作都是由这个后台服务线程来做的。

三、Redis标记缓存

微博应用需要对状态消息的tag进行评级,并统计有多少状态中包含某个tag。然而这一操作的耗费是极其高的,尤其对于超大用户群的情形。本程序中,每当一条用户状态发布出来,就在后台线程TagService中对所有tag进行重新评级,并缓存在Redis数据库中。每次接收到来自主页的tag请求,就从Redis缓存中拉去,从而节省开销,提高响应速度。

以上只是对程序逻辑的简单介绍,至于更多细节以及三种数据存储服务之间的协作,请亲手部署并尝试,相信可以获得更清楚的认识。

四、将应用程序部署到Cloud Foundry

部署应用程序之前,最好修改属性文件中的应用程序名字,以避免默认的部署名字和url与云平台上已部署的应用冲突。比如,将 app.name=后的名字改成有自己特色的 grailstwitter-myname。确保你已经 正确安装了grails的cloud foundry插件 之后,就可以开始部署应用程序了。
grails prod cf-push
部署过程中,需要将程序与MySQL、MongoDB和Redis三个云服务绑定。部署完成之后,就可以通过url:grailstwitter.cloudfoundry.com 访问应用程序了。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值