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é??
光陰似箭催人老,日月如移越少年。
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.
Je souhaite tester votre compréhension de l'architecture distribuée ici. Cette question devrait porter sur votre compréhension de 服務(wù)發(fā)現(xiàn)
(service discovery)的認(rèn)識。分布式就是把一個大型項目進(jìn)行模塊化拆分,然后各模塊在做集群部署,前端有一個路由服務(wù)器來對到達(dá)的請求進(jìn)行分發(fā),把到達(dá)的請求路由到能夠提供服務(wù)的服務(wù)端,而哪臺服務(wù)器能夠提供服務(wù)這就是服務(wù)發(fā)現(xiàn)
所要做的事情,而在集群環(huán)境下能夠提供相等服務(wù)的服務(wù)器肯定不止一臺,那到底該由那臺服務(wù)器對用戶的請求進(jìn)行處理并響應(yīng)呢?這就又引出了負(fù)載均衡
,由負(fù)載均衡層通過特定的算法來判斷應(yīng)該由那臺服務(wù)器提供服務(wù),目的就是均勻的把請求分發(fā)給各個服務(wù)端。服務(wù)發(fā)現(xiàn)可以了解下Apache的zookeeper
或者Netflix的Eureka
。微服務(wù)這塊spring cloud
提供了全套的解決方案,還有阿里的dubbo
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
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.
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. ?
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.
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
.