一、常用方式
可以分为以下6点:
- 系统拆分
- 缓存
- MQ
- 分库分表
- 读写分离
- ElasticSearch
- 系统拆分
将一个系统拆分为多个子系统,比如用dubbo来实现。然后每个系统连一个数据库,这样原本就一个库,现在多个库,可以实现高并发。
- 缓存
大部分的高并发场景,都是读多写少,可以在数据库和缓存里都写一份,然后读的时候大量走缓存。毕竟redis的单机能达到几万并发。所以,可以考虑在项目中,那些承载主要请求的读场景,使用缓存来抗高并发。
- MQ
如果一个业务操作需要频繁读写数据库几十次,增删改增删改,这种高并发将会搞垮你的系统,要是使用redis来承载估计不行,redis作为缓存,数据随时会被LRU了,且数据格式比较简单,没有事务支持。所以还得依靠数据库,这时可以使用MQ,大量的写请求灌入MQ里,进行排队,后面系统消费后慢慢写入,控制在mysql的承载范围内。所以在项目中,那些承载复杂写业务逻辑的场景里,用MQ来异步写,提升并发性。
- 分库分表
将一个数据库拆分为多个库,多个库来扛更高的并发;然后将一个表拆分为多个表,每个表的数据量保持少一点,提高sql运行性能。
- 读写分离
大部分时候数据库可能也是读多写少,没必要所有请求都集中在一个库上。可以搭建主从架构,主库写入,从库读取,进行读写分离。读流量太多的时候,还可以加更多的从库。
二、三高架构
互联网三高架构:高并发、高性能、高可用
面向互联网的三高系统,关注的软件质量属性是:性能、可用性、伸缩性、扩展性、安全性。
常见的架构模式有:横向分层、纵向分割、分布式化、集群化、使用缓存、使用异步模式、使用冗余、自动化(发布、部署、监控)。
前端架构
浏览器优化技术:合理布局,页面缓存,减少http请求数,页面压缩,减少cookie传输。
- CDN
CDN的基本原理是广泛采用各自缓存服务器,将这些缓存服务器分布到用户访问相对集中的地区或网络中,在用户访问网址时,利用全局负载技术将用户的访问指向距离最近的工作正常的缓存服务器上,由缓存服务器直接响应用户请求。
- DNS负载均衡
- 动静分离,静态资源独立部署,动态图片独立提供服务
应用层架构
- 业务拆分
- 负载均衡
- 虚拟化服务器、容器化
- 无状态(以及分布式Session)
分布式Session有如下几种实现方式:
- Session复制机制
在支持Session复制的Web服务器上,通过修改Web服务器的配置,可以实现将Session同步到其他Web服务器上,达到每个Web服务器上都保存一致的Session。
- Session粘滞机制
将用户的每次请求都通过某种方法强制分发到某一个Web服务器上,只要这个Web服务器上存储了对应Session数据,就可以实现会话跟踪。
- Session集中管理机制
在单独的服务器或服务器集群上使用缓存技术,如Redis存储Session数据,集中管理所有的Session,所有的Web服务器都从这个存储介质中存取对应的Session,实现Session共享。
- 基于Cookie管理机制
这种方式每次发起请求的时候都需要将Session数据放到Cookie中传递给服务端。
总结:以上四种方式,相对来说,Session集中管理更加可靠,使用也最多。
- 分布式缓存
分布式缓存的典型应用场景可分为以下几类:
- 页面缓存:用来缓存Web页面的内容片段,包括HTML、CSS和图片等,多应用于社交网站等;
- 应用对象缓存:缓存系统作为ORM框架的二级缓存对外提供服务,目的是减轻数据库的负载压力,加速应用访问;
- 状态缓存:缓存包括Session会话状态及应用横向扩展时状态数据等,这类数据一般是难以恢复的,对可用性要求较高,多应用于高可用集群;
- 并行处理:通常涉及大量中间计算结果需要共享;
- 事件处理
- 极限事务处理
服务层架构
分布式微服务(分级管理、超时设置、异步调用、服务降级、幂等性涉及)
存储层架构
- DFS(分布式文件存储)
- 路由数据库
- No SQL数据库
- 数据同步
- 数据冗余
安全架构
- Web攻击(XSS、SQL Injection)
- 数据加密
- 密钥管理
- 发布、运维
自动化测试与发布
- 灰度发布
- 浏览器数据采集
- 服务器业务数据采集
- 服务器性能数据采集
- 系统监控
- 系统报警
- 机房(散热、省电、定制服务器)