架构师训练营第四周课后作业
一个典型的大型互联网应用系统使用了哪些技术方案和手段,主要解决什么问题?请列举描述。
大型互联网应用系统,随着流量变大,会遇到各种各样的技术问题,比如接口响应超时、CPU Load飙升、GC频繁、死锁、服务宕机、大数据量存储等等,这些问题的通用技术方案和手段如下。
1. 系统设计的目标
大型互联网应用系统的特点是大流量高并发,系统设计的目标:高性能、高可用、高扩展。
1.1 ❇ 宏观目标
高性能:系统的并行处理能力,用户体验等。
高可用:系统可以正常使用的时间,支持几个9。
高扩展:系统的扩展能力,流量高峰时能否短时间内完成扩容。
1.2 ❇ 微观目标
性能指标:平均响应时间、TP、吞吐量等。
可用性指标:系统可支持几个9。
可扩展指标:有状态、无状态、服务集群、数据库、缓存、消息队列、负载均衡、带宽等。
2. 通用的设计方法
主要的技术方案有垂直扩展、水平扩展。
2.1 ❇ 垂直扩展
提升单机硬件性能:增加内存、CPU核数、存储容量、SSD硬盘、网卡、带宽等方式。
提升单机软件性能:使用缓存减少IO次数,使用并行、异步的方式增加吞吐量。
2.2 ❇ 水平扩展
做好分层架构
上图是互联网最常见的分层架构,真实的高并发系统架构在此基础上进一步完善。
做动静分离,引入CDN,反向代理层用LVS+Nginx,Web层是统一的API网关,业务服务层可进一步按垂直业务做微服务化,存储层可以是各种异构数据库。
各层进行水平扩展
无状态水平扩展,有状态做分片路由。业务集群设计成无状态的,而数据库和缓存是有状态的,因此需要设计分区Key做好存储分片,做好主从同步、读写分离、冷热分离的方案提升读性能。
3. 具体的实践方案
3.1 ❇ 高性能的实践方案
集群部署,通过负载均衡减轻单机压力。
多级缓存,包括静态数据使用CDN、本地缓存、分布式缓存等,以及对缓存场景的热key、缓存穿透、缓存并发、数据一致性等问题的处理。
分库分表、读写分离、冷热分离、索引优化,以及使用搜索引擎解决复杂的查询问题。
考虑NoSQL的使用。
异步化,次要流程通过多线程、MQ、延迟队列进行异步处理,提高写响应时间。
缓存预热。
减少IO次数,减少HTTP请求次数,支持数据库、缓存、API接口的批量提交。
减少IO时的数据包大小,采用合适的数据结构、去掉响应的多余的字段、压缩响应数据、减少缓存key的大小、压缩缓存value等。
各种池化技术的使用和设置,包括HTTP请求池、线程池、数据库和Redis连接池等。
锁选择,读多写少使用乐观锁,或考虑通过分布式锁的方式减少冲突。
高性能的方案主要从计算和IO的维度考虑可能的优化点。
3.2 ❇ 高可用的实践方法
节点故障转移,Nginx和服务治理框架支持。
非对等节点的故障转移,通过健康监测并实施主备切换(Redis的哨兵模式或集群模式、MySQL的主从切换等)。
API层面的超时设置、重试策略、幂等设计。
限流处理:接入层、网关层、业务服务层等做限流,超过处理能力直接拒绝请求。
降级处理:保证核心服务。
熔断处理:下游服务不可用或响应过慢,为保证上游服务可用性,不再继续调用。
MQ场景的消息可靠性保证,最终一致性保证。
灰度发布。
监控报警:全方位的监控体系,包括CPU、内存、磁盘、网络的监控,已经Web服务器、线程、数据库、各类中间件的监控和性能指标的监控。
高可用的方案主要从冗余、取舍、系统运维3个方向考虑。
3.3 ❇ 高扩展的实践方案
合理的分层架构。
存储层的拆分:按照业务维度做垂直拆分、按照数据特征维度进一步做水平拆分(分库分表、冷热分离)。
业务层的拆分:按照业务维度拆(用户、商品、订单、支付、物流等),也可以按企业组织架构拆。
版权声明: 本文为 InfoQ 作者【赵凯】的原创文章。
原文链接:【http://xie.infoq.cn/article/b6bcc36faeb7f23bcde3c19e8】。未经作者许可,禁止转载。
评论