写点什么

Week11 命题作业(系统不可用原因、高可用方案与编写密码验证函数)

用户头像
星河寒水
关注
发布于: 2020 年 08 月 15 日
Week11命题作业(系统不可用原因、高可用方案与编写密码验证函数)

1、导致系统不可用的原因有哪些?保障系统稳定高可用的方案有哪些?请分别列举并简述。

答:

①导致系统不可用的原因:

  • 服务器硬件故障

  • 软件本身的bug

  • 并发压力过大超过系统的承载能力

  • 需要停机的软件版本发布

  • 网络攻击

  • 不可抗力因素: 如地震、火灾或突然的停电

②高可用方案:

  • 针对硬件故障: 采用多台物理服务器组成集群同时提供服务

  • 针对软件bug: 提高编码人员异常考虑意识,定期进行故障案例分享

  • 针对并发压力过大:

  • 可采取限流的方式保护系统

  • 降级: 特殊情况下综合衡量利弊,下线非核心功能,优先保证核心功能正常运行

  • 针对系统发布:

  • 自动化测试

  • 自动化部署

  • 预发布验证

  • 代码版本控制

  • 灰度发布模式:每天只发布一部分服务器,观察运行稳定没有故障,第二天继续发布一部分服务器,持续几天的时间才把整个集群全部发布完毕,期间如果发现问题,就只需要回滚已发布的一部分服务器即可

  • 必须要有系统运行监控

  • 针对网络攻击:

  • 请求过滤与消毒

  • 关闭错误回显,统一导向错误页面

  • SQL预编译参数绑定

  • 表单Token、验证码、Referer check

  • 上线前去掉HTML注释

  • 只允许上传可靠的文件类型

  • 将JavaScript、CSS等资源文件独立服务器、独立域名,其他文件不使用静态URL访问,动态参数不包含文件路径信息

  • Web应用防火墙ModSecurity

  • 不定期安全漏洞扫描

  • 信息加密技术及密钥安全管理

  • 针对不可抗力: 采用异地多活,将数据中心分布在多个不同地点的机房里,这些机房都可以对外提供服务,用户可以连接任何一个机房进行访问



2、请用你熟悉的编程语言写一个用户密码验证函数,Boolean checkPW(String 用户 ID,String 密码明文,String 密码密文)返回密码是否正确 boolean 值,密码加密算法使用你认为合适的加密算法。

const hmacSHA256 = require('crypto-js/hmac-sha512');
const db = require('./db');
async function checkPW(userID, rawPwd, userPwdEncoded) {
const user = await db.getUserByID(userID);
return userPwdEncoded === hmacSHA256(rawPwd, user.salt);
}



用户头像

星河寒水

关注

还未添加个人签名 2018.09.17 加入

还未添加个人简介

评论

发布
暂无评论
Week11命题作业(系统不可用原因、高可用方案与编写密码验证函数)