保持系统健壮的一些总结

1. 不要忘记判断对象是否为null,越早开始越好

2. 严格控制数据的输入,入口要做好防重复提交和长度限制

3. 做好异常错误的日志记录

4. 如果不是立即用到的数据可以异步处理

5. 依赖外部系统的话,要做好重试机制
在一个抓取外部视频图片的功能中,有时候会遇到504错误:
java.io.IOException: Server returned HTTP response code: 504 for URL: http://g2.ykimg.com/1100641F464CD7151DA30003DFD212605DFE4E-D875-4084-8974-172F82D9974D
        at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1436)
        at java.net.URL.openStream(URL.java:1010)
        at com.you.common.file.base.BaseImageService.scaleImgFromHttp(BaseImageService.java:122)
        at com.you.atlas.biz.video.service.impl.VideoServiceImpl$1.run(VideoServiceImpl.java:58)
        at java.lang.Thread.run(Thread.java:662)
~                                              
依赖网络等资源都是不可靠的,可以尝试重试机制。

6.保持数据的一致性
数据的不可控, 比如message表现在有1000多条的重复数据。

使用atomic系列:
  AtomicInteger
  AtomicBoolean
  AtomicLong

数据库层面:
  使用唯一性约束。 两个字段构成业务上的唯一性要注意,例如message表中status(1,9) photo_id

大数据量计算
精度,使用money.

我们应每次都给成功的POST请求做重定向
这就是web开发的最佳实践, 来自:http://djangobook.py3k.cn/2.0/chapter07/

对外提供服务要限制调用频率
   一次线上网站挂掉的经历。
提供给移动客户端API的安全限制
   一次网站被收集恶意注册的过程。

猜你喜欢

转载自san-yun.iteye.com/blog/1489794