Java知识分享网 - 轻松学习从此开始!    

Java知识分享网

Java1234官方群25:java1234官方群17
Java1234官方群25:838462530
        
SpringBoot+SpringSecurity+Vue+ElementPlus权限系统实战课程 震撼发布        

最新Java全栈就业实战课程(免费)

springcloud分布式电商秒杀实战课程

IDEA永久激活

66套java实战课程无套路领取

锋哥开始收Java学员啦!

Python学习路线图

锋哥开始收Java学员啦!
当前位置: 主页 > Java文档 > Java基础相关 >

高可用:如何设计一个高可用系统? PDF 下载


分享到:
时间:2023-03-05 09:29来源:http://www.java1234.com 作者:转载  侵权举报
高可用:如何设计一个高可用系统? PDF 下载
失效链接处理
高可用:如何设计一个高可用系统? PDF 下载


本站整理下载:
提取码:69fv 
 
 
相关截图:
 
主要内容:

⾼可⽤描述的是⼀个系统在⼤部分时间都是可⽤的,可以为我们提供服务的。⾼
可⽤代表系统即使在发⽣硬件故障或者系统升级的时候,服务仍然是可⽤的。
⼀般情况下,我们使⽤多少个 9 来评判⼀个系统的可⽤性,⽐如 99.9999% 就是
代表该系统在所有的运⾏时间中只有 0.0001% 的时间是不可⽤的,这样的系统
就是⾮常⾮常⾼可⽤的了!当然,也会有系统如果可⽤性不太好的话,可能连 9
都上不了。
1. ⿊客攻击;
2. 硬件故障,⽐如服务器坏掉。
3. 并发量/⽤户请求量激增导致整个服务宕掉或者部分服务不可⽤。
4. 代码中的坏味道导致内存泄漏或者其他问题导致程序挂掉。
5. ⽹站架构某个重要的⻆⾊⽐如 Nginx 或者数据库突然不可⽤。
6. ⾃然灾害或者⼈为破坏。
7. ......
我觉得这个是最最最重要的,代码质量有问题⽐如⽐较常⻅的内存泄漏、循环依
赖都是对系统可⽤性极⼤的损害。⼤家都喜欢谈限流、降级、熔断,但是我觉得
从代码质量这个源头把关是⾸先要做好的⼀件很重要的事情。如何提⾼代码质
量?⽐较实际可⽤的就是 CodeReview,不要在乎每天多花的那 1 个⼩时左右的
时间,作⽤可⼤着呢!
另外,安利这个对提⾼代码质量有实际效果的宝⻉:
1. sonarqube :保证你写出更安全更⼲净的代码!(ps: ⽬前所在的项⽬基本
都会⽤到这个插件)。
2. Alibaba 开源的 Java 诊断⼯具 Arthas 也是很不错的选择。
3. IDEA ⾃带的代码分析等⼯具进⾏代码扫描也是⾮常⾮常棒的。
先拿常⽤的 Redis 举个例⼦!我们如何保证我们的 Redis 缓存⾼可⽤呢?答案就
是使⽤集群,避免单点故障。当我们使⽤⼀个 Redis 实例作为缓存的时候,这个
Redis 实例挂了之后,整个缓存服务可能就挂了。使⽤了集群之后,即使⼀台
Redis 实例,不到⼀秒就会有另外⼀台 Redis 实例顶上。
流量控制(flow control),其原理是监控应⽤流量的 QPS 或并发线程数等指
标,当达到指定的阈值时对流量进⾏控制,以避免被瞬时的流量⾼峰冲垮,从⽽
保障应⽤的⾼可⽤性。——来⾃ alibaba-Sentinel 的 wiki。
⼀旦⽤户请求超过某个时间的得不到响应,就抛出异常。这个是⾮常重要的,很
多线上系统故障都是因为没有进⾏超时设置或者超时设置的⽅式不对导致的。我
们在读取第三⽅服务的时候,尤其适合设置超时和重试机制。⼀般我们使⽤⼀些
RPC 框架的时候,这些框架都⾃带的超时重试的配置。如果不进⾏超时设置可能
会导致请求响应速度慢,甚⾄导致请求堆积进⽽让系统⽆法在处理请求。重试的
次数⼀般设为 3 次,再多次的重试没有好处,反⽽会加重服务器压⼒(部分场景
使⽤失败重试机制会不太适合)。
超时和重试机制设置之外,熔断机制也是很重要的。 熔断机制说的是系统⾃动收
集所依赖服务的资源使⽤情况和性能指标,当所依赖的服务恶化或者调⽤失败次
数达到某个阈值的时候就迅速失败,让当前系统⽴即切换依赖其他备⽤服务。 ⽐
较常⽤的是流量控制和熔断降级框架是 Netflix 的 Hystrix 和 alibaba 的
Sentinel。
异步调⽤的话我们不需要关⼼最后的结果,这样我们就可以⽤户请求完成之后就
⽴即返回结果,具体处理我们可以后续再做,秒杀场景⽤这个还是蛮多的。但
是,使⽤异步之后我们可能需要 适当修改业务流程进⾏配合,⽐如⽤户在提交订
单之后,不能⽴即返回⽤户订单提交成功,需要在消息队列的订单消费者进程真
正处理完该订单之后,甚⾄出库后,再通过电⼦邮件或短信通知⽤户订单成功。
除了可以在程序中实现异步之外,我们常常还使⽤消息队列,消息队列可以通过
异步处理提⾼系统性能(削峰、减少响应所需时间)并且可以降低系统耦合性。
如果我们的系统属于并发量⽐较⾼的话,如果我们单纯使⽤数据库的话,当⼤量
请求直接落到数据库可能数据库就会直接挂掉。使⽤缓存缓存热点数据,因为缓
存存储在内存中,所以速度相当地快!
1. 核⼼应⽤和服务优先使⽤更好的硬件
2. 监控系统资源使⽤情况增加报警设置。
3. 注意备份,必要时候回滚。
4. 灰度发布: 将服务器集群分成若⼲部分,每天只发布⼀部分机器,观察运⾏
稳定没有故障,第⼆天继续发布⼀部分机器,持续⼏天才把整个集群全部发
布完毕,期间如果发现问题,只需要回滚已发布的⼀部分服务器即可
5. 定期检查/更换硬件: 如果不是购买的云服务的话,定期还是需要对硬件进
⾏⼀波检查的,对于⼀些需要更换或者升级的硬件,要及时更换或者升级。
6. .....(想起来再补充!也欢迎各位欢迎补充!)

------分隔线----------------------------

锋哥公众号


锋哥微信


关注公众号
【Java资料站】
回复 666
获取 
66套java
从菜鸡到大神
项目实战课程

锋哥推荐