zoukankan      html  css  js  c++  java
  • 项目搬到云的一次小结

    背景

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

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

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

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

  • 相关阅读:
    SpringBoot实现原理
    常见Http状态码大全
    forward(转发)和redirect(重定向)有什么区别
    1094. Car Pooling (M)
    0980. Unique Paths III (H)
    1291. Sequential Digits (M)
    0121. Best Time to Buy and Sell Stock (E)
    1041. Robot Bounded In Circle (M)
    0421. Maximum XOR of Two Numbers in an Array (M)
    0216. Combination Sum III (M)
  • 原文地址:https://www.cnblogs.com/tanhehe/p/4292755.html
Copyright © 2011-2022 走看看