随笔- 250  评论- 66  文章- 3 

项目搬到云的一次小结

背景

放假刚回到家几天,学校服务器就挂了。

这服务器没得说,三天两头挂一次。已经老了,跑不动了吧。

为了减轻维护的负担,我决定把流量汇管家(xiayule.net)服务搬到云了,流量汇管家github项目地址。 

说到流量汇管家,这可以说是我的第一个有人用的小项目,虽然用的人不多,考虑到自己还在用。舍不得它挂掉,但又疲于维护。心里想着孩子,不要怪我,我再努力一次。  

选择云服务 

现在国内的云很多,加一个筛选条件——免费,那就剩的不多了,我知道的有两个,第一个是新浪云(sae),第二个是魔泊网(mopaas)

新浪云是用豆来计费的,可以免费申请成为中级开发者,成为中级开发者后,每月会发送10000豆,绝对够用了。

魔泊网是按照服务数量来计费的,一个web站算一个服务。

具体的资费参见官网。 

纠结了一下,选择使用新浪云,因为新浪云可以免费绑定域名,而魔泊网必须付费用户才能绑定。 

要点

接下来就是搬迁服务。这意味着几点要考虑了:

第一,修改jdk版本,新浪云提供的环境是java6的。

第二,我的服务使用了mysql+redis,新浪不提供redis的服务(嫌弃新浪提供的kvdb太水了) ,必须将redis替换为mysql。

第三,替换其他新浪不支持的服务。比如,我使用的是log4j2,而新浪仅仅支持log4j1.x。

开始动工

第一点

很好办,下载了jdk6, 修改项目的jdk版本就可以了。

第二点

复杂些,因此花费的时间也比较长。

我利用重构的方式逐步替换掉redis的服务。

第一步实现的是cookie的mysql存储。

具体的改动可以参加这里.

思路就是 创建 CookieServiceMysqlImpl 类,实现 CookieService 接口(三层设计的优势体现出来啦), 然后配置spring替换掉 CookieServiceImpl(redis版本)的依赖注入就可以了。

第二步实现的是实现了朋友摇奖和自动领取功能的mysql数据库存储。

这个没有一个固定的接口,需要在他们调用的类 SubscribService类处修改调用。好在不算复杂,

具体改动参见这里

第三步实现的是有效期的mysql化。

redis提供了键的自动过期,而mysql没有提供记录的自动过期。需要自己实现。而我的方案也很简单,就是加入一个过期字段 endTime, 每次操作查看endTime是否过期就可以了。

具体改动参见这里

剩下的就是mysql比较零碎的改动了

第三点是打算慢慢改动的,没急着写,毕竟这个不是太紧迫。

改动好了,可以准备着部署了。

部署

想要在sae部署也是要费一番功夫的。

可以分为三步:

第一步创建服务。

登录http://sae.sina.com.cn/创建web服务,然后创建mysql数据库服务,把mysql数据库的配置写入项目。

这里可能会遇到数据库乱码问题,如果是xml配置文件,需要这样写jdbc url:

jdbc:mysql://w.rdc.sae.sina.com.cn:3307/app_getll?useUnicode=true&characterEncoding=utf8

如果是代码配置,需要这样写url:

jdbc:mysql://w.rdc.sae.sina.com.cn:3307/app_getll?useUnicode=true&characterEncoding=utf8

区别就在于在xml中字符串要使用html实体, 参见这里。 

第二步生成项目。

前面说过了,新浪云是用豆计费的。数据库的使用、流量的流入流出、http的请求等等都是需要用来计算豆的,这就要求新浪在服务的底层实现豆的统计。因此新浪把各种服务分离出来(当然有的服务分离出来也是安全考虑),组成了一套服务体系。比如 KVDB,FetchURL等。

这些服务提供的jar包都是sae提供的,如果我们的与其冲突,我们就要妥协,删掉我们的。

删除哪些包呢?

删除所有sae提供的包。详情参见这里.

删除之后,就可以将项目上传了。

第三步上传项目

这离成功还有一段距离,因为你会发现各种问题,可以查看日志慢慢修改。

本来我把所有错误改完,成功跑起来服务,松了一口气。没想到发生了更致命的事。那就是乱码问题。在sae上使用httpclient发生了乱码,不用说,我当然设置了编码,而且本地完全没问题。这种无厘头的错误,翻遍sae论坛也找不到解决办法。因此决定使用sae 提供的  FetchUrl 服务,FetchUrl 是新浪对 httpclient 的一层封装。这次聪明了些,先测试了一下,发现即使不设置编码,也不会乱码。放心用了下,发现cookie出现问题。精神已经快要崩溃了。自己使用 UrlConnection 来写,这总可以了吧。遗憾的是,虽然没有乱码,cookie依旧有问题。

转折

搬迁工作已经持续一个星期了,没有精力再弄了。决定使用魔泊网了,

魔泊网还是很给力的,配置完数据库mysql,不用任何删包,上传项目,就能成功运行(感受到了上帝的温暖)。

解决域名问题

接下来解决域名问题,魔泊网的域名很长: getll.sturgeon.mopaas.com (反正我是记不住,逼我掏钱?)

妥协一下,sae是可以绑定域名的,因此我在sae写了一个小程序,每次访问 xiayule.net 或 www.xiayule.net,都会重定向到 getll.sturgeon.mopaas.com。这还算一个不错的办法。

看到新浪说未备案的域名会走国外路线,因此有被墙的风险,绑定好之后确实时不时的不能访问(现在想来,应该是我太着急了,或者说不相信sae了,导致这个问题的原因应该是修改的dns还未完全生效)。于是借了zhengnanlee同学的vps,搭了个nginx服务,负责重定向,来取代sae。

至此,搬迁工作算是告一段落了,松口气,喝口茶,写写小结,休息休息。

posted on 2015-02-15 13:00  Still_Raining  阅读(335)  评论(0编辑  收藏