title: System architecture when using inmemory objects?
body: <p>I have created a stranger chat web application using .net core and jquery and signalR. Currently I am using dictionary to store connectionid and message for users. I am using the in memory object dictionary and not using any database.For testing perspective, I have deployed it on azure and It is working fine for 3-4 users. My questions are</p>
  <p>1.Let's say If my application has 3000 users chatting at a time ,what would be best solution to host the application? My thought process is that I can take multiple system and using the load balancer, I can redirect them to different system. For example lets say there are 1500 users then each server can have 500 users in memory object and those 500 users can chat with each others. I can see one limitation that each users can chat with only those 500 users and not 1500 users. Is this solution feasible?</p>
  <p>2.How much Ram/CPU core/storage would I required to handle 3000 users at the same time?</p>
  <p>3.Do I need to use elastic search db instead of in memory objects to store messages.? I don't need to store message but would elastic search db help with distributed System?.</p>
  <p>4.What are the best ways to use load balancer? and also How many distributed system would I require in my case?</p>
  <p>My application supports chatting with strangers,uploading image,videos.</p>
  <p>I know this can vary and we cannot tell it accurately but I would like to know the best possible System architecture for my web application.</p>