我正在NodeJS中构建API。我们的主要API是用Java构建的,其中所有ID都是加密的(例如AA35794C728A440F)。
Node API需要使用相同的加密算法来实现兼容性。
在测试API的过程中,我惊讶地发现它只能处理25到40(取决于我测试过的AWS EC2实例)每秒请求的某个地方,并且CPU处于最大值进行。
深入研究,我发现问题在于使用的算法,特别是每个加密/解密时每个密钥执行1000 md5操作。
删除加密使我的吞吐量大幅增加,每秒最多1200个请求。
我坚持使用算法 - 如果不影响API的许多消费者,就无法进行更改,因此我需要找到一种解决方法。
我想知道处理这个问题的最有效方法是什么,请记住我需要能够'加密'或'解密'?
我的问题不是如何使算法更有效,因为我想避免每个id 1000 md5 ops,而是绕过实际的加密本身。
我正在考虑将所有密钥(最多可能是2或3百万)存储在地图或树中,然后进行查找,但这意味着要在存储库中拖动大约30-50MB的ID,再加上消耗很多记忆。
答案 0 :(得分:1)
听起来,缺少任何代码,每次调用都会进行密钥派生。
密钥派生的设计很慢。提供有关您要完成的内容和一些代码的更多信息。
答案 1 :(得分:1)
50MB的缓存内存听起来不是那么多......你也可以使用memcache(可能是AWS ElastiCache)来进行实际的缓存 - 这样就可以在多个服务器上轻松共享..