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