系统稳定性和安全性是各个公司的技术负责人最关注的问题。但即使是像微软和 Facebook 这样国际性的大公司,也偶尔会出现系统故障,这种事一旦出现就是爆炸性的新闻。本质原因是什么呢?越复杂越精密的系统就是容易,就是比较脆弱,就是容易出故障。除了自身故障之外,还有来自外界的攻击,而被攻击的本质原因是防守一方和攻击一方在力量和难度上极度的不对称——防守的一方就是一个团队,而攻击的一方是一个产业链。
那要怎么做好稳定性建设和安全性建设呢?本次就整理一些专家的实战经验来传递给一线的从业人员,希望对大家的工作有借鉴作用。
故障的本质是必然性的风险加上偶然性的触发。就好比地上埋了个地雷,这是一个必然性的风险,那只要经过的人次数足够多,早晚会有人踩上这个雷。那谁踩上这个雷和什么时间踩上这个雷就是偶然性的。要想把稳定性做好,首先得减少这个风险,即预防故障。另外就是减少这个故障触发之后的影响吗,也就是减少爆炸半径。
那如何做好稳定性建设呢?主要分为两方面,故障预防(架构梳理、风险矩阵、变更预案,日常巡检和代码防御),和减少影响(全面监控、应急预案、一键逃生、故障演练,管理制度)。
架构梳理是稳定性建设之首,软件系统就好比一辆汽车,用先进的技术、先进的架构可以打造出一辆好车。如果用老旧的技术、老旧的架构,老旧的版本,搭的是一辆抛锚概率高的破车。在做架构设计的时候要有面向失败的思想。即使一个单元失败了,整个系统还能继续用。那这里要做到几点:高可用、高性能和高质量。高可用首先是消除单点(硬件单点、存储单点、网络单点、机房单点、依赖单点等),其次是减少冗余设计(数据冗余、计算冗余,网络冗余等)。同时还要弱化依赖,避免强依赖。对流量的管理也是必不可少的,限流、降级、熔断等等这些手段。还有容量的管理,为应对急剧增加的一些流量,要做动态扩缩容等等。高性能这方面需要则需要在数据上做索引,网络宽带要加 CDN,冷热数据要分离等。高质量的设计上要在数据技术做纵向分层,横向的要做业务分区,使得软件系统好维护,以及缩小爆炸半径。
灾备设计包括冷备、热备,还有数据级别容灾,包括数据集的容灾,应用级的容灾,业务级的容灾等。业务系统也要尽可能做多活,尤其异地多活,包括两地三中心,甚至于先进的做三地五中心。
风险矩阵,这里要梳理出所有可能出现的问题,比如说连接不上,网络断了,证书过期等也会连接不上,根据对应的故障去做预防。
变更预案,变更种类很多,有软件变更、配置变更、数据库变更、硬件变更、主机变更、网络变更等。那么变更的原则首先是尽可能在灰度环境上不要一把梭哈,然后再变更,在灰度上要做监控,有异常出现就赶快回滚。变更的流程也要严格,变更要有方案的评审,效果的验证以及业务的检查。这里强调的是变更预案,就提前把所有可能的变更对任何一个团队介绍,所有可能的变更的种类是有限的,要提前把它梳理出来,提前把预案做好,模拟预案的模板做好,然后将来做预案做的时候,可以不用依赖于做这个变更的同学的技术高低了,所以变更预案很重要。
日常巡检,这个概念来自于传统的航空、电力、汽车工业里的巡检机制,来保障设备系统的正常运转。计算机系统也一样需要做巡检,这里包括基础信息的巡检,比如说 CPU 的利用率、磁盘利用率、内存利用率等,以及服务器时间同步等。
代码防御,在编程的时候 Defensive Programming,就是不仅要保证自己的代码没有 bug,还要防止别人的代码没有 bug;对于每一个软件模块,不仅这个模块不要有 bug,还要防止上游的模块有 bug。异常处理怎么做呢,通过异常处理 Java try-catch,处理所有可能的错误,包括系统错误的用户错误。自愈代码,在 Coding 的过程中,在任何关键环节都要具备稳定性意识。数据校验也是很重要的,实时校验来防止 bug 发作,离线校验是为了发现脏数据。
全面监控是全公司的事,可能会增加上万条监控项目。包括系统监控、应用监控,还有业务监控,当然还包括终端监控。那系统监控包括主机监控,网络监控、中间件的监控以及数据监控等。应用监控项包含的目如异常总数、FullGC 次数,慢调用次数、响应时间、请求数,慢查询、慢消息等等,还有全链路监控;业务监控包括卡顿、崩溃等。
应急预案,也就是对每一个可能的故障都要提前把预案做好,否则一团混乱。在组织上明确到具体的人员,谁去通知谁?谁去协调谁,谁做决策,决策什么内容等都要提前设计好。应急的原则首先是止血,要快速的恢复业务,而不是定位根因,这是一个运维人员经常犯的一个错误。还有这个在短时间内如果不能解决问题的话,必须升级处理。另外,在不影响用户体验的前提下,要保留一部分现场和数据,便于恢复后定位分析原因。
一键逃生,对于阻断性的安全设备,必须提前准备好一键逃生方案,比如说防火墙、WAF、上网行为管理、SSLO 等非常重要。一旦发生故障,这种主备切换也不一定能够 100% 的成功,那这个时候必须要一键能够把设备 bypass,这些都要提前做好演练,提前做好方案,提前写好脚本,一个命令完成。故障演练,第一原则就是演练的时候不要出事,演练的目标之一就是检验预案,锻炼队伍、磨合团队。全链路压测也可以算作一种演练。
管理制度,首先要有值班机制,7* 24 小时要能够收到紧急报警。还有故障的复盘,不仅要复盘自己的故障,还要复盘其他团队的故障,也要复盘其他公司的故障,收集业界发生的所有的故障信息,然后来做复盘。
信息安全建设关于信息安全建设,这里也有五点要介绍。首先是进不来,保证黑客进不来,那首先是对 DMZ 的防护,有防火墙 + WAF + SSLO + API + APT 的组合拳。对内网的防护要有 VPN 二次认证,以及远程设备准入,还有基于身份的访问权限最小化,还有业务要做各种隔离。同时要有自己的认证系统。其次要做到能发现,就是一旦进来了你能发现,所有终端系统都装 EDR,另外内存安全,即指令序列白名单。对于员工上网要制定行为管理、DLP,严控各种敏感数据的导出,联合业务应用软件的开发部门做大量的应用系统改造,所有的系统导出都要经过严格审批。
另外是防泄漏,要防止终端层面的这种数据泄露,员工个人电脑首先是做 VPN 准入。还有 IM 系统改造。在个人电脑不允许下载文件。还有对数据库的防护,那么数据库要做防泄漏就要基于 AI 进行数据风险监控。还有数据加密,存储加密、传输加密使用加密隐私计算。
第四是保合规,安全方面是有各种合规要求的。首先在产品设计方面,要告知用户哪些数据会被收集使用、保护数据、授权同意等。另外像数据加密、疏密、脱敏、访问控制等等要有应急响应方案。
关于数据跨境传输安全合规方法案也很重要,非必要不出境,大多数跨境传输的数据是需要改造的,同时海要评估境外数据接收方是否能够承担数据管理责任。
最后一点是重运营。在组织方面,全公司范围内建立 CISO 体系,有事情能及时同步,安全运营有 7* 24 小时的应急响应机制,对安全事件的处理要及时止损。同时要组织公司级别的攻击演练,实战演练。培训员工制度以及安全意识提升也是必不可少的,宣发各种宣传资料。
【活动推荐】
InfoQ 正在筹备 2024 年 6 月 14-15 日深圳 ArchSummit 架构师峰会,目前已经邀请了 CNCF、阿里云、顺丰集团、腾讯、百度等企业的专家来演讲。会议上还设置了大模型、架构升级等专题,如果你感兴趣来会议上演讲,欢迎进入 ArchSummit 会议官网,提交议题。
会议现已进入 8 折早鸟购票阶段,联系票务经理 17310043226,锁定优惠。
评论 1 条评论