个人建议:
- 在Nginx后,将“展现层”部署于不同的服务,但使用垂直架构,每个服务都具有完整的可视化界面,防止其他节点宕机,导致无法使用。
- 在SOA后,将“Service”部署于不同的服务,采用分布式架构,每个服务负责的功能模块可单独升级,不影响其他服务。
- 在SOA时,进行统一 的网关认证,减少后期每个服务的单独认证的资源消耗。并开启日志记录,用于记录每次请求涉及到的服务,甚至接口,方便后期排查。
- 在使用Redis缓存时(1)击穿(少量key过期),建议每次Slave从DB中拿到数据时,在更新val时,同步更新过期时间,减少击穿。也可以开始安全锁,减少请求数据库次数,有真实数据时,同步至Slave_leader,其他节点可从此拿到真实数据。(2)引入监控,对于短时间内,访问次数多,但多次查询到为空或不存在时,可在缓存中赋值为空。或开启在Service层开启黑白名单,防止恶意攻击,导致缓存穿透(key不存在多次访问数据库)。(3)对于雪崩(同一时间内大量过期)可使用定时任务,去更新过期时间,但建议分散key过期时间。