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):
- Interaction within the room (e.g. raising your hand)
- Management of personnel within the room (e.g. kicking out people)
- Chatroom
- Synchronized environment and game operations
- Real-time audio and video streaming services
Distinctive features:
- Customization of different types of rooms (with functions, number of people, and roles defined)
- Definition of role permissions
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
- Client Side Character
- teacher
- assistant
- student
- 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
- "Teacher or Assistant" may need share his/her screen view to all the user for classroom ppt
- "Teacher" will control the 360 virtual tour across all user, to guide everyone through all the detail
- "Student" need to communicate with each other and teacher
- "Teacher or Assistant " need to manage the room user and their permission
after we grab some use cases, we can now collect and organize our requirement,
split these use case into two types
- 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
- 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.
- 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
- 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.
- 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
- how to design a realtime streaming service? what techs should i use?
- socket service is not stateless, it's mean we'll get into trouble if we don't know how to scale it in future
- can we deploy it on the local and cloud simultaneously?
- how to sync all the scene content and integrate our panorama virtual tour and 3d scene?
- 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
- functoning test :
- single function test
- group function test
- 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