IP Library Granted Patent US 10,148,611
Granted Patent B2
US 10,148,611 · App. 15/024,250 · Granted Dec 4, 2018

Network address sharing in a multitenant, monolithic application environment

View Patent ↗
Loading inventors, assignments & file history…
Monitor This Case
Get email alerts when status or documents change.
Order Certified Copies
Most orders are placed with the USPTO same day — all within 24 business hours.
Order via The Patent Place →
Pre-filled with this patent's details
Quick Facts
Patent No.
US 10,148,611
App. No.
15/024,250
Granted
Dec 4, 2018
Kind
B2
Abstract

Improved techniques of running multitenant applications involve opening sockets in multiple network namespaces through which respective tenants may access a monolithic application thread. A server running such an application may assign tenants network bandwidth through one or more network namespaces. Each network namespace has its own independent set of network addresses that may overlap or even be identical to another namespace's set of network addresses. The server may then identify a request to access application data with a particular tenant by network identifiers such as virtual local area network (VLAN) identifiers attached to the request. Thus, even though two established sockets may include identical source and destination addresses, data may be exchanged between the server and the intended tenants.

Claims (91)

1. A method of operating a monolithic, multitenant application on a server device, the application being run on the server device from a default namespace in a context of an operating system over a network, the method comprising:

generating, by processing circuitry of the server device, a first network namespace and second network namespace in the context of the operating system, the first network namespace and the second network namespace being distinct from one another;

opening (i) a first socket within the first network namespace and (ii) a second socket within the second network namespace;

receiving (i) a first request to access a thread of the application from a first tenant through the first socket and (ii) a second request to access the thread of the application from a second tenant through the second socket, the first tenant and the second tenant being distinct from one another;

transferring, by the processor, data generated by the thread of the application to the first tenant through the first socket; and

transferring, by the processor, data generated by the thread of the application to the second tenant through the second socket;

wherein:

the first network namespace has a first network address within a first virtual network and the second network namespace has a second network address within a second virtual network;

generating the first network namespace includes allocating a first range of network addresses within the first virtual network to the first tenant;

generating the second network namespace includes allocating a second range of network addresses within the second virtual network to the second tenant; and

the first range of network addresses and the second range of network addresses have at least one network address in common.

2. A method of operating a monolithic, multitenant application on a server device, the application being run on the server device from a default namespace in a context of an operating system over a network, the method comprising:

generating, by processing circuitry of the server device, a first network namespace and second network namespace in the context of the operating system, the first network namespace and the second network namespace being distinct from one another;

opening (i) a first socket within the first network namespace and (ii) a second socket within the second network namespace;

receiving (i) a first request to access a thread of the application from a first tenant through the first socket and (ii) a second request to access the thread of the application from a second tenant through the second socket, the first tenant and the second tenant being distinct from one another;

transferring, by the processor, data generated by the thread of the application to the first tenant through the first socket; and

transferring, by the processor, data generated by the thread of the application to the second tenant through the second socket;

wherein generating the first network namespace and the second network namespace includes:

producing a first set of virtual local area network (VLAN) interfaces within the first network namespace, each of the first set of VLAN interfaces having a respective value of a VLAN identifier, the VLAN identifier identifying a VLAN over which data may be transported between a tenant and a namespace of the server; and

producing a second set of VLAN interfaces within the second network namespace, each of the second set of VLAN interfaces having a respective value of the VLAN identifier;

wherein the first request has a first value of the VLAN identifier and the second request has a second value of the VLAN identifier; and

wherein the method further comprises:

routing the first request to one of the first network namespace and the second network namespace according to the first VLAN identifier; and

routing the second request to one of the first network namespace and the second network namespace according to the second VLAN identifier.

3. A method as in claim 2 , wherein the server includes a set of network interfaces configured to receive requests from tenants, each of the network interfaces having a value of a network interface identifier identifying that network interface;

wherein receiving the first request to access the thread of the application from the first tenant through the first socket includes obtaining a first value of the network interface identifier;

wherein receiving the second request to access the thread of the application from the second tenant through the second socket includes obtaining a second value of the network interface identifier;

wherein routing the first request includes sending the first request to one of the first network namespace and the second network namespace according to the first value of the VLAN identifier and the first value of the network interface identifier; and

wherein routing the second request includes sending the second request to one of the first network namespace and the second network namespace according to the second value of the VLAN identifier and the second value of the network interface identifier.

4. A method as in claim 2 , wherein generating the first network namespace and the second network namespace further includes configuring the monolithic application to generate a first virtual data mover (VDM) serving the first network namespace and a second VDM serving the second network namespace, each of the first VDM and second VDM being configured to extract application data from a storage device and respectively present the extracted application data to the first tenant and the second tenant, each of the first VDM and second VDM being run by the server within the default namespace within the server.

5. A method as in claim 2 , wherein generating the first network namespace and the second network namespace further includes creating a VLAN table, the VLAN table having entries, each entry of the VLAN table including a value of a namespace identifier identifying a network namespace and a value of the VLAN identifier;

wherein receiving the first request includes accessing an entry of the VLAN table that includes the first value of the VLAN identifier; and

