单点问题
一个应用不能部署在同一台物理机的多个虚拟机上
数据库采用主备方式,能否在秒级进行切换,同时确保主备库不再同一个机房架构里
参考阿里的骨干网,采用全冗余设计,进行七网隔离,线上线下隔离,弹内弹外隔离
确保应用部署时,同城部署时要在两个机房进行部署,以便于单机房演练。
支付宝2015年发生了大规模的宕机事件,原因是杭州市萧山区某地光纤被挖断导致,为确保异地容灾、多活,后面专门进行了全链路单元化改造,整个交易链路都进行了单元化改造,并且经常在大促前夕进行单机房演练;
「“单元化”是一种架构思想,核心是:把完整的业务处理组件封装成一个单元,每个单元都能独立的处理完业务。」优势是可以支持业务无限弹性扩展的,可以突破大厂未来的业务增长导致的系统容量瓶颈。
消息中心是否存在单点,当消息有延时或丢失时,要确保业务能正常访问(需要将消息当做弱依赖,做好补偿机制);
配置中心不能直接强依赖,例如nacos,apollo,redis 等,出现问题时,就会影响到正常业务。
典型的做法是先垂直拆分再水平拆分,需要解决多数据源,数据分片,访问透明问题。
强依赖的下游接口,例如鉴权服务,登录服务等,这种接口尤其要注意,如果您系统中绕不开他们,则需要下游进行重保,以及做好失败的补偿和告警。
外部三方提供的服务,例如银行网关,三方存储,这种无法推动改变的外部依赖,需要在调用端做好重试、补偿、告警,建立系统自愈能力减少人工干预(人为的变动也是风险)。
是否有图片,js,css等静态资源单点,是否有CDN节点单点问题等
「如上这些单点问题,要解决起来是需要具备一定的财力的,现在的云计算服务,很大程度上减少了中小企业的搭建成本,可谓是养兵千日,用兵一时!」
除了业务上的 bug,人为的事故,其他引起系统挂掉的几乎都是容量问题,主要分为两个部分:
本地存储请确保应用服务每天对本地磁盘的数据存取量是否会超过本地存储的容量极限,同时要确保单个文件的大小不会受到存储限制
内部网络流量、连接数与请求数,确保不超过内部网络设备的承载能力。内部网络流量、连接数与请求数需要包含交换机、负载均衡设备、SSL设备、防火墙、专线等。通过性能压测获取阀值,根据线上服务的流量占比进行推算
需要计算服务处理对可靠消息数量与消息体大小的需求,当消息无法处理时可以根据优先级进行降级处理。
确保配置中心的容量足够,当配置中心宕机或服务不可用时,确保应用仍能正常运行。
特点:持续时间短,请求量远大于容量,服务瞬间挂掉。表现为服务尖刺。
【解决】
特点:这些流量属于正常需求的流量,用户需求不会因为格挡而消失,由于本质原因是请求量持续的大于容量,所以用户的等待时间会无限期延长,直到超过服务器的超时时间,系统挂掉。
例如做大促,做活动,会持续一段时间,可以针对性的做系统扩容。
【解决】:
特点:依赖资源,主要是指远程服务或存储,由于远程服务的响应时间变慢,或者挂了,直接导致整个系统的容量下降。
由公式 Threads = QPS * RT / 1000 可以得出,输入 QPS是固定的,由于 RT 的变长,则需要更多的 Threads 才能支撑输入的 QPS,所以一旦依赖资源不稳定,结果是轻易使得线程资源达到瓶颈。
用户找过来时候,肯定不能说由于xx服务不稳定导致,这些都是废话,要不你就去掉这种依赖,去不掉就保障好链路。
【解决】:
强弱依赖识别:对关键链路的应用进行调用链路的服务进行强弱依赖分析,识别出哪些是强依赖,哪些是弱依赖。
强依赖一般指此服务不可用,流程不能往下走,直接影响功能,否则为弱依赖。
强弱依赖关系梳理方式:
「强弱依赖的治理:」
「对于弱依赖,一般的处理方式:」
「服务双链路保障:」
很多只读服务默认大部分是直接依赖DB,对于前端应用的高并发、大流量访问,对于没有强一致实时性的场景,能上cache的尽量上cache(tair)
「服务分组&隔离」
任何由于系统故障、缺陷、人为操作、安全漏洞导致公司或客户蒙受直接或间接损失的事件,都属于资损事件。
涉及到的内容较为复杂,具体的不展开,这里想要强调的一点就是涉及到金钱的内容,需要额外做好分析,重点保障,核对等。