• 项目搬到云的一次小结


    背景

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

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

    为了减轻维护的负担,我决定把流量汇管家(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。

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

  • 相关阅读:
    决策树
    minStack及tree学习
    待解决
    前端开发之弹出框系列教程四:Prompt提示输入框
    前端开发之弹出框系列教程三:Msg消息框
    前端开发之弹出框系列教程二:Confirm确认框
    前端开发之弹出框系列教程一:Alert提示框
    制作弹出框系列教程2--遮罩层
    制作弹出框系列教程1--效果预览
    offset client scroll
  • 原文地址:https://www.cnblogs.com/tanhehe/p/4292755.html
Copyright © 2020-2023  润新知