大彬大约 5 分钟

大家好,我是大彬~

今天跟大家分享知识星球open in new window小伙伴提出的一些技术问题和解答。

球友提问:

彬哥,我们项目组要求用户敏感数据加密存储,主要的问题:

1 、加密后如何查询才能击中索引;

2 、用户身份如何验证(手机号、身份证);

大佬有什么建议吗?

大彬的回答:

首先需要一个专用于加密解密的服务。

所有加密解密操作都访问该服务。 可访问数据库的人, 秘钥管理人,加密服务管理人,三者不能有任何一方有办法获取到所有信息。

接下来回答你的两个问题:

1、加密后如何查询才能击中索引?

使用 hash 查询。加密字段只允许精准查询,不允许模糊。如果一定要模糊,那也是有限制的模糊,提前定好模糊规则,根据模糊规则提前预留相关数据,再进行加密。

2 、用户身份如何验证(手机号、身份证); 验证后再加密,或者允许解密。

需要注意的是:

  1. 不同业务场景对脱敏的要求是不一样的。我们公司的要求是,任何人任何时候都不能看到明文,明文只出现在内存中。
  2. 解密后,明文只能存在内存中,调用解密必须要有日志。

球友提问:

大彬哥,请教您技术方案,我们项目有个场景,需要在一段时间内发了n个相同的mq消息,去更新数据,只需要保留最后一个消息就可以,前面的都可以不要,应该怎么实现?

大彬的回答:

收到消息后先往redis写,如果存在就直接覆盖,如果不存在就先写入,并且发送一条延迟消费的消息到mq,具体延迟多久可以是大于等于你说的一段时间内这个值。然后收到延迟消费的消息时直接去取redis的消息,这条消息基本就是这段时间内的最后一条消息了


球友提问:

大佬你好,请教一个问题。 有两个百万条数据的表以及三张万以内数据表,取数据的时候不可避免要 join。 客户端可以自由调整日期,来查看数据。 因为表数据十分钟同步更新一次以及用户自由调整日期,感觉没办法做缓存。 现在每次查询都要 join 一次,导致查询数据很慢,要 10s 多,请问一下要怎么优化?

大彬的回答:

如果能改表结构的话,把索引和内容分开存,其实百万级的数据全放内存里应该是没问题的。如果非要 join,要么降低 join 的数据规模,要么提前算好数据,要么把能缓存的数据(比如那 3 张表)缓存起来,尽量降低查询时的磁盘消耗。


往期星球提问整理:

球友提问:

大彬哥,请教一个问题(之前面试问到的),怎么做到增加机器线性增加性能的?

大彬的回答:

你好。线性扩容有两种情况,一种是“无状态”服务,比如常见的 web 后端;另一种是“有状态服务”,比如 MySQL 数据库。

对于无状态服务,只要解决了服务发现功能,在服务启动之后能够把请求量引到新服务上,就可以做到线性扩容。常见的服务发现有 DNS 调度(通过域名解析到不同机器)、负载均衡调度(通过反向代理服务转发到不同机器)或者动态服务发现(比如 dubbo ),等等。


球友提问:

彬哥,请教你两个问题:

  1. 新功能提测之类的,流程是怎样的,是各个功能特性分开提测还是一起合并了提测?另外比较偏向业务的,单元测试集成测试这些要求怎样,还是会在合入的时候进行限制,不到一定比率不允许合入?
  2. 一般线上出事故了,就是开会总结、发邮件改进流程之类的。彬哥有没啥经验之类的可以分享?

大彬的回答:

1.像我们项目组的话,服务有一定程度的拆分,每周都会上线,冲突的概率不高。如果冲突了,那就合并测。单元测试有要求,但是最高就要求到40%,再高维护成本太高。

2.总结发邮件肯定是少不了的,我分享一下我们这边的流程,你可以参考一下。

a.发现线上事件后,需第一时间报告运营经理,项目经理。

b.判断线上事件的性质,对外报告处理故障进展,按流程要求通知相关负责人。

c.问题处理。如果问题比较紧急(故障分为A/B/C三个等级),需要立即通知相关部门的领导,由各部门领导协调事故处理,一般要在2小时内给予解决,保证系统恢复正常。

d.线上故障处理后都需要测试人员进行跟进,问题修复后第一时间验证,然后按照上线管理流程进行程序发布

e.通知业务方

持续更新中...

往期星球提问整理:

秋招还没有offer,打算去上培训班了...open in new window

非科班,如何补基础?open in new window

想出国读研了...open in new window

今年这情况,读非全值得吗?open in new window

读博还是找工作?open in new window

性格测试真的很重要open in new window

想找一份实习工作,需要准备什么open in new window

Loading...