CN106331065B - Proxy application and system for host system with service container - Google Patents

Proxy application and system for host system with service container Download PDF

Info

Publication number
CN106331065B
CN106331065B CN201610670046.3A CN201610670046A CN106331065B CN 106331065 B CN106331065 B CN 106331065B CN 201610670046 A CN201610670046 A CN 201610670046A CN 106331065 B CN106331065 B CN 106331065B
Authority
CN
China
Prior art keywords
service
container
service container
information
registry
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201610670046.3A
Other languages
Chinese (zh)
Other versions
CN106331065A (en
Inventor
姚卓君
李雪峰
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Zhongan Online P&c Insurance Co ltd
Original Assignee
Zhongan Online P&c Insurance Co ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Zhongan Online P&c Insurance Co ltd filed Critical Zhongan Online P&c Insurance Co ltd
Priority to CN201610670046.3A priority Critical patent/CN106331065B/en
Publication of CN106331065A publication Critical patent/CN106331065A/en
Application granted granted Critical
Publication of CN106331065B publication Critical patent/CN106331065B/en
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/50Network services
    • H04L67/56Provisioning of proxy services
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/10Protocols in which an application is distributed across nodes in the network
    • H04L67/1001Protocols in which an application is distributed across nodes in the network for accessing one among a plurality of replicated servers

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)
  • Computer And Data Communications (AREA)

Abstract

The invention discloses a proxy application for a host system with a service container, wherein: the proxy application is arranged in the host system and monitors a service container in the host system, and when a starting interface or a restarting interface of the service container is found to be called, the proxy application registers service information and address information corresponding to the service container to a service registration center; and when the stopping interface of the service container is monitored to be called, the proxy application deletes the service information and the address information corresponding to the service container from the service registration center. Correspondingly, the invention also discloses a system comprising the agent application. The agent application and the system can realize the registration of the information corresponding to the service container under containerization deployment. The invention can be applied to internet insurance business, can realize a container-level virtualization deployment scheme based on a Docker container, and improves application development efficiency and resource utilization rate.

Description

