公众号笔记: 2018年12月

时间:2022-09-04 13:03:39

1、web登录的安全性

   现阶段安全的方式:数字签名 发送方:报文 + 签名(私人秘钥加密---哈希函数对报文生成报文摘要) 接收方:相同哈希函数从报文中计算得到报文摘要,再用公用秘钥解密签名得到报文摘要 结合了:非对称秘钥加解密 + 数字摘要 例子:username+MD5(password) + token 通过签名,得到checkCode发送给服务器,服务器经过对原始数据签名运算,与checkCode对比。

2、mysql错误案例

  1)、 too many connections --- 连接数太多,导致连接不上数据库,业务无法正常运行 思路:连接数太多而服务崩溃,是不是我们的设置的最大连接数max_connections参数的值设计的太小。一般该字段有默认值151,我们可以设置更大。(但是有可能发生,数据库支撑不了所设置的最大连接数的连接而崩溃) 其次我们可以将并发处理数量innodb_thread_concurrency = 0(0代表不限制)降低到64/16等。

  2)、主从复制报错, Last_SQL_Errno:1062 --- 从库与主库数据冲突 思路:是不是在从库中操作报错。 发现是从库中进行了一条针对有主键的表的sql语句插入,主库中再插入相同sql,主从复制,复制前主库和从库就已经有相同的2条数据,所以报错。 解决方法:主从数据一致,跳过从库的数据报错,./pt-slave-restart -u用户名 -p密码 但是一般情况,都是主库写入,从库读取数据,所以发生这种情况也是少见 Last_SQL_Errno:1593 --- server-id冲突 搭建主从复制的两个服务器,server-id是唯一的。

  3)、MySQL安装过程报错 善于看error log日志。通常情况是MySQL数据库的数据目录没有权限。 在安装MySQL初始化的时候,加上-user=mysql赋予权限。

  4)、阿里云MySQL的配置文件中,需要注意一个参数设置 lower_case_table_names = 1;不区分表名的大小写。

  5)、输入表情乱码问题 将字符集 character-set-server = utf8mb4,utf8mb4是utf8的超集。

3、持续集成部署

  代码提交到git上 --- 定时/人工监控 --- maven项目构建 --- docker调用镜像、启动 --- 部署

4、微服务架构指南

  主要构件:Eureka(服务注册中心)、Ribbon(服务间发起请求,基本Ribbon坐负载均衡)、Feign(服务之间的互相调用)、Hystrix(隔离不同服务间调用,避免雪崩)、Zuul(网关) API网关充当所有客户端的单一入口点,类似方向代理,简单的负载均衡,认证和授权,处理故障,审核,协议转换,路由机制。 API网关应该始终是一个高可用和高性能的组建,因为它是整个系统的入口。 最佳实践:领域驱动设计(围绕业务领域进行服务建模)、分散数据管理(避免共享数据库)、智能端点和哑管道、异步通信、避免服务耦合、分散开发、最终一致性、容错(断路器)、产品工程化。

5、判断一个元素在亿级数据中存在

  首先想到用hashMap存放数据,写入查询效率都很高。但是数量大的时候会内存溢出。 需要将庞大的数据load到内存中(只是为了判断是否存在) 布隆过滤:保存了一个很长的二进制向量,结合hash函数实现。查询不存在的话肯定不存在数据,查询存在大概率存在,不能清除其中的数据。 具体实现参考网络其他文章。

6、线上JVM的FullGC发生故障

  采用Quorum算法,接收数据的服务B部署集群的奇数机器N,发送数据的服务A发送给奇数B服务机器,得到N/2 +1 响应的成功的数量,则表示数据传输成功,这就是Quorum算法。

  但是线上某时间突然A系统宕机了,排出了B系统宕机,结果发现是系统A的大面积垃圾回收。原因是FullGC卡顿了几十秒,造成了代码判断时间超时(实际未超时,所以排查B系统没问题)。

  解决方法:在代码里面加入判断,如果发生了JVM FullGC,就自动延长超时时间。

 7、rm -rf * 的避免办法

  1)、命令替换

    专门建一个文件夹作为垃圾回收,然后mv要删除的到文件夹里面去;

  2)、收拢权限

    将账号的权限分离,普通的工作长哈及只能删除日志目录;

  3)、加 && 符号

    将进入文件夹操作和删除操作合并,这样cd 进文件夹失败就不会删除操作;

 

 参考:纯洁的微笑、石杉的架构笔记、java版web项目、架构师之路、springForAll社区等公众号。