wherein routing the first request to one of the first network namespace and the second network namespace includes sending the first request to the network namespace identified by the value of the namespace identifier of the accessed entry.

6. A method as in claim 5 , further comprising displaying the entries of the VLAN table in a graphical user interface (GUI) within a window generated by the operating system, the GUI including a control that enables an administrator of the server to add or delete a VLAN identifier from a network namespace.

7. A method as in claim 5 , wherein the first tenant represents a production system and the second tenant represents a test system, the production system being used by external customers and having a first set of network addresses in the first virtual network, the test system being used internally for experimentation and having a second set of network addresses in the second virtual network, the first set of network addresses and the second set of network addresses each having at least one address in common;

wherein the production system connects to the network at a production port of a switch and the test system connects to the network at a tenant port of the switch;

wherein producing the first set of VLAN interfaces within the first network namespace includes:

storing a production value of the VLAN identifier in a first entry of the VLAN table, the first entry also having the first value of the network namespace identifier identifying the first network namespace; and

assigning the production value of the VLAN identifier to the production port so that requests from the production system may be routed respectively to the first network namespace when the requests originate from the at least one address in common; and

wherein producing the second set of VLAN interfaces within the second network namespace includes:

storing a tenant VLAN identifier in a second entry of the VLAN table, the second entry also having the second value of the network namespace identifier; and

assigning the tenant VLAN identifier to the tenant port so that requests from the tenant system may be routed to the second namespace when the requests originate from the at least one address in common.

8. A method as in claim 2 , wherein the first tenant is used by a first external customer and has a first set of addresses in the first virtual network;

wherein the second tenant is used by a second external customer and has a second set of addresses in the second virtual network;

wherein the first tenant connects to the network at a first port of a first switch and the second tenant connects to the network at a second port of a second switch;

wherein producing the first set of VLAN interfaces within the first network namespace includes assigning a first value of the VLAN identifier to the first port so that requests from the first tenant may be routed to the first network namespace; and

wherein producing the second set of VLAN interfaces within the second namespace includes assigning a second value of the VLAN identifier to the second port so that requests from the second system may be routed to the second network namespace.

9. An electronic apparatus constructed and arranged to operate multitenant applications over networks, the apparatus comprising:

a network interface coupled to a network;

memory; and

controlling circuitry coupled to the memory, the controlling circuitry being configured to run a monolithic application within a default namespace in a context of an operating system running on the server the controlling circuitry being constructed and arranged to:

generate, in a context of the operating system, a first network namespace and second network namespace in the context of the operating system, the first network namespace and the second network namespace being distinct from one another;

open (i) a first socket within the first network namespace and (ii) a second socket within the second network namespace;

receive (i) a first request to access a thread of the application from a first tenant through the first socket and (ii) a second request to access the thread of the application from a second tenant through the second socket;

transfer, by the processor, data generated by the thread of the application to the first tenant through the first socket; and

transfer, by the processor, data generated by the thread of the application to the second tenant through the second socket;

wherein the controlling circuitry constructed and arranged to generate the first network namespace and the second network namespace is further constructed and arranged to:

produce a first set of virtual local area network (VLAN) interfaces within the first network namespace, each of the first set of VLAN interfaces having a respective value of a VLAN identifier, the VLAN identifier identifying a VLAN over which data may be transported between a tenant and a namespace of the server; and

produce a second set of VLAN interfaces within the second network namespace, each of the second set of VLAN interfaces having a respective value of the VLAN identifier;

wherein the first request has a first value of the VLAN identifier and the second request has a second value of the VLAN identifier; and

wherein the controlling circuitry is further constructed and arranged to:

route the first request to one of the first network namespace and the second network namespace according to the first VLAN identifier; and

route the second request to one of the first network namespace and the second network namespace according to the second VLAN identifier.

10. An apparatus as in claim 9 , wherein the server includes a set of network interfaces configured to receive requests from tenants, each of the network interfaces having a value of a network interface identifier identifying that network interface;

wherein the controlling circuitry constructed and arranged to receive the first request to access the thread of the application from the first tenant through the first socket is further constructed and arranged to obtain a first value of the network interface identifier;

wherein the controlling circuitry constructed and arranged to receive the second request to access the thread of the application from the second tenant through the second socket is further constructed and arranged to obtaining a second value of the network interface identifier;

wherein the controlling circuitry constructed and arranged to route the first request is further constructed and arranged to send the first request to one of the first network namespace and the second network namespace according to the first value of the VLAN identifier and the first value of the network interface identifier; and

wherein the controlling circuitry constructed and arranged to route the second request is further constructed and arranged to send the second request to one of the first network namespace and the second network namespace according to the second value of the VLAN identifier and the second value of the network interface identifier.

11. An apparatus as in claim 9 , wherein the controlling circuitry constructed and arranged to generate the second network namespace is further constructed and arranged to configure the monolithic application to generate a first virtual data mover (VDM) serving the first network namespace and a second VDM serving the second network namespace, each of the first VDM and second VDM being configured to extract application data from a storage device and respectively present the extracted application data to the first tenant and the second tenant, each of the first VDM and second VDM being run by the server within the default namespace within the server.

