1. Handling several concurrent client connections. * How many concurrent clients are we talking about here? * Use of blocking sockets will require a separate thread for each connected client? Was Ruby not able to support many threads? * Non-Blocking sockets will require lesser number of threads. Note: I am from a Java background and Java's NIO scales well in handling volumes of concurrent sockets)
2. Handling volumes of data. (Data mining/aggregation) This is an IO/CPU intensive work load. * I dont think you would had done data-processing in ruby. Please correct me if I am wrong. * Scaling the "periodic" process to mine data can be efficiently done by choosing an appropriate storage system with efficient indexes. (MySQL/Postgres/Columnar-Storage/Cassandra etc etc) * Did you run a database? Did it run as a separate tier in a different server?
3. A queue/scheduling framework which would trigger the data-processing in periodic intervals(like google app-engine cron service) * How many "cron-entries" do you have in your system?
4. A CPU intensive algorithm which parses the incoming client's data before persisting in the database. * The incoming data from the client may require CPU intensive processing. (Example: parsing the data, eliminating duplicates etc etc). Did the CPU shoot up because of this?
Will be great if you can throw some light on the volume/scale of the processing involved. Would like to know what kind of work load is "Go" better than Ruby. * Should I consider "Go" if I have lots of String (stream) processing to do? * Should I consider "Go" for handling several concurrent sockets?
Would appreciate any help in understanding this.