当我们进行网络IO时,Linux给我提供的常用的有seelct 和epoll两个系统级函数,来进行IO操作。现在大部分高并发的网络模型都是基于epoll,比如nginx,redis等。先学习下Linux的网络模型
Linux网络I/O模型简介
Linux的内核将所有外部设备都看做一个文件来操作,对一个文件的读写操作会调用内核提供的系统命令,返回一个file descriptor (fd,文件描述符)。而对一个socket的该写也会有相应的描述符,称为socketfd (socket描述符),描述符就是一个数字,它指向内核中的一个结构体(文件路径,数据区等一些属性)。
linux-常用命令总结
命令帮助
whatis command 查看命令的作用
info command 查看命令的详情
man command 查看命令的怎么使用,说明文档
which 查看命令二进制文件所在地方
分布式锁
分布式锁解决并发的三种实现方式
- 在很多场景中,我们为了保证数据的最终一致性,需要很多的技术方案来支持,比如分布式事务、分布式锁等。有的时候,我们需要保证一个方法在同 一时间内只能被同一个线程执行。在单机环境中,Java中其实提供了很多并发处理相关的API,但是这些API在分布式场景中就无能为力了。也就是说单纯的Java Api并不能提供分布式锁的能力。所以针对分布式锁的实现目前有多种方案:
分布式锁一般有三种实现方式:
- 1、 数据库锁
- 2、基于Redis的分布式锁
- 3、基于ZooKeeper的分布式锁
分布式锁应该是怎么样的
cap定理
它指出对于一个分布式计算系统来说,不可能同时满足以下三点:
- 一致性(Consistency) (等同于所有节点访问同一份最新的数据副本)
- 可用性(Availability)(每次请求都能获取到非错的响应——但是不保证获取的数据为最新数据)
- 分区容错性(Partition tolerance)(以实际效果而言,分区相当于对通信的时限要求。系统如果不能在时限内达成数据一致性,就意味着发生了分区的情况,必须就当前操作在C和A之间做出选择[3]。)
根据定理,分布式系统只能满足三项中的两项而不可能满足全部三项[4]。理解CAP理论的最简单方式是想象两个节点分处分区两侧。允许至少一个节点更新状态会导致数据不一致,即丧失了C性质。如果为了保证数据一致性,将分区一侧的节点设置为不可用,那么又丧失了A性质。除非两个节点可以互相通信,才能既保证C又保证A,这又会导致丧失P性质。