杂,12.10

93 阅读3分钟

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语句的执行流程

  1. 连接器

接受一条mysql语句

  1. 查询缓存

如果是select语句就查询缓存中是否含有

  1. 分析器

词法分析,语法分析

  1. 优化器

生成执行计划(选择索引,优化关联等等)

  1. 执行器

操作数据库引擎,返回结果

缓存常用的3种读写策略

  • 旁路缓存模式

    • 读:先读缓存,如果存在直接返回,如果不存在就读数据库并且更新缓存

    • 写:直接写数据库并且使缓存中的数据无效

  • 读写穿透模式

    • 相当于加入的代理模式

    • 缓存来做与数据库相关的操作

    • 应用程序只和缓存打交道

    • 读:读缓存,如果不存在交给缓存去数据库中获得数据

    • 写:写缓存,剩下的交给缓存去和数据库同步

  • 异步缓存写入模式

    • 在读写穿透的基础上批量异步地更新数据库