- 服务描述
- 主要API
- GET admin/audit-logs/transaction-group-id/{transaction-group-id}
- GET audit-logs/{audit-log-id}
- GET audit-logs/cfo/{audit-log-id}
- GET audit-logs/templates/{functionGroupCode}/{type}
- GET audit-logs/transaction-group-id/{transaction-group-id}
- POST audit-logs/inquiry-unmapped
- POST audit-logs/cfo/inquiry
- POST customers/activity-logs/inquiry
- POST customers/audit-logs/inquiry
- POST customers/audit-logs/inquiry-unmapped
- POST internal/audit-logs/inquiry
- GET /logout/activities 校验短token的有效性
- 主要listener
- 主要业务流程
- 主要架构设计方案
- 主要数据库设计
- 遇到的问题和解决方案
- 优缺点和改进方案分析,业界对比
服务描述
负责记录audit日志的服务。
主要API
GET admin/audit-logs/transaction-group-id/{transaction-group-id}
通过transaction-group-id动态查询audit logs。需要校验权限。
GET audit-logs/{audit-log-id}
通过audit-log-id和channel(从jwt.aud获取)查询audit logs。
GET audit-logs/cfo/{audit-log-id}
通过audit-log-id查询audit logs。
GET audit-logs/templates/{functionGroupCode}/{type}
GET audit-logs/transaction-group-id/{transaction-group-id}
POST audit-logs/inquiry-unmapped
POST audit-logs/cfo/inquiry
POST customers/activity-logs/inquiry
POST customers/audit-logs/inquiry
通过userId动态查询audit logs,需要被search_mapping和result_mapping使用。
POST customers/audit-logs/inquiry-unmapped
POST internal/audit-logs/inquiry
GET /logout/activities 校验短token的有效性
用户登出后,显示用户在登录期间的audit信息。通过user sessionId查询audit日志。
流程:
domain ms → audit-log/logout/activity → audit-callback/inquiry → INB USP
audit-log根据两个配置,决定是否获取INB的数据还是获取本地数据库的数据。
| 请求参数 | 描述 |
|---|---|
| pageNo | default 0 |
| pageSize | default 10 |
| sortOrder | ASC or DESC |
| 响应参数 | 描述 |
|---|---|
| status | SUCCESS or FAILED |
| data | List<Object> |
| data.id | audit log record id |
| data.txnType | txn type or function code, BBO |
| data.from | sourceRef, CFO |
| data.to | destinationRef. DEST_REF |
| data.amount | 11.23 |
| data.refNumber | |
| data.currencyCode | txn currency, USD |
| data.logTime | txn activity time, 1684226077262 |
| totalCount | total count of matched record |
| pageNo | current page No |
| pageSize | current page size |
主要listener
主要业务流程
主要架构设计方案
主要数据库设计
token
token信息表,包括token取值,channel,group,用户ID,是否撤销,撤销原因。
| Field | Remark | Value |
|---|---|---|
| id | id | UUID |
遇到的问题和解决方案
ms-auditlog服务有一张主表需要保存18个月的记录,数据库7亿+,单表查询缓慢。已经做了分区(创建3个月分区,detach14个月,delete18个月),索引。
方案:读写分离,分表,优化分区,优化索引。
读写分离:考虑到该表是主表,而且是共享数据库(AUTH),写入频繁,大多是上游服务异步发送消息,对性能要求不高。读取不频繁,主要是后台管理平台需要读取数据。
通过读写分离,可以降低数据库的压力,提升读操作的性能。
优化分区,考虑18个月分区一共7亿+的数据量,平均每个月分区有3800万+。
如果时间跨度不变,使用周分区一共72分区,平均每一个周分区900万+。如果使用日分区一共504分区,平均每个日分区100万+。
问题:如果查询时间跨分区,数据量仍然很大。二是公司分区数量限制。
优点:日查询性能提升。查询时间跨度越小,性能越明显。
优化索引:增加组合索引
CREATE INDEX idx_tlog_grouped on v_audit_log_v3 (owner_lgn_id, fnc_cd, action, actv_time);
通常复合索引的字段的顺序根据查询的使用频率和选择性来决定。选择性高的列(即较少重复值的列)应该放在前面。
问题:如果查询变化,使用了更多字段,可能导致复合索引失效。
方案:为常用的查询方案增加复合索引。