机器内存的选择

野火IM使用了hazelcast作为内存缓存。在内存越来越便宜的情况下,合理地使用缓存,会带来性能的大幅提升。野火IM针对不同的数据使用不同的缓存策略。

1. 消息数据

1.0.1. 消息对内存的占用

野火IM采用了先进的设计,对于消息只保存一条原始数据。也就是说1对1聊天和群聊每发一条消息,野火IM只保存一条消息。另外野火IM的消息尺寸比较小,对于图片视频语音都是作为媒体文件上传到对象存储服务器,消息体内只保存一个url,消息使用pb格式存储,平均下来不会大于1K字节。

1.0.2. 缓存的配置

消息数据会随着时间线性积累,而且旧的消息可能再也用不到,因此对于消息,野火IM的建议每个用户缓存最新100条7天以内消息。预估一下,假如每条消息1K,10W活跃用户,10W 100 1K = 10G。当用户接收消息缓存没有命中时,会从数据库加载该消息,不会丢失消息。修改配置config/hazelcast.xml, max-size修改为您的用户数*100。如果您使用专业版和mongodb,缓存条数可以减半。

<map name="messages_map">
    <!-- 7 days -->
    <time-to-live-seconds>604800</time-to-live-seconds>
    <eviction-policy>LRU</eviction-policy>
    <max-size policy="PER_NODE">10000000</max-size>
    <eviction-percentage>10</eviction-percentage>
    <map-store enabled="true">
        <class-name>io.wildfirechat.persistence.MessageLoader</class-name>
        <write-delay-seconds>0</write-delay-seconds>
    </map-store>
</map>

注:活跃用户数指7天以内登录的用户数。

2. 其它数据

其它数据比如用户,好友,群组,设置。基本与用户数成比例,每人不会超过30K数据,为了提高访问速度,因此全部放到内存缓存中。预计有10W活跃用户, 10W * 30K = 3G。

3. 总结

如果您的用户需求较高且用户比较活跃,建议您每10W活跃用户配置24G内存。也可以适当降低缓存数减少内存消耗。专业版建议每10W用户12G内存。

2018 © wildfirechat.net 京ICP备18060403号-1 all right reserved,powered by Gitbook该文件修订时间: 2021-11-27 23:08:18

results matching ""

    No results matching ""