Proxy application and system for host system with service container
Technical Field
The present invention relates to a proxy application and system, and more particularly, to a proxy application and system for a host system having a service container.
Background
In the traditional insurance industry, the traffic volume to be processed by a software system is not large, and most of the traffic volume can be supported even if only one node is deployed in one service; for the internet insurance scene of fragmentation and high frequency of product form, the system must be deployed in a distributed and clustered manner to support hundreds of millions of services per day. That is, each service system component deploys multiple copies, and when each service instance is started, the IP address and the port number of the current service instance are registered in a service registry (an application with a service registration function). Therefore, when other components need to call the service, the load balancer corresponding to the service needs to be called, and the load balancer can acquire the address list of the service instance from the service registry and select one of the address list to call the service instance really.
At present, due to the appearance of a Docker container (in the present invention, a container refers to an interface set located between a component and a platform in a server, and provides an isolated running space for an application program, Docker is an open-source application container engine, so that developers can package their applications and rely on the packages to a portable container, and then distribute the applications to any popular Linux machine, and can also implement virtualization), a container-level virtualization deployment scheme is selected by many internet companies to replace an original deployment scheme based on a physical machine or a virtual machine due to abnormal fire and heat.
Containerized deployments differ from conventional deployment schemes in that: in a traditional deployment scheme, both a physical machine and a virtual machine are provided with a fixed IP address; in the containerization deployment scheme, a container may be randomly scheduled to any one of the hosts in the host cluster, and an IP address of the container cannot be solidified and a port address for providing a service to the outside cannot be solidified. Therefore, if the traditional service registration and discovery scheme is directly applied to the containerized deployment system, the following problems are encountered:
(1) in a conventional scheme, an application system fixes a port number for providing services to the outside, such as 8080, so when the system is started, the IP address of a host where the application system is located and the fixed port number can be registered in a service registration center; when the container deployment is performed, the IP address of the container deployment cannot be solidified, and the port address for providing the external service cannot be solidified, so the container deployment cannot be registered in the traditional way.
(2) In the traditional scheme, an address list of a back-end service is hard-coded in a front-end load balancer, or the service address list needs to be updated by restarting the load balancer; the container may perform operations such as capacity expansion, capacity reduction, migration, and the like at any time, that is, the load balancer in the conventional scheme cannot dynamically acquire and update the latest address list of the backend service.
Disclosure of Invention
One of the objects of the present invention is to provide a proxy application for a host system having a service container, which can register information corresponding to the service container to a service registry.
In accordance with the above object, the present invention proposes a proxy application for a host system having a service container, wherein:
the proxy application is arranged in the host system and monitors a service container in the host system, and when a starting interface or a restarting interface of the service container is found to be called, the proxy application registers service information and address information corresponding to the service container to a service registration center; and when the stopping interface of the service container is monitored to be called, the proxy application deletes the service information and the address information corresponding to the service container from the service registration center.
The agent application monitors the service container, and when a starting interface or a restarting interface of the service container is called, the agent application registers service information and address information corresponding to the service container to a service registration center; and when the stopping interface of the service container is monitored to be called, deleting the service information and the address information corresponding to the service container from the service registration center by the agent application, and registering the information corresponding to the service container to the service registration center. In the scheme, the problem of extracting the address information during containerization deployment, which cannot be solved by the traditional registration scheme, is solved by monitoring and dynamically acquiring the address information (usually comprising an IP address and a port address).
The broker application described in the present invention may be developed using the Go language and may be used for registration of corresponding information for local (i.e., current host system) service containers.
Further, in the proxy application of the present invention, an open source service consul is used as the service registry.
In the above scheme, Consul is an application written in the Go language, and has functions of service registration and distributed key value storage.
Further, in the proxy application according to the present invention, when the start interface or the restart interface of the service container is found to be called, the proxy application further registers at least one of the service container, the HTTP interface call address of the service container, and the load weight of the service container in the service registry.
In the above scheme, the load weight indicates how much request traffic is allocated to the service container.
Further, in the present invention and any of the above agent applications, the agent application performs health check on the service container registered in the service registry at regular time, and receives a response of feedback; when the received response is that the service of the service container is in a sub-health state, the agent application modifies the load weight of the service container by the service registry; when the received response is that the service of the service container is in an unhealthy state, the agent application deletes the piece of service information and the address information from the service registry.
In the above scheme, the health status refers to the level of capability of the service to provide the function that the service should achieve to the outside, and includes the health status of the container where the service is located (such as CPU usage, memory capacity, and disk usage), the health status of the service itself (such as heap and stack memory usage, and garbage collection status), and so on.
It is another object of the present invention to provide a system for a host system having a service container that enables registration of information corresponding to the service container.
In view of the above object, the present invention also provides a system for a host system having a service container, comprising:
a service registry;
an agent application according to the invention or any one of the above in data connection with the service registry.
The system of the invention comprises the agent application and a service registration center in data connection with the agent application, so that the system can realize the registration of the information corresponding to the service container.
Furthermore, the system of the present invention further includes a load balancer, which monitors the change of the registration information of the service registration center, and when the registration information of the service registration center changes, the load balancer dynamically updates its routing table first and then receives a new request.
In the above scheme, the load balancer can be developed based on Go language. Since updating the routing table is very fast (typically around 50 ms), there is substantially no possibility of any impact on the currently processing request or the newly arriving request, i.e. the updating of the routing table has no impact on the outside, and is not known.
Further, in the above system, the changing of the registration information includes: new service information and address information are registered, existing service information and address information are deleted, and a load weight value is modified.
Further, in the above system, the load balancer dynamically updates the routing table through an execution selector syntax provided in the Go language concurrency model.
Furthermore, in the above system, the load balancer uses a prefix tree as a storage structure of the routing table.
In the above scheme, the load balancer uses a prefix tree (prefix tree, data structure Trie number) as a storage structure of the routing table, so as to accelerate the route matching speed of the service request.
Compared with the traditional service registration, service discovery and load balancing, the proxy application of the invention has the following advantages:
(1) no intrusion into the application system: in the traditional scheme, either a scheme of using no service registry and then writing a dead backend service address list in a load balancer by hard coding is adopted, or extra codes are added in a service end system, so that current service information can be registered with the service registry when the service is started. The invention monitors the command executed by the service container through the agent application to dynamically register, reversely register and adjust the weight, namely, hard coding is not needed, and any additional code is not needed to be added to the application system.
(2) Interrupt-free hot-update load balancer routing table: by utilizing the characteristic of the execution selector of the Go language, once any change of the service registration information is monitored, the updating of the routing table can be completed under the condition of not influencing the current processing request and the newly arrived processing request, the load balancer does not need to be restarted, and almost no influence is caused on the request.
(3) And automatically and dynamically adjusting the service routing weight according to the health check condition of the service and the system resource consumption condition.
(4) The agent application automatically captures the external service address of the system according to the started service container information, and the update speed is millisecond-level, so that the method is highly suitable for containerization deployment scenes.
(5) The method can be applied to internet insurance business, can realize a container-level virtualization deployment scheme based on a Docker container, and improves application development efficiency and resource utilization rate.
The system of the invention also has the above effects.
Drawings
FIG. 1 is a flow chart of an agent application for a host system with a service container according to an embodiment of the present invention.
FIG. 2 is a block diagram of a system for a host system having a service container in accordance with one embodiment of the present invention.
FIG. 3 is a block diagram of a system for a host system having a service container according to another embodiment of the invention.
FIG. 4 is a flow diagram of the system of FIG. 3 in one embodiment.
Detailed Description
The proxy application and system for a host system with a service container according to the present invention will be described in further detail with reference to the drawings and specific embodiments, but the detailed description is not intended to limit the present invention.
The proxy application for a host system with a service container and the system (including its internal components) in the following embodiments may be software modules that implement their functionality by running on corresponding hardware devices. The following embodiments may be used in an internet insurance business scenario, and the service container may be a Docker container.
FIG. 1 illustrates the flow of an agent application for a host system with a service container according to one embodiment of the invention. As shown in fig. 1, the proxy application is disposed in the host system, and the proxy application monitors a service container in the host system, and when a start interface or a restart interface of the service container is found to be called, the proxy application registers service information and address information corresponding to the service container in a service registration center; and when the stopping interface of the service container is monitored to be called, the proxy application deletes the service information and the address information corresponding to the service container from the service registration center.
In some embodiments, an open source service consul is employed as the service registry.
In some embodiments, when the start interface or the restart interface of the service container is found to be called, the proxy application further registers at least one of the service container, the HTTP interface call address of the service container, and the load weight of the service container with the service registry.
In some embodiments, the agent application periodically performs a health check on the service containers registered with the service registry and receives a response to the feedback; when the received response is that the service of the service container is in a sub-health state, the agent application modifies the load weight of the service container by the service registry; when the received response is that the service of the service container is in an unhealthy state, the agent application deletes the piece of service information and the address information from the service registry.
FIG. 2 illustrates the architecture of a system for a host system with a service container in accordance with one embodiment of the present invention. As shown in fig. 2, the system includes: a service registry 2; a proxy application 1 according to the invention or any of the above, in data connection with a service registry 2.
FIG. 3 shows the architecture of a system for a host system with a service container according to another embodiment of the present invention. As shown in fig. 3, the system of the present invention further includes a load balancer 3 based on the system shown in fig. 2, which monitors the change of the registration information of the service registry 2, and when the registration information of the service registry 2 changes, the load balancer 3 dynamically updates its routing table first and then receives a new request.
In some embodiments, the system wherein the change in the registration information comprises: new service information and address information are registered, existing service information and address information are deleted, and a load weight value is modified.
In some embodiments, in the above system, the load balancer 3 dynamically updates the routing table through the execution selector syntax provided in the Go language concurrency model.
In some embodiments, in the above system, the load balancer 3 uses a prefix tree as a storage structure of the routing table.
FIG. 4 illustrates a flow diagram of the system of FIG. 3 in one embodiment. As shown in fig. 4, with reference to fig. 3, the process includes:
step 110: the open source service consul is used as the service registry 2. The proxy application 1 listens to service containers within the host system (e.g., listens to the Docker daemon on the host). The agent application 1 also regularly performs a health check on the service containers registered with the service registry and receives a response of the feedback. Since the services in the service container are all provided to the outside through the HTTP interface, the proxy application 1 will make health check requests to the "/health" service of the service container service address every three seconds (i.e., if the service address of the service container is 10.253.100.100:31224, the access path of the health check is 10.253.100.100: 31224/health).
Step 120: when the agent application 1 finds that the start interface or the restart interface of the service container is called, go to step 130; when the agent application 1 monitors that the stop interface of the service container is called, or when the response received by the agent application 1 is that the service of the service container is in an unhealthy state, going to step 140; when the response received by the agent application 1 is that the service of the service container is in a sub-healthy state, go to step 150. Wherein if the Http Response status code of the returned Response is 2 head, the service is considered healthy. When StatusCode is at the beginning of 3 or the consumption of the CPU and the memory of the host exceeds a threshold value of 70%, the state is considered as sub-health. If StatusCode begins with 4, it is deemed unhealthy.
Step 130: the agent application 1 registers service information and address information corresponding to the service container to the service registry 2. The service address of the service container, the service of the service container, the HTTP interface call address of the service container, and the load weight of the service container are also registered in the service registry 2. The service registry 2 updates the registration information. The load weight indicates how much request traffic is allocated to the service container, and is set to-1 in the default case, which indicates that all traffic is shared with other service instances. Go to step 160.
Step 140: the agent application 1 deletes (i.e., deregisters) the service information and address information corresponding to the service container from the service registry 2. The service of the service container, the HTTP interface call address of the service container, and the load weight of the service container are also deleted (i.e., unregistered) from the service registry 2. The service registry 2 updates the registration information. Go to step 160.
Step 150: the agent application 1 modifies the load weight of the services of the service container at the service registry 2. The service registry 2 updates the registration information. Go to step 160. The modification rules are as follows: if the current setting is-1, namely, the uniform spreading, the modification is made to be half of the percentage after the uniform spreading; if the current setting is not-1, the modification is to half of the current value.
Step 160: the load balancer 3 monitors the change of the registration information of the service registry 2, and when the registration information of the service registry 2 changes, the load balancer 3 dynamically updates its routing table (correspondingly modifies the weight value of the routing table when the load weight changes) first, and then receives a new request.
The above scheme can enable service information and address information to be automatically registered in a service registry when a service container is started or stopped without any intrusion on the service or the service container itself, while a load balancer of a service front end can complete service discovery in a very short time (e.g., 1s) and hot-update (i.e., without restarting the load balancer) a backend service address list without interrupting a system call currently being processed.
It should be noted that the above-mentioned embodiments are only specific examples of the present invention, and obviously, the present invention is not limited to the above-mentioned embodiments, and many similar variations exist. All modifications which would occur to one skilled in the art and which are, therefore, directly derived or suggested from the disclosure herein are deemed to be within the scope of the present invention.

