我正在开发一个聊天应用程序,我使用firestore, functions &云的信息。我计划尽可能把成本降到最低。
我发现每当用户发送消息或请求接收消息时,他必须首先进行身份验证。用户可以使用登录后获得的令牌进行验证。我将令牌保存在firestore文档中。但是,当我们进行身份验证时,Firestore会为每个发送的消息计算文档中的一次读取。所以我想添加内存存储到它,如果可能的话。但请告诉我,这是明智的决定还是有任何缺点。
你也可以建议我一些创新的方法或一些相关的线程/文章。谢谢你。
您可以使用任何Memcache或Redis作为分布式缓存系统
从缓存中读取比调用数据库要好得多。如果你有一个高rps的应用程序,或者考虑构建一个可扩展的应用程序,那么为了减少延迟,你总是可以使用缓存。
在你的情况下,Cloud Firestore是一个NoSQL云数据库,你可以使用GCP的Memorystore,它在同一个部署的vpc下支持Redis和Memcached。
当您收到请求时,您可以使用Memorystore缓存来检查缓存中是否存在与此相关的用户或认证信息,如果是,则直接将其标记为已验证并重定向到下一个流。如果没有调用Firestore,请填充缓存,然后继续流。
如果你正在使用LRU缓存,你可以将最近认证的用户存储在缓存中,并且可以自动过期一段时间。从而减少对Firestore的调用
如果您正在使用AWS, Amazon ElastiCache为您提供相同的功能。
简而言之,使用缓存系统总是更好的,因为它可以减少延迟。
如果我继续你的问题:
我计划尽可能把成本降到最低。
您不需要自己存储或管理ID令牌,因此不需要firestore和Memory store来满足此要求。如果用户已登录,您可以使用此方法从客户端(web, android, ios)获取其ID令牌。ID令牌的有效期为一小时,因此如果当前ID令牌没有过期,调用将获得当前ID令牌。否则,刷新令牌并获得一个新令牌。