Redis
 sql >> база данни >  >> NoSQL >> Redis

Идеи за мащабиране на чат в AWS?

Създаването на услуга за чат не е толкова лесно, колкото си мислите.

Изградих пълни XMPP сървъри, клиенти и SDK и мога да свидетелствам за някои от фините и трудни проблеми, които възникват. Прототип, в който потребителите се виждат и чатят е лесно. Пълнофункционалната система със създаване на акаунт, сигурност, откриване, присъствие, офлайн доставка и списъци с приятели е много по-голямо предизвикателство. Особено трудно е да се мащабира това в произволен брой сървъри.

PubSub е функция, предлагана от Chat Services (вижте XEP-60), а не традиционно средство за изграждане на услуга за чат. Виждам привлекателността, но PubSub може да има недостатъци.

Някои въпроси към вас:

  1. Правите ли това през мрежата? Ще се свързват ли потребителите и ще се свързват дълго или имате решение за уеб сокети?

  2. Колко потребители? Колко връзки на потребител? Съотношение на записа към четенето?

  3. Вашата идея за използване на SQS по този начин е интересна, но вероятно няма да се мащабира. Не е необичайно да имате 50k или повече потребители на чат сървър. Ако анкетирате всяка SQS опашка за всеки потребител, няма да се доближите до това. Би било по-добре да имате опашка за всеки сървър и сървърът да анкетира само тази опашка. След това вие трябва да разберете на кой сървър е даден потребител и да поставите съобщението в правилната опашка.

Подозирам, че ще искате да отидете на нещо като:

  1. Голяма RDS база данни в бекенда.
  2. Много предни сървъри, обработващи клиентските връзки.
  3. Някакъв Java/C# код от средно ниво, проследяващ всичко и насочващ съобщенията на правилното място.

За да получите представа за сложността на изграждането на сървър за чат, прочетете XMPP RFC:RFC 3920RFC 3921



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Защо Laravel Redis::scan('*') връща очакван ключ, но Redis::keys('*') не?

  2. Как да разбера дали sidekiq е свързан към Redis сървър?

  3. Как да накарам Redis да започне на Heroku?

  4. изключете redis-сървъра от командния ред

  5. Redis serviceStack клиент за свързване в пул