12. An apparatus as in claim 9 , wherein the controlling circuitry constructed and arranged to generate the second network namespace is further constructed and arranged to create a VLAN table, the VLAN table having entries, each entry of the VLAN table including a value of a namespace identifier identifying a network namespace and a value of the VLAN identifier;

wherein controlling circuitry constructed and arranged to receive the first request is further constructed and arranged to access an entry of the VLAN table that includes the first value of the VLAN identifier; and

wherein the controlling circuitry constructed and arranged to route the first request is further constructed and arranged to send the first request to the network namespace identified by the value of the namespace identifier of the accessed entry.

13. A computer program product comprising a non-transitory, computer-readable storage medium which stores executable code, which, when executed by a computer, causes the computer to perform a method of operating multitenant applications over networks, the method comprising:

generating, by processing circuitry of the server device in a context of the operating system, a first network namespace and second network namespace in the context of the operating system, the first network namespace and the second network namespace being distinct from one another;

opening (i) a first socket within the first network namespace and (ii) a second socket within the second network namespace;

receiving (i) a first request to access a thread of the application from a first tenant through the first socket and (ii) a second request to access the thread of the application from a second tenant through the second socket;

transferring, by the processor, data generated by the thread of the application to the first tenant through the first socket; and

transferring, by the processor, data generated by the thread of the application to the second tenant through the second socket;

wherein generating the first network namespace and the second network namespace includes:

producing a first set of virtual local area network (VLAN) interfaces within the first network namespace, each of the first set of VLAN interfaces having a respective value of a VLAN identifier, the VLAN identifier identifying a VLAN over which data may be transported between a tenant and a namespace of the server; and

producing a second set of VLAN interfaces within the second network namespace, each of the second set of VLAN interfaces having a respective value of the VLAN identifier;

wherein the first request has a first value of the VLAN identifier and the second request has a second value of the VLAN identifier; and

wherein the method further comprises:

routing the first request to one of the first network namespace and the second network namespace according to the first VLAN identifier; and

routing the second request to one of the first network namespace and the second network namespace according to the second VLAN identifier.

14. A computer program product as in claim 13 , wherein the server includes a set of network interfaces configured to receive requests from tenants, each of the network interfaces having a value of a network interface identifier identifying that network interface;

wherein receiving the first request to access the thread of the application from the first tenant through the first socket includes obtaining a first value of the network interface identifier;

wherein receiving the second request to access the thread of the application from the second tenant through the second socket includes obtaining a second value of the network interface identifier;

wherein routing the first request includes sending the first request to one of the first network namespace and the second network namespace according to the first value of the VLAN identifier and the first value of the network interface identifier; and

wherein routing the second request includes sending the second request to one of the first network namespace and the second network namespace according to the second value of the VLAN identifier and the second value of the network interface identifier.

15. A computer program product as in claim 13 , wherein generating the first network namespace and the second network namespace further includes configuring the monolithic application to generate a first virtual data mover (VDM) serving the first network namespace and a second VDM serving the second network namespace, each of the first VDM and second VDM being configured to extract application data from a storage device and respectively present the extracted application data to the first tenant and the second tenant, each of the first VDM and second VDM being run by the server within the default namespace within the server.

Assignments (4)
RELEASE OF SECURITY INTEREST IN PATENTS PREVIOUSLY RECORDED AT REEL/FRAME (053546/0001) Recorded Jun 23, 2022
From: THE BANK OF NEW YORK MELLON TRUST COMPANY, N.A., AS NOTES COLLATERAL AGENT
To: DELL MARKETING L.P. (ON BEHALF OF ITSELF AND AS SUCCESSOR-IN-INTEREST TO CREDANT TECHNOLOGIES, INC.); DELL INTERNATIONAL L.L.C.; DELL PRODUCTS L.P.; DELL USA L.P.; EMC CORPORATION; DELL MARKETING CORPORATION (SUCCESSOR-IN-INTEREST TO FORCE10 NETWORKS, INC. AND WYSE TECHNOLOGY L.L.C.); EMC IP HOLDING COMPANY LLC
Reel/Frame 071642/0001 →
SECURITY AGREEMENT Recorded Mar 21, 2019
From: CREDANT TECHNOLOGIES, INC.; DELL INTERNATIONAL L.L.C.; DELL MARKETING L.P.; DELL PRODUCTS L.P.; DELL USA L.P.; EMC CORPORATION; FORCE10 NETWORKS, INC.; WYSE TECHNOLOGY L.L.C.; EMC IP HOLDING COMPANY LLC
To: THE BANK OF NEW YORK MELLON TRUST COMPANY, N.A.
Reel/Frame 049452/0223 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Mar 3, 2017
From: EMC CORPORATION
To: EMC IP HOLDING COMPANY LLC
Reel/Frame 041872/0001 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Feb 1, 2017
From: STOTSKI, YURI ALEXANDROVICH; TOLSTOY, VASILIY MIHAILOVICH; KOVALEV, SERGEY ALEXANDROVICH; HARRIS, ARTHUR O.; GUPTA, MUKESH
To: EMC CORPORATION
Reel/Frame 041142/0341 →