架构师训练营第四周课后作业

用户头像
赵凯
关注
发布于: 2020 年 07 月 02 日

一个典型的大型互联网应用系统使用了哪些技术方案和手段,主要解决什么问题?请列举描述。

大型互联网应用系统,随着流量变大,会遇到各种各样的技术问题,比如接口响应超时、CPU Load飙升、GC频繁、死锁、服务宕机、大数据量存储等等,这些问题的通用技术方案和手段如下。

1. 系统设计的目标

大型互联网应用系统的特点是大流量高并发,系统设计的目标:高性能、高可用、高扩展。

1.1 ❇ 宏观目标

高性能:系统的并行处理能力,用户体验等。

高可用:系统可以正常使用的时间,支持几个9。

高扩展:系统的扩展能力,流量高峰时能否短时间内完成扩容。

1.2 ❇ 微观目标

性能指标:平均响应时间、TP、吞吐量等。

可用性指标:系统可支持几个9。

可扩展指标:有状态、无状态、服务集群、数据库、缓存、消息队列、负载均衡、带宽等。

2. 通用的设计方法

主要的技术方案有垂直扩展、水平扩展。

2.1 ❇ 垂直扩展

  1. 提升单机硬件性能:增加内存、CPU核数、存储容量、SSD硬盘、网卡、带宽等方式。

  2. 提升单机软件性能:使用缓存减少IO次数,使用并行、异步的方式增加吞吐量。

2.2 ❇ 水平扩展

  1. 做好分层架构



上图是互联网最常见的分层架构,真实的高并发系统架构在此基础上进一步完善。

做动静分离,引入CDN,反向代理层用LVS+Nginx,Web层是统一的API网关,业务服务层可进一步按垂直业务做微服务化,存储层可以是各种异构数据库。



  1. 各层进行水平扩展

无状态水平扩展,有状态做分片路由。业务集群设计成无状态的,而数据库和缓存是有状态的,因此需要设计分区Key做好存储分片,做好主从同步、读写分离、冷热分离的方案提升读性能。

3. 具体的实践方案

3.1 ❇ 高性能的实践方案

  1. 集群部署,通过负载均衡减轻单机压力。

  2. 多级缓存,包括静态数据使用CDN、本地缓存、分布式缓存等,以及对缓存场景的热key、缓存穿透、缓存并发、数据一致性等问题的处理。

  3. 分库分表、读写分离、冷热分离、索引优化,以及使用搜索引擎解决复杂的查询问题。

  4. 考虑NoSQL的使用。

  5. 异步化,次要流程通过多线程、MQ、延迟队列进行异步处理,提高写响应时间。

  6. 缓存预热。

  7. 减少IO次数,减少HTTP请求次数,支持数据库、缓存、API接口的批量提交。

  8. 减少IO时的数据包大小,采用合适的数据结构、去掉响应的多余的字段、压缩响应数据、减少缓存key的大小、压缩缓存value等。

  9. 各种池化技术的使用和设置,包括HTTP请求池、线程池、数据库和Redis连接池等。

  10. 锁选择,读多写少使用乐观锁,或考虑通过分布式锁的方式减少冲突。



高性能的方案主要从计算和IO的维度考虑可能的优化点。

3.2 ❇ 高可用的实践方法

  1. 节点故障转移,Nginx和服务治理框架支持。

  2. 非对等节点的故障转移,通过健康监测并实施主备切换(Redis的哨兵模式或集群模式、MySQL的主从切换等)。

  3. API层面的超时设置、重试策略、幂等设计。

  4. 限流处理:接入层、网关层、业务服务层等做限流,超过处理能力直接拒绝请求。

  5. 降级处理:保证核心服务。

  6. 熔断处理:下游服务不可用或响应过慢,为保证上游服务可用性,不再继续调用。

  7. MQ场景的消息可靠性保证,最终一致性保证。

  8. 灰度发布。

  9. 监控报警:全方位的监控体系,包括CPU、内存、磁盘、网络的监控,已经Web服务器、线程、数据库、各类中间件的监控和性能指标的监控。



高可用的方案主要从冗余、取舍、系统运维3个方向考虑。

3.3 ❇ 高扩展的实践方案

  1. 合理的分层架构。

  2. 存储层的拆分:按照业务维度做垂直拆分、按照数据特征维度进一步做水平拆分(分库分表、冷热分离)。

  3. 业务层的拆分:按照业务维度拆(用户、商品、订单、支付、物流等),也可以按企业组织架构拆。



发布于: 2020 年 07 月 02 日 阅读数: 42
用户头像

赵凯

关注

还未添加个人签名 2017.12.07 加入

还未添加个人简介

评论

发布
暂无评论
架构师训练营第四周课后作业