乐趣区

关于后端:读数据密集型应用系统设计有感而发一数据系统基础

数据系统根底

​ 互联网做得太杰出了,以至于很多人把它看作某种太平洋一样的自然资源,而非人造。你还记得上一个达到如此规模而又这样强壮的技术是什么?

​ ————Alan Kay,Dr.Dobb 杂志采访(2012)

何谓数据密集型零碎?

对一个利用零碎,如果‘数据’是其成败决定性因素,包含数据的规模,数据的复杂度或者数据产品与变动的速率等,咱们就能够称为‘数据密集型利用零碎’;与之对应的是计算密集型,cpu 主频往往是后者最大的制约瓶颈。

可靠性

对于软件的可靠性,能够从以下几个方面形容:

  • 应用程序执行用户所冀望的性能。用户可能通过应用你的产品取得最根本的满足,比方通过微信能聊天,领取,通过京东能购物等,合乎最后的预期。
  • 能够容忍用户呈现谬误或者不正确的软件应用办法。对于谬误的办法不至于导致软件的解体,可能通过指引持续或者告诉用户因为什么起因不能持续。
  • 性能能够应答典型场景,正当负载压力和数据量。对于突增的用户流量能做到降级,限流,扩容,不影响大部分用户的体验。
  • 零碎可避免任何未经受权的拜访和滥用。做好软件的鉴权措施,爱护用户的隐衷,避免黑客的攻打

保证系统的可靠性,进步整体可用性,缩小硬件,软件认为导致的故障,能够从以下几个点思考:

  • 减少冗余。能够通过数据备份,多地部署,以 10 倍流量部署机器等形式,当问题产生时,能及时复原,缩小故障工夫。
  • 熔断开关。当上游呈现问题时,能对局部业务熔断解决,不影响整体零碎的可用性。
  • 限频。限频开关可能避免业务申请的突增导致业务的奔溃,特地是对于不能主动扩容的零碎。即便是对于一些申请量稳固的业务零碎,有时候也可能因为申请重试的放大导致系统奔溃,限频是对系统很好的一种爱护
  • 要害门路与非要害门路梳理并隔离部署,对于非关键门路能够进行降级解决。
  • 解耦。对于一些能够异步解决的操作,比方音讯告诉等,通过 mq 异步解决,升高零碎的响应工夫避免被拖垮。
  • 对于一些人为因素导致的零碎不可用,能够通过充沛的测试,比方对外围代码编写 gtest 单元测试,自动化测试等,欠缺无效的监控,增强风险意识的培训。

可扩展性

​ 可扩展性是用来形容零碎应答负载减少能力的术语。能够了解为当用户从 1w/smin 增长到 100w/min 时,零碎是否还能失常运行。负载能够用称为负载参数的若干数字来形容。加入的最佳抉择取决于零碎的构造,它可能是 web 服务器的每秒申请解决次数,数据库中写入的比例,聊天室的同时流动用户数量,缓存命中率等。

​ 当负载减少时,会关注零碎的响应工夫以及最终失败量。对于应答负载能够从垂直扩大和程度扩大两个方面思考:

  • 垂直扩大就是进步单机的性能,操作简略,不过老本很高。
  • 程度扩大就是减少机器,长处是个别对机器要求不高,然而技术实现负载。分布式的零碎通常都反对程度的扩大,在无状态的状况下能够反对主动扩容,可能很好的应答负载升高的状况。

可维护性

可维护性

​ 不便经营团队来放弃零碎安稳运行

简略性

​ 简化零碎复杂性,使新工程师可能轻松了解零碎。留神这与用户界面的简略性并不一样

可演变性

​ 后续工程师可能轻松地对系统进行改良,并依据需要变动将其适配到非典型场景,也称为可延伸性,易批改性或可塑性

退出移动版