Nginx
Nginx是一款轻量级的Web服务器、反向代理服务器
正向代理:
由于防火墙的原因,我们并不能直接访问谷歌,那么我们可以借助VPN来实现,这就是一个简单的正向代理的例子。这里你能够发现,正向代理“代理”的是客户端,而且客户端是知道目标的,而目标是不知道客户端是通过VPN访问的。
正向代理示意图
反向代理:
当我们在外网访问百度的时候,其实会进行一个转发,代理到内网去,这就是所谓的反向代理,即反向代理“代理”的是服务器端,而且这一个过程对于客户端而言是透明的。
反向代理示意图
分布式
CAP
-
consistency
-
强一致性:每一次在写后的读都能读到更改
-
弱一致性
-
最终一致性:一段时间后,写后读能读到更改
-
-
availability
- 可用性,在可接受时间内完成响应,无论这个数据是否是最新
-
partition tolerance
- 分区容错性,分布式系统必须要达到的
BASE
-
basically available
-
响应时间上的损失
-
响应功能上的损失
-
-
soft-state
- 允许同步时不同副本之间的状态存在延迟
-
eventually consistent
- 最终要达到一致性的状态
线程池
- 核心线程数
- 最大线程数
- 空闲时常
- 等待队列
- 线程工厂
- 拒绝策略
mvcc
-
多版本并发控制
-
三个隐藏字段
-
DB_ROW_ID
- 如果没有指定主键,InndDB自动生产隐藏的主键,用于索引
-
DB_PTR_NEXT
- 指向之前版本记录的指针
-
DB_TRX_ID
- 生成改行的事务的ID
-
-
undo log
-
多个undo log形成链状的结构,叫版本链
-
read view就是通过比较DB_TRX_ID结合版本链来读取数据的
-
-
read view
-
当前读
-
锁定读
-
每次读取的都是最新的数据
-
RC下
-
使用next-key lock解决幻读
-
-
快照读
-
一致性非锁定读
-
读取的是某历史版本的数据(该事物第一次执行普通select时读版本视图)
-
RR下
-
不会有幻读
-
-
MySql
-
redo log:持久性
-
undo log:原子性
一条mysql语句的执行流程
- 连接器
接受一条mysql语句
- 查询缓存
如果是select语句就查询缓存中是否含有
- 分析器
词法分析,语法分析
- 优化器
生成执行计划(选择索引,优化关联等等)
- 执行器
操作数据库引擎,返回结果
缓存常用的3种读写策略
-
旁路缓存模式
-
读:先读缓存,如果存在直接返回,如果不存在就读数据库并且更新缓存
-
写:直接写数据库并且使缓存中的数据无效
-
-
读写穿透模式
-
相当于加入的代理模式
-
缓存来做与数据库相关的操作
-
应用程序只和缓存打交道
-
读:读缓存,如果不存在交给缓存去数据库中获得数据
-
写:写缓存,剩下的交给缓存去和数据库同步
-
-
异步缓存写入模式
- 在读写穿透的基础上批量异步地更新数据库