Welcome, guest! Please login or register.

    * Shoutbox

    RefreshHistory
    • Striker Fox2: download it
      Today at 03:26:06 AM
    • Zezuma09: how do i get this game started ?
      October 22, 2017, 03:24:27 AM
    • Striker Fox2: Much more on General Board
      October 21, 2017, 04:30:25 AM
    • Striker Fox2: New price guide link [link]
      October 21, 2017, 04:30:18 AM
    • Striker Fox2: New discord link [link]
      October 21, 2017, 04:30:03 AM
    • Saltyspade10: If you are new and reading this, stick around becaus it's a great server and community! Hope to see you in-game :)
      October 21, 2017, 02:44:16 AM
    • damian6: hello i wanne buy this server can u add me
      October 20, 2017, 03:54:38 PM
    • Wilkooo: lol jks
      October 20, 2017, 02:39:53 PM
    • Wilkooo: ilyall
      October 20, 2017, 02:39:48 PM
    • tm4dz: why cant i see any download links??
      October 20, 2017, 10:46:55 AM
    • stCky: u dont need to its fudgeing sick
      October 19, 2017, 08:13:13 PM
    • odin stormborn: how do i change my username
      October 19, 2017, 12:16:51 PM
    • qazplm102938: everyone play manicps its best server out there loads to do its badboyyyy - manicps manicps shout out kiteshield
      October 19, 2017, 10:28:21 AM
    • qazplm102938: everyone play manicps its best server out there loads to do its badboyyyy - manicps manicps
      October 19, 2017, 10:11:08 AM
    • Travas: wtf
      October 19, 2017, 07:37:52 AM
    • stCky: Adaro, you are a threat to the communities image, yes
      October 18, 2017, 02:53:43 PM
    • Krackkid: Hello everyone it is I, Krackkid.
      October 18, 2017, 07:21:56 AM
    • soma_: Does anyone have an updated link to a blank Source / Client? 317/508
      October 18, 2017, 04:57:44 AM
    • michaeltrailer: olm t pst
      October 18, 2017, 04:52:48 AM
    • Adaro: Strange that staff think I'm a threat when I'm not threatening anyone
      October 18, 2017, 03:07:16 AM

    Author Topic: Nyphrex - 530 Emulator  (Read 725 times)

    0 Members and 1 Guest are viewing this topic.

    OfflineNyphrex

    • Member
    • **
    • Posts: 5
    • Thanks: +0/-0
      • View Profile
    Nyphrex - 530 Emulator
    « on: March 12, 2015, 02:25:07 AM »
    Nyphrex - 530 Emulation

    It has not yet been decided if we will open source our code.

    Overview

    Nyphrex is aimed at emulating Runescape revision 530 and will use modern technology and a custom code base to do so. We hope to have a fully modular Runescape emulation platform that will allow us to horizontally scale to our customers needs. To implement this we will be using technology such as Docker, Rancher, and Protobuf to quickly implement various server implementations such as a login, chat, game, and load balance server.

    Chat Service

    The Nyphrex chat server will host the ability for users to publish messages on a single world instance. Other services will poll for messages from various targets, some targets being your name, some targets being the entire public chat to swiftly serve you messages sent to you. The chat server supports message compression, no plans yet for encryption, and does not have a public endpoint for developer interfaces besides those that are held by Nyphrex personnel.

    Current specification:

    Code: [Select]
    LOOKUP target id -> ...
    SUBSCRIBE target [target...] -> subscription [subscription...]
    PUBLISH source data compression target [target...] -> id
    POLL subscription start [limit] -> message [message...]

    Code: [Select]
    Chat Server A -> 10.8.10.2
    - Message namespace: [0, 5000000]
    Chat Server B -> 11.7.6.3
    - Message namespace: [5000000, 10000000]

    Server A {
    // On game world start, subscribe to the chat server assigned to the game server. This server will hold
    // all of the game server subscriptions and possibly other subscriptions for other platform interfaces.

    // Subscribe to the public relay
    SUBSCRIBE public -> "abcdefgh"

    // When a player logs in we need to update the subscription to watch for
    // messages sent to the server.
    UPDATE abcdefgh user:nyphrex
    }

    // Say we have another world instance which has another chat server assigned to the game server. For demostration purposes.
    Server B {
    ...
    SUBSCRIBE public -> "defghij"

    // A new player logs in.
    UPDATE defghij user:doug
    }

    Server A {

    // Say a player sent a private message to doug, we publish the message to server.
    // Note: user:nyphrex being the id is reserved under a specific space, preferably under
    // the unsigned base 37 id assigned to a user from their username. Just image an encoded
    // sint64 there. Seriously.
    //
    // Current compression id is reserved for none, just ascii character encoded sequence.
    PUBLISH user:nyphrex "hello how are you" 0 user:doug

    // Server A searches for a relay on the server under the namespace 'user:doug' however since
    // one doesnt exist we can just assume we need to forward the message to the other
    // chat servers in the cloud.
    Server B -> PUBLISH user:nyphrex "hello how are you" 0 user:doug
    }

    Server B {
    // Server B receives the PUBLISH message from server A and since it contains the relay for doug, we can inform the relay a new message
    // was received! :)
    }


    // Other considerations: Each server has their own space for subscribers, subscribers are not unique in the context of the cloud. Messages
    // are seeded from an offset starting at say 0 for Server A and 50000000 for Server B. These servers will contain messages, for A, 0-500000000,
    // for B; 5000000-10000000. This assures that message ids dont conflict and when all servers eventually become informed of the message that
    // each server has access to read and lookup the message if an agent uses the LOOKUP command for the message.

    Code: [Select]
    public static void main(String... args) {
         Service service = ChatService.newReflectiveService(new ChatServer());
         subscribe(service, "#public", "#private", "#other", "#commands");
         publish(service, 0xDEADBEEF, "Jet fuel can't melt steel beams".getBytes(), 0, "#public", "#private");
    }

        /**
         * [main] INFO io.nyphrex.chat.ChatServer - SUBSCRIBE relays=[#public, #private, #other, #commands]
         Mar 12, 2015 5:44:11 AM [io.nyphrex.chat.temp.Callback]  handleSubscribe
         INFO: CALLBACK -> sid: 2505867834727897330

         [main] INFO io.nyphrex.chat.ChatServer - PUBLISH source=-1, data=..., compression=0, relays=[#public, #private]
         Mar 12, 2015 5:44:12 AM [io.nyphrex.chat.temp.Callback]  handlePublish
         INFO: CALLBACK -> id: 1

         */
    « Last Edit: March 12, 2015, 09:00:26 AM by Nyphrex »

    OfflineLothy

    • Member
    • ****
    • *
    • *
    • Posts: 7,006
    • Thanks: +0/-0
      • View Profile
    Re: Nyphrex - 530 Emulator
    « Reply #1 on: March 12, 2015, 03:20:41 AM »
    This is the show off section. 'We hope to have...' - come back when you have something to show off.
    <&Speljohan_> i wouldnt want to live in a society where Mopman isnt monitored 24/7


    Offlinedoom_j

    • i like the company of men
    • Member
    • ****
    • *
    • Posts: 7,202
    • Thanks: +0/-0
      • View Profile
    Re: Nyphrex - 530 Emulator
    « Reply #2 on: March 12, 2015, 03:39:33 AM »
    I always love these kinds of threads.

    >horizontally scale
    >customers needs
    >Nyphrex personnel
    >Using custom voids
    [12:18:14 21:04:45]<<Tom>>i dont care about your rights
    [12:18:14 21:04:49] <<Tom>> you have NO RIGHTS

    OfflineNyphrex

    • Member
    • **
    • Posts: 5
    • Thanks: +0/-0
      • View Profile
    Re: Nyphrex - 530 Emulator
    « Reply #3 on: March 12, 2015, 04:14:07 AM »
    I always love these kinds of threads.

    >horizontally scale
    >customers needs
    >Nyphrex personnel
    >Using custom voids

    These are all correct terms though. I just wanted to also specify the tech we were using in case people were wondering, since the platform design is pretty fun. Here's the protobuf file for your trouble to 'show off' the protocol.

    Code: [Select]
    \syntax = "proto3";

    package chat.protobuf;

    option java_package = "io.nyphrex.chat.protobuf";
    option java_outer_classname = "ChatProtocol";
    option java_generic_services = true;

    service ChatService {
        rpc handleSubscribe(SubscribeRequest) returns (SubscribeResponse);  // Subscribe to a target
        rpc handlePublish(PublishRequest) returns (SimpleResponse);         // Publish a message
        rpc handleLookup(LookupRequest) returns (SimpleResponse);           // Lookup a target
        rpc handlePoll(PollRequest) returns (PollResponse);                 // Poll a target
    }

    /**
     * ============================================
     *                  Requests
     * ============================================
     */

    // LOOKUP target id
    message LookupRequest {
        optional string target = 1;     // The lookup target
        optional string id = 2;         // The target id
    }

    // SUBSCRIBE target [target...]
    message SubscribeRequest {
        repeated string targets = 1;     // The targets to subscribe for
    }

    // PUBLISH source data compression relay [relay...]
    message PublishRequest {
        optional int64 source = 1;      // The message source
        optional bytes data = 2;        // The encoded message data
        optional int32 compression = 3; // The compression id
        repeated string targets = 4;    // The publishable targets
    }

    // POLL subscription start [limit]
    message PollRequest {
        optional int64 sid = 1;     // The subscription id
        optional int32 limit = 2;   // The message limit
    }


    /**
     * ============================================
     *                  Responses
     * ============================================
     */


    // Simple response message which indicates if the request was successful.
    message SimpleResponse {
        optional bool ok = 1;
    }

    // Subscriber request response message which passes the subscription id.
    message SubscribeResponse {
        optional bool successful = 1;   // Flag for if the request was successful.
        optional int64 sid = 2;         // The subscription id.
    }

    // Publish request response message which passes the published message id back.
    message PublishResponse {
        optional bool successful = 1;   // Flag for if the request was successful
        optional int64 id = 2;          // The published message id
    }

    // Poll request response message which passes each of the messages back.
    message PollResponse {
        repeated ChatMessage messages = 1;
    }

    /**
     * ============================================
     *                  Models
     * ============================================
     */

    // Simple model for messages sent to the server including the data and compression.
    message ChatMessage {
        optional int64 id = 1;                  // The message id
        optional int64 source = 2;              // The message source
        optional bytes data = 3;                // The message data
        optional int32 compression = 4;         // The compression id
    }

    // Model for text compression to assure proper compression lookup
    message Compression {
        optional int32 id = 1;          // The compression id
        optional string name = 2;       // The compression name
    }

    Offlinesini

    • Member
    • ****
    • *
    • *
    • Posts: 5,785
    • Thanks: +0/-0
      • View Profile
    Re: Nyphrex - 530 Emulator
    « Reply #4 on: March 12, 2015, 04:15:22 AM »
    You should open source this, because I'd be interested in seeing how you'd design this all...although I lold at 'personnel'. Gl

    OfflineLothy

    • Member
    • ****
    • *
    • *
    • Posts: 7,006
    • Thanks: +0/-0
      • View Profile
    Re: Nyphrex - 530 Emulator
    « Reply #5 on: March 12, 2015, 05:48:20 AM »
    I always love these kinds of threads.

    >horizontally scale
    >customers needs
    >Nyphrex personnel
    >Using custom voids

    These are all correct terms though. I just wanted to also specify the tech we were using in case people were wondering, since the platform design is pretty fun.
    Sure they are (custom voids notwithstanding). They're also all meaningless in this context.

    Horizontal scalability? Can you even afford one dedicated server, let alone a cluster? Assuming yes, what sort of configuration are you using when scaling out? Some kind of master-slave scheme? Are you doing the balancing in software (e.g., HAProxy) or with a hardware load balancer (e.g.: an F5 load balancer)?

    What happens when you need to fail over because a server dies? Do you have some kind of load balancer in front of the horizontally scaling servers that detects the failure and diverts players from the failed server to a working server? Is the failing over from one server to the others an automatic or manual process?
    Jagex has historically done a poor job when it comes to failing over. Specifically, people used to get stuck on a server and couldn't log back in on another server for quite a while. How do you plan to handle this in your horizontally scaled environment?

    Honestly, you've out a few bits of jargon to lend credibility to your topic. However anyone with two brain cells to rub together can see you're talking twaddle.
    <&Speljohan_> i wouldnt want to live in a society where Mopman isnt monitored 24/7

    OfflineNyphrex

    • Member
    • **
    • Posts: 5
    • Thanks: +0/-0
      • View Profile
    Re: Nyphrex - 530 Emulator
    « Reply #6 on: March 12, 2015, 06:10:52 AM »
    I always love these kinds of threads.

    >horizontally scale
    >customers needs
    >Nyphrex personnel
    >Using custom voids

    These are all correct terms though. I just wanted to also specify the tech we were using in case people were wondering, since the platform design is pretty fun.
    Sure they are (custom voids notwithstanding). They're also all meaningless in this context.

    Horizontal scalability? Can you even afford one dedicated server, let alone a cluster? Assuming yes, what sort of configuration are you using when scaling out? Some kind of master-slave scheme?

    Providing multiple instances isn't expensive in this day and age. When launching a new node we will use a premade docker image, managed from Rancher. Scaling out  Yes, game servers will have a master-slave scheme.

    Are you doing the balancing in software (e.g., HAProxy) or with a hardware load balancer (e.g.: an F5 load balancer)?

    Software. I have to look into specifics on how, and compare solutions.

    What happens when you need to fail over because a server dies? Do you have some kind of load balancer in front of the horizontally scaling servers that detects the failure and diverts players from the failed server to a working server?

    Yes.

    Is the failing over from one server to the others an automatic or manual process?

    Automatic.

    Jagex has historically done a poor job when it comes to failing over. Specifically, people used to get stuck on a server and couldn't log back in on another server for quite a while. How do you plan to handle this in your horizontally scaled environment?

    Re-election of responsibility. ie: If login server 0 goes down, then login server 1-3 reassign the range of the players they service through an election until the downed node is back up.

    Honestly, you've out a few bits of jargon to lend credibility to your topic. However anyone with two brain cells to rub together can see you're talking twaddle.

    Okay.

    OfflineMezzyscape562

    • Member
    • ****
    • Posts: 1,153
    • Thanks: +0/-0
      • View Profile
      • Tap Tap Adventure
    Re: Nyphrex - 530 Emulator
    « Reply #7 on: March 12, 2015, 08:47:45 PM »
    It saddens me to see what this community has come to. The fact someone has an idea and every single jackass that has remained here is just constantly nagging and won't even give a bit of support. So what if it doesn't work out? He's trying. For gods, sake, no wonder everyone uses Rune-Server nowadays.

    OfflineZymus

    • Member
    • ****
    • *
    • Posts: 7,267
    • Thanks: +0/-0
      • View Profile
    Re: Nyphrex - 530 Emulator
    « Reply #8 on: March 13, 2015, 02:15:07 AM »
    I always love these kinds of threads.

    >horizontally scale
    >customers needs
    >Nyphrex personnel
    >Using custom voids

    These are all correct terms though. I just wanted to also specify the tech we were using in case people were wondering, since the platform design is pretty fun.
    Sure they are (custom voids notwithstanding). They're also all meaningless in this context.

    Horizontal scalability? Can you even afford one dedicated server, let alone a cluster? Assuming yes, what sort of configuration are you using when scaling out? Some kind of master-slave scheme?

    Providing multiple instances isn't expensive in this day and age. When launching a new node we will use a premade docker image, managed from Rancher. Scaling out  Yes, game servers will have a master-slave scheme.

    Are you doing the balancing in software (e.g., HAProxy) or with a hardware load balancer (e.g.: an F5 load balancer)?

    Software. I have to look into specifics on how, and compare solutions.

    What happens when you need to fail over because a server dies? Do you have some kind of load balancer in front of the horizontally scaling servers that detects the failure and diverts players from the failed server to a working server?

    Yes.

    Is the failing over from one server to the others an automatic or manual process?

    Automatic.

    Jagex has historically done a poor job when it comes to failing over. Specifically, people used to get stuck on a server and couldn't log back in on another server for quite a while. How do you plan to handle this in your horizontally scaled environment?

    Re-election of responsibility. ie: If login server 0 goes down, then login server 1-3 reassign the range of the players they service through an election until the downed node is back up.

    Honestly, you've out a few bits of jargon to lend credibility to your topic. However anyone with two brain cells to rub together can see you're talking twaddle.

    Okay.

    Why the fudge would login server's 1-3 "elect" on which players they service? If you did have multiple servers for login, it would probably be better to have the client connect to the load balancer, rather than a specific instance, then it could go like

    Quote
    <incoming connection />
    Balancer: Hey, Bob, you there?
    <silence />
    Balancer: Alright, fudge you then. Hey Jim, can you take this guy? I can't get a hold of Bob.
    Jim: Sure, I can do that.
    loginQueue.pop();
    <incoming connection />
    Balancer: Hey Joe, can you take this guy? I can't get a hold of Bob, and Jim is busy
    Joe: Sure, I can do that.
    loginQueue.pop(); />

    I mean, it's not rocket science, and it's certainly not necessary for something of this size. Besides, a login server should be doing just that. Authenticating users. Nothing more. So if they have to "reassign the range of the players they service", you're doing something wrong. It should only be focused on each unique connection, authenticating, and then closing the connection. Not keeping it open in case the player gets dc'd and needs to reconnect.

    OfflineNyphrex

    • Member
    • **
    • Posts: 5
    • Thanks: +0/-0
      • View Profile
    Re: Nyphrex - 530 Emulator
    « Reply #9 on: March 14, 2015, 01:23:25 AM »
    I always love these kinds of threads.

    >horizontally scale
    >customers needs
    >Nyphrex personnel
    >Using custom voids

    These are all correct terms though. I just wanted to also specify the tech we were using in case people were wondering, since the platform design is pretty fun.
    Sure they are (custom voids notwithstanding). They're also all meaningless in this context.

    Horizontal scalability? Can you even afford one dedicated server, let alone a cluster? Assuming yes, what sort of configuration are you using when scaling out? Some kind of master-slave scheme?

    Providing multiple instances isn't expensive in this day and age. When launching a new node we will use a premade docker image, managed from Rancher. Scaling out  Yes, game servers will have a master-slave scheme.

    Are you doing the balancing in software (e.g., HAProxy) or with a hardware load balancer (e.g.: an F5 load balancer)?

    Software. I have to look into specifics on how, and compare solutions.

    What happens when you need to fail over because a server dies? Do you have some kind of load balancer in front of the horizontally scaling servers that detects the failure and diverts players from the failed server to a working server?

    Yes.

    Is the failing over from one server to the others an automatic or manual process?

    Automatic.

    Jagex has historically done a poor job when it comes to failing over. Specifically, people used to get stuck on a server and couldn't log back in on another server for quite a while. How do you plan to handle this in your horizontally scaled environment?

    Re-election of responsibility. ie: If login server 0 goes down, then login server 1-3 reassign the range of the players they service through an election until the downed node is back up.

    Honestly, you've out a few bits of jargon to lend credibility to your topic. However anyone with two brain cells to rub together can see you're talking twaddle.

    Okay.

    Why the fudge would login server's 1-3 "elect" on which players they service? If you did have multiple servers for login, it would probably be better to have the client connect to the load balancer, rather than a specific instance, then it could go like

    Quote
    <incoming connection />
    Balancer: Hey, Bob, you there?
    <silence />
    Balancer: Alright, fudge you then. Hey Jim, can you take this guy? I can't get a hold of Bob.
    Jim: Sure, I can do that.
    loginQueue.pop();
    <incoming connection />
    Balancer: Hey Joe, can you take this guy? I can't get a hold of Bob, and Jim is busy
    Joe: Sure, I can do that.
    loginQueue.pop(); />

    I mean, it's not rocket science, and it's certainly not necessary for something of this size. Besides, a login server should be doing just that. Authenticating users. Nothing more. So if they have to "reassign the range of the players they service", you're doing something wrong. It should only be focused on each unique connection, authenticating, and then closing the connection. Not keeping it open in case the player gets dc'd and needs to reconnect.

    https://en.wikipedia.org/wiki/Partition_%28database%29

    ie: Server 1 'services' players:uid between 0..5000
    ie: Server 'services' players:uid between 5000-10000

    You're right, it isn't rocket science. You just missed the mark on understanding.
    « Last Edit: March 14, 2015, 01:25:00 AM by Nyphrex »

    OfflineZymus

    • Member
    • ****
    • *
    • Posts: 7,267
    • Thanks: +0/-0
      • View Profile
    Re: Nyphrex - 530 Emulator
    « Reply #10 on: March 14, 2015, 02:27:58 AM »
    I always love these kinds of threads.

    >horizontally scale
    >customers needs
    >Nyphrex personnel
    >Using custom voids

    These are all correct terms though. I just wanted to also specify the tech we were using in case people were wondering, since the platform design is pretty fun.
    Sure they are (custom voids notwithstanding). They're also all meaningless in this context.

    Horizontal scalability? Can you even afford one dedicated server, let alone a cluster? Assuming yes, what sort of configuration are you using when scaling out? Some kind of master-slave scheme?

    Providing multiple instances isn't expensive in this day and age. When launching a new node we will use a premade docker image, managed from Rancher. Scaling out  Yes, game servers will have a master-slave scheme.

    Are you doing the balancing in software (e.g., HAProxy) or with a hardware load balancer (e.g.: an F5 load balancer)?

    Software. I have to look into specifics on how, and compare solutions.

    What happens when you need to fail over because a server dies? Do you have some kind of load balancer in front of the horizontally scaling servers that detects the failure and diverts players from the failed server to a working server?

    Yes.

    Is the failing over from one server to the others an automatic or manual process?

    Automatic.

    Jagex has historically done a poor job when it comes to failing over. Specifically, people used to get stuck on a server and couldn't log back in on another server for quite a while. How do you plan to handle this in your horizontally scaled environment?

    Re-election of responsibility. ie: If login server 0 goes down, then login server 1-3 reassign the range of the players they service through an election until the downed node is back up.

    Honestly, you've out a few bits of jargon to lend credibility to your topic. However anyone with two brain cells to rub together can see you're talking twaddle.

    Okay.

    Why the fudge would login server's 1-3 "elect" on which players they service? If you did have multiple servers for login, it would probably be better to have the client connect to the load balancer, rather than a specific instance, then it could go like

    Quote
    <incoming connection />
    Balancer: Hey, Bob, you there?
    <silence />
    Balancer: Alright, fudge you then. Hey Jim, can you take this guy? I can't get a hold of Bob.
    Jim: Sure, I can do that.
    loginQueue.pop();
    <incoming connection />
    Balancer: Hey Joe, can you take this guy? I can't get a hold of Bob, and Jim is busy
    Joe: Sure, I can do that.
    loginQueue.pop(); />

    I mean, it's not rocket science, and it's certainly not necessary for something of this size. Besides, a login server should be doing just that. Authenticating users. Nothing more. So if they have to "reassign the range of the players they service", you're doing something wrong. It should only be focused on each unique connection, authenticating, and then closing the connection. Not keeping it open in case the player gets dc'd and needs to reconnect.

    https://en.wikipedia.org/wiki/Partition_%28database%29

    ie: Server 1 'services' players:uid between 0..5000
    ie: Server 'services' players:uid between 5000-10000

    You're right, it isn't rocket science. You just missed the mark on understanding.

    You will experience 0 difference in performance, honestly. I work for a major ecommerce clothing site that's been up for nearly 10 years or more. We just added database partitions last year in November. That's with 10 years worth of clothes that still exist in the database, and an in-house VC database. You would have to experience at least 2500 different logins in any day before the overhead of partitioning the database becomes justified. And that's assuming your average player size in the DB is less than 100MB.

    It might sound like a good idea, but you'll put more time and effort into trying to get it working the way you want it to, than the benefit you'll get out of it.

    OfflineNyphrex

    • Member
    • **
    • Posts: 5
    • Thanks: +0/-0
      • View Profile
    Re: Nyphrex - 530 Emulator
    « Reply #11 on: March 14, 2015, 02:38:48 AM »
    I always love these kinds of threads.

    >horizontally scale
    >customers needs
    >Nyphrex personnel
    >Using custom voids

    These are all correct terms though. I just wanted to also specify the tech we were using in case people were wondering, since the platform design is pretty fun.
    Sure they are (custom voids notwithstanding). They're also all meaningless in this context.

    Horizontal scalability? Can you even afford one dedicated server, let alone a cluster? Assuming yes, what sort of configuration are you using when scaling out? Some kind of master-slave scheme?

    Providing multiple instances isn't expensive in this day and age. When launching a new node we will use a premade docker image, managed from Rancher. Scaling out  Yes, game servers will have a master-slave scheme.

    Are you doing the balancing in software (e.g., HAProxy) or with a hardware load balancer (e.g.: an F5 load balancer)?

    Software. I have to look into specifics on how, and compare solutions.

    What happens when you need to fail over because a server dies? Do you have some kind of load balancer in front of the horizontally scaling servers that detects the failure and diverts players from the failed server to a working server?

    Yes.

    Is the failing over from one server to the others an automatic or manual process?

    Automatic.

    Jagex has historically done a poor job when it comes to failing over. Specifically, people used to get stuck on a server and couldn't log back in on another server for quite a while. How do you plan to handle this in your horizontally scaled environment?

    Re-election of responsibility. ie: If login server 0 goes down, then login server 1-3 reassign the range of the players they service through an election until the downed node is back up.

    Honestly, you've out a few bits of jargon to lend credibility to your topic. However anyone with two brain cells to rub together can see you're talking twaddle.

    Okay.

    Why the fudge would login server's 1-3 "elect" on which players they service? If you did have multiple servers for login, it would probably be better to have the client connect to the load balancer, rather than a specific instance, then it could go like

    Quote
    <incoming connection />
    Balancer: Hey, Bob, you there?
    <silence />
    Balancer: Alright, fudge you then. Hey Jim, can you take this guy? I can't get a hold of Bob.
    Jim: Sure, I can do that.
    loginQueue.pop();
    <incoming connection />
    Balancer: Hey Joe, can you take this guy? I can't get a hold of Bob, and Jim is busy
    Joe: Sure, I can do that.
    loginQueue.pop(); />

    I mean, it's not rocket science, and it's certainly not necessary for something of this size. Besides, a login server should be doing just that. Authenticating users. Nothing more. So if they have to "reassign the range of the players they service", you're doing something wrong. It should only be focused on each unique connection, authenticating, and then closing the connection. Not keeping it open in case the player gets dc'd and needs to reconnect.

    https://en.wikipedia.org/wiki/Partition_%28database%29

    ie: Server 1 'services' players:uid between 0..5000
    ie: Server 'services' players:uid between 5000-10000

    You're right, it isn't rocket science. You just missed the mark on understanding.

    You will experience 0 difference in performance, honestly. I work for a major ecommerce clothing site that's been up for nearly 10 years or more. We just added database partitions last year in November. That's with 10 years worth of clothes that still exist in the database, and an in-house VC database. You would have to experience at least 2500 different logins in any day before the overhead of partitioning the database becomes justified. And that's assuming your average player size in the DB is less than 100MB.

    It might sound like a good idea, but you'll put more time and effort into trying to get it working the way you want it to, than the benefit you'll get out of it.

    I rather implement the infrastructure with the hope it doesn't have to be redone in the future/use it for other endeavors.

     

    Copyright © 2017 MoparScape. All rights reserved.
    Powered by SMFPacks SEO Pro Mod |
    SimplePortal 2.3.5 © 2008-2012, SimplePortal