互联网系统常见问题以及解决方案
系统架构
1. 数据的访问的压力
1.1. 静态资源加速
1.1.1. cdn
· 加速图片、视频、css、js等文件的访问
· 常用
• 七牛云
• 阿里云oss
• 各大云厂商的cdn服务
1.1.2. 静态文件缓存
· 将静态的文件缓存到静态缓存服务器,提高静态文件的访问速度
· 常用
• squid
1.2. 动态数据加速
1.2.1. 缓存
· 集群缓存
· 常用技术
• redis
• memcache
1.2.2. 数据库
· 读多写少
• 读写分离
• 将数据库的读取压力转移到从库上,避免主库压力过大
· 存储超限
• 数据库分库分表
• 依据一些条件,将数据库拆分到多台机器上
• 从而提高系统的吞吐和响应能力
• 数据库分片
• 将数据库的数据文件存储分布到多台机器上或者多个文件上,提高数据库的读取响应能力和存储能力
• 冷热数据隔离
• 根据业务情况。将已经没有业务价值的数据转移到更加海量的存储上,降低主存储的压力
• mongodb
· 常用技术
• mycat
• 各大云厂商的数据库代理
1.2.3. 页面静态化
· 将动态的文章直接生成静态文件
• 通过静态资源加速的手段提高访问速度
1.3. 网络分流
1.3.1. 智能dns
· 根据用户的来源,将流量分发到最近的数据机房
1.3.2. 负载均衡
· 通过负载均衡将服务器集群化部署
· 将流量导入到集群中N台机器上实现压力分摊
2. 数据的写入压力
2.1. 数据库高写入
2.1.1. 多主
· 主键设计成非自增
· 通过客户端自己生成主键的方式插入数据,避免重复
• 典型的主键生成算法:snowflake
· 数据库依赖底层数据同步互相打通
2.2. 消息队列
2.2.1. 部分业务处理异步化
· 将原本一次性完成的业务拆成多步,将非必须同步完成的写入队列
· 后台开启N个进程慢慢消费队列写入或者定时处理
· 应用场景:
• 用户下单后发短信通知卖家
• 用户发表文章后记录操作日志
3. 系统解耦
3.1. 消息队列
3.1.1. 通过消息队列将业务拆分成同步业务和异步业务
3.1.2. 结合事件订阅机制,实现系统级的解耦
4. 系统存储上限
4.1. 文件存储
4.1.1. 分布式文件系统
5. 搜索推荐
5.1. 解决文本快速、精确检索的需求
5.2. 搜索引擎
5.2.1. es
5.2.2. solr
6. 微服务
6.1. 服务注册与发现
6.1.1. 服务注册提供了一种及时发现服务的能力。服务中心在启动时,向服务注册中心上送一个服务标识和地址。请求的客户端通过查询服务注册中心来获取到服务对应的实际地址。
6.1.2. 常用技术
· consul
· Eureka
6.2. 服务网关
6.2.1. 一个反向代理服务器。起到负载均衡的作用。同时在微服务架构中起到身份认证、速率限制等作用
6.2.2. 常用技术
· kong
6.3. 调用链跟踪
6.3.1. 当微服务越来越多,服务之间的调用就会越来越复杂。这个时候想要追查一个调用所经历的
6.3.2. 常用技术
· openzipkin
· skywalking
7. 可用性
7.1. 负载均衡
7.1.1. 实现服务的集群化部署,结合容量规划。提高系统的整体可用性
评论