大彬大约 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...