假如要我设计一个QQ,访问量在百万级别并发。
大致功能点:
1、上线通知
2、群的消息显示
3、发送消息
4、良好扩展性。增加用户能直接通过增加机器解决
5、稳定性
6、高性能
相关数据性能。
1、单个节点能支持一万左右的用户登录
2、使用mysql数据库存储用户信息
处理策略:
1、数据库上如果是百万级别,可以做表分区处理。可以使用hash分区处理成100分区表。保证查询速度
2、在服务器端建立100个hashset,每个hashset创建大小为10000,分配到100个服务器上。按照用户登录后取得的ID与这100个hash建立一个对应关系,保证指定的用户id只能在一个hash上进行注册
3、上线通知:注册后查询当前用户的好友以及群,逐个通知高亮显示
4、群的消息显示:发送消息后,查询群的好友,逐个发送提示消息
5、下线通知:退出后,执行如上步骤,逐个发送退出消息
6、发送消息:发送消息给指定好友,根据好友的id找到对应的服务器和hash,然后做消息推送
7、扩展性:每增加10000个客户,增加一组hash,增加一个服务器。如果超过100万的用户,可以做1000个大小的hash散列
8、稳定性:通过单个hash节点的负载完成
9、可以扩展用户的地区属性以及是否活跃的属性,建立两组hash散列。将活跃和非活跃用户推送到不同的散列服务器上。也可以通过地区属性将用户动态调整到不同的散列服务器上。