Server Architecture Review

10/08/2017 15:22 BlowaXD#1
Hello,

As I know that some developers are here and some might have some background about MMO servers architecture

// GONNA REVIEW DIAGRAM TO ADD MORE DETAILS FOR OPENNOS ARCHITECTURE

This is the one I've started to make.
[Only registered and activated users can see links. Click Here To Register...]
[Only registered and activated users can see links. Click Here To Register...]

Architecture :
Quote:
Container based (Docker) for easy deployment
Clustered
LoadBalancing
Fully EventDriven (love nginx architecture) // Might use socket sharding

Languages considered :
Quote:
Kotlin :
JVM is really ressource consuming anyway it's stable, easy to run
Verbose, Java is too "Object Oriented" (that's why I wanna use Kotlin on some features)
UnitTesting is easy

NodeJS :
Might be used for watchdogs/webapi/Master
Easy to develop, not much time spending
Aswell, this "architecture" is totally generic and designed to be used to be shared as an OpenSource future framework/lib for people that wanna make their own emulator/scalable MMO servers easly.

I would love some feedbacks about what do you guys think.
It's a feedback post, which intent a minimum of constructive feedback, if you just wanna flame, just don't post.

Feel free to ask for any information if you guys think that there are no enough information.

More information will be written on this post soon (as i'm finishing the cluster documentation)

Thanks.
10/08/2017 23:01 Cryless~#2
The most interesting thread of the entire section.

The first scheme is poor because ON is slightly more complex than what you have drawn but it does not matter since it has nothing to do with the discussion. The second scheme is not very clear and I recommend you to redesign it highlighting the importance of each component and connection.

Redis is a great choice (for cache) and will be useful several times.

For the cluster I can not argue much because I have never studied it but I would appreciate if you could link me to the documentation you are reading.
10/09/2017 01:20 BlowaXD#3
Quote:
Originally Posted by SystemX64™ View Post
The most interesting thread of the entire section. I think the first scheme is poor because ON is slightly more complex than what you have drawn but it does not matter.
Yeah, I know that, I had to rewrite many many things on OpenNos, mostly the way "servers" are communicating with each other, the database relational mapper (which is now 2 files)


I've finished a big project, i'll have time to continue that documentation, i'll improve the more specific ones (about how world are designed on OpenNos and one some other MMO servers and how my architecture will handle the charge...)


Thanks for reading,
Gonna give some more information tomorrow.
10/09/2017 13:37 0Lucifer0#4
The main issue with your architecture is that shared memory between many physical distinct server is not worth it. The first schema is not really how opennos works
10/09/2017 14:01 BlowaXD#5
Thanks for your feedbacks, i've done some revamping on diagrams.

Since we are in Nostale Session, i'll put examples related to Nostale (which is known by everyone HERE)

Once i've enough worked my diagrams, i'll make those generic so you will have an idea of that architecture.
10/09/2017 18:16 Cryless~#6
Quote:
Originally Posted by BlowaXD View Post
Thanks for your feedbacks, i've done some revamping on diagrams.

Since we are in Nostale Session, i'll put examples related to Nostale (which is known by everyone HERE)

Once i've enough worked my diagrams, i'll make those generic so you will have an idea of that architecture.
In my opinion you are making it too complicated.

[Only registered and activated users can see links. Click Here To Register...]
10/09/2017 18:37 BlowaXD#7
Quote:
Originally Posted by SystemX64™ View Post
In my opinion you are making it too complicated.

[Only registered and activated users can see links. Click Here To Register...]
What does your REDIS server do on this architecture ? It's kinda useless for only login/master.

The purpose of using a REDIS server is to cache the database for many requests (for world server for sure)

Aswell, you do not have any safety Daemon/Watcher which are kinda necessary in production usages.
This architecture is used for little amount of load for network programming but when you are developing something that need to handle a huge of amount of requests.

I'll push some more updates this evening I have to finish those diagram on something else than PowerPoint (might use readable UML)
10/10/2017 22:49 BlowaXD#8
We have chosen Kotlin for the langage that we will use, aswell we changed some things in architecture.

Concerning unrelated static datas, it will be stored in a MongoDB server, the "instanciated" (Characters, ItemInstances...) objects will be stored on a PostgreSQL server (which is much faster)

Again, I would repeat that we will cache our database through a database caching engine such as REDIS or our own one, mainly for reducing the charge and scheduling save to the database through queueing requests

Concerning the cluster "complicated design" it will be used, don't know how you can think it's complicated, it's used everywhere on production servers in many companies (some i've worked some for an example)

Last thing is that the "shared memory" is not as drawed anymore.
10/13/2017 21:23 BlowaXD#9
We started our development, actually, i've finished a basic architecture, tomorrow will tryout a pattern to see how it can fit.

We have actually some cool things that are gaining much performance through functional recursive programing instead of iterative way.

I'll keep that thread updated and change the diagrams once finished the real basis.
10/14/2017 20:21 MANUEL PERES#10
where is the load balancing. you needs more failovers of MySQL, needs everything to be scalable, in redis also because it depends on the server ram itself and it is better to scale in a cluster is just my opinion :D https://en.wikipedia.org/wiki/Load_b...ng_(computing) [Only registered and activated users can see links. Click Here To Register...]
10/14/2017 21:02 FI0w#11
Quote:
Originally Posted by MANUEL PERES View Post
where is the load balancing. you needs more failovers of MySQL, needs everything to be scalable, in redis also because it depends on the server ram itself and it is better to scale in a cluster is just my opinion :D https://en.wikipedia.org/wiki/Load_b...ng_(computing) [Only registered and activated users can see links. Click Here To Register...]
@[Only registered and activated users can see links. Click Here To Register...] never saw so much shit from you :l i mean 4y ago but c'mon
10/14/2017 21:56 MANUEL PERES#12
Quote:
Originally Posted by xSensitivex View Post
@[Only registered and activated users can see links. Click Here To Register...] never saw so much shit from you :l i mean 4y ago but c'mon
I do not say use that :D
10/14/2017 22:08 FI0w#13
Quote:
Originally Posted by MANUEL PERES View Post
I do not say use that :D
I mean the login dia is From systemx64 :p sry if you got it wrong