电话客服
186-2323-2332
Java
语言中,应该对所有可能为 NULL
的变量进行检查,防止 NPE
(NULL Pointer Error 空指针异常),在开发多线程程序时,选用线程安全的 ConcurrentHashMap
而不是 HashMap
等等。还可以利用 Assert
(断言)来保证程序运行中的变量值符合预期。Java
中,先用 try
捕获异常、再用 catch
处理异常、最后用 finally
释放资源和善后。参数类型校验:比如请求参数应该是 Integer
整型而不是 Long
长整数类型。
值合法性校验:比如整数的范围大于等于 0、字符串长度大于 5,或者满足某种特定格式,比如手机号、身份证等。
用户权限校验:很多接口需要登录用户或者管理员才能调用,因此必须通过请求参数(请求头)来判断当前用户的身份,被一个普通用户下载了 VIP 付费电影肯定是不合理的!
用户流控:限制每个用户在一定时间内对某个接口的调用数。
接口流控:限制一定时间内某个接口的总调用数。
单机流控:限制一定时间内单台服务器上的项目所有接口的总调用数。
分布式流控:限制一定时间内项目所有服务器的总请求数。
Java
语言 Guava
库的 RateLimiter
令牌桶单机限流、阿里的 Sentinel
分布式限流框架等。Redis
) 中查询,如果分布式缓存集体宕机,那就从本地缓存中获取数据。这样,即使缓存挂掉,也能够帮助系统支撑一段时间。Hystrix
就是比较有名的微服务熔断降级框架。Elasticsearch
)时,至少要多预留一倍的存储空间,即 2G,来应对后面可能的数据增长。业务的发展潜力越大,冗余的倍数也可以越多,但也要注意不要过分冗余,毕竟资源也是很贵的啊!Java
中,我们可以使用阿里开源的诊断工具 Arthas
,同时支持线上热修复功能。也可以自己编写脚本来实现,但是相对复杂一些。