java - Soalan temu bual, 100,000 peranti diperlukan untuk menyemak status dalam talian Apakah teknologi yang harus digunakan?
大家讲道理2017-05-17 09:57:38
0
9
931
Saya tidak tahu banyak tentang konkurensi tinggi Bagaimana saya harus menangani perkara ini? Adakah terdapat buku pengenalan tentang keselarasan tinggi?
Gunakan sambungan panjang TCP secara langsung~ Rumah pintar biasanya menggunakan protokol MQTT~~ Sambungan panjang menjimatkan terlalu banyak sumber daripada pengundian~ Ia masih boleh dilaksanakan dalam situasi yang berdiri sendiri Sudah tentu, mengira pangkalan data adalah perkara lain.
Saya ingin menguji pemahaman anda tentang seni bina yang diedarkan di sini. Soalan ini sepatutnya mengenai pemahaman anda tentang 服务发现(service discovery)的认识。分布式就是把一个大型项目进行模块化拆分,然后各模块在做集群部署,前端有一个路由服务器来对到达的请求进行分发,把到达的请求路由到能够提供服务的服务端,而哪台服务器能够提供服务这就是服务发现所要做的事情,而在集群环境下能够提供相等服务的服务器肯定不止一台,那到底该由那台服务器对用户的请求进行处理并响应呢?这就又引出了负载均衡,由负载均衡层通过特定的算法来判断应该由那台服务器提供服务,目的就是均匀的把请求分发给各个服务端。服务发现可以了解下Apache的zookeeper或者Netflix的Eureka。微服务这块spring cloud提供了全套的解决方案,还有阿里的dubbo
Saya ada penyelesaian mudah Pasang proses ejen untuk peranti Proses ini dimulakan apabila peranti dimulakan, dan kemudian proses secara aktif melaporkan status peranti kepada pelayan dengan kerap Jika tiada laporan dibuat selepas tempoh tertentu, peranti dianggap luar talian
Konkurensi tinggi, komunikasi tak segerak. perkataan java. . . jaring klasik? Pada pendapat peribadi saya, mengikut prestasi mesin tunggal semasa, satu mesin boleh menyokong 100k operasi serentak bukan pilihan yang perlu, jika anda memasukkan penyimpanan pangkalan data, ia akan menjadi perkara lain.
Jika anda tidak menganggap sambungan yang panjang, ada idea untuk menggunakan redis untuk menetapkan bendera dalam talian untuk setiap peranti dan menetapkan masa yang sah. Pelanggan menyegarkan masa yang sah setiap kali ia membuat permintaan pautan atas, dan mengira bilangan redis peranti status dalam talian setiap kali Perkara utama di sini ialah bagaimana untuk menentukan tempoh masa ini kerana saya sentiasa bekerja pada bahagian belakang Saya tidak tahu berapa lama pelanggan boleh kekal dalam talian apabila ia tidak aktif daemon?
Jika saya, saya akan lakukan ini: Buat jadual memori MySQL baharu (ENGINE=MEMORY): dalam talian(user_id, update_time) Gunakan update_time untuk merekodkan masa akses terkini pengguna. Sebagai contoh, anda boleh menganggap bahawa semua pengguna dalam masa 5 minit akan berfikir dalam talian.
Ia boleh dilaksanakan secara berlapis Contohnya, 100,000 mesin melaporkan statusnya kepada 10 mesin, bagaimanakah 100,000 mesin sepadan dengan 10 mesin, dan kemudian 10 mesin ini akan melaporkan mesin yang rosak. Laporkan situasi kepada hos tetap, yang secara kasarnya bermaksud 10w-->10-->1 Contoh di atas mungkin mempunyai satu titik kegagalan, yang boleh diselesaikan dengan menukar bilangan mesin lapisan atas
Gunakan sambungan panjang TCP secara langsung~ Rumah pintar biasanya menggunakan protokol MQTT~~
Sambungan panjang menjimatkan terlalu banyak sumber daripada pengundian~
Ia masih boleh dilaksanakan dalam situasi yang berdiri sendiri Sudah tentu, mengira pangkalan data adalah perkara lain.
Saya ingin menguji pemahaman anda tentang seni bina yang diedarkan di sini. Soalan ini sepatutnya mengenai pemahaman anda tentang
服务发现
(service discovery)的认识。分布式就是把一个大型项目进行模块化拆分,然后各模块在做集群部署,前端有一个路由服务器来对到达的请求进行分发,把到达的请求路由到能够提供服务的服务端,而哪台服务器能够提供服务这就是服务发现
所要做的事情,而在集群环境下能够提供相等服务的服务器肯定不止一台,那到底该由那台服务器对用户的请求进行处理并响应呢?这就又引出了负载均衡
,由负载均衡层通过特定的算法来判断应该由那台服务器提供服务,目的就是均匀的把请求分发给各个服务端。服务发现可以了解下Apache的zookeeper
或者Netflix的Eureka
。微服务这块spring cloud
提供了全套的解决方案,还有阿里的dubbo
Pengurusan sesi teragih
Saya ada penyelesaian mudah
Pasang proses ejen untuk peranti Proses ini dimulakan apabila peranti dimulakan, dan kemudian proses secara aktif melaporkan status peranti kepada pelayan dengan kerap Jika tiada laporan dibuat selepas tempoh tertentu, peranti dianggap luar talian
Konkurensi tinggi, komunikasi tak segerak. perkataan java. . . jaring klasik?
Pada pendapat peribadi saya, mengikut prestasi mesin tunggal semasa, satu mesin boleh menyokong 100k operasi serentak bukan pilihan yang perlu, jika anda memasukkan penyimpanan pangkalan data, ia akan menjadi perkara lain.
Jika anda tidak menganggap sambungan yang panjang, ada idea untuk menggunakan redis untuk menetapkan bendera dalam talian untuk setiap peranti dan menetapkan masa yang sah. Pelanggan menyegarkan masa yang sah setiap kali ia membuat permintaan pautan atas, dan mengira bilangan redis peranti status dalam talian setiap kali Perkara utama di sini ialah bagaimana untuk menentukan tempoh masa ini kerana saya sentiasa bekerja pada bahagian belakang Saya tidak tahu berapa lama pelanggan boleh kekal dalam talian apabila ia tidak aktif daemon?
Menyimpan data dalam redis, akses lebih cepat daripada db
Jika saya, saya akan lakukan ini:
Buat jadual memori MySQL baharu (ENGINE=MEMORY):
dalam talian(user_id, update_time)
Gunakan update_time untuk merekodkan masa akses terkini pengguna.
Sebagai contoh, anda boleh menganggap bahawa semua pengguna dalam masa 5 minit akan berfikir dalam talian.
Ia boleh dilaksanakan secara berlapis Contohnya, 100,000 mesin melaporkan statusnya kepada 10 mesin, bagaimanakah 100,000 mesin sepadan dengan 10 mesin, dan kemudian 10 mesin ini akan melaporkan mesin yang rosak. Laporkan situasi kepada hos tetap, yang secara kasarnya bermaksud 10w-->10-->1 Contoh di atas mungkin mempunyai satu titik kegagalan, yang boleh diselesaikan dengan menukar bilangan mesin lapisan atas
.