https://mp.weixin.qq.com/s/om0-CFMHWHk5t-wYPVtSQg
一个重要事情是怎样减少这种花费很多人力方式,能不能搞成自动化,或者通过架构优化来解决性能以及错误等问题。用技术手段而不是堆人力方式。
复盘存储读取,读取本身有比较多监控,遇到问题有几类:
1、通用数据读取热点,数据热点会导致redis集群性能下降,这种需要定时去读取来解决。
2、这次备战时遇到新问题,刷子带来热点问题,可以采取缓存来解决。就是服务内存缓存来挡住刷子用户,避免redis产生热点。
3、连接数问题,连接过多会导致连接取不到,a、采取机房分离策略,廊房服务读廊房集群,马驹桥读马驹桥机房,减少连接。b、集群规模减小,数据存的少了,读它的就少了,读的少了,redis客户端客户端减少从而减少连接。c、连接问题通过业务拆分方式解决,单个业务单个集群,集群规模变小,业务之间影响变小,共享集群一个业务导致集群不稳定,其他集群也不稳定。c、小集群业务集群问题不大,还有偏好这种通用数据,读的业务很多,就需要一主多从来解决。
复盘遇到问题,对于存储读取前边做了很多工作,读取方面遇到问题减少了。最近又遇到存储增长问题,有同学设计了一套监控体系,对存储每个任务进行监控,监控后可以设置监控指标,达到指标后进行报警。挺好一种设计,根读取类似都是采取定量方式,清晰定位存储量问题,后续扩容还是构建新的集群就是水到渠成的事。
电商系统稳定关系着核心用户体验,保证稳定方式需要减少外部依赖,所有外部资源都可能会导致问题,减少依赖就能减少出问题的风险。另一条重要原则是后续备案,很重要一件事是要有备选方案出了问题能够有备选供选择。
降级、限流、限速、熔断等都是一种备案。
1、降级是通过降掉非核心流程,保证核心流程稳定高效。或者解决0点流量来临时,存储不稳定,网络不稳定后的处理方式,直接将逻辑降级,不使用。
2、限流,单个服务单个容器能够处理的量是有限的,单机压出上限后,增加限流google guava包有相应方法,直接用即可。
3、熔断,服务直接返回状态给客户端,客户端不再请求服务,从而保护服务,此时服务不是全的,但是不影响用户体验。
再有就是服务出现问题时,要第一时间降级操作,不要想着去解决问题,因为解决问题会耽误时间,影响用户体验,需要后续去定位问题,这是很重要一点,教过学费的。
架构设计,监控是一种重要架构哲学,对于系统优化一个前提,监控本身也能对整个系统所处状态进行呈现,作为我们的决策依据。
花费人力去盯的地方,都应该想一下怎样通过架构以及设计来解决,更多自动化去做,减少人力,用技术方式解决问题,这应该是我们应当追求的。
备案也是一种重要设计哲学,做到有备无患,不能只能看着系统崩溃而束手无策。事情一定要进行总结,才能在这件事中获得更多信息,不然更多是经过,事情要想办法去把它做好,是将来做任何事情一种很重要方式、方法。
解决技术问题,应该通过好的策略好的架构来实现。解决问题过程中我们获得技术提升。