Android Question Need guidance for an upcoming new project

Indic Software

Active Member
Licensed User
Hello,

Clarification: As I don't know as to where to post this question I am posting it here. I hope it is not posted in wrong forum...

I am in discussion with a client who is selling a range of software for image/photo processing, easy and instant photo cutting, wedding album creating, etc.

This client has 1 million+ users of their products.

Now the client wants to start giving support to their customers through mobile apps because around 50% of their customers are Android based smart phones users.

For this they want to build a full featured chatting software something similar to Telegram.

The broad list of features are:
  • Instant Messaging which should be as smooth as Telegram
  • Push notification when a message arrives
  • Ability to send media files (images, audios, videos) to users with features similar toTelegram
  • Ability to send documents (PDFs, Office documents, etc.) to users
  • Create Groups of users
  • Allow for private chat between two users
  • Broadcast messages
  • A powerful back end from where they can send update notifications, etc. along with complete user management
  • In second phase they also want to add support for Video and Audio calling

I do not have any experience in instant messaging ( IM ) and its back end so I am sort of blank regarding this technology.

I have researched a bit though. Here is what I have understood.

I think I have four approaches from which to choose from:
  1. Use XAMPP
  2. Use NoteJS
  3. Use any ready third party API like Firebase, Layer, etc.
  4. Use B4J with ABMaterial

In the case of approach 1: I can use some good implementation of XAMPP like MongooseIM platform (https://mongooseim.readthedocs.io/en/latest/) and build all the other back end features in PHP as per clients requirements.

In the case of approach 2: I have to use NodeJS with Socket IO the base system that I have looked up is: Node.js-based-Instant-Messenger (https://github.com/valx90/Node.js-based-Instant-Messenger). But I feel using this would be chore and very daunting.

In the case of approach 3: After a bit of study and after reading a few posts in this forum I feel it would be better to go with Google's Firebase. I tried a ready to use mobile app and it works really very smoothly and instantly. One that I noticed is that this software has to always be connected to Firebase constantly. But the problem is that the Firebase server support only 100K simultaneous connections to supporting such a huge number of users would not be possible unless Google has some way to increase the number of simultaneous connections!

I checked out Layers (https://layer.com/) but it pricing policy seems to be very unclear. I have started communication with them let us see what turns up.

In the case of approach 4: I use B4J with ABM to build messaging server as well as backed and various web services that the mobile app will call. But I don't know as to how well it will scale to be able to handle such a large number of users and the amount of data load.

Let me try and explain as to what my client is expecting in terms of data transfer. If say one user uploads just 10 MB of video(s) a day then we would require about 1 TB of space to handle them on server, on daily basis. So in one month the size would amount to 30 TB.

As for second phase (Video/Audio Calling) I will have to use WebRTC. Again something that I will have to research deeply (in future).

Now my question: What does the expert developers in this forums think that I should do? Please suggest or give ideas.

Finally looking at the amount of data bandwidth that will be required for handle such a large user base what kind of hosting should I take up for approaches 1, 2 and 4?

What kind of infrastructure I choose? Should I go with AWS, Google Cloud, Digital Ocean or something better. Here monthly overheads or charges have to be also taken into consideration looking at the bandwidth and storage required because the client's currently has a budge of US $500 per month for recurring infrastructure cost.

I hope I have managed to explain my requirements and problems properly.

If there is anything that I have missed please ask me and I will try to clarify to the best of my knowledge.

Regards,

Yogesh
 

keirS

Well-Known Member
Licensed User
I would go with option 3 but I wouldn't use Firebase. I would use AWS SQS and from your description possibly AWS Pinpoint. There is no point in reinventing the wheel and writing you own message broker when there are solutions with high scalabillity already available. If you have Node.js, C# , ,Python,Go or Java skills then I would use AWS Lamda and not have a hosted server at all.
 
Upvote 0

Indic Software

Active Member
Licensed User
Hello,

Thanks for the info. But after studying AWS services I have come to the conclusion that is not that usable.

Like for example SQS does not guarantee delivery of message and at times will deliver same message twice. I asked AWS support whether they will count extra/duplicate deliver of message or not but still they have not responded.

I am currently looking into AWS SNS to see if it fits my need. (please point me if I have misinterpreted this service)

I don't think we require Pinpoint. It would be easier to send messages on mass scale directly using something like XAMPP.

I had not heard about AWS Lambda so will need to look it up closely.

Once again thanks for the info.

Regards,

Yogesh
 
Upvote 0

Indic Software

Active Member
Licensed User
Hello,

This is to give update to the amount of progress we have achieved in this project. When embarking on this project I did not know that it would involve such a huge infrastructure and would require planning and development of such a scale!

I hope this will help others also. Please note I am not trying to bump this thread up.

We have setup 4 servers in all:
  1. XAMPP server
  2. Media server
  3. Web based Control Panel server (with MySQL)
  4. NodeJS and MongoDB server
We have reined in a company that will setup XAMPP and MongoDB servers with help of Dockers. And these Dockers will be scale able horizontally and vertically as needed. This company will customize XAMPP as per our requirements.

The APIs will be written in NodeJS using the guidelines (as much as possible) prescribed by Rising Stake.

Currently the Android app will be developed using Android Studio and vanilla JAVA code. But we will update it (and if necessary rewrite the app again in the process) to use Rx-JAVA.

We are going to write the iOS app using Rx-Swift so that we can get top notch asynchronous performance. Currently we are searching for a local developer who is well versed in iOS development.

We are trying to build the app using micro service architecture so that we can leverage the server-worker model for high performance and scaling.

The center piece of our chatting software XAMPP is being programmed in Erlang because that is what most of the chatting solutions like Telegram, Whatsapp, etc. are using for handling high traffic and high performance.

Finally we hope to launch first beta in a closed group of users in second half of October 2018.

Regards,

Yogesh
 
Upvote 0
Top