单点登录(SSO)
单点登录,Single Sign On(简称SSO),只需要登录一次,就可以访问所有信任的应用系统。
如果是单个tomcat服务,session可以共享,如果是多个tomcat,那么服务session不共享。
为此我们需要提出针对单点登录的解决方案。
单点登录解决方案
- JWT(常见)
- Oauth2
- CAS
以最简单的订单和登录服务为例,JWT实现的单点登录时序图如下:
- 用户访问其他系统,会在网关判断token是否有效
- 如果token无效则会返回401(认证失败)前端跳转到登录页面
- 用户发送登录请求,返回浏览器一个token,浏览器把token保存到cookie
- 再去访问其他服务的时候,都需要携带token,由网关统一验证后路由到目标服务
权限认证
最常见的就是RBAC模型来指导实现权限。
RBAC(Role-Based Access Control)基于角色的访问控制
由3个基础部分组成:用户、角色、权限,有时还可能加其他业务表(譬如菜单表、订单表)
常见结构如下:
- 5张表(用户表、角色表、权限表、用户角色中间表、角色权限中间表)
- 7张表(用户表、角色表、权限表、菜单表、用户角色中间表、角色权限中间表、权限菜单中间表)
即,基础表+业务表+每张表前后组成的中间表
一般使用的框架是:
Apache shiro 、Spring security(推荐)
上传数据的安全性的控制
使用非对称加密(或对称加密),给前端一个公钥让他把数据加密后传到后台,后台负责解密后处理数据
对称加密
文件加密和解密使用相同的密钥,即加密密钥也可以用作解密密钥。
优点:加密速度快,效率高
缺点:相对不太安全(不要保存敏感信息)
非对称加密
两个密钥:公开密钥(publickey)和私有密钥,公有密钥加密,私有密钥解密
优点:与对称加密相比,安全性更高
缺点:加密和解密速度慢,建议少量数据加密
你负责项目的时候遇到了哪些比较棘手的问题?怎么解决的
从以下几个方面选一个回答即可。(不是很建议用第四个回答)
日志采集
ELK:即Elasticsearch、Logstash和Kibana三个软件的首字母
常规采集:按天保存到一个日志文件
ELK
Logstash是一个数据收集引擎,可以动态收集数据,对数据进行过滤、分析并存储到指定的位置。
Elasticsearch是全文搜索分析引擎,可以对数据存储、搜索、分析。
Kibana是一个数据分析和可视化平台,配合Elasticsearch对数据进行搜索,分析,图表化展示
常见Linux处理日志的命令
-
实时监控日志的变化
- 实时监控某一个日志文件的变化:tail -f xx.log;实时监控日志最后100行日志: tail --n 100 -f xx.log
-
按照行号查询
- 查询日志尾部最后100行日志:tail -- n 100 xx.log
- 查询日志头部开始100行日志:head --n 100 xx.log
- 查询某一个日志行号区间:cat -n xx.log | tail -n +100 | head -n 100 (查询100行至200行的日志)
-
按照关键字找日志的信息
- 查询日志文件中包含debug的日志行号:cat -n xx.log | grep "debug"
-
按照日期查询
- sed -n '/2023-05-18 14:22:31.070/,/ 2023-05-18 14:27:14.158/p'xx.log
-
日志太多,处理方式
- 分页查询日志信息:cat -n xx.log |grep "debug" | more
- 筛选过滤以后,输出到一个文件:cat -n xx.log | grep "debug" >debug.txt
怎么快速定位系统的瓶颈
一般使用以下三个方法。
- 压测(性能测试),项目上线之前测评系统的压力
- 监控工具、链路追踪工具,项目上线之后监控
- 线上诊断工具Arthas(阿尔萨斯),项目上线之后监控、排查
压测
指标:响应时间、 QPS、并发数、吞吐量、 CPU利用率、内存使用率、磁盘IO、错误率
压测工具:LoadRunner、Apache Jmeter ...
监控、链路追踪工具
监控工具:Prometheus+Grafana
链路追踪工具:skywalking、Zipkin
阿尔萨斯
其中第六点生成的火焰图如下:
长度越长,说明占用的cpu时间越多。高度越高,说明递归的层数越多。