Re: [OpenSIPS-Devel] [OpenSIPS-Users] [RFC] Distributed User Location
Hello Adrian, The actual question is IF there is SOMETHING that can be done directly in the usrloc module to help with distributed scenario (to have some built-in functionality to have an auto-of-the-box solution). I'm fully aware you can combine the existing module with other kind of backends and do the work. Of course we can leave the usrloc module as it is and expect people to have their own fight to distributed it (as you did, as we did and many other did) - the idea is to have a ready to use approach here (if something like this exists) to address the most common and used cases. Regards, Bogdan-Andrei Iancu OpenSIPS Founder and Developer http://www.opensips-solutions.com On 04/05/2013 08:51 AM, Adrian Georgescu wrote: Hello Vlad, We developed such a solution and is operational since 2005 but not in the open source domain. The start point was P2P protocols used for file sharing. Is less of a SIP server issue (we used stock OpenSER and stock OpenSIPS for years) but rather a generic self-organizing network design where SIP accounts map to certain nodes using Chord style hashing function. The problem you need to solve is not necessarily SIP related (as it turns out that it works with any sip servers of client out there) but simply making a join/leave protocol that allows for horizontal scalability and adding this adapter to OpenSIPS. This layer if is abstract enough you can use it for any other thing not just OpenSIPS. We use it to horizontally scale Asterisk servers, OpenXCAP servers, MSRP Relay servers, Media Proxy servers for example. Here is the design document: https://docs.sipthor.net/projects/documentation/wiki/SipThorDescription And here is some papers we wrote back in 2005/2006 about this concept which can provide some clues for whomever wants to build this in OpenSIPS. http://www.ag-projects.com/presentations-corporate-285/41-sip2007 Adrian On Apr 4, 2013, at 3:05 PM, Vlad Paiu wrote: Hello all, We would like to get suggestions and help on the matter of distributing the user location information. Extending the User Location with a built-in distributed support is not straight forward - it is not about simply sharing data - as it is really SIP dependent and network limited While now, by using the OpenSIPS trunk, it is possible to just share the actual usrloc info ( by using the db_cachedb module and storing the information in a MongoDB cluster ), you can encounter real-life scenarios where just sharing the info is not enough, like : - NAT-ed clients, where only the initial server that received the Register has the pin-hole open, and thus is the only server that can relay traffic back to the respective client - the user has a SIP client that only accepts traffic from the server IP that it's currently registered against, and thus would reject direct traffic from other IPs ( due to security reasons ) We would like to implement a true general solution for this issue, and would appreciate your feedback on this. Also we'd appreciate if you could share the needs that you would have from such a distributed user location feature, and the scenarios that you would use such a feature in real-life setups. Best Regards, -- Vlad Paiu OpenSIPS Developer http://www.opensips-solutions.com ___ Users mailing list us...@lists.opensips.org mailto:us...@lists.opensips.org http://lists.opensips.org/cgi-bin/mailman/listinfo/users ___ Users mailing list us...@lists.opensips.org http://lists.opensips.org/cgi-bin/mailman/listinfo/users ___ Devel mailing list Devel@lists.opensips.org http://lists.opensips.org/cgi-bin/mailman/listinfo/devel
Re: [OpenSIPS-Devel] [OpenSIPS-Users] [RFC] Distributed User Location
Hello Muhammad, Your approach is the correct one (from SIP perspective) IMHO. But there are questions on the implementation side too - like the Super Node is just a storage or it should have SIP capabilities? How much of this behavior should be hardcoded in the registrar + usrloc module ? Best regards, Bogdan-Andrei Iancu OpenSIPS Founder and Developer http://www.opensips-solutions.com On 04/05/2013 04:57 AM, Muhammad Shahzad wrote: Well at 5 am in the morning while thinking on this topic the only thing ringing in my mind is a mechanism similar to IP to IP Gateway. Here is the main concept. 1. We have number of SIP servers running, say sip1.mydomain.com http://sip1.mydomain.com, sip2.mydomain.com http://sip2.mydomain.com ... sipN.mydomain.com http://sipN.mydomain.com, each serving domain mydomain.com http://mydomain.com and a SIP client A can select any one of these servers through DNS look-up (or whatever way possible) and registers to that server. Lets call these servers as Base Nodes. 2. Upon successful registration of client A to server sip1.mydomain.com http://sip1.mydomain.com, this Registrar Node fires an Event, which can be subscribed by a back-end SIP server, lets call it Super Node. This event will only contain following things, a). User part of all Contact URIs of client A with Expiry. b). Registrar Node information e.g. its IP address + Port. c). SIP domain of client A. (in case of multi-domain setup) 3. Super Node stores this information in some db back-end (memcache, redis, mysql etc.). This is sort of back-to-back register process but without SIP or authentication, since that has already been handled on Based Node anyway. The Super Node only needs to know which user is registered on which Base Node e.g. user 1001 is registered on node sip1.mydomain.com http://sip1.mydomain.com, user 1203 is registered on sip6.mydomain.com http://sip6.mydomain.com and so on. 4. When a SIP client B tries to send INVITE or MESSAGE or SUBSCRIBE to SIP client A. The SIP request will arrive on Base Node it is currently registered with, say sip2.mydomain.com http://sip2.mydomain.com. This node will first do local look-up for location of client A. Upon failure it will forward request to Super Node, which will do a look-up on Event database and finds that client A is registered on node sip1.mydomain.com http://sip1.mydomain.com, so it will send SIP redirect response 302 to requester Base Node. Now the request source node knows the address of request destination node, where it will send request next and they both, while acting as independent SIP servers, establish SIP session between caller and callee. This should work regardless if both nodes serve same or different SIP domains. 5. The Super Node will also give us global presence of all users currently registered to all Base Nodes, which may be useful for management and monitoring etc. Pros: 1. Completely independent of network topology and SIP. 2. Will work seamlessly for multi and federated domains. 3. Scale-able in every direction. 4. Minimal overhead for session establishment. Once supper node return destination base node address in SIP redirect response, session will establish directly between source and destination base node. Further optimizations are possible, e.g. base node can cache destination base node returned by supper node for any particular user and avoid querying super node for recurring SIP sessions. Cons: 1. Well, the key problem i can guess is of course the Event database size and speed, as it will have information on every user registered to every Base Node. I suggest memory cache db such as Redis would be idle for this storage. 2. Bandwidth consumed in Event transport. We can apply compression and make event queues as optimization. Comments and suggestions are highly welcome. Thank you. On Thu, Apr 4, 2013 at 2:05 PM, Vlad Paiu vladp...@opensips.org mailto:vladp...@opensips.org wrote: Hello all, We would like to get suggestions and help on the matter of distributing the user location information. Extending the User Location with a built-in distributed support is not straight forward - it is not about simply sharing data - as it is really SIP dependent and network limited While now, by using the OpenSIPS trunk, it is possible to just share the actual usrloc info ( by using the db_cachedb module and storing the information in a MongoDB cluster ), you can encounter real-life scenarios where just sharing the info is not enough, like : - NAT-ed clients, where only the initial server that received the Register has the pin-hole open, and thus is the only server that can relay traffic back to the respective client - the user has a SIP client that only accepts traffic from the server IP that it's currently registered against, and thus would reject direct traffic from other IPs ( due to security
Re: [OpenSIPS-Devel] [OpenSIPS-Users] [RFC] Distributed User Location
The lookup function could be extended to determine which node is responsible for a given SIP URI based on a one-way hashing function. Chord is an example of algorithm that can be used to map the hashes to the nodes (practically is a integer comparison where all SIP URIs are attracted by the next integer that corresponds to the IP of the server). Same lookup function can then be used to route traffic for a give user to the right node. If this is baked in, you need only to create some module that maintains a list of all active nodes. When one node joins, this is made known to the location table module so its lookup can take it into consideration. When one node leaves same process occurs, the node is removed from the table and lookup will find another node. Adrian On Apr 5, 2013, at 2:34 PM, Bogdan-Andrei Iancu wrote: Hello Adrian, The actual question is IF there is SOMETHING that can be done directly in the usrloc module to help with distributed scenario (to have some built-in functionality to have an auto-of-the-box solution). I'm fully aware you can combine the existing module with other kind of backends and do the work. Of course we can leave the usrloc module as it is and expect people to have their own fight to distributed it (as you did, as we did and many other did) - the idea is to have a ready to use approach here (if something like this exists) to address the most common and used cases. Regards, Bogdan-Andrei Iancu OpenSIPS Founder and Developer http://www.opensips-solutions.com On 04/05/2013 08:51 AM, Adrian Georgescu wrote: Hello Vlad, We developed such a solution and is operational since 2005 but not in the open source domain. The start point was P2P protocols used for file sharing. Is less of a SIP server issue (we used stock OpenSER and stock OpenSIPS for years) but rather a generic self-organizing network design where SIP accounts map to certain nodes using Chord style hashing function. The problem you need to solve is not necessarily SIP related (as it turns out that it works with any sip servers of client out there) but simply making a join/leave protocol that allows for horizontal scalability and adding this adapter to OpenSIPS. This layer if is abstract enough you can use it for any other thing not just OpenSIPS. We use it to horizontally scale Asterisk servers, OpenXCAP servers, MSRP Relay servers, Media Proxy servers for example. Here is the design document: https://docs.sipthor.net/projects/documentation/wiki/SipThorDescription And here is some papers we wrote back in 2005/2006 about this concept which can provide some clues for whomever wants to build this in OpenSIPS. http://www.ag-projects.com/presentations-corporate-285/41-sip2007 Adrian On Apr 4, 2013, at 3:05 PM, Vlad Paiu wrote: Hello all, We would like to get suggestions and help on the matter of distributing the user location information. Extending the User Location with a built-in distributed support is not straight forward - it is not about simply sharing data - as it is really SIP dependent and network limited While now, by using the OpenSIPS trunk, it is possible to just share the actual usrloc info ( by using the db_cachedb module and storing the information in a MongoDB cluster ), you can encounter real-life scenarios where just sharing the info is not enough, like : - NAT-ed clients, where only the initial server that received the Register has the pin-hole open, and thus is the only server that can relay traffic back to the respective client - the user has a SIP client that only accepts traffic from the server IP that it's currently registered against, and thus would reject direct traffic from other IPs ( due to security reasons ) We would like to implement a true general solution for this issue, and would appreciate your feedback on this. Also we'd appreciate if you could share the needs that you would have from such a distributed user location feature, and the scenarios that you would use such a feature in real-life setups. Best Regards, -- Vlad Paiu OpenSIPS Developer http://www.opensips-solutions.com ___ Users mailing list us...@lists.opensips.org http://lists.opensips.org/cgi-bin/mailman/listinfo/users ___ Users mailing list us...@lists.opensips.org http://lists.opensips.org/cgi-bin/mailman/listinfo/users ___ Devel mailing list Devel@lists.opensips.org http://lists.opensips.org/cgi-bin/mailman/listinfo/devel ___ Devel mailing list Devel@lists.opensips.org http://lists.opensips.org/cgi-bin/mailman/listinfo/devel
Re: [OpenSIPS-Devel] [OpenSIPS-Users] [RFC] Distributed User Location
Bogdan, As you suggest, there are ways to achieve this now manually with custom scripting and glue, it its not very straightforward. What I think is the goal would be something drop in ready, that you could just enable for distributed location versus normal location. The solution may be to fork the registrar and usrloc modules into distributed versions of the modules. These would automatically support these distributed scenarios by using a combination of things discussed, and possibly a forced path flag that would route back to the home proxy by modifying the registrar request (perhaps with a path to home proxy). This way, it would not interfere with existing usage of these modules and allow for more flexibility when developing these new ones without breaking existing installations. What do you guys think? Thanks in advance, --Rudy Dynamic Packet Toll-Free: 888.929.VOIP ( 8647 ) On Fri, Apr 5, 2013 at 8:37 AM, Bogdan-Andrei Iancu bog...@opensips.org wrote: Hello Muhammad, Your approach is the correct one (from SIP perspective) IMHO. But there are questions on the implementation side too - like the Super Node is just a storage or it should have SIP capabilities? How much of this behavior should be hardcoded in the registrar + usrloc module ? Best regards, Bogdan-Andrei Iancu OpenSIPS Founder and Developer http://www.opensips-solutions.com On 04/05/2013 04:57 AM, Muhammad Shahzad wrote: Well at 5 am in the morning while thinking on this topic the only thing ringing in my mind is a mechanism similar to IP to IP Gateway. Here is the main concept. 1. We have number of SIP servers running, say sip1.mydomain.com, sip2.mydomain.com ... sipN.mydomain.com, each serving domain mydomain.com and a SIP client A can select any one of these servers through DNS look-up (or whatever way possible) and registers to that server. Lets call these servers as Base Nodes. 2. Upon successful registration of client A to server sip1.mydomain.com, this Registrar Node fires an Event, which can be subscribed by a back-end SIP server, lets call it Super Node. This event will only contain following things, a). User part of all Contact URIs of client A with Expiry. b). Registrar Node information e.g. its IP address + Port. c). SIP domain of client A. (in case of multi-domain setup) 3. Super Node stores this information in some db back-end (memcache, redis, mysql etc.). This is sort of back-to-back register process but without SIP or authentication, since that has already been handled on Based Node anyway. The Super Node only needs to know which user is registered on which Base Node e.g. user 1001 is registered on node sip1.mydomain.com, user 1203 is registered on sip6.mydomain.com and so on. 4. When a SIP client B tries to send INVITE or MESSAGE or SUBSCRIBE to SIP client A. The SIP request will arrive on Base Node it is currently registered with, say sip2.mydomain.com. This node will first do local look-up for location of client A. Upon failure it will forward request to Super Node, which will do a look-up on Event database and finds that client A is registered on node sip1.mydomain.com, so it will send SIP redirect response 302 to requester Base Node. Now the request source node knows the address of request destination node, where it will send request next and they both, while acting as independent SIP servers, establish SIP session between caller and callee. This should work regardless if both nodes serve same or different SIP domains. 5. The Super Node will also give us global presence of all users currently registered to all Base Nodes, which may be useful for management and monitoring etc. Pros: 1. Completely independent of network topology and SIP. 2. Will work seamlessly for multi and federated domains. 3. Scale-able in every direction. 4. Minimal overhead for session establishment. Once supper node return destination base node address in SIP redirect response, session will establish directly between source and destination base node. Further optimizations are possible, e.g. base node can cache destination base node returned by supper node for any particular user and avoid querying super node for recurring SIP sessions. Cons: 1. Well, the key problem i can guess is of course the Event database size and speed, as it will have information on every user registered to every Base Node. I suggest memory cache db such as Redis would be idle for this storage. 2. Bandwidth consumed in Event transport. We can apply compression and make event queues as optimization. Comments and suggestions are highly welcome. Thank you. On Thu, Apr 4, 2013 at 2:05 PM, Vlad Paiu vladp...@opensips.org wrote: Hello all, We would like to get suggestions and help on the matter of distributing the user location information. Extending the User Location with a built-in distributed support is not straight forward - it is not about simply sharing data - as it
Re: [OpenSIPS-Devel] [OpenSIPS-Users] [RFC] Distributed User Location
Rudy, You are one step ahead :) - indeed, we need to find the best approach on the implementation side (different modules? flags/parameters?). But the current step is finding the solution : how the distributed version of usrloc would look like ? Regards, Bogdan-Andrei Iancu OpenSIPS Founder and Developer http://www.opensips-solutions.com On 04/05/2013 03:51 PM, Rudy wrote: Bogdan, As you suggest, there are ways to achieve this now manually with custom scripting and glue, it its not very straightforward. What I think is the goal would be something drop in ready, that you could just enable for distributed location versus normal location. The solution may be to fork the registrar and usrloc modules into distributed versions of the modules. These would automatically support these distributed scenarios by using a combination of things discussed, and possibly a forced path flag that would route back to the home proxy by modifying the registrar request (perhaps with a path to home proxy). This way, it would not interfere with existing usage of these modules and allow for more flexibility when developing these new ones without breaking existing installations. What do you guys think? Thanks in advance, --Rudy Dynamic Packet Toll-Free: 888.929.VOIP ( 8647 ) On Fri, Apr 5, 2013 at 8:37 AM, Bogdan-Andrei Iancubog...@opensips.org wrote: Hello Muhammad, Your approach is the correct one (from SIP perspective) IMHO. But there are questions on the implementation side too - like the Super Node is just a storage or it should have SIP capabilities? How much of this behavior should be hardcoded in the registrar + usrloc module ? Best regards, Bogdan-Andrei Iancu OpenSIPS Founder and Developer http://www.opensips-solutions.com On 04/05/2013 04:57 AM, Muhammad Shahzad wrote: Well at 5 am in the morning while thinking on this topic the only thing ringing in my mind is a mechanism similar to IP to IP Gateway. Here is the main concept. 1. We have number of SIP servers running, say sip1.mydomain.com, sip2.mydomain.com ... sipN.mydomain.com, each serving domain mydomain.com and a SIP client A can select any one of these servers through DNS look-up (or whatever way possible) and registers to that server. Lets call these servers as Base Nodes. 2. Upon successful registration of client A to server sip1.mydomain.com, this Registrar Node fires an Event, which can be subscribed by a back-end SIP server, lets call it Super Node. This event will only contain following things, a). User part of all Contact URIs of client A with Expiry. b). Registrar Node information e.g. its IP address + Port. c). SIP domain of client A. (in case of multi-domain setup) 3. Super Node stores this information in some db back-end (memcache, redis, mysql etc.). This is sort of back-to-back register process but without SIP or authentication, since that has already been handled on Based Node anyway. The Super Node only needs to know which user is registered on which Base Node e.g. user 1001 is registered on node sip1.mydomain.com, user 1203 is registered on sip6.mydomain.com and so on. 4. When a SIP client B tries to send INVITE or MESSAGE or SUBSCRIBE to SIP client A. The SIP request will arrive on Base Node it is currently registered with, say sip2.mydomain.com. This node will first do local look-up for location of client A. Upon failure it will forward request to Super Node, which will do a look-up on Event database and finds that client A is registered on node sip1.mydomain.com, so it will send SIP redirect response 302 to requester Base Node. Now the request source node knows the address of request destination node, where it will send request next and they both, while acting as independent SIP servers, establish SIP session between caller and callee. This should work regardless if both nodes serve same or different SIP domains. 5. The Super Node will also give us global presence of all users currently registered to all Base Nodes, which may be useful for management and monitoring etc. Pros: 1. Completely independent of network topology and SIP. 2. Will work seamlessly for multi and federated domains. 3. Scale-able in every direction. 4. Minimal overhead for session establishment. Once supper node return destination base node address in SIP redirect response, session will establish directly between source and destination base node. Further optimizations are possible, e.g. base node can cache destination base node returned by supper node for any particular user and avoid querying super node for recurring SIP sessions. Cons: 1. Well, the key problem i can guess is of course the Event database size and speed, as it will have information on every user registered to every Base Node. I suggest memory cache db such as Redis would be idle for this storage. 2. Bandwidth consumed in Event transport. We can apply compression and make event queues as optimization. Comments and suggestions are highly welcome. Thank
Re: [OpenSIPS-Devel] [OpenSIPS-Users] [RFC] Distributed User Location
Well, i am not much familiar with internals of opensips, i.e. its core and modules and how they interact with each other. But as an abstract idea, i suggest that both Base Node and Super Node should be opensips modules. No change in standard registrar or usrloc modules are actually needed. In the Super Node module, we will have, 1. one db table to store base node addresses for monitoring the Event. 2. one db table to store data received from the Event, lets call it Event Table. 3. one process to manage Event Table, pretty much the same way location table is managed by usrloc module. 4. some scripting functions for opensips.cfg, to look up in Event Table and do SIP redirect. 5. some MI functions to manually manage base node table and event table. In the Base Node module, we will have, 1. module parameters to define address of Super Node and event advertise socket (Super Node will connect to this socket to receive events). 2. a process to monitor usrloc table, such that as soon as a new user registers, it advertise this to event socket. 3. some scripting functions for opensips.cfg, to send call to Super Node if lookup function (from registrar module) fails and in reply route to handle SIP Redirect to send call to destination base node returned by Super Node. 4. some MI functions etc. Thank you. On Fri, Apr 5, 2013 at 1:37 PM, Bogdan-Andrei Iancu bog...@opensips.orgwrote: ** Hello Muhammad, Your approach is the correct one (from SIP perspective) IMHO. But there are questions on the implementation side too - like the Super Node is just a storage or it should have SIP capabilities? How much of this behavior should be hardcoded in the registrar + usrloc module ? Best regards, Bogdan-Andrei Iancu OpenSIPS Founder and Developerhttp://www.opensips-solutions.com On 04/05/2013 04:57 AM, Muhammad Shahzad wrote: Well at 5 am in the morning while thinking on this topic the only thing ringing in my mind is a mechanism similar to IP to IP Gateway. Here is the main concept. 1. We have number of SIP servers running, say sip1.mydomain.com, sip2.mydomain.com ... sipN.mydomain.com, each serving domain mydomain.comand a SIP client A can select any one of these servers through DNS look-up (or whatever way possible) and registers to that server. Lets call these servers as Base Nodes. 2. Upon successful registration of client A to server sip1.mydomain.com, this Registrar Node fires an Event, which can be subscribed by a back-end SIP server, lets call it Super Node. This event will only contain following things, a). User part of all Contact URIs of client A with Expiry. b). Registrar Node information e.g. its IP address + Port. c). SIP domain of client A. (in case of multi-domain setup) 3. Super Node stores this information in some db back-end (memcache, redis, mysql etc.). This is sort of back-to-back register process but without SIP or authentication, since that has already been handled on Based Node anyway. The Super Node only needs to know which user is registered on which Base Node e.g. user 1001 is registered on node sip1.mydomain.com, user 1203 is registered on sip6.mydomain.com and so on. 4. When a SIP client B tries to send INVITE or MESSAGE or SUBSCRIBE to SIP client A. The SIP request will arrive on Base Node it is currently registered with, say sip2.mydomain.com. This node will first do local look-up for location of client A. Upon failure it will forward request to Super Node, which will do a look-up on Event database and finds that client A is registered on node sip1.mydomain.com, so it will send SIP redirect response 302 to requester Base Node. Now the request source node knows the address of request destination node, where it will send request next and they both, while acting as independent SIP servers, establish SIP session between caller and callee. This should work regardless if both nodes serve same or different SIP domains. 5. The Super Node will also give us global presence of all users currently registered to all Base Nodes, which may be useful for management and monitoring etc. Pros: 1. Completely independent of network topology and SIP. 2. Will work seamlessly for multi and federated domains. 3. Scale-able in every direction. 4. Minimal overhead for session establishment. Once supper node return destination base node address in SIP redirect response, session will establish directly between source and destination base node. Further optimizations are possible, e.g. base node can cache destination base node returned by supper node for any particular user and avoid querying super node for recurring SIP sessions. Cons: 1. Well, the key problem i can guess is of course the Event database size and speed, as it will have information on every user registered to every Base Node. I suggest memory cache db such as Redis would be idle for this storage. 2. Bandwidth consumed in Event transport. We can apply compression
Re: [OpenSIPS-Devel] [OpenSIPS-Users] [RFC] Distributed User Location
Well at 5 am in the morning while thinking on this topic the only thing ringing in my mind is a mechanism similar to IP to IP Gateway. Here is the main concept. 1. We have number of SIP servers running, say sip1.mydomain.com, sip2.mydomain.com ... sipN.mydomain.com, each serving domain mydomain.comand a SIP client A can select any one of these servers through DNS look-up (or whatever way possible) and registers to that server. Lets call these servers as Base Nodes. 2. Upon successful registration of client A to server sip1.mydomain.com, this Registrar Node fires an Event, which can be subscribed by a back-end SIP server, lets call it Super Node. This event will only contain following things, a). User part of all Contact URIs of client A with Expiry. b). Registrar Node information e.g. its IP address + Port. c). SIP domain of client A. (in case of multi-domain setup) 3. Super Node stores this information in some db back-end (memcache, redis, mysql etc.). This is sort of back-to-back register process but without SIP or authentication, since that has already been handled on Based Node anyway. The Super Node only needs to know which user is registered on which Base Node e.g. user 1001 is registered on node sip1.mydomain.com, user 1203 is registered on sip6.mydomain.com and so on. 4. When a SIP client B tries to send INVITE or MESSAGE or SUBSCRIBE to SIP client A. The SIP request will arrive on Base Node it is currently registered with, say sip2.mydomain.com. This node will first do local look-up for location of client A. Upon failure it will forward request to Super Node, which will do a look-up on Event database and finds that client A is registered on node sip1.mydomain.com, so it will send SIP redirect response 302 to requester Base Node. Now the request source node knows the address of request destination node, where it will send request next and they both, while acting as independent SIP servers, establish SIP session between caller and callee. This should work regardless if both nodes serve same or different SIP domains. 5. The Super Node will also give us global presence of all users currently registered to all Base Nodes, which may be useful for management and monitoring etc. Pros: 1. Completely independent of network topology and SIP. 2. Will work seamlessly for multi and federated domains. 3. Scale-able in every direction. 4. Minimal overhead for session establishment. Once supper node return destination base node address in SIP redirect response, session will establish directly between source and destination base node. Further optimizations are possible, e.g. base node can cache destination base node returned by supper node for any particular user and avoid querying super node for recurring SIP sessions. Cons: 1. Well, the key problem i can guess is of course the Event database size and speed, as it will have information on every user registered to every Base Node. I suggest memory cache db such as Redis would be idle for this storage. 2. Bandwidth consumed in Event transport. We can apply compression and make event queues as optimization. Comments and suggestions are highly welcome. Thank you. On Thu, Apr 4, 2013 at 2:05 PM, Vlad Paiu vladp...@opensips.org wrote: Hello all, We would like to get suggestions and help on the matter of distributing the user location information. Extending the User Location with a built-in distributed support is not straight forward - it is not about simply sharing data - as it is really SIP dependent and network limited While now, by using the OpenSIPS trunk, it is possible to just share the actual usrloc info ( by using the db_cachedb module and storing the information in a MongoDB cluster ), you can encounter real-life scenarios where just sharing the info is not enough, like : - NAT-ed clients, where only the initial server that received the Register has the pin-hole open, and thus is the only server that can relay traffic back to the respective client - the user has a SIP client that only accepts traffic from the server IP that it's currently registered against, and thus would reject direct traffic from other IPs ( due to security reasons ) We would like to implement a true general solution for this issue, and would appreciate your feedback on this. Also we'd appreciate if you could share the needs that you would have from such a distributed user location feature, and the scenarios that you would use such a feature in real-life setups. Best Regards, -- Vlad Paiu OpenSIPS Developer http://www.opensips-solutions.**com http://www.opensips-solutions.com __**_ Users mailing list us...@lists.opensips.org http://lists.opensips.org/cgi-**bin/mailman/listinfo/usershttp://lists.opensips.org/cgi-bin/mailman/listinfo/users -- Mit freundlichen Grüßen Muhammad Shahzad --- CISCO Rich Media Communication Specialist (CRMCS) CISCO
Re: [OpenSIPS-Devel] [OpenSIPS-Users] [RFC] Distributed User Location
Hello Vlad, We developed such a solution and is operational since 2005 but not in the open source domain. The start point was P2P protocols used for file sharing. Is less of a SIP server issue (we used stock OpenSER and stock OpenSIPS for years) but rather a generic self-organizing network design where SIP accounts map to certain nodes using Chord style hashing function. The problem you need to solve is not necessarily SIP related (as it turns out that it works with any sip servers of client out there) but simply making a join/leave protocol that allows for horizontal scalability and adding this adapter to OpenSIPS. This layer if is abstract enough you can use it for any other thing not just OpenSIPS. We use it to horizontally scale Asterisk servers, OpenXCAP servers, MSRP Relay servers, Media Proxy servers for example. Here is the design document: https://docs.sipthor.net/projects/documentation/wiki/SipThorDescription And here is some papers we wrote back in 2005/2006 about this concept which can provide some clues for whomever wants to build this in OpenSIPS. http://www.ag-projects.com/presentations-corporate-285/41-sip2007 Adrian On Apr 4, 2013, at 3:05 PM, Vlad Paiu wrote: Hello all, We would like to get suggestions and help on the matter of distributing the user location information. Extending the User Location with a built-in distributed support is not straight forward - it is not about simply sharing data - as it is really SIP dependent and network limited While now, by using the OpenSIPS trunk, it is possible to just share the actual usrloc info ( by using the db_cachedb module and storing the information in a MongoDB cluster ), you can encounter real-life scenarios where just sharing the info is not enough, like : - NAT-ed clients, where only the initial server that received the Register has the pin-hole open, and thus is the only server that can relay traffic back to the respective client - the user has a SIP client that only accepts traffic from the server IP that it's currently registered against, and thus would reject direct traffic from other IPs ( due to security reasons ) We would like to implement a true general solution for this issue, and would appreciate your feedback on this. Also we'd appreciate if you could share the needs that you would have from such a distributed user location feature, and the scenarios that you would use such a feature in real-life setups. Best Regards, -- Vlad Paiu OpenSIPS Developer http://www.opensips-solutions.com ___ Users mailing list us...@lists.opensips.org http://lists.opensips.org/cgi-bin/mailman/listinfo/users ___ Devel mailing list Devel@lists.opensips.org http://lists.opensips.org/cgi-bin/mailman/listinfo/devel