高可用-分布式java应用读书笔记

1.避免单点
使用负载均衡做集群避免单点。
负载均衡算法。
软件负载均衡(LVS、HAProxy和nginx)和硬件负载均衡(F5和netscalar)。
热备、多机房(数据同步、内存同步、文件同步)

2.提高应用自身的可用性
2.1 尽量避免故障
a.明确使用场景,尽量保持系统的简单,对于复杂的系统,划分为不同的阶段,保证每个阶段的简单。
b.设计可容错的系统。1.fail first,遇到错误尽早的结束错误,以免执行后续的操作 2.设计严谨的接口,保证用户按照希望的方式使用。
例如type,可以再构造方法中传入,运行时检查不太友好,或者使用明确的对象AType BType。
c.设计自我保护的系统。对于使用的第三方系统始终怀疑的态度,避免错误扩散。
d.限制资源的使用。1)内存。集合类,threadlocal对于线程复用,只有线程销毁的时候才会自动释放,要特别注意。
2)文件。大量写日志,大文件。 3)网络。连接数和操作系统sendbuffer 4)线程。线程要消耗jvm内存和系统内存,线程太多会导致频繁的上下文切换。
e.测试阶段:自动化测试,性能测试。部署阶段:自动化部署、平滑升级、自动验证、回退。
f.风险卡。
所属领域:功能、内部功能、可容错、自我保护、资源限制。
风险名称,风险发生几率,风险的影响,风险的检测,风险发生后的应用措施、风险发生的可能原因。
2.2尽早发现故障
没有监控的系统就像没有仪表盘的汽车。
报警系统:单机状况报警(CPU,负载,第三方),集群报警(同基线偏差过大),关键数据报警(同基线偏差过大),日志记录和分析
2.3及时处理故障
出现故障时,不是分析原因,而是先把问题修复。修复故障后,要分析故障产生的原因,记入知识库,以便日后尽可能的避免。
1.资源重新分配 2.优雅降级 3.限制资源使用。
2.4访问量及数据量上涨的应对策略
访问量上涨的应对措施是拆分和水平伸缩。
数据量上涨则是分库、分表、读写分离。

《分布式Java应用-基础与实践》-林昊

猜你喜欢

转载自frank1234.iteye.com/blog/2163753