三高理论图
三高架构图
构建弹性伸缩架构、实现负载均衡和自动扩展
采用分布式+微服务+集群的架构,将系统拆分成多个独立的模块,每个模块可以独立部署,独立拓展,每个模块可以部署多个实例。
做好负载均衡,将流量合理地分发到多个服务器上,从而减少单个服务器的压力,避免单点过载导致服务中断。
实现自动扩展机制,在流量高峰期自动给流量大的服务增加新的服务器实例,流量低谷时期自动减少实例,从而支持大规模并发访问,且节省成本。
上面的数据是给服务加机器,在提前预知大流量情况下,可以提前配置性能更好的服务器。
ps:集群是一个服务部署多份,分布式是系统部署在不同的物理机上,微服务是将系统拆分成多个子系统
优化数据库性能
为了提升数据库的性能,可以考虑采用分库分表+读写分离的策略来降低单数据库单表的压力。常见的根据业务去分库,根据时间范围或者哈希去分表;主流的读写分离是基于主从架构,主库写,从库读。
同时建立合理的索引,提升数据库查询效率。
可以考虑使用缓存技术来缓存热点数据,减少服务对数据库的直接访问。
系统监控和预警
使用监控工具实时监控系统的健康状态,如服务器的性能指标、网络流量、数据库响应时间、CPU等。
设置告警线,当指标达到某个值时,系统便发出预警(如发短信,告警群通知),便于技术人员定位和解决问题。
限流
通过令牌桶算法或者漏桶算法来控制系统访问量,防止系统因过载而崩溃,确保系统在可承受的范围内运行,保证服务的可用性。
限制的系统访问量一般通过提前测试服务的各种指标以及服务可接受的延迟来确定。
常见的限流策略:
令牌桶算法:系统以恒定速率向令牌桶中添加令牌,请求需要消耗令牌才能被处理。当令牌桶为空时,新的请求将被拒绝或延迟处理。
漏桶算法:请求像水一样流入漏桶,漏桶以恒定速率漏水(即处理请求)。当漏桶满时,新的请求将被丢弃或排队等待。
令牌桶算法在灵活度上比漏桶算法更好,并且在处理偶发的大流量时效果更好。并且漏桶算法还有一个重要的缺陷,不能灵活应对后端动态扩容,接口QPS提升。
.
不过令牌桶在设计上,好像也无法完全适配系统的性能。例如系统某接口同时能处理100个请求,处理请求需要3S。假如令牌桶大小设置为100,那么在极限情况下,可能100个请求是同时进来的,这样在接下来的时间里,系统内的请求数会超过100,因为令牌桶还会一直往桶里发放令牌。另一种极端情况是100个请求同时进来,到第三秒的时候全部都完成了,第四秒开始其实又可以接受大流量进来,但按照令牌桶算法它还是只能根据发放令牌的速率放请求进来,并不能很好地发挥系统的性能。
因而把令牌桶换成令牌滚筒或许会更好。设置令牌滚轮的最大令牌数量,这就是系统内当前有的令牌数,每次请求进来就获取一个令牌,请求处理完成就将令牌放回滚筒,这样可以保证接口内最多只有设置的最大请求数任务在跑,也能更好地利用系统性能。
参考博客
服务降级
必要情况下,可以给服务设计服务降级。在系统遇到故障或过载情况时,可以通过牺牲一些功能或性能来保证核心功能的正常运行。
服务降级策略应根据系统的业务场景和优先级进行制定和调整,以确保在故障或过载情况下能够迅速响应并保护核心功能。
常见的服务降级策略:
优雅降级:根据系统的负载情况,自动关闭一些非核心功能或服务,以保证核心功能的正常运行。
限流降级:当系统达到限流阈值时,自动关闭一些非核心功能或服务,以减轻系统负载。
手动降级:在特定情况下,运维人员可以手动关闭一些非核心功能或服务,以应对紧急情况。
服务熔断
必要情况下,可以给系统设置熔断机制。防止由于服务故障导致的连锁故障。当某个服务出现故障时,熔断器会暂时切断与该服务的连接,从而避免故障的蔓延。一旦服务恢复正常,熔断器会自动恢复与该服务的连接。
熔断机制应根据系统的实际情况和业务需求进行选择和调整,以确保既能有效防止连锁故障的发生,又能提供足够的灵活性以应对各种情况。
常见的熔断策略:
自动熔断:当服务的错误率或响应时间超过设定阈值时,熔断器会自动触发熔断操作。
手动熔断:在特定情况下,运维人员可以手动触发熔断操作以应对紧急情况。
半熔断:在熔断器触发后,可以允许部分请求通过以测试服务的恢复情况。如果服务恢复正常,则逐渐放开熔断限制;如果服务仍然存在问题,则继续保持熔断状态。
加强系统安全防护
流量大的服务影响大,更需要做好安全防护,防止恶意攻击。特别是区分哪些是真实的请求,哪些是攻击请求。
安全策略与审计:实施严格的安全策略,定期进行安全审计,确保系统的安全性。
防火墙与入侵检测系统:使用防火墙和入侵检测系统来防范外部攻击和内部威胁。
数据加密:对敏感数据的存储和传输采用加密技术,确保数据的安全性。