写点什么

系统稳定高可用的方案以及用户密码验证函数

用户头像
Acker飏
关注
发布于: 2020 年 08 月 26 日

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

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

  • 硬件故障

  • 软件Bug

  • 系统发布

  • 并发压力

  • 网络攻击

  • 外部灾害

保障系统稳定高可用的方案:

解耦(降低软件Bug)

  • 高内聚、低耦合的组件设计原则

  • 面向对象基本设计原则

  • 面向对象设计模式

  • 领域驱动设计建模

隔离(减少软件Bug)

  • 业务与子系统隔离

  • 微服务与中台架构

  • 生产者与消费者隔离

  • 虚拟机与容器隔离

异步(应对并发压力)

  • 多线程编程

  • 反应式编程

  • 异步通信网络编程

  • 事件驱动异步架构

备份(应对硬件故障)

  • 集群设计

  • 数据库复制

失效转移(应对硬件故障)

  • 数据库主主失效转移

  • 负载均衡失效转移

幂等(减少软件Bug)

  • 保证服务重复调用和调用一次产生的结果相同

事务补偿(减少软件Bug)

  • 通过执行业务逻辑逆操作,使事务回滚到事务前状态

重试(应对网络波动)

  • 通过重试的方式修复单次调用故障

熔断(应对硬件故障)

  • 通过断路器检测到故障并阻止应用程序尝试执行注定要失败的操作,避免出现服务级联失效。

限流(应对并发压力)

  • 通过对进入系统的用户请求进行限流限制,丢弃一部分用户请求,保证真个系统的可用性。

降级(应对并发压力)

  • 将非核心功能关闭将系统资源留给核心功能。

异地多活(应对硬件故障、外部灾害)

  • 将数据中心分布在多个不同地点的机房里。



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



fun checkPW(id: String, pwd: String, encodedPwd: String): Boolean {
if(id.isEmpty() || pwd.isEmpty() || encodedPwd.isEmpty()) return false
return encodedPwd == (id.md5() + pwd.md5()).sha1()
}
fun String.md5(): String {
val digest = MessageDigest.getInstance("MD5")
val result = digest.digest(this.toByteArray())
return toHex(result)
}
fun String.sha1(): String {
val digest = MessageDigest.getInstance("SHA-1")
val result = digest.digest(this.toByteArray())
return toHex(result)
}
private fun toHex(result: ByteArray): String {
return with(StringBuilder()) {
result.forEach {
val hex = it.toInt() and (0xff)
val hexStr = hex.toString()
if (hexStr.length == 1) {
append("0").append(hexStr)
} else {
append(hexStr)
}
}
toString()
}
}



用户头像

Acker飏

关注

还未添加个人签名 2018.05.03 加入

还未添加个人简介

评论

发布
暂无评论
系统稳定高可用的方案以及用户密码验证函数