答:导致系统不可用的原因有:
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);
}
}
复制代码
测试结果:
评论