作业一:
(至少完成一个)
Q: 导致系统不可用的原因有哪些?保障系统稳定高可用的方案有哪些?请分别列举并简述。
A: 不可用原因:
硬件故障:
网络传输故障:
服务器故障:
磁盘写满:
软件故障:
服务崩溃:
服务器超负荷、阻塞等导致服务不可用:
缓存击穿、缓存雪崩等导致数据库负载过大
系统有严重 bug
域名过期、dns 域名解析服务出错
保障系统稳定高可用的方案:
系统架构
解耦;隔离;异步;备份;Failover(失效转移);幂等;事务补偿;重试;熔断;限流;自适应限流;降级;异地多活;
系统运维
自动化测试;自动化部署;预发布验证;灰度发布;运行监控
安全架构
开发安全、网络安全配置、防火墙、黑/白名单、安全扫描及监控
请用你熟悉的编程语言写一个用户密码验证函数,Boolean checkPW(String 用户 ID,String 密码明文,String 密码密文),返回密码是否正确 boolean 值,密码加密算法使用你认为合适的加密算法。
//bcrypt 通过接受一个参数 cost 提高计算时长,cost 数值越大,bcrypt 运行计算所需的时间就越长
package main
import (
"fmt"
"golang.org/x/crypto/bcrypt"
)
type User struct {
Name string `json:"name"`
Password string `json:"password"`
}
func CheckPassWord(password string, hashedPassword []byte) bool {
err := bcrypt.CompareHashAndPassword(hashedPassword, []byte(password))
if err != nil {
return false
}
return true
}
func main() {
user := User{
Name: "allen",
Password: "abcd1234",
}
hashedPassword, _ := bcrypt.GenerateFromPassword([]byte(user.Password), bcrypt.DefaultCost)
ret := CheckPassWord(user.Password, hashedPassword)
if ret {
fmt.Println("pass")
} else {
fmt.Println("fail") }
}
复制代码
评论