架构师培训第十一周练习

用户头像
小蚂蚁
关注
发布于: 2020 年 08 月 26 日

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

 1、导致系统不可用的原因分为两类

(1)计划内宕机

   计划内宕机指的是系统在运行阶段不可避免的宕机,包括:

n  系统定期升级维护

n  运行环境基础软件升级

n  运行环境硬件升级

n  数据库数据变更等等

(2)非计划性宕机

  非计划性宕机指的是系统出现的故障导致的宕机,包括:

n  应用服务器故障

n  数据库服务器故障

n  硬盘数据丢失和损坏

n  运维人员误操作,比如误删数据等

n  突发超大访问流量导致系统崩溃

n  网络故障,机房断电等

2、保障系统的高可用方案

(1)解耦

    采用“高内聚、低耦合”的思想进行系统设计,通过领域驱动进行模型设计、面向对象的组件设计原则、模型对象的设计模式等,使系统易扩展、易维护、易运维从而达到系统高可用。系统的设计和代码的质量是系统能否高可用很重要的因素。

(2)隔离

   隔离按级别可以分为线程池隔离、进程隔离、模块隔离、应用隔离、机房隔离。通过不同的隔离手段,使系统某个部分出现故障时,不会影响整个系统的运行,系统可以持续对外提供服务。

(3)限流

   系统的处理能力有限,当突发情况,服务请求量超过处理能力,造成响应时间迅速提升,甚至系统崩溃而无法响应。因此,为了保证系统在遭遇突发流量时,能够正常运行,需要服务加上限流。常见的限流算法有:漏桶、令牌桶、滑动窗口计数。

(4)备份和失效转移

   备份和失效转移是常用的高可用手段,应用服务器集群、数据库备份、磁盘备份等等,当某个节点故障、通过失效转移启用另一个备份节点、剔除故障节点,保障系统高可用。

(5)降级

    业务降级,是指牺牲非核心的业务功能,保证核心功能的稳定运行。将核心和非核心功能实现拆分到相对独立的不同代码单元,分优先级进行隔离。在后台通过开关控制,降级部分非主流程的业务功能,减轻系统依赖和性能损耗,从而提升集群的整体吞吐率。

(6)熔断

    当下游服务因访问压力过大而响应变慢或失败,上游服务为了保护自己以及系统整体的可用性,可以暂时切断对下游服务的调用,保障系统可用性,当下游服务恢复正常时,上游服务恢复对下游系统的访问。

(7)异地多活

    但在一些极端场景下,有可能整个机房出现故障。例如,典型的有机房断电、机房火灾、地震等,而且即使有其他地区的备份,把备份业务系统全部恢复花费的时间也比较长,如果业务期望达到即使在此类灾难性故障的情况下,业务也不受影响,或者在几分钟内就能够很快恢复,那么就需要设计异地多活架构,在不同地理位置上的建立数据中心,部署系统提供业务服务。

 

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

 

/**

     *

     * @param id 用户id

     * @param pwd 明文密码

     * @param ciphertextPwd 密文密码

     * @return

     */

    public boolean check(String id ,String pwd,String ciphertextPwd){

      

       //采用国密摘要算法SM3(类似MD5)计算pwd明文的密码密码

      

       String sm3pwd = Sm3Encryptor.encrypt(pwd);

      

       //比较计算出的密文密码和传入的密文密码ciphertextPwd是否相等

       //不相等返回false

       if(!sm3pwd.equals(ciphertextPwd)){

           return false;

       }

      

       //相等就通过用户id查询数据库中用户的信息,获取账户信息

        UserDto user = findUser(id);

       //获取保持在数据库中用户的密文密码

       String dbpwd = user.getPasswrod();

      

       //比较数据库中用户的密文密码和传入的密文密码ciphertextPwd是否相等

       //相等返回true

       if(dbpwd.equals(ciphertextPwd)){

           return true;

       }

      

       return false;

    }

  

用户头像

小蚂蚁

关注

还未添加个人签名 2018.08.10 加入

还未添加个人简介

评论

发布
暂无评论
架构师培训第十一周练习