Daha Yüksek Kullanılabilirlik
Chris'in belirttiği gibi, API sunucunuz mizanpajınızdaki tek hata noktasıdır. Ayarladığınız, birçok kişinin daha önce uyguladığı bir mesaj kuyruğu altyapısı.
Aynı yolda devam et
API sunucusunda istekleri aldığınızdan ve işi her sunucuda çalışan bir MySQL DB'ye eklediğinizden emin olun. Bu yolda devam etmek istiyorsanız, API sunucu katmanını kaldırmanızı ve İşçilerin her birini doğrudan API Kullanıcılarınızdan kabul komutları için tasarlamanızı öneririm. Her API Kullanıcı bağlantısını doğrudan kullanılabilir çalışan düğümlerden birine dağıtmak için yuvarlak devirli DNS kadar basit bir şey kullanabilirsiniz (ve bir bağlantı başarılı olmazsa yeniden deneyin).
Message Queue Sunucusu Kullanma
Daha sağlam ileti kuyruğu altyapıları, bu amaç için tasarlanmış ActiveMQ gibi yazılımlar kullanır . API Kullanıcılarından POST isteklerini kabul etmek için ActiveMQ'nun RESTful API'sini kullanabilirsiniz ve boş çalışanlar kuyruktaki bir sonraki mesajı ALABİLİR. Ancak, bu muhtemelen ihtiyaçlarınız için aşırı doludur - saniyede gecikme, hız ve milyonlarca mesaj için tasarlanmıştır.
Zookeeper kullanın
Orta yol olarak, özellikle bir ileti kuyruğu sunucusu olmasa da Zookeeper'a bakmak isteyebilirsiniz . Bu iş için $ işte kullanıyoruz. Zookeeper sunucu yazılımını çalıştıran ve kullanıcılardan ve uygulamalardan gelen istekleri işlemek için bir web ön ucuna sahip olan üç sunucumuz var (API sunucunuza benzer). Web ön ucunun yanı sıra, işçilerle Zookeeper arka uç bağlantısı, bir sunucu bakım için kapalı olsa bile kuyruğu işlemeye devam ettiğimizden emin olmak için bir yük dengeleyiciye sahiptir. İş tamamlandığında, işçi Zookeeper kümesine işin tamamlandığını söyler. Bir işçi ölürse, o işi tamamlamak için başka bir işe gönderilir.
Diğer endişeler
- Bir işçinin yanıt vermemesi durumunda işlerin tamamlandığından emin olun
- API bir işin tamamlandığını ve işçinin veritabanından alınacağını nasıl bilecek?
- Karmaşıklığı azaltmaya çalışın. Her çalışan düğümünde bağımsız bir MySQL sunucusuna mı ihtiyacınız var, yoksa bunlar API sunucularındaki MySQL sunucusuyla (veya çoğaltılmış MySQL Kümesi) konuşabilir mi?
- Güvenlik. Herkes iş gönderebilir mi? Kimlik doğrulaması var mı?
- Bir sonraki işi hangi işçi almalı? Görevlerin 10ms veya 1 saat sürmesi beklenmiyor. Hızlıysa, gecikmeyi azaltmak için katmanları kaldırmalısınız. Yavaşsa, daha kısa taleplerin birkaç uzun süren işin arkasına takılmadığından emin olmak için çok dikkatli olmalısınız.