如何提高服务可用性
[原创]个人理解,请批判接受,有误请指正。转载请注明出处: https://heyfl.gitee.io/system/how-to-improve-service-availability.html
低层次的说,大概有如下方法
- 容灾(lvs+keepalived等)
- 负载均衡+心跳
- 限流
- 熔断&降级
- 重试
- 业务重试
- 框架切换节点重试等
- 监控+预警
- 业务上下游流量监控+接口流量监控
- JVM等指标监控
- 指定日志监控
- 主动发送预警
- (补充)解耦:动静分离/前后分离
[原创]个人理解,请批判接受,有误请指正。转载请注明出处: https://heyfl.gitee.io/system/how-to-improve-service-availability.html
[原创]个人理解,请批判接受,有误请指正。转载请注明出处: https://heyfl.gitee.io/system/system-graceful-shutdown.html
1 | !/bin/bash |
[原创]个人理解,请批判接受,有误请指正。转载请注明出处: https://heyfl.gitee.io/system/IO-model2.html
接: IO模型
Java的I/O模型是建立在底层系统I/O模型之上的,它通过对底层系统I/O调用的封装,提供了更高层次的抽象和统一的I/O接口。Java的I/O类库支持的I/O模型和底层系统I/O模型之间的映射关系如下:
阻塞式I/O模型
Java的I/O类库默认使用阻塞式I/O模型。在该模型下,I/O操作会一直阻塞,直到数据准备好或者操作完成才返回。对应的系统I/O模型是传统的阻塞式I/O模型。主要对应的系统I/O模型是Linux系统中的read(), write()
这里主要是各种Stream、Reader、Writer、Socket的读写,其中Socket为:
1 | ServerSocketChannel serverSocketChannel = ServerSocketChannel.open(); |
非阻塞式I/O模型
Java的I/O类库可以使用非阻塞式I/O模型。在该模型下,I/O操作会立即返回,不会阻塞,但此时数据可能还没有准备好或者操作没有完成。需要使用轮询的方式检查操作是否完成。对应的系统I/O模型是非阻塞式I/O模型。主要对应的系统I/O模型是Linux系统中的select()或poll()函数
java中主要是通过selector轮询socket的事件:
[原创]个人理解,请批判接受,有误请指正。转载请注明出处: https://heyfl.gitee.io/system/IO-model.html
服务器网络模型
这篇IO模型是《每天进步一点点
》里的第一篇学习记录,真的是忘了看看了忘了。。其实不用记服务器的,大概理一下JAVA自己的就简单多了,这里稍微总结一下:
JAVA的IO模型分为BIO、NIO、AIO三种,其中BIO是阻塞IO,NIO是非阻塞IO,AIO是异步IO
出现死循环后,我们可以使用jstack
命令来定位问题。
pid=23199
)1 | `ps -ef | grep java` |