答:导致系统不可用的原因有:
      1.黑客攻击,要做好服务器防火墙,拦截非法请求,禁用敏感端口,防止 dos 攻击;
      2.SQL 注入,程序代码要用参数代替拼接 SQL,对请求参数进行关键词过滤,如:delete,drop,update 等有操作数据的关键词;
     3.数据被篡改,要使用加密,对密码等重要信息要使用加密技术如:对称加密,非对称加密,保证数据安全,不被解析替换;
     4.发生故障,对系统服务器硬件,软件,参数指标进行监控,达到预设指标立即通知告警,及时解决故障问题;
    5.单一中心故障,使用异地多活,当一个数据中心发生意外,导致不可用时,可以通过跳转其他的数据中心来保持可用;
    6.请求并发压力过大导致系统瘫痪,可以增加服务器扩容,宽带,限流,添加服务负载,服务断路器,失效转移,降级;
    7,系统设计缺陷,可以分离应用,细化模块边界,解耦,减少服务依赖,不同应用场景可以隔离部署,彼此互不影响,保证最小影响率;
    8,自动化运维管理,从代码管理,测试,开发环境部署,到开发测试,再到准生产环境部署测试,最后到正式生产部署发布,采用 Jenkins 自动构建,gitlab 代码管理,k8s 服务编排,容器化部署管理等
 package com.xgx.hash.user;
import org.apache.commons.lang3.StringUtils;import org.slf4j.Logger;import org.slf4j.LoggerFactory;
import java.io.IOException;import java.io.UnsupportedEncodingException;import java.security.MessageDigest;import java.security.NoSuchAlgorithmException;import java.util.HashMap;import java.util.Map;import java.util.Scanner;
/** * @author guixian.xi * @date 2021-03-14 16:12. * @desc */public class Index {
    private final static Logger LOGGER = LoggerFactory.getLogger(Index.class);    /*    *模拟数据库保存用户加密密码    */    private static final Map<String, String> encryptMap = new HashMap<>();
    /**     * 登录     *     * @param username     * @param password     */    public void login(String username, String password) throws UnsupportedEncodingException {
        String encrypt = new String(SHAEncrypt(password.getBytes("UTF-8")));        if (checkPW(username, encrypt)) {            LOGGER.info("登录成功");        } else {            LOGGER.info("登录失败");        }
    }
    /**     * 验证密码     *     * @param username     * @param encrypt     * @return     */    public boolean checkPW(String username, String encrypt) {
        String value = encryptMap.get(username);        if (StringUtils.isNotBlank(value)) {            if (value.equals(encrypt)) {                return true;            }        }        return false;    }
    /**     * 注册保存密码     *     * @param username     * @param password     */    public void register(String username, String password) throws UnsupportedEncodingException {
        String encrypt = new String(SHAEncrypt(password.getBytes("UTF-8")));
        encryptMap.put(username, encrypt);
        LOGGER.info("注册成功,用户名:{} ,密码:{}", username, encrypt);    }
    /**     * SHA加密算法     *     * @param data 要加密的数据     */    public byte[] SHAEncrypt(byte[] data) {        byte[] b = null;        try {            MessageDigest md = MessageDigest.getInstance("SHA");            md.update(data);            b = md.digest();        } catch (NoSuchAlgorithmException e) {            e.printStackTrace();        }        return b;    }
    public static void main(String[] args) throws IOException {        boolean repeat = false;        do {
            LOGGER.info("按照提示操作:键盘输入完成操作");            Index index = new Index();            LOGGER.info("==============1.注册================");            System.out.println("请输入:用户名");            Scanner sc = new Scanner(System.in);            String username = sc.nextLine();            System.out.println("请输入:用户密码");            sc = new Scanner(System.in);            String password = sc.nextLine();            System.out.println("开始注册:");            index.register(username, password);
            LOGGER.info("==============2.登录================");
            System.out.println("请输入登录用户名");            sc = new Scanner(System.in);            username = sc.nextLine();            System.out.println("请输入登录密码");            sc = new Scanner(System.in);            password = sc.nextLine();            System.out.println("开始登录:");            index.login(username, password);
            LOGGER.info("==============3.提示================");            LOGGER.info("=>输入:1 重新操作================");            LOGGER.info("=>输入:回车结束操作================");            sc = new Scanner(System.in);            String in = sc.nextLine();            if (in.equals("1")) {                repeat = true;            } else {                repeat = false;                LOGGER.info("==============结束================");            }        } while (repeat);    }}
       复制代码
 测试结果:
评论