Maison  >  Questions et réponses  >  le corps du texte

java - Question d'entrevue, 100 000 appareils sont nécessaires pour vérifier l'état en ligne. Quelle technologie faut-il utiliser?

Je ne connais pas grand-chose à la concurrence élevée. Comment dois-je gérer cela ? Existe-t-il des livres d'introduction à la haute simultanéité ?

大家讲道理大家讲道理2713 Il y a quelques jours849

répondre à tous(9)je répondrai

  • 漂亮男人

    漂亮男人2017-05-17 09:59:38

    Utilisez directement une connexion longue TCP~ Les maisons intelligentes utilisent généralement les protocoles MQTT~~
    Une connexion longue permet d'économiser trop de ressources que l'interrogation~
    Elle peut toujours être implémentée dans une situation autonome. Bien sûr, compter la base de données est une autre affaire.

    répondre
    0
  • 过去多啦不再A梦

    过去多啦不再A梦2017-05-17 09:59:38

    Je souhaite tester votre compréhension de l'architecture distribuée ici. Cette question devrait porter sur votre compréhension de 服务发现(service discovery)的认识。分布式就是把一个大型项目进行模块化拆分,然后各模块在做集群部署,前端有一个路由服务器来对到达的请求进行分发,把到达的请求路由到能够提供服务的服务端,而哪台服务器能够提供服务这就是服务发现所要做的事情,而在集群环境下能够提供相等服务的服务器肯定不止一台,那到底该由那台服务器对用户的请求进行处理并响应呢?这就又引出了负载均衡,由负载均衡层通过特定的算法来判断应该由那台服务器提供服务,目的就是均匀的把请求分发给各个服务端。服务发现可以了解下Apache的zookeeper或者Netflix的Eureka。微服务这块spring cloud提供了全套的解决方案,还有阿里的dubbo

    .

    répondre
    0
  • 大家讲道理

    大家讲道理2017-05-17 09:59:38

    Gestion distribuée des sessions

    répondre
    0
  • 習慣沉默

    習慣沉默2017-05-17 09:59:38

    J'ai une solution simple
    Installez un processus agent pour l'appareil. Le processus est démarré au démarrage de l'appareil, puis le processus signale régulièrement l'état de l'appareil au serveur si aucun rapport n'est effectué après une certaine période, l'appareil. est considéré comme hors ligne

    répondre
    0
  • PHP中文网

    PHP中文网2017-05-17 09:59:38

    Haute concurrence, communication asynchrone. mots java. . . Netty classique ?
    À mon avis, selon les performances actuelles d'une seule machine, une seule machine peut prendre en charge 100 000 opérations simultanées. Le traitement distribué n'est pas une option nécessaire. Bien sûr, si vous incluez le stockage de base de données, ce sera une autre affaire.

    répondre
    0
  • phpcn_u1582

    phpcn_u15822017-05-17 09:59:38

    Si les connexions longues ne sont pas prises en compte, il existe une idée d'utiliser redis pour définir un indicateur en ligne pour chaque appareil et définir une heure de validité. Le client actualise l'heure de validité à chaque fois qu'il fait une demande de liaison montante et compte le nombre de redis en ligne. statut des appareils à chaque fois. La clé ici est de savoir comment déterminer la durée de cette période, car j'ai toujours travaillé sur le backend. Je ne sais pas combien de temps le client peut rester en ligne lorsqu'il est inactif. ?

    répondre
    0
  • 伊谢尔伦

    伊谢尔伦2017-05-17 09:59:38

    Stockage des données dans Redis, l'accès est plus rapide que db

    répondre
    0
  • 黄舟

    黄舟2017-05-17 09:59:38

    Si c'était moi, je ferais ceci :
    Créer une nouvelle table mémoire MySQL (ENGINE=MEMORY) :
    online(user_id, update_time)
    Utilisez update_time pour enregistrer la dernière heure d'accès de l'utilisateur.
    Par exemple, vous pouvez supposer que tous les utilisateurs dans les 5 minutes penseront en ligne.

    répondre
    0
  • 習慣沉默

    習慣沉默2017-05-17 09:59:38

    Il peut être implémenté en couches. Par exemple, par exemple, 100 000 machines signalent leur état à 10 machines respectivement. Comment 100 000 machines correspondent-elles à 10 machines ? Vous pouvez utiliser le mappage de hachage, puis ces 10 machines signaleront les machines défectueuses. Signalez la situation à un hôte fixe, ce qui signifie approximativement 10w-->10-->1. L'exemple ci-dessus peut avoir un point de défaillance unique, qui peut être résolu en modifiant le nombre de machines de couche supérieure

    .

    répondre
    0
  • Annulerrépondre