cover_photo

Group Tour System

live stream & real-time full stack app

What is a Group Tour System?

a service provide audio and video streaming combined with vary custom features such as gaming room, chatroom... etc

Currently supports the following features (a single room can hold approximately 50-100 people):

Distinctive features:

Preface

Group Tour System is the first system I develop from requirement collection to DevOp , It is a big challenge for me since I haven't develop such huge system, but i always enjoy willing to challenge, the bigger the challenge is the more excitement i am, challenge accepted!!!

Even rome wasn't built in a day so I decide start from a small piece, before jump to the

Design Stage

our system is mainly made for human, but before step into the user requirement, who is the system served for is great important question.

stakeholder

  1. Client Side Character
    • teacher
    • assistant
    • student
  2. Development Side Character 
    • front end (view)
    • front end (application) -> me
    • back end (server) -> me
    • project planning -> also me
    • user experience -> also me
    • ui designer

Requirements clarifications

since we got all the character of our system, I can make a simple use case like

after we grab some use cases, we can now collect and organize our requirement, split these use case into two types

  1. functional requirement
    • google meet video/audio/share screen media streaming
    • simple game room that can let room member sync 360 scene
    • chat room : let user communicating by typing
    • role & permission design : limit some features to specific user 
  2. non-functional requirement
    • performance : one computer can at least hold 500 people but under 80% of CPU consume, 
    • modifiability : must be high modifiability, because our system would be used in various project and cannot 
    • availability : our user won't 24 hours stick on our system, so we don't need a load balancer and reddis server for cluster design
    • scalability : cuz one project would only have maximum 500 users, so we don't actually need the scalability
    • reliability : need various system test to ensure all the functionality is correct

High Level Component Design

Only with requirement system can be alive, this stage is focus on split our system into multiple function component to meet our need, In my unmature opinion I think software architecture is start from here.

  1. split out application and ui development since our team isn't just me, I have to design a way let front-end and I can collaborate together.  I want to focus on the application side and our front-end want to focus on the UI side, suddenly I had a eureka moment. why not build our frontend system just like client side and server side, we can transfer data using mechanics like REST  api, UI interface can change by event trigger from the client side application
  2. custom role and permission  different type of character is important for our system. our user always have their own use case, current use case can only cover most of  scenario but still not all of them, leaving a custom role and permission design can make more redundancy. this custom  part need to be easily setting at server side for my college to adjust it, also we would have a backend server to hold all  the customer data.
  3. modulize room module this part confuse me for a period of time, I want to design a pattern let room and room module won't over coupling and each data can keep clean so that I can easily add new feature to our system

Implemeted stage

Before jump into the coding part, I still need to do lots of homework to get advanced detailed design

  1. how to design a realtime streaming service? what techs should i use?
  2. socket service is not stateless, it's mean we'll get into trouble if we don't know how to scale it in future
  3. can we deploy it on the local and cloud simultaneously?
  4. how to sync all the scene content and integrate our panorama virtual tour and 3d scene?
  5. how to maintain the system after we done all the development?

Question keep popping up, but for now that's skip this stage, I'll talk these topic in the future

Testing Stage

After completed all the functionality, the most important part is testing so far we have been through stage below

  1. functoning test : 
    • single function test
    • group function test
  2. stress test

I even develop a system for our system monitoring and recording and log to accelerate testing stage and finally we got here

statement 

I have no formal system design education, those stage above is just my thought process, not represent my company if you find any problem in this article, it's my pleasure to improve the content