标签:简单的 云服务 电信 资源 公网 静态 跳转 手册 连接
说起系统稳定性,其实已经有很多文章了.我这里结合自己实际项目中的一些情况,进行了反思.
业务场景其实也很简单.就是我们需要做一个爬虫去爬取别的网站的文章和图片.
主要问题出在图片上,当时我在想可不可以不爬取图片,结果还是被要求把图片也爬取下来.
我们的系统是有一个预览模式的,就是这些爬取的文章在上线之前,会被人工检测,没有问题才上线.
在这个业务基础上,我首先想到了公司有图片服务器,可以直接把图片url提供出去,让服务器下载.服务器下载完了之后,会返回一个特定的公网链接.最后我再去修改爬取到的html代码中的图片链接,把指向本站的链接都改成指向图片服务器的.
但是一看图片服务器,使用了CDN.而手册上又强调不能上传"违法图片".理由是如果上传到运营商(比如电信)的图片违法被发现,运营商会封掉整个CDN.
所以这里有个鸡生蛋蛋生鸡的问题:如果不下载到图片服务器(使用CDN),就没法改写html里面的连接,就无法检测这些图片是否违法.而上传到CDN,就有被运营商发现的危险.
目前的几种方案:
1. 在文章正文提供原始来源的网页url,在检测的时候点进去看.
2. 先把图片存储在一个云服务中,这个云服务也可以通过访问的域名控制是否开启CDN.在预览的时候,使用不开启CDN的域名,在上线的时候,替换为使用CDN的域名
3. 直接使用CDN
4. 先爬取所有图片,人工看一次
这几种方案,也就第二种稍微靠谱一点.但是还是不太好.
原因就是系统稳定性,在预览模式下,看到的html代码会在上线时改动,这本身无论如何都引入和风险点.
这让我想起了另外一个地方.那就是预览模式的实现.(预览模式需要跨站点,从一个应用跳转到另外一个应用)
一开始,我们用了很简单的方式,就是在url后面拼接一个密码(拼接了这个密码之后,即使没有审核通过的,也可以被看到,也就是预览).结果业务方说不行.他们要的效果是没有审核通过,外部(公网)就看不到.
我的提议本来是做cookie进行识别.但是问题是cookie需要申请权限.
所以最后采取了别人的一个方案:预览模式使用我们的预发环境.这个预发环境只有内网才能访问.
这个解决方案怎么样呢?在我眼中是很不好的,因为用"业务"方法解决了"技术"问题.使用cookie是解决这个问题的"正途".因为跨站访问的身份识别就应该用cookie.而这个方案看上去很简单就解决了问题.但是引入了无穷多的问题点:
1. 每次上预发,预览模式就不能正确使用
2. 业务方可能会在预览模式下看到我们还没有正式上线的内容(在预发环境回归测试)
3. 改动较大时,预览模式完全不可用.(预发环境里面有的静态资源直接使用了正式环境的域名,比如css这些,历史遗留问题)
但是最后我没能说服他们,多花点时间用"正途"解决问题.
最后谈下我的思考吧.
很多人说"黑猫白猫,能抓耗子就是好猫",如果能用业务方法解决技术问题,那就没必要改代码,或者可以少改代码.
但是我个人觉得这要根据具体情况来看.我目前看到的是,绝大多数情况下,一些"看上去很聪明"的业务式解决方案,本质上是规避了问题,埋下了隐患.在当时能被leader或者产品经理夸奖,但是最后遗留的问题还是要别人去解决.如果接手者不去解决这个问题,而通过业务方式再打个包往下传递,那么这个系统的稳定性就会一步一步降低.
这恐怕就是大多数程序员痛苦的根源.
标签:简单的 云服务 电信 资源 公网 静态 跳转 手册 连接
原文地址:http://www.cnblogs.com/dsj2016/p/7654447.html