软件开发三高知识点归纳总结笔记

1、高并发(QPS(每秒查询率))

(1)指标定义:高并发方面要求QPS 大于 10万

(2)解决方案:

①负载均衡,例如LVS和Nginx:负载算法有轮询法、随机法、源地址哈希法、加权轮询法、加权随机法、最小连接数法等,LVS 负责网络四层协议转发,无法按 HTTP 协议中的请求路径做负载均衡,所以还需要 Nginx

②池化技术(连接复用):单个的连接是没办法做到高并发,如果是单个连接的,每次请求都需要新建连接,关闭连接,加上TCP的三次握手与四次挥手,时间上会有很大的消耗,引入池化技术的核心就是对资源的“预分配”和“循环复用”,常用的池化技术有:线程池、进程池、对象池、内存池、连接池、协程池,在池化技术中,有几个核心参数:最小连接数、空闲连接数、最大连接数

③流量漏斗:上述两种方式都是通过正向的方式对并发做出的解决方案,我们可以从逆向考虑,不是所有的并发请求都是纯净的,也会存在恶意的流浪,例如:黑客攻击、恶意爬虫、黄牛、秒杀器等,此时,我们需要设计流量拦截器,将那些非法的、无资格的、优先级低的流量过滤掉,减轻系统的并发压力

2、高性能

(1)指标定义:高性能方面要求请求延迟小于 100 ms

(2)影响性能的因素:

①用户所使用的网络环境

②请求/响应的数据包大小

③业务系统 CPU、内存、磁盘等性能

④业务链路的长度

⑤下游系统的性能

⑥算法实现是否高效

⑦还有就是对于高并发的并发数量增加,系统压力也随之增加,导致请求延迟也会增大

(3)解决方案:

①对于热点数据,采用高性能缓存:缓存根据性能由高到低分为:寄存器、L1缓存、L2缓存、L3缓存、本地内存、分布式缓存(L1 缓存、L2 缓存是位于 CPU 核内的高速缓存,访问延迟通常在 10 纳秒以下。L3 缓存是位于 CPU 核外部但在芯片内部的共享高速缓存,访问延迟通常在十纳秒左右。高速缓存具有成本高、容量小的特点,容量最大的 L3 缓存通常也只有几十MB),使用缓存时,多注意缓存穿透、缓存雪崩、缓存热点问题、缓存数据一致性问题。当然为了提升整体性能通常会采用多级缓存组合方案(浏览器缓存+服务端本地内存缓存+服务端网络内存缓存)

②日志优化,避免IO瓶颈:系统处理大量磁盘 IO 操作的时候,由于 CPU 和内存的速度远高于磁盘,可能导致 CPU 耗费太多时间等待磁盘返回处理的结果。对于这部分 CPU 在 IO 上的开销,我们称为 “iowait”,磁盘中有个IOPS指标,即每秒读写次数,性能较好的固态硬盘,IOPS 大概在 3 万左右。对于秒杀系统,如果单节点QPS在10万,每次请求产生3条日志,那么日志的写入QPS在 30W/s,磁盘根本扛不住,此时我们可以引入tmpfs(临时文件系统),它是一种基于内存的文件系统,由操作系统管理。当我们写磁盘的时候实际是写到内存中,当日志文件达到我们的设置阈值,操作系统会将日志写到磁盘中,并将tmpfs中的日志文件删除,这种批量化、顺序写,大大提升了磁盘的吞吐性能

3、高可用

(1)指标定义:高可用方面要高于 99.99%

(2)高可用的技术架构策略

①多云架构(单一架构中使用多个云计算服务,但是需要长期维护)、异地多活(在不同城市建立独立的数据中心)、异地备份(将数据在另外的地方实时产生一份可用的副本,此副本的使用不需要做数据恢复,可以将副本立即投入使用。这就是异地备份)

②主备切换,如redis缓存、mysql数据库,主备节点会实时数据同步、备份。如果主节点不可用,自动切换到备用节点

③微服务,无状态化架构,业务集群化部署,有心跳检测,能最短时间检测到不可用的服务

④通过熔断、限流,解决流量过载问题,提供过载保护

⑤重视web安全,解决攻击和XSS问题

4、其他

1、垂直伸缩:提升单台服务器的处理能力。比如用更快频率的 CPU,用更多核的 CPU,用更大的内存,用更快的网卡,用更多的磁盘组成一台服务器,使单台服务器的处理能力得到提升。(在互联网以及物联网领域,并不使用垂直伸缩这种方案,而是使用水平伸缩)

2、水平伸缩:不去提升单机的处理能力,而是使用更多的服务器,将这些服务器构成一个分布

你可能感兴趣的:(java,分布式,开发语言)