Claims (8)

1. A proxy application for a host system having a service container, characterized by:
the proxy application is arranged in the host system and monitors a service container in the host system, and when a starting interface or a restarting interface of the service container is found to be called, the proxy application registers service information and address information corresponding to the service container to a service registration center; when the stop interface of the service container is monitored to be called, the agent application deletes the service information and the address information corresponding to the service container from a service registry, wherein the service registry is included in the system for the host system, the system further comprises a load balancer which monitors the change of the registration information of the service registry, and wherein,
the agent application regularly carries out health check on the service container registered to the service registration center and receives a feedback response; when the received response is that the service of the service container is in a sub-health state, the agent application modifies the load weight of the service container by the service registry; when the received response is that the service of the service container is in an unhealthy state, the agent application deletes the piece of service information and the address information from the service registry.
2. A proxy application as claimed in claim 1, wherein an open source service consul is employed as the service registry.
3. The proxy application of claim 1, wherein when a start interface or a restart interface of the service container is found to be called, the proxy application further registers at least one of a service of the service container, an HTTP interface call address of the service container, and a load weight of the service container with the service registry.
4. A system for a host system having a service container, comprising:
a service registry;
the broker application of any one of claims 1-3, in data connection with the service registry; and
a load balancer which listens for a change in registration information of the service registry.
5. The system of claim 4, wherein the load balancer dynamically updates its routing table before receiving a new request when registration information for a service registry changes.
6. The system of claim 5, wherein the change in the registration information comprises: new service information and address information are registered, existing service information and address information are deleted, and a load weight value is modified.
7. The system of claim 5, wherein the load balancer dynamically updates the routing table through an execution selector syntax provided in the Go language concurrency model.
8. The system of claim 5, wherein the load balancer employs a prefix tree as a storage structure for the routing table.
CN201610670046.3A 2016-08-15 2016-08-15 Proxy application and system for host system with service container Active CN106331065B (en)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201610670046.3A CN106331065B (en) 2016-08-15 2016-08-15 Proxy application and system for host system with service container

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201610670046.3A CN106331065B (en) 2016-08-15 2016-08-15 Proxy application and system for host system with service container

Publications (2)

Publication Number Publication Date
CN106331065A CN106331065A (en) 2017-01-11
CN106331065B true CN106331065B (en) 2020-12-15

Family

ID=57740473

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201610670046.3A Active CN106331065B (en) 2016-08-15 2016-08-15 Proxy application and system for host system with service container

Country Status (1)

Country Link
CN (1) CN106331065B (en)

Families Citing this family (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109274707B (en) * 2017-07-18 2022-02-22 阿里巴巴集团控股有限公司 Load scheduling method and device
CN107370816A (en) * 2017-07-26 2017-11-21 郑州云海信息技术有限公司 A kind of dispositions method and device of Web applications
CN108063791A (en) * 2017-11-01 2018-05-22 千寻位置网络有限公司 Dispositions method is applied based on dynamic routing
CN109842637B (en) * 2017-11-24 2021-09-07 武汉斗鱼网络科技有限公司 Distributed service registration method and device
CN108366102A (en) * 2018-01-26 2018-08-03 北京奇艺世纪科技有限公司 A kind of service discovery method, device and electronic equipment based on Consul
CN109639818B (en) * 2018-12-27 2020-09-08 北京城市网邻信息技术有限公司 Service discovery method and device under cloud environment, server and storage medium
CN110445861B (en) * 2019-08-07 2021-10-22 上海浦东发展银行股份有限公司信用卡中心 Container cloud platform service registration discovery method based on F5 adapter
CN110502761B (en) * 2019-08-27 2023-09-19 北京金山数字娱乐科技有限公司 Translation platform and load adjustment method thereof
CN112579310A (en) * 2019-09-30 2021-03-30 北京车和家信息技术有限公司 Service calling method and device
CN114640656A (en) * 2020-12-01 2022-06-17 博泰车联网科技(上海)股份有限公司 Method, apparatus and medium for updating data

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1942860A (en) * 2004-04-29 2007-04-04 国际商业机器公司 A system and method for modeling and dynamically deploying services into a distributed networking architecture
CN102377796A (en) * 2010-08-05 2012-03-14 中国人民解放军国防科学技术大学 Heterogeneous service integrating system and method based on OSGi (open service gateway initiative)
CN102880475A (en) * 2012-10-23 2013-01-16 上海普元信息技术股份有限公司 Real-time event handling system and method based on cloud computing in computer software system
CN105025095A (en) * 2015-07-10 2015-11-04 福建天晴数码有限公司 Cluster framework capable of realizing cloud computing flexible service
CN105357296A (en) * 2015-10-30 2016-02-24 河海大学 Elastic caching system based on Docker cloud platform
CN105681217A (en) * 2016-04-27 2016-06-15 深圳市中润四方信息技术有限公司 Dynamic load balancing method and system for container cluster

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7747755B2 (en) * 2005-09-30 2010-06-29 Sap Ag Method and apparatus for session management in an enterprise java bean session bean

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1942860A (en) * 2004-04-29 2007-04-04 国际商业机器公司 A system and method for modeling and dynamically deploying services into a distributed networking architecture
CN102377796A (en) * 2010-08-05 2012-03-14 中国人民解放军国防科学技术大学 Heterogeneous service integrating system and method based on OSGi (open service gateway initiative)
CN102880475A (en) * 2012-10-23 2013-01-16 上海普元信息技术股份有限公司 Real-time event handling system and method based on cloud computing in computer software system
CN105025095A (en) * 2015-07-10 2015-11-04 福建天晴数码有限公司 Cluster framework capable of realizing cloud computing flexible service
CN105357296A (en) * 2015-10-30 2016-02-24 河海大学 Elastic caching system based on Docker cloud platform
CN105681217A (en) * 2016-04-27 2016-06-15 深圳市中润四方信息技术有限公司 Dynamic load balancing method and system for container cluster

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
Weave;华为Docker实践小组;《Docker进阶与实战》;20160131;正文第90-91页 *

Also Published As

Publication number Publication date
CN106331065A (en) 2017-01-11

Similar Documents

Publication Publication Date Title
CN106331065B (en) Proxy application and system for host system with service container
US10156986B2 (en) Gang migration of virtual machines using cluster-wide deduplication
US10187459B2 (en) Distributed load balancing system, health check method, and service node
US20190108079A1 (en) Remote Procedure Call Method for Network Device and Network Device
US20140067905A1 (en) Runtime co-location of executing logic and frequently-accessed application data
US9268588B2 (en) Optimizing virtual machine migration via identification and treatment of virtual memory swap file
US11221866B2 (en) Accelerator loading method, system, and apparatus
JP2016515745A (en) Methods and devices for updating clients
US20180217852A1 (en) System service reloading method and apparatus
KR20180132818A (en) Management methods and devices
US20160254958A1 (en) Method, apparatus and system for virtualizing a policy and charging rules function
US20190265985A1 (en) Accelerator Loading Method, System, and Apparatus
US9921878B1 (en) Singleton coordination in an actor-based system
Shen et al. Supercloud: A library cloud for exploiting cloud diversity
CN106911741B (en) Method for balancing virtual network management file downloading load and network management server
US9264306B2 (en) Deployment of software images with run-time reconnection
US20230254211A1 (en) Method and apparatus for provisioning of new edge servers in 5g networks using triggering events
US10791088B1 (en) Methods for disaggregating subscribers via DHCP address translation and devices thereof
US9348672B1 (en) Singleton coordination in an actor-based system
CN106325979B (en) Virtual machine deployment method and device and network function virtualization orchestration NVFO
CN114662102A (en) File processing method and device and storage medium
US10992531B2 (en) Reactive non-blocking input and output for target device communication
US10476947B1 (en) Methods for managing web applications and devices thereof
CN110266790A (en) Edge cluster management method, device, edge cluster and readable storage medium storing program for executing
US11768704B2 (en) Increase assignment effectiveness of kubernetes pods by reducing repetitive pod mis-scheduling

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant