Tomcat支持并发量太低所以不直接使用service操作Redis等,而是使用lua:
Nginx+lua+Redis
Nginx+lua+kafka
Nginx+lua=openresty (可作软防火墙)
大公司没有delete语句,只做update逻辑删除,不常用的冷数据扔到HBase。
此架构是针对读请求的。
写请求如秒杀,大多数是用的消峰(过滤扔掉一大部分请求)
Lua又称胶水语言,其设计目的是为了通过灵活嵌入应用程序中从而为应用程序提供灵活的扩展和定制功能。
Redis执行lua的时候 其他客户端命令都会被阻塞!!
openresty是一台集成了lua的Nginx,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。
使用和配置方式与Nginx一致。
openresty自带了一些连接Redis和MySQL等的lua库,可以直接操作Redis和MySQL等。
CDN的全称是Content Delivery Network,即内容分发网络。依靠部署在各地的边缘服务器,通过中心平台的负载均衡、内容分发、调度等功能模块,使用户就近获取所需内容。
不适用把机密性较高的文件资源配置到CDN
客户端会先请求距离最近的CDN层,如果CDN没有缓存则会放行到后续节点直至真实服务端。
客户端访问CDN时浏览器响应头会有两个属性标识:
age:已经缓存时间信息
via:CDN机器名和是否命中缓存信息
CAP理论,指的是在一个分布式系统中,Consistency(一致性)、Availability(可用性)、Partition Tolerance(分区容错性),不能同时成立,最多同时成立两种。
P:允许集群节点之间出现网络连接中断
CA现实是不存在的
C和A只能得一个,所以分布式系统中强一致性还是高可用性只能选一个。通常会放弃强一致性选择高可用,作为补偿尽可能实现最终一致性即可。
做分布式锁需要的是强一致性。
常见实现分布式锁的方式有:数据库、Redis、Zookeeper。
分布式ID生成器主要有以下9种:
资源隔离的目的是为了保障发生故障时不出现传播行为,假如一个小功能出现问题时不会影响到一个JVM下的其他功能。
分库:
分表:
XA协议包含两阶段提交(2PC)和三阶段提交(3PC)两种实现
2PC 和 3PC 都是数据库层面的,而 TCC 是业务层面的分布式事务,分布式事务不仅仅包括数据库的操作,还包括发送短信等。
分布式事务主要实现方式:
常做为一个机房最外层入口网关, Kong本质上也是Nginx,且和openresty一样都是Nginx+lua
把页面静态化缓存到Nginx中可以提高QPS,只需要IO开销就能访问页面,多个Nginx节点之间可以使用sersync监听文件变更+rsync同步文件的方案实现自动同步。
对于动态的数据可以通过openresty的lua直接访问数据库,然后在Nginx端即可渲染成静态模板页面。