[go: up one dir, main page]

US10644970B2 - Tracking application utilization of microservices - Google Patents

Tracking application utilization of microservices Download PDF

Info

Publication number
US10644970B2
US10644970B2 US16/032,091 US201816032091A US10644970B2 US 10644970 B2 US10644970 B2 US 10644970B2 US 201816032091 A US201816032091 A US 201816032091A US 10644970 B2 US10644970 B2 US 10644970B2
Authority
US
United States
Prior art keywords
microservices
data records
hop data
completed
hop
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, expires
Application number
US16/032,091
Other versions
US20200021505A1 (en
Inventor
Nithya Vinnakota
Aditya Kappagantula
Hari Dattada
Janhavi Digraskar
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.)
Sony Interactive Entertainment LLC
Original Assignee
Sony Interactive Entertainment LLC
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 Sony Interactive Entertainment LLC filed Critical Sony Interactive Entertainment LLC
Priority to US16/032,091 priority Critical patent/US10644970B2/en
Assigned to Sony Interactive Entertainment LLC reassignment Sony Interactive Entertainment LLC ASSIGNMENT OF ASSIGNORS INTEREST (SEE DOCUMENT FOR DETAILS). Assignors: DATTADA, Hari, DIGRASKAR, Janhavi, KAPPAGANTULA, Aditya, VINNAKOTA, Nithya
Priority to PCT/US2019/039594 priority patent/WO2020013999A1/en
Publication of US20200021505A1 publication Critical patent/US20200021505A1/en
Application granted granted Critical
Publication of US10644970B2 publication Critical patent/US10644970B2/en
Active legal-status Critical Current
Adjusted expiration legal-status Critical

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L41/00Arrangements for maintenance, administration or management of data switching networks, e.g. of packet switching networks
    • H04L41/50Network service management, e.g. ensuring proper service fulfilment according to agreements
    • H04L41/5041Network service management, e.g. ensuring proper service fulfilment according to agreements characterised by the time relationship between creation and deployment of a service
    • H04L41/5054Automatic deployment of services triggered by the service manager, e.g. service implementation by automatic configuration of network components
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L43/00Arrangements for monitoring or testing data switching networks
    • H04L43/06Generation of reports
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L41/00Arrangements for maintenance, administration or management of data switching networks, e.g. of packet switching networks
    • H04L41/08Configuration management of networks or network elements
    • H04L41/0803Configuration setting
    • H04L41/0806Configuration setting for initial configuration or provisioning, e.g. plug-and-play
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L41/00Arrangements for maintenance, administration or management of data switching networks, e.g. of packet switching networks
    • H04L41/50Network service management, e.g. ensuring proper service fulfilment according to agreements
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L43/00Arrangements for monitoring or testing data switching networks
    • H04L43/04Processing captured monitoring data, e.g. for logfile generation
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L43/00Arrangements for monitoring or testing data switching networks
    • H04L43/08Monitoring or testing based on specific metrics, e.g. QoS, energy consumption or environmental parameters
    • H04L43/0852Delays
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L43/00Arrangements for monitoring or testing data switching networks
    • H04L43/10Active monitoring, e.g. heartbeat, ping or trace-route
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L45/00Routing or path finding of packets in data switching networks
    • H04L45/20Hop count for routing purposes, e.g. TTL
    • 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/32
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/34Network arrangements or protocols for supporting network services or applications involving the movement of software or configuration parameters 
    • 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/60Scheduling or organising the servicing of application requests, e.g. requests for application data transmissions using the analysis and optimisation of the required network resources

Definitions

  • the present technology pertains to applications provided on computer networks, and more specifically, to microservice applications provided on computer networks.
  • Computer networks can use a distributed application structure that partitions tasks or workloads between the providers of a resource or service, called servers, and service requesters, called clients.
  • Clients and servers can communicate over a computer network on separate hardware systems.
  • a server host runs one or more server programs which share their resources with clients.
  • a client does not necessarily share any of its resources, but requests a server's content or service function.
  • Clients initiate communication sessions with servers which await incoming requests.
  • a method for tracking microservice utilization may comprise requesting completed hop data records, the completed hop data records being associated with a plurality of microservices, a hop being between two microservices of the plurality of microservices; and receiving the completed hop data records.
  • Some embodiments may further include: aggregating the completed hop data records to identify hop data records associated with a client application, count a number of instances the client application utilized each microservice of the plurality of microservices, and calculate an average latency for each hop; and provisioning and/or decommissioning instances of the plurality of microservices using the aggregated hop data records.
  • FIG. 1 is a simplified block diagram of a system for tracking client application utilization of microservices, according to some embodiments.
  • FIG. 2 is a simplified block diagram of a system for tracking client application utilization of microservices, according to various embodiments.
  • FIG. 3 is an example of aggregated trace data, in accordance with some embodiments.
  • FIG. 4 is a simplified flow diagram of a method for recording hop data, in accordance with various embodiments.
  • FIG. 5 is a simplified flow diagram of a method for collecting completed hop data, according to some embodiments.
  • FIG. 6 is a simplified flow diagram of a method for tracking microservice usage, according to various embodiments.
  • FIG. 7 is a simplified block diagram of a computing system, in accordance with some embodiments.
  • FIG. 1 shows system 100 for tracking microservices utilization, according to some embodiments.
  • System 100 includes client application 110 , microservices S 1 -S 5 , collector 120 , and management 130 .
  • Client application 110 can be a computer program—which can run on computing system such as desktop computer, laptop computer, tablet computer, phablet, smart phone, smart appliance, gaming console, and the like—and can be a computer program designed to perform a group of coordinated functions, tasks, or activities for the benefit of the user.
  • client application 110 can be a web browser (or similar) running on a computing system and can access a web page, where the web page provides the functionality or service otherwise offered by a computer program performing a group of coordinated functions, tasks, or activities for the benefit of the user.
  • Computing systems are described further in relation to FIG. 7 .
  • Microservices S 1 -S 5 are microservices which can work together to perform a server application (not depicted in FIG. 1 ).
  • the server application is split into a set of smaller, interconnected microservices such as microservices S 1 -S 5 .
  • Each of microservices S 1 -S 5 is a mini-application that can expose an application programming interface (API) for consumption by other microservices (of microservices S 1 -S 5 ) and/or by client application 110 .
  • API application programming interface
  • an application having a microservices architecture puts each element of functionality into a separate microservice (e.g., microservices S 1 -S 5 ).
  • a monolithic application When a monolithic application is scaled, the whole and complete monolithic application is replicated for each and every instance.
  • An application having a microservices architecture can scale by adding (commissioning) and/or subtracting (decommissioning) various combinations and permutations of its microservices, as needed. While a monolithic application can have a logically modular architecture, it is packaged and deployed as a monolith (i.e., in its entirety) and does not have a microservices architecture.
  • Each of microservice S 1 -S 5 , collector 120 , and management 130 can be run on a virtual machine, container, and/or hardware server.
  • Virtual machines provide a substitute for a physical computing system and the functionality needed to execute entire operating systems. Virtual machines are created and run by a hypervisor which uses native execution to share and manage hardware, allowing for multiple environments which are isolated from one another, yet can exist on the same physical computing system.
  • Containers are an operating system-level virtualization method for deploying and running distributed applications without launching an entire virtual machine for each application.
  • Containers can look like real computers from the point of view of programs running in them.
  • resources e.g., connected devices, files and folders, network shares, CPU power, etc.
  • programs running inside a container can only see the container's contents and devices assigned to the container.
  • Containers can be arranged, coordinated, and managed by container orchestration (e.g., Kubernetes, Amazon Elastic Container Service, Docker Swarm, and the like).
  • container may be an abstraction performed at the operating system (OS) level, whereas virtual machines are an abstraction of physical hardware.
  • OS operating system
  • virtual machines are an abstraction of physical hardware.
  • client application 110 may only “see” one URL (e.g., to microservice S 1 or microservice S 2 ). However, microservice S 1 or S 2 may then in turn communicate with multiple other microservices and so on. Trace programs T 1 -T 5 can be used to measure latency among microservices S 1 -S 5 .
  • Each of microservices S 1 -S 5 can include a trace program T 1 -T 5 .
  • Trace programs T 1 -T 5 can record timing data about requests and responses to requests to and from microservices S 1 -S 5 .
  • trace programs T 1 -T 5 can capture data associated with a finished hop (span), referred to as a completed hop (span) record, such as a source (origin), destination (where request and/or response is going or being sent), duration (latency, such how much time has elapsed between when a request is sent and a response to the request is received), start time stamp, end time stamp, and the like.
  • Each completed hop (span) record can further include a trace identification and a hop (span) identification. The trace identification and hop identification are described further below.
  • the hop identification can be randomly generated and/or can uniquely identify each request or response to a request (and its associated data, such as source, destination, duration, start time stamp, end time stamp, and the like).
  • a hop identification is eight ASCII characters encoded in hexadecimal. As illustrated in FIG. 1 , a hop (span) can be from microservice S 1 to microservice S 3 , microservice S 3 to microservice S 5 , microservice S 5 to microservice S 3 , and microservice S 3 to microservice S 1 .
  • a hop can be from microservice S 2 to microservice S 4 , microservice S 4 to microservice S 5 , microservice S 5 to microservice S 4 , and microservice S 4 to microservice S 2 .
  • Each path or route (e.g., from microservice S 1 to microservice S 5 ) is assigned a (random) trace identification.
  • the trace identification can be 128-bits long and encoded in hexadecimal.
  • a randomly assigned trace identification does not provide insight into which applications are using which microservices (e.g., microservices may be used by multiple different client applications and each client application imposes a different burden) and how often each microservice is used by a particular client application, among others.
  • client application can advantageously include a (non-random) trace identification when it sends a request to a microservice.
  • stress on a particular microservice by a particular client application
  • performance of a client application can be improved by identifying microservices having high latency.
  • instances of a particular microservice e.g., microservices S 1 -S 5
  • aggregated data from small-scale usage of the client application e.g., test cases, trial runs, alpha testing, beta testing, and the like
  • can be scaled up to forecast/predict greater usage e.g., from a full production release).
  • the trace identification can include an identifier for client application 110 (e.g., application name, such as eight ASCII characters encoded in hexadecimal) and the server to which the request is sent.
  • client application 110 In communication between client application 110 and an initial microservice (e.g., microservice S 1 and/or S 2 ), client application 110 will send a trace identification identifying itself and the initial microservice.
  • the trace identification For a request sent from client application 110 to microservice S 1 , the trace identification can be APPLNAME_S 1
  • the trace identification can be APPLNAME_S 2 .
  • the trace identification will follow (be used) for communications that originate from a particular client application (e.g., client application 110 ), as each hop communication is propagated by microservices (e.g., of microservices S 1 -S 5 ) until the end of the session.
  • client application e.g., client application 110
  • microservices e.g., of microservices S 1 -S 5
  • Trace programs T 1 -T 5 propagate trace identification in-band (e.g., sent in each hop (span) along with a request and/or response to a request). Trace programs T 1 -T 5 can send data about completed hops (spans) out of band (e.g., independent from the main in-band data stream, asynchronously) to collector 120 .
  • trace programs T 1 -T 5 can send hop (span) data using Hypertext Transfer Protocol (HTTP), Apache Kafka, Scribe, and the like.
  • Collector 120 can receive hop data from each of trace programs T 1 -T 5 , validate it, store it (e.g., in a database such as Cassandra, ElasticSearch, MySQL, and the like), and index it.
  • Management 130 can request latency data from collector 120 , aggregate the hop data to produce trace data, and store the trace data (e.g., in a database such as Cassandra, ElasticSearch, MySQL, and the like).
  • a trace system can be Zipkin and microservices S 1 -S 5 can be referred to as instrumented clients.
  • FIG. 2 depicts system 200 for tracking microservices utilization, according to some embodiments.
  • System 200 can have at least some of the characteristics of system 100 described above in relation to FIG. 1 .
  • System 200 includes client application Unibeam (identified as client 110 in FIG. 2 ) and microservices Activity Feed Service, UGC, XYZ, DB, Token Status, and Roadster.
  • client application Unibeam identified as client 110 in FIG. 2
  • microservices Activity Feed Service UGC, XYZ, DB, Token Status, and Roadster.
  • FIG. 3 illustrates aggregated trace data 300 associated with system 200 ( FIG. 2 ), for example, produced by management 130 ( FIG. 1 ).
  • Aggregated trace data 300 is associated with client application Unibeam 110 ( FIG. 2 ).
  • Column Hop Name 310 shows the two microservices in the hop.
  • AF-UGC 312 can be the hop between Activity Feed Service and UGC 110 ( FIG. 2 ).
  • ROOT_URL 314 can mean an external (micro)service is used (e.g., provisioned by a third-party, such as GoogleTM, FacebookTM, and the like).
  • Column Hop Type 320 shows the type of hop.
  • Trace Supported 322 can mean the hop endpoint includes a trace program (e.g., one of trace programs T 1 -T 5 in FIG. 1 ).
  • Not Supported 324 can mean the hop endpoint does not include a trace program (e.g., one of trace programs T 1 -T 5 in FIG. 1 ).
  • information e.g., count and average latency
  • DB Read 326 can mean a database was read from.
  • Column Time 330 identifies sequential intervals of time (e.g., 0-1, 1-2, and so on) to which the row of data pertains.
  • the slice of time can be any interval of time, such as 30 minutes, 2 hours, 5 days, 3 weeks, three months, etc.
  • Column Count 340 shows the number of times client application Unibeam 110 ( FIG. 2 ) used a particular hop.
  • Column Average Latency 350 shows the amount of time that elapsed between when a request was sent and when a response to the request was received (latency).
  • the amount of time can be in any unit of time (e.g., seconds, microseconds, nanoseconds, picoseconds, and the like).
  • FIG. 4 is a simplified flow diagram of a method 400 for recording hop (span) data, such as in systems 100 and 200 in FIGS. 1 and 2 , respectively.
  • method 400 can be (concurrently) performed by at least some of trace programs T 1 -T 5 ( FIG. 1 ), such that system 100 and 200 in FIGS. 1 and 2 can be said to be distributed tracing systems.
  • a request can be provided, such as to another microservice (e.g., microservices S 1 -S 5 in FIG. 1 ).
  • the request can include an existing trace identification and/or hop identification. When a trace identification and/or hop identification is not provided, a random a trace identification and/or hop identification can be generated and associated with the hop (span).
  • the request can further include a source and destination. When the request is provided, a start time stamp can be recorded.
  • a response to the request can be received.
  • the response can be received from the microservice that the request in step 410 was sent to.
  • an end time stamp can be recorded.
  • the duration can be recorded.
  • the duration can be determined from the start and end time stamps, measured using a timer function, and the like.
  • the completed hop (span) data record (e.g., a trace identification, hop identification, source, destination, duration, start time stamp, end time stamp, and the like) can be provided.
  • the completed hop (span) data record is provided to collector 120 ( FIG. 1 ).
  • Completed hop (span) data records may be used in method 500 ( FIG. 5 )
  • FIG. 5 illustrates method 500 for collecting completed hop (span) data according to some embodiments.
  • method 500 can be performed by collector 120 ( FIG. 1 ).
  • completed hop (span) data records can be received from a (plurality of) trace programs (e.g., trace programs T 1 -T 5 ).
  • the received completed hop (span) data records can be stored in a database (e.g., Cassandra, ElasticSearch, MySQL, and the like).
  • a request for completed hop (span) data records can be received (e.g., from management 130 in FIG. 1 ).
  • the request includes a time frame (e.g., between a start date and time, and an end data and time) for the requested data.
  • the requested data records are retrieved (e.g., from the database in which it is stored).
  • the retrieved data records are provided (e.g., to management 130 ). The retrieved data records can be used in method 600 ( FIG. 1 ).
  • FIG. 6 illustrates method 600 for tracking microservice utilization, in accordance with some embodiments.
  • method 600 can be performed by management 130 ( FIG. 1 ).
  • an indicia (identified as “requested” in FIG. 6 ) is received from a user to track latency associated with a client application (e.g., in systems 100 and 200 in FIGS. 1 and 2 , respectively).
  • the request can include a start date and time, and an end date and time.
  • completed hop data records can be requested (e.g., from collector 120 in FIG. 2 ).
  • the requested completed hop data records can be received (e.g., from collector 120 in FIG. 2 ).
  • the received completed hop data can be parsed and aggregated.
  • the completed hop data can be parsed such that just records (e.g., rows) pertaining to a particular client application are used.
  • the data can be grouped into intervals of time using the start and/or end time stamps, the number of instances of a particular hop (span) can be totaled, and the average duration can be calculated.
  • the aggregated data can be stored, for example, in a database (e.g., Cassandra, ElasticSearch, MySQL, and the like).
  • a database e.g., Cassandra, ElasticSearch, MySQL, and the like.
  • FIG. 7 illustrates an exemplary computer system 700 that may be used to implement some embodiments of the present invention.
  • the computer system 700 in FIG. 7 may be implemented in the contexts of the likes of computing systems, networks, servers, or combinations thereof.
  • the computer system 700 in FIG. 7 includes one or more processor unit(s) 710 and main memory 720 .
  • Main memory 720 stores, in part, instructions and data for execution by processor unit(s) 710 .
  • Main memory 720 stores the executable code when in operation, in this example.
  • the computer system 700 in FIG. 7 further includes a mass data storage 730 , portable storage device 740 , output devices 750 , user input devices 760 , a graphics display system 770 , and peripheral device(s) 780 .
  • FIG. 7 The components shown in FIG. 7 are depicted as being connected via a single bus 790 .
  • the components may be connected through one or more data transport means.
  • Processor unit(s) 710 and main memory 720 are connected via a local microprocessor bus, and the mass data storage 730 , peripheral device(s) 780 , portable storage device 740 , and graphics display system 770 are connected via one or more input/output (I/O) buses.
  • I/O input/output
  • Mass data storage 730 which can be implemented with a magnetic disk drive, solid state drive, or an optical disk drive, is a non-volatile storage device for storing data and instructions for use by processor unit(s) 710 . Mass data storage 730 stores the system software for implementing embodiments of the present disclosure for purposes of loading that software into main memory 720 .
  • Portable storage device 740 operates in conjunction with a portable non-volatile storage medium, such as a flash drive, floppy disk, compact disk, digital video disc, or Universal Serial Bus (USB) storage device, to input and output data and code to and from the computer system 700 in FIG. 7 .
  • a portable non-volatile storage medium such as a flash drive, floppy disk, compact disk, digital video disc, or Universal Serial Bus (USB) storage device
  • USB Universal Serial Bus
  • User input devices 760 can provide a portion of a user interface.
  • User input devices 760 may include one or more microphones, an alphanumeric keypad, such as a keyboard, for inputting alphanumeric and other information, or a pointing device, such as a mouse, a trackball, stylus, or cursor direction keys.
  • User input devices 760 can also include a touchscreen.
  • the computer system 700 as shown in FIG. 7 includes output devices 750 . Suitable output devices 750 include speakers, printers, network interfaces, and monitors.
  • Graphics display system 770 include a liquid crystal display (LCD) or other suitable display device. Graphics display system 770 is configurable to receive textual and graphical information and processes the information for output to the display device.
  • LCD liquid crystal display
  • Peripheral device(s) 780 may include any type of computer support device to add additional functionality to the computer system.
  • the components provided in the computer system 700 in FIG. 7 are those typically found in computer systems that may be suitable for use with embodiments of the present disclosure and are intended to represent a broad category of such computer components that are well known in the art.
  • the computer system 700 in FIG. 7 can be a personal computer (PC), hand held computer system, telephone, mobile computer system, workstation, tablet, phablet, mobile phone, server, minicomputer, mainframe computer, wearable, or any other computer system.
  • the computer may also include different bus configurations, networked platforms, multi-processor platforms, and the like.
  • Various operating systems may be used including UNIX, LINUX, WINDOWS, MAC OS, PALM OS, QNX ANDROID, IOS, CHROME, and other suitable operating systems.
  • Some of the above-described functions may be composed of instructions that are stored on storage media (e.g., computer-readable medium).
  • the instructions may be retrieved and executed by the processor.
  • Some examples of storage media are memory devices, tapes, disks, and the like.
  • the instructions are operational when executed by the processor to direct the processor to operate in accord with the technology. Those skilled in the art are familiar with instructions, processor(s), and storage media.
  • the computing system 700 may be implemented as a cloud-based computing environment, such as a virtual machine operating within a computing cloud. In other embodiments, the computing system 700 may itself include a cloud-based computing environment, where the functionalities of the computing system 700 are executed in a distributed fashion. Thus, the computing system 700 , when configured as a computing cloud, may include pluralities of computing devices in various forms, as will be described in greater detail below.
  • a cloud-based computing environment is a resource that typically combines the computational power of a large grouping of processors (such as within web servers) and/or that combines the storage capacity of a large grouping of computer memories or storage devices.
  • Systems that provide cloud-based resources may be utilized exclusively by their owners or such systems may be accessible to outside users who deploy applications within the computing infrastructure to obtain the benefit of large computational or storage resources.
  • the cloud is formed, for example, by a network of web servers that comprise a plurality of computing devices, such as the computing system 700 , with each server (or at least a plurality thereof) providing processor and/or storage resources.
  • These servers manage workloads provided by multiple users (e.g., cloud resource customers or other users).
  • users e.g., cloud resource customers or other users.
  • each user places workload demands upon the cloud that vary in real-time, sometimes dramatically. The nature and extent of these variations typically depends on the type of business associated with the user.
  • Non-volatile media include, for example, optical, magnetic, and solid-state disks, such as a fixed disk.
  • Volatile media include dynamic memory, such as system random-access memory (RAM).
  • Transmission media include coaxial cables, copper wire and fiber optics, among others, including the wires that comprise one embodiment of a bus.
  • Transmission media can also take the form of acoustic or light waves, such as those generated during radio frequency (RF) and infrared (IR) data communications.
  • RF radio frequency
  • IR infrared
  • Common forms of computer-readable media include, for example, a floppy disk, a flexible disk, a hard disk, magnetic tape, any other magnetic medium, a CD-ROM disk, digital video disk (DVD), any other optical medium, any other physical medium with patterns of marks or holes, a RAM, a programmable read-only memory (PROM), an erasable programmable read-only memory (EPROM), an electrically erasable programmable read-only memory (EEPROM), a Flash memory, any other memory chip or data exchange adapter, a carrier wave, or any other medium from which a computer can read.
  • PROM programmable read-only memory
  • EPROM erasable programmable read-only memory
  • EEPROM electrically erasable programmable read-only memory
  • Flash memory any other
  • a bus carries the data to system RAM, from which a CPU retrieves and executes the instructions.
  • the instructions received by system RAM can optionally be stored on a fixed disk either before or after execution by a CPU.
  • Computer program code for carrying out operations for aspects of the present technology may be written in any combination of one or more programming languages, including an object oriented programming language such as JAVA, SMALLTALK, C++ or the like and conventional procedural programming languages, such as the “C” programming language or similar programming languages.
  • the program code may execute entirely on the user's computer, partly on the user's computer, as a stand-alone software package, partly on the user's computer and partly on a remote computer or entirely on the remote computer or server.
  • the remote computer may be connected to the user's computer through any type of network, including a local area network (LAN) or a wide area network (WAN), or the connection may be made to an external computer (for example, through the Internet using an Internet Service Provider).
  • LAN local area network
  • WAN wide area network
  • Internet Service Provider for example, AT&T, MCI, Sprint, EarthLink, MSN, GTE, etc.
  • These computer program instructions may also be stored in a computer readable medium that can direct a computer, other programmable data processing apparatus, or other devices to function in a particular manner, such that the instructions stored in the computer readable medium produce an article of manufacture including instructions which implement the function/act specified in the flowchart and/or block diagram block or blocks.
  • the computer program instructions may also be loaded onto a computer, other programmable data processing apparatus, or other devices to cause a series of operational steps to be performed on the computer, other programmable apparatus or other devices to produce a computer implemented process such that the instructions which execute on the computer or other programmable apparatus provide processes for implementing the functions/acts specified in the flowchart and/or block diagram block or blocks.
  • each block in the flowchart or block diagrams may represent a module, segment, or portion of code, which comprises one or more executable instructions for implementing the specified logical function(s).
  • the functions noted in the block may occur out of the order noted in the figures. For example, two blocks shown in succession may, in fact, be executed substantially concurrently, or the blocks may sometimes be executed in the reverse order, depending upon the functionality involved.

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Health & Medical Sciences (AREA)
  • Cardiology (AREA)
  • General Health & Medical Sciences (AREA)
  • Data Mining & Analysis (AREA)
  • Environmental & Geological Engineering (AREA)
  • Debugging And Monitoring (AREA)

Abstract

Methods and systems for tracking client application utilization of microservices are provided. Exemplary methods include: requesting completed hop data records, the completed hop data records being associated with a plurality of microservices, a hop being between two microservices of the plurality of microservices; receiving the completed hop data records; aggregating the completed hop data records to identify hop data records associated with a client application, count a number of instances the client application utilized each microservice of the plurality of microservices, and calculate an average latency for each hop; and provisioning and/or decommissioning instances of the plurality of microservices using the aggregated hop data records.

Description

FIELD OF THE INVENTION
The present technology pertains to applications provided on computer networks, and more specifically, to microservice applications provided on computer networks.
BACKGROUND ART
The approaches described in this section could be pursued but are not necessarily approaches that have previously been conceived or pursued. Therefore, unless otherwise indicated, it should not be assumed that any of the approaches described in this section qualify as prior art merely by virtue of their inclusion in this section.
Computer networks can use a distributed application structure that partitions tasks or workloads between the providers of a resource or service, called servers, and service requesters, called clients. Clients and servers can communicate over a computer network on separate hardware systems. A server host runs one or more server programs which share their resources with clients. A client does not necessarily share any of its resources, but requests a server's content or service function. Clients initiate communication sessions with servers which await incoming requests.
SUMMARY OF THE INVENTION
This summary is provided to introduce a selection of concepts in a simplified form that are further described in the Detailed Description below. This summary is not intended to identify key features or essential features of the claimed subject matter, nor is it intended to be used as an aid in determining the scope of the claimed subject matter.
The present disclosure is related to various systems and methods for tracking microservice utilization. Specifically, a method for tracking microservice utilization may comprise requesting completed hop data records, the completed hop data records being associated with a plurality of microservices, a hop being between two microservices of the plurality of microservices; and receiving the completed hop data records. Some embodiments may further include: aggregating the completed hop data records to identify hop data records associated with a client application, count a number of instances the client application utilized each microservice of the plurality of microservices, and calculate an average latency for each hop; and provisioning and/or decommissioning instances of the plurality of microservices using the aggregated hop data records.
BRIEF DESCRIPTION OF THE DRAWINGS
Embodiments are illustrated by way of example, and not by limitation, in the figures of the accompanying drawings, in which like references indicate similar elements and in which:
FIG. 1 is a simplified block diagram of a system for tracking client application utilization of microservices, according to some embodiments.
FIG. 2 is a simplified block diagram of a system for tracking client application utilization of microservices, according to various embodiments.
FIG. 3 is an example of aggregated trace data, in accordance with some embodiments.
FIG. 4 is a simplified flow diagram of a method for recording hop data, in accordance with various embodiments.
FIG. 5 is a simplified flow diagram of a method for collecting completed hop data, according to some embodiments.
FIG. 6 is a simplified flow diagram of a method for tracking microservice usage, according to various embodiments.
FIG. 7 is a simplified block diagram of a computing system, in accordance with some embodiments.
DETAILED DESCRIPTION
While this technology is susceptible of embodiment in many different forms, there is shown in the drawings and will herein be described in detail several specific embodiments with the understanding that the present disclosure is to be considered as an exemplification of the principles of the technology and is not intended to limit the technology to the embodiments illustrated. The terminology used herein is for the purpose of describing particular embodiments only and is not intended to be limiting of the technology. As used herein, the singular forms “a,” “an,” and “the” are intended to include the plural forms as well, unless the context clearly indicates otherwise. It will be further understood that the terms “comprises,” “comprising,” “includes,” and/or “including,” when used in this specification, specify the presence of stated features, integers, steps, operations, elements, and/or components, but do not preclude the presence or addition of one or more other features, integers, steps, operations, elements, components, and/or groups thereof. It will be understood that like or analogous elements and/or components, referred to herein, may be identified throughout the drawings with like reference characters. It will be further understood that several of the figures are merely schematic representations of the present technology. As such, some of the components may have been distorted from their actual scale for pictorial clarity.
FIG. 1 shows system 100 for tracking microservices utilization, according to some embodiments. System 100 includes client application 110, microservices S1-S5, collector 120, and management 130. Client application 110 can be a computer program—which can run on computing system such as desktop computer, laptop computer, tablet computer, phablet, smart phone, smart appliance, gaming console, and the like—and can be a computer program designed to perform a group of coordinated functions, tasks, or activities for the benefit of the user. Alternatively or additionally, client application 110 can be a web browser (or similar) running on a computing system and can access a web page, where the web page provides the functionality or service otherwise offered by a computer program performing a group of coordinated functions, tasks, or activities for the benefit of the user. Computing systems are described further in relation to FIG. 7.
Microservices S1-S5 are microservices which can work together to perform a server application (not depicted in FIG. 1). The server application is split into a set of smaller, interconnected microservices such as microservices S1-S5. Each of microservices S1-S5 is a mini-application that can expose an application programming interface (API) for consumption by other microservices (of microservices S1-S5) and/or by client application 110. In contrast to a monolithic application having all of its functionality in one process, an application having a microservices architecture puts each element of functionality into a separate microservice (e.g., microservices S1-S5).
When a monolithic application is scaled, the whole and complete monolithic application is replicated for each and every instance. An application having a microservices architecture can scale by adding (commissioning) and/or subtracting (decommissioning) various combinations and permutations of its microservices, as needed. While a monolithic application can have a logically modular architecture, it is packaged and deployed as a monolith (i.e., in its entirety) and does not have a microservices architecture.
Each of microservice S1-S5, collector 120, and management 130 can be run on a virtual machine, container, and/or hardware server. Virtual machines provide a substitute for a physical computing system and the functionality needed to execute entire operating systems. Virtual machines are created and run by a hypervisor which uses native execution to share and manage hardware, allowing for multiple environments which are isolated from one another, yet can exist on the same physical computing system.
Containers are an operating system-level virtualization method for deploying and running distributed applications without launching an entire virtual machine for each application. Containers can look like real computers from the point of view of programs running in them. Generally, a computer program running on an ordinary operating system can see all resources (e.g., connected devices, files and folders, network shares, CPU power, etc.) of that computer. However, programs running inside a container can only see the container's contents and devices assigned to the container. Containers can be arranged, coordinated, and managed by container orchestration (e.g., Kubernetes, Amazon Elastic Container Service, Docker Swarm, and the like). In contrast to hypervisor-based virtualization, containers may be an abstraction performed at the operating system (OS) level, whereas virtual machines are an abstraction of physical hardware.
Generally, client application 110 may only “see” one URL (e.g., to microservice S1 or microservice S2). However, microservice S1 or S2 may then in turn communicate with multiple other microservices and so on. Trace programs T1-T5 can be used to measure latency among microservices S1-S5.
Each of microservices S1-S5 can include a trace program T1-T5. Trace programs T1-T5 can record timing data about requests and responses to requests to and from microservices S1-S5. By way of non-limiting example, trace programs T1-T5 can capture data associated with a finished hop (span), referred to as a completed hop (span) record, such as a source (origin), destination (where request and/or response is going or being sent), duration (latency, such how much time has elapsed between when a request is sent and a response to the request is received), start time stamp, end time stamp, and the like. Each completed hop (span) record can further include a trace identification and a hop (span) identification. The trace identification and hop identification are described further below.
The hop identification can be randomly generated and/or can uniquely identify each request or response to a request (and its associated data, such as source, destination, duration, start time stamp, end time stamp, and the like). For example, a hop identification is eight ASCII characters encoded in hexadecimal. As illustrated in FIG. 1, a hop (span) can be from microservice S1 to microservice S3, microservice S3 to microservice S5, microservice S5 to microservice S3, and microservice S3 to microservice S1. By way of further non-limiting example, a hop (span) can be from microservice S2 to microservice S4, microservice S4 to microservice S5, microservice S5 to microservice S4, and microservice S4 to microservice S2.
Each path or route (e.g., from microservice S1 to microservice S5) is assigned a (random) trace identification. For example, the trace identification can be 128-bits long and encoded in hexadecimal. However, a randomly assigned trace identification does not provide insight into which applications are using which microservices (e.g., microservices may be used by multiple different client applications and each client application imposes a different burden) and how often each microservice is used by a particular client application, among others.
In some embodiments, client application can advantageously include a (non-random) trace identification when it sends a request to a microservice. In this way, stress on a particular microservice (by a particular client application) can be identified. Moreover, performance of a client application can be improved by identifying microservices having high latency. For example, instances of a particular microservice (e.g., microservices S1-S5) can be added to (commissioned) or subtracted (decommissioned) from system 100. In addition, aggregated data from small-scale usage of the client application (e.g., test cases, trial runs, alpha testing, beta testing, and the like) can be scaled up to forecast/predict greater usage (e.g., from a full production release).
For example, the trace identification can include an identifier for client application 110 (e.g., application name, such as eight ASCII characters encoded in hexadecimal) and the server to which the request is sent. In communication between client application 110 and an initial microservice (e.g., microservice S1 and/or S2), client application 110 will send a trace identification identifying itself and the initial microservice. For a request sent from client application 110 to microservice S1, the trace identification can be APPLNAME_S1 For a request sent from client application 110 to microservice S2, the trace identification can be APPLNAME_S2. The trace identification will follow (be used) for communications that originate from a particular client application (e.g., client application 110), as each hop communication is propagated by microservices (e.g., of microservices S1-S5) until the end of the session.
Trace programs T1-T5 propagate trace identification in-band (e.g., sent in each hop (span) along with a request and/or response to a request). Trace programs T1-T5 can send data about completed hops (spans) out of band (e.g., independent from the main in-band data stream, asynchronously) to collector 120. For example, trace programs T1-T5 can send hop (span) data using Hypertext Transfer Protocol (HTTP), Apache Kafka, Scribe, and the like. Collector 120 can receive hop data from each of trace programs T1-T5, validate it, store it (e.g., in a database such as Cassandra, ElasticSearch, MySQL, and the like), and index it.
Management 130 can request latency data from collector 120, aggregate the hop data to produce trace data, and store the trace data (e.g., in a database such as Cassandra, ElasticSearch, MySQL, and the like).
The arrangement of system 100 shown in FIG. 1 is purely for illustrative purposes and is not intended to be limiting. Different numbers of client applications, microservices, and connections between them can be used. In some embodiments, a trace system can be Zipkin and microservices S1-S5 can be referred to as instrumented clients.
FIG. 2 depicts system 200 for tracking microservices utilization, according to some embodiments. System 200 can have at least some of the characteristics of system 100 described above in relation to FIG. 1. System 200 includes client application Unibeam (identified as client 110 in FIG. 2) and microservices Activity Feed Service, UGC, XYZ, DB, Token Status, and Roadster.
FIG. 3 illustrates aggregated trace data 300 associated with system 200 (FIG. 2), for example, produced by management 130 (FIG. 1). Aggregated trace data 300 is associated with client application Unibeam 110 (FIG. 2). Column Hop Name 310 shows the two microservices in the hop. For example, AF-UGC 312 can be the hop between Activity Feed Service and UGC 110 (FIG. 2). ROOT_URL 314 can mean an external (micro)service is used (e.g., provisioned by a third-party, such as Google™, Facebook™, and the like). Column Hop Type 320 shows the type of hop. For example, Trace Supported 322 can mean the hop endpoint includes a trace program (e.g., one of trace programs T1-T5 in FIG. 1). Not Supported 324 can mean the hop endpoint does not include a trace program (e.g., one of trace programs T1-T5 in FIG. 1). When a trace program is not included in a (micro)service, information (e.g., count and average latency) can be inferred from data recorded by the hop starting point. DB Read 326 can mean a database was read from.
Column Time 330 identifies sequential intervals of time (e.g., 0-1, 1-2, and so on) to which the row of data pertains. The slice of time can be any interval of time, such as 30 minutes, 2 hours, 5 days, 3 weeks, three months, etc. Column Count 340 shows the number of times client application Unibeam 110 (FIG. 2) used a particular hop. Column Average Latency 350 shows the amount of time that elapsed between when a request was sent and when a response to the request was received (latency). The amount of time can be in any unit of time (e.g., seconds, microseconds, nanoseconds, picoseconds, and the like).
FIG. 4 is a simplified flow diagram of a method 400 for recording hop (span) data, such as in systems 100 and 200 in FIGS. 1 and 2, respectively. In some embodiments, method 400 can be (concurrently) performed by at least some of trace programs T1-T5 (FIG. 1), such that system 100 and 200 in FIGS. 1 and 2 can be said to be distributed tracing systems. At step 410, a request can be provided, such as to another microservice (e.g., microservices S1-S5 in FIG. 1). The request can include an existing trace identification and/or hop identification. When a trace identification and/or hop identification is not provided, a random a trace identification and/or hop identification can be generated and associated with the hop (span). The request can further include a source and destination. When the request is provided, a start time stamp can be recorded.
At step 420, a response to the request can be received. For example, the response can be received from the microservice that the request in step 410 was sent to. When the response is received, an end time stamp can be recorded. In some embodiments, the duration can be recorded. For example, the duration can be determined from the start and end time stamps, measured using a timer function, and the like.
At step 430, the completed hop (span) data record (e.g., a trace identification, hop identification, source, destination, duration, start time stamp, end time stamp, and the like) can be provided. In some embodiments, the completed hop (span) data record is provided to collector 120 (FIG. 1). Completed hop (span) data records may be used in method 500 (FIG. 5)
FIG. 5 illustrates method 500 for collecting completed hop (span) data according to some embodiments. In some embodiments, method 500 can be performed by collector 120 (FIG. 1). At step 510, completed hop (span) data records can be received from a (plurality of) trace programs (e.g., trace programs T1-T5). At step 520, the received completed hop (span) data records can be stored in a database (e.g., Cassandra, ElasticSearch, MySQL, and the like).
At step 530, a request for completed hop (span) data records can be received (e.g., from management 130 in FIG. 1). In some embodiments, the request includes a time frame (e.g., between a start date and time, and an end data and time) for the requested data. At step 540, the requested data records are retrieved (e.g., from the database in which it is stored). At step 550, the retrieved data records are provided (e.g., to management 130). The retrieved data records can be used in method 600 (FIG. 1).
FIG. 6 illustrates method 600 for tracking microservice utilization, in accordance with some embodiments. In some embodiments, method 600 can be performed by management 130 (FIG. 1). At step 610, an indicia (identified as “requested” in FIG. 6) is received from a user to track latency associated with a client application (e.g., in systems 100 and 200 in FIGS. 1 and 2, respectively). For example, the request can include a start date and time, and an end date and time.
At step 620, completed hop data records can be requested (e.g., from collector 120 in FIG. 2). At step 630, the requested completed hop data records can be received (e.g., from collector 120 in FIG. 2).
At step 640, the received completed hop data can be parsed and aggregated. For example, the completed hop data can be parsed such that just records (e.g., rows) pertaining to a particular client application are used. By way of further non-limiting example, the data can be grouped into intervals of time using the start and/or end time stamps, the number of instances of a particular hop (span) can be totaled, and the average duration can be calculated.
At step 650, the aggregated data can be stored, for example, in a database (e.g., Cassandra, ElasticSearch, MySQL, and the like). A non-limiting example of data aggregated using method 600 is depicted in FIG. 3.
FIG. 7 illustrates an exemplary computer system 700 that may be used to implement some embodiments of the present invention. The computer system 700 in FIG. 7 may be implemented in the contexts of the likes of computing systems, networks, servers, or combinations thereof. The computer system 700 in FIG. 7 includes one or more processor unit(s) 710 and main memory 720. Main memory 720 stores, in part, instructions and data for execution by processor unit(s) 710. Main memory 720 stores the executable code when in operation, in this example. The computer system 700 in FIG. 7 further includes a mass data storage 730, portable storage device 740, output devices 750, user input devices 760, a graphics display system 770, and peripheral device(s) 780.
The components shown in FIG. 7 are depicted as being connected via a single bus 790. The components may be connected through one or more data transport means. Processor unit(s) 710 and main memory 720 are connected via a local microprocessor bus, and the mass data storage 730, peripheral device(s) 780, portable storage device 740, and graphics display system 770 are connected via one or more input/output (I/O) buses.
Mass data storage 730, which can be implemented with a magnetic disk drive, solid state drive, or an optical disk drive, is a non-volatile storage device for storing data and instructions for use by processor unit(s) 710. Mass data storage 730 stores the system software for implementing embodiments of the present disclosure for purposes of loading that software into main memory 720.
Portable storage device 740 operates in conjunction with a portable non-volatile storage medium, such as a flash drive, floppy disk, compact disk, digital video disc, or Universal Serial Bus (USB) storage device, to input and output data and code to and from the computer system 700 in FIG. 7. The system software for implementing embodiments of the present disclosure is stored on such a portable medium and input to the computer system 700 via the portable storage device 740.
User input devices 760 can provide a portion of a user interface. User input devices 760 may include one or more microphones, an alphanumeric keypad, such as a keyboard, for inputting alphanumeric and other information, or a pointing device, such as a mouse, a trackball, stylus, or cursor direction keys. User input devices 760 can also include a touchscreen. Additionally, the computer system 700 as shown in FIG. 7 includes output devices 750. Suitable output devices 750 include speakers, printers, network interfaces, and monitors.
Graphics display system 770 include a liquid crystal display (LCD) or other suitable display device. Graphics display system 770 is configurable to receive textual and graphical information and processes the information for output to the display device.
Peripheral device(s) 780 may include any type of computer support device to add additional functionality to the computer system.
The components provided in the computer system 700 in FIG. 7 are those typically found in computer systems that may be suitable for use with embodiments of the present disclosure and are intended to represent a broad category of such computer components that are well known in the art. Thus, the computer system 700 in FIG. 7 can be a personal computer (PC), hand held computer system, telephone, mobile computer system, workstation, tablet, phablet, mobile phone, server, minicomputer, mainframe computer, wearable, or any other computer system. The computer may also include different bus configurations, networked platforms, multi-processor platforms, and the like. Various operating systems may be used including UNIX, LINUX, WINDOWS, MAC OS, PALM OS, QNX ANDROID, IOS, CHROME, and other suitable operating systems.
Some of the above-described functions may be composed of instructions that are stored on storage media (e.g., computer-readable medium). The instructions may be retrieved and executed by the processor. Some examples of storage media are memory devices, tapes, disks, and the like. The instructions are operational when executed by the processor to direct the processor to operate in accord with the technology. Those skilled in the art are familiar with instructions, processor(s), and storage media.
In some embodiments, the computing system 700 may be implemented as a cloud-based computing environment, such as a virtual machine operating within a computing cloud. In other embodiments, the computing system 700 may itself include a cloud-based computing environment, where the functionalities of the computing system 700 are executed in a distributed fashion. Thus, the computing system 700, when configured as a computing cloud, may include pluralities of computing devices in various forms, as will be described in greater detail below.
In general, a cloud-based computing environment is a resource that typically combines the computational power of a large grouping of processors (such as within web servers) and/or that combines the storage capacity of a large grouping of computer memories or storage devices. Systems that provide cloud-based resources may be utilized exclusively by their owners or such systems may be accessible to outside users who deploy applications within the computing infrastructure to obtain the benefit of large computational or storage resources.
The cloud is formed, for example, by a network of web servers that comprise a plurality of computing devices, such as the computing system 700, with each server (or at least a plurality thereof) providing processor and/or storage resources. These servers manage workloads provided by multiple users (e.g., cloud resource customers or other users). Typically, each user places workload demands upon the cloud that vary in real-time, sometimes dramatically. The nature and extent of these variations typically depends on the type of business associated with the user.
It is noteworthy that any hardware platform suitable for performing the processing described herein is suitable for use with the technology. The terms “computer-readable storage medium” and “computer-readable storage media” as used herein refer to any medium or media that participate in providing instructions to a CPU for execution. Such media can take many forms, including, but not limited to, non-volatile media, volatile media and transmission media. Non-volatile media include, for example, optical, magnetic, and solid-state disks, such as a fixed disk. Volatile media include dynamic memory, such as system random-access memory (RAM). Transmission media include coaxial cables, copper wire and fiber optics, among others, including the wires that comprise one embodiment of a bus. Transmission media can also take the form of acoustic or light waves, such as those generated during radio frequency (RF) and infrared (IR) data communications. Common forms of computer-readable media include, for example, a floppy disk, a flexible disk, a hard disk, magnetic tape, any other magnetic medium, a CD-ROM disk, digital video disk (DVD), any other optical medium, any other physical medium with patterns of marks or holes, a RAM, a programmable read-only memory (PROM), an erasable programmable read-only memory (EPROM), an electrically erasable programmable read-only memory (EEPROM), a Flash memory, any other memory chip or data exchange adapter, a carrier wave, or any other medium from which a computer can read.
Various forms of computer-readable media may be involved in carrying one or more sequences of one or more instructions to a CPU for execution. A bus carries the data to system RAM, from which a CPU retrieves and executes the instructions. The instructions received by system RAM can optionally be stored on a fixed disk either before or after execution by a CPU.
Computer program code for carrying out operations for aspects of the present technology may be written in any combination of one or more programming languages, including an object oriented programming language such as JAVA, SMALLTALK, C++ or the like and conventional procedural programming languages, such as the “C” programming language or similar programming languages. The program code may execute entirely on the user's computer, partly on the user's computer, as a stand-alone software package, partly on the user's computer and partly on a remote computer or entirely on the remote computer or server. In the latter scenario, the remote computer may be connected to the user's computer through any type of network, including a local area network (LAN) or a wide area network (WAN), or the connection may be made to an external computer (for example, through the Internet using an Internet Service Provider).
The corresponding structures, materials, acts, and equivalents of all means or step plus function elements in the claims below are intended to include any structure, material, or act for performing the function in combination with other claimed elements as specifically claimed. The description of the present technology has been presented for purposes of illustration and description, but is not intended to be exhaustive or limited to the invention in the form disclosed. Many modifications and variations will be apparent to those of ordinary skill in the art without departing from the scope and spirit of the invention. Exemplary embodiments were chosen and described in order to best explain the principles of the present technology and its practical application, and to enable others of ordinary skill in the art to understand the invention for various embodiments with various modifications as are suited to the particular use contemplated.
Aspects of the present technology are described above with reference to flowchart illustrations and/or block diagrams of methods, apparatus (systems) and computer program products according to embodiments of the invention. It will be understood that each block of the flowchart illustrations and/or block diagrams, and combinations of blocks in the flowchart illustrations and/or block diagrams, can be implemented by computer program instructions. These computer program instructions may be provided to a processor of a general purpose computer, special purpose computer, or other programmable data processing apparatus to produce a machine, such that the instructions, which execute via the processor of the computer or other programmable data processing apparatus, create means for implementing the functions/acts specified in the flowchart and/or block diagram block or blocks.
These computer program instructions may also be stored in a computer readable medium that can direct a computer, other programmable data processing apparatus, or other devices to function in a particular manner, such that the instructions stored in the computer readable medium produce an article of manufacture including instructions which implement the function/act specified in the flowchart and/or block diagram block or blocks.
The computer program instructions may also be loaded onto a computer, other programmable data processing apparatus, or other devices to cause a series of operational steps to be performed on the computer, other programmable apparatus or other devices to produce a computer implemented process such that the instructions which execute on the computer or other programmable apparatus provide processes for implementing the functions/acts specified in the flowchart and/or block diagram block or blocks.
The flowchart and block diagrams in the Figures illustrate the architecture, functionality, and operation of possible implementations of systems, methods and computer program products according to various embodiments of the present technology. In this regard, each block in the flowchart or block diagrams may represent a module, segment, or portion of code, which comprises one or more executable instructions for implementing the specified logical function(s). It should also be noted that, in some alternative implementations, the functions noted in the block may occur out of the order noted in the figures. For example, two blocks shown in succession may, in fact, be executed substantially concurrently, or the blocks may sometimes be executed in the reverse order, depending upon the functionality involved. It will also be noted that each block of the block diagrams and/or flowchart illustration, and combinations of blocks in the block diagrams and/or flowchart illustration, can be implemented by special purpose hardware-based systems that perform the specified functions or acts, or combinations of special purpose hardware and computer instructions.
The description of the present technology has been presented for purposes of illustration and description, but is not intended to be exhaustive or limited to the invention in the form disclosed. Many modifications and variations will be apparent to those of ordinary skill in the art without departing from the scope and spirit of the invention. Exemplary embodiments were chosen and described in order to best explain the principles of the present technology and its practical application, and to enable others of ordinary skill in the art to understand the invention for various embodiments with various modifications as are suited to the particular use contemplated.

Claims (20)

What is claimed is:
1. A computer-implemented method for tracking microservice usage comprising:
requesting completed hop data records, the completed hop data records being associated with a plurality of microservices, a hop being between two microservices of the plurality of microservices;
receiving the completed hop data records;
aggregating the completed hop data records to identify hop data records associated with a client application, to count a number of instances the client application utilized each microservice of the plurality of microservices, and to calculate an average latency for each of the hops; and
provisioning and/or decommissioning instances of the plurality of microservices using the aggregated hop data records.
2. The computer-implemented method of claim 1, wherein the completed hop data records are collected using a method comprising:
receiving the completed hop data records from trace programs associated with a respective one of the plurality of microservices, the completed hop data records being sent asynchronously by the trace programs.
3. The computer-implemented method of claim 2, wherein the completed hop data records are collectively produced by the trace programs each using a method comprising:
logging a start time stamp when a request is sent;
logging an end time stamp when a response to the request is received;
calculating a duration using the start time stamp and the end time stamp; and
assembling a completed hop data record including a trace identification, a hop identification, a source, a destination, the duration, the start time stamp, and the end time stamp.
4. The computer implemented method of claim 3, wherein the trace identification includes an identifier of the client application.
5. The computer-implemented method of claim 3, wherein the trace identification is 128-bits long and encoded in hexadecimal.
6. The computer implemented method of claim 1, wherein the plurality of microservices collectively perform a server application.
7. The computer implemented method of claim 1, wherein each of the plurality of microservices is running in a container.
8. The computer implemented method of claim 1, wherein at least one of the microservices of the plurality of microservices is provisioned by a third party.
9. The computer implemented method of claim 1, the method further comprising:
storing the aggregated hop data records in a database.
10. The computer implemented method of claim 1, wherein at least some of the microservices of the plurality of microservices communicate with each other using an application programming interface (API).
11. A system comprising:
a processor; and
a memory coupled to the processor and storing a program executable by the processor to perform a method for tracking microservice usage comprising:
requesting completed hop data records, the completed hop data records being associated with a plurality of microservices, a hop being between two microservices of the plurality of microservices;
receiving the completed hop data records;
aggregating the completed hop data records to identify hop data records associated with a client application, to count a number of instances the client application utilized each microservice of the plurality of microservices, and to calculate an average latency for each of the hops; and
provisioning and/or decommissioning instances of the plurality of microservices using the aggregated hop data records.
12. The system of claim 11, wherein the completed hop data records are collected using a method comprising:
receiving the completed hop data records from trace programs associated with a respective one of the plurality of microservices, the completed hop data records being sent asynchronously by the trace programs.
13. The system of claim 12, wherein the completed hop data records are collectively produced by the trace programs each using a method comprising:
logging a start time stamp when a request is sent;
logging an end time stamp when a response to the request is received;
calculating a duration using the start time stamp and the end time stamp; and
assembling a completed hop data record including a trace identification, a hop identification, a source, a destination, the duration, the start time stamp, and the end time stamp.
14. The system of claim 13, wherein the trace identification includes an identifier of the client application.
15. The system of claim 14, wherein the trace identification is 128-bits long and encoded in hexadecimal.
16. The system of claim 11, wherein the plurality of microservices collectively perform a server application.
17. The system of claim 11, wherein each of the plurality of microservices is running in a container.
18. The system of claim 11, wherein at least one of the microservices of the plurality of microservices is provisioned by a third party.
19. The system of claim 11, the method further comprising:
storing the aggregated hop data records in a database.
20. A non-transitory computer-readable storage medium having embodied thereon a program, the program being executable by a processor to perform a method for tracking microservice usage, the method comprising:
requesting completed hop data records, the completed hop data records being associated with a plurality of microservices, a hop being between two microservices of the plurality of microservices;
receiving completed hop data records;
aggregating the completed hop data records to identify hop data records associated with a client application, to count a number of instances the client application utilized each microservice of the plurality of microservices, and to calculate an average latency for each of the hops; and
provisioning and/or decommissioning instances of the plurality of microservices using the aggregated hop data.
US16/032,091 2018-07-11 2018-07-11 Tracking application utilization of microservices Active 2038-10-23 US10644970B2 (en)

Priority Applications (2)

Application Number Priority Date Filing Date Title
US16/032,091 US10644970B2 (en) 2018-07-11 2018-07-11 Tracking application utilization of microservices
PCT/US2019/039594 WO2020013999A1 (en) 2018-07-11 2019-06-27 Tracking application utilization of microservices

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
US16/032,091 US10644970B2 (en) 2018-07-11 2018-07-11 Tracking application utilization of microservices

Publications (2)

Publication Number Publication Date
US20200021505A1 US20200021505A1 (en) 2020-01-16
US10644970B2 true US10644970B2 (en) 2020-05-05

Family

ID=69138572

Family Applications (1)

Application Number Title Priority Date Filing Date
US16/032,091 Active 2038-10-23 US10644970B2 (en) 2018-07-11 2018-07-11 Tracking application utilization of microservices

Country Status (2)

Country Link
US (1) US10644970B2 (en)
WO (1) WO2020013999A1 (en)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10855616B2 (en) 2017-01-11 2020-12-01 Sony Interactive Entertainment LLC Predicting wait time for new session initiation during increased data traffic latency
US20210334194A1 (en) * 2020-04-22 2021-10-28 International Business Machines Corporation Generation of microservices from a monolithic application based on runtime traces

Families Citing this family (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10644970B2 (en) 2018-07-11 2020-05-05 Sony Interactive Entertainment LLC Tracking application utilization of microservices
US11341274B2 (en) 2018-12-19 2022-05-24 Elasticsearch B.V. Methods and systems for access controlled spaces for data analytics and visualization
US11625806B2 (en) * 2019-01-23 2023-04-11 Qualcomm Incorporated Methods and apparatus for standardized APIs for split rendering
US10782860B2 (en) 2019-02-26 2020-09-22 Elasticsearch B.V. Systems and methods for dynamic scaling in graphical user interfaces
US11477207B2 (en) 2019-03-12 2022-10-18 Elasticsearch B.V. Configurable feature level controls for data
US10756959B1 (en) 2019-04-11 2020-08-25 Elasticsearch B.V. Integration of application performance monitoring with logs and infrastructure
US11240126B2 (en) * 2019-04-11 2022-02-01 Elasticsearch B.V. Distributed tracing for application performance monitoring
US11526413B2 (en) * 2019-04-11 2022-12-13 Elasticsearch B.V. Distributed tracing of huge spans for application and dependent application performance monitoring
US11397516B2 (en) 2019-10-24 2022-07-26 Elasticsearch B.V. Systems and method for a customizable layered map for visualizing and analyzing geospatial data
CN113783822B (en) * 2020-06-03 2023-05-30 北京沃东天骏信息技术有限公司 Service timeout management method and device, electronic equipment and readable medium
CN111782182B (en) * 2020-06-29 2024-12-10 联通(浙江)产业互联网有限公司 A Java Web interface request statistics method, computer equipment and readable storage medium
CN112417042B (en) * 2020-11-19 2024-12-27 中国建设银行股份有限公司 A method and device for processing a service request
JP7247161B2 (en) * 2020-12-24 2023-03-28 株式会社日立製作所 Information processing system and data arrangement method in information processing system
US12164676B2 (en) 2021-09-22 2024-12-10 Ridgeline, Inc. Enabling an action based on a permission identifier for real-time identity resolution in a distributed system
US11522949B1 (en) * 2021-11-19 2022-12-06 Jpmorgan Chase Bank, N.A. Systems and methods for cloud-based hybrid service meshes in microservice architectures
CN114116401A (en) * 2021-11-30 2022-03-01 平安养老保险股份有限公司 Full-link tracking monitoring method, device, device and medium for cluster message
US20240330152A1 (en) * 2023-03-30 2024-10-03 International Business Machines Corporation Synchronizing full link tracing information in a microservices environment

Citations (23)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20030231621A1 (en) 1998-09-11 2003-12-18 Cirrus Logic, Inc. Dynamic communication channel switching for computer networks
US20090125625A1 (en) 2005-09-15 2009-05-14 Jeong-Min Shim Load Balancing Method and Apparatus, and Software Streaming System Using the Same
US20110023096A1 (en) 2009-07-21 2011-01-27 Sihai Xiao Token-based control of permitted sub-sessions for online collaborative computing sessions
US20110055726A1 (en) 2009-08-27 2011-03-03 International Business Machines Corporation Providing alternative representations of virtual content in a virtual universe
US20110264778A1 (en) 2010-04-23 2011-10-27 Research In Motion Limited Method, system and apparatus for managing load in a server
US20110314077A1 (en) 2010-06-16 2011-12-22 Serhat Pala Identification of compatible products for use with mobile devices
US20120102132A1 (en) 2007-09-19 2012-04-26 The Chinese University Of Hong Kong Load balancing and admission scheduling in pull-based parallel video servers
US20130044582A1 (en) 2011-08-19 2013-02-21 Faheem Ahmed Control of end-to-end delay for delay sensitive ip traffics using feedback controlled adaptive priority scheme
US8392578B1 (en) 2000-02-09 2013-03-05 Charles Schwab & Co., Inc. Method and apparatus for controlling access to a website
US20140153422A1 (en) 2012-12-03 2014-06-05 Aruba Networks, Inc. Rate limiting mechanism based on device load/capacity or traffic content
US20150161752A1 (en) 2013-12-11 2015-06-11 Uber Technologies Inc. Intelligent queuing for user selection in providing on-demand services
US20150237383A1 (en) 2007-10-15 2015-08-20 Time Warner Cable Enterprises Llc Methods and apparatus for revenue-optimized delivery of content in a network
US20150375113A1 (en) 2014-06-30 2015-12-31 Microsoft Corporation Assigning A Player To A Machine
US20160248861A1 (en) 2014-10-21 2016-08-25 Twilio, Inc. System and method for providing a micro-services communication platform
US20160301617A1 (en) 2015-04-10 2016-10-13 Lenovo (Singapore) Pte. Ltd. Bandwidth prioritization
US20170046146A1 (en) * 2015-08-11 2017-02-16 International Business Machines Corporation Autonomously healing microservice-based applications
US20170160880A1 (en) * 2015-12-03 2017-06-08 Sap Se System and Method for Integrating Microservices
US20180198690A1 (en) 2017-01-11 2018-07-12 Sony Interactive Entertainment LLC Delaying New Session Initiation in Response to Increased Data Traffic Latency
US20180198733A1 (en) 2017-01-11 2018-07-12 Sony Interactive Entertainment LLC Predicting Wait Time for New Session Initiation during Increased Data Traffic Latency
US20180234319A1 (en) * 2014-12-29 2018-08-16 Facebook, Inc. Methods and Systems for Congestion-Based Content Delivery
US20190179663A1 (en) * 2017-12-08 2019-06-13 Sap Se Generic communication architecture for cloud microservice infrastructure
US20190220305A1 (en) * 2018-01-16 2019-07-18 Jpmorgan Chase Bank, N.A. Automation as a service
WO2020013999A1 (en) 2018-07-11 2020-01-16 Sony Interactive Entertainment LLC Tracking application utilization of microservices

Patent Citations (32)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20030231621A1 (en) 1998-09-11 2003-12-18 Cirrus Logic, Inc. Dynamic communication channel switching for computer networks
US8392578B1 (en) 2000-02-09 2013-03-05 Charles Schwab & Co., Inc. Method and apparatus for controlling access to a website
US20090125625A1 (en) 2005-09-15 2009-05-14 Jeong-Min Shim Load Balancing Method and Apparatus, and Software Streaming System Using the Same
US20120102132A1 (en) 2007-09-19 2012-04-26 The Chinese University Of Hong Kong Load balancing and admission scheduling in pull-based parallel video servers
US20150237383A1 (en) 2007-10-15 2015-08-20 Time Warner Cable Enterprises Llc Methods and apparatus for revenue-optimized delivery of content in a network
US20110023096A1 (en) 2009-07-21 2011-01-27 Sihai Xiao Token-based control of permitted sub-sessions for online collaborative computing sessions
US20110055726A1 (en) 2009-08-27 2011-03-03 International Business Machines Corporation Providing alternative representations of virtual content in a virtual universe
US20110264778A1 (en) 2010-04-23 2011-10-27 Research In Motion Limited Method, system and apparatus for managing load in a server
US20110314077A1 (en) 2010-06-16 2011-12-22 Serhat Pala Identification of compatible products for use with mobile devices
US20130044582A1 (en) 2011-08-19 2013-02-21 Faheem Ahmed Control of end-to-end delay for delay sensitive ip traffics using feedback controlled adaptive priority scheme
US20140153422A1 (en) 2012-12-03 2014-06-05 Aruba Networks, Inc. Rate limiting mechanism based on device load/capacity or traffic content
US20150161752A1 (en) 2013-12-11 2015-06-11 Uber Technologies Inc. Intelligent queuing for user selection in providing on-demand services
US20150375113A1 (en) 2014-06-30 2015-12-31 Microsoft Corporation Assigning A Player To A Machine
US20160248861A1 (en) 2014-10-21 2016-08-25 Twilio, Inc. System and method for providing a micro-services communication platform
US9509782B2 (en) * 2014-10-21 2016-11-29 Twilio, Inc. System and method for providing a micro-services communication platform
US20180234319A1 (en) * 2014-12-29 2018-08-16 Facebook, Inc. Methods and Systems for Congestion-Based Content Delivery
US20160301617A1 (en) 2015-04-10 2016-10-13 Lenovo (Singapore) Pte. Ltd. Bandwidth prioritization
US20170046146A1 (en) * 2015-08-11 2017-02-16 International Business Machines Corporation Autonomously healing microservice-based applications
US10048830B2 (en) * 2015-12-03 2018-08-14 Sap Se System and method for integrating microservices
US20170160880A1 (en) * 2015-12-03 2017-06-08 Sap Se System and Method for Integrating Microservices
US10263859B2 (en) 2017-01-11 2019-04-16 Sony Interactive Entertainment LLC Delaying new session initiation in response to increased data traffic latency
WO2018132172A1 (en) 2017-01-11 2018-07-19 Sony Interactive Entertainment LLC Delaying new session initiation in response to increased data traffic latency
WO2018132173A1 (en) 2017-01-11 2018-07-19 Sony Interactive Entertainment LLC Predicting wait time for new session initiation during increased data traffic latency
US20180198733A1 (en) 2017-01-11 2018-07-12 Sony Interactive Entertainment LLC Predicting Wait Time for New Session Initiation during Increased Data Traffic Latency
US20180198690A1 (en) 2017-01-11 2018-07-12 Sony Interactive Entertainment LLC Delaying New Session Initiation in Response to Increased Data Traffic Latency
CN110168970A (en) 2017-01-11 2019-08-23 索尼互动娱乐有限责任公司 Delays the start of new sessions in response to increased data traffic latency
CN110168969A (en) 2017-01-11 2019-08-23 索尼互动娱乐有限责任公司 Predicting latency for new session initiation during increased data traffic latency
EP3568931A1 (en) 2017-01-11 2019-11-20 Sony Interactive Entertainment LLC Delaying new session initiation in response to increased data traffic latency
EP3568932A1 (en) 2017-01-11 2019-11-20 Sony Interactive Entertainment LLC Predicting wait time for new session initiation during increased data traffic latency
US20190179663A1 (en) * 2017-12-08 2019-06-13 Sap Se Generic communication architecture for cloud microservice infrastructure
US20190220305A1 (en) * 2018-01-16 2019-07-18 Jpmorgan Chase Bank, N.A. Automation as a service
WO2020013999A1 (en) 2018-07-11 2020-01-16 Sony Interactive Entertainment LLC Tracking application utilization of microservices

Non-Patent Citations (9)

* Cited by examiner, † Cited by third party
Title
"International Search Report" and "Written Opinion of the International Searching Authority," Patent Cooperation Treaty Application No. PCT/US2017/061383, dated Jan. 19, 2018, 8 pages.
"International Search Report" and "Written Opinion of the International Searching Authority," Patent Cooperation Treaty Application No. PCT/US2017/061391, dated Jan. 19, 2018, 8 pages.
"International Search Report" and "Written Opinion of the International Searching Authority," Patent Cooperation Treaty Application No. PCT/US2019/039594, dated Oct. 2, 2019, 9 pages.
Atkisson, Brian, "The Truth About Microservices," DZone, May 5, 2017 [retrieved on Sep. 1, 2019], Retrieved from the Internet: <URL:https://www.dzone.com/articles/the-truth-about-microservices>, 34 pages.
djrutland1 et al., "An Evolution of a Self Confessed Video Games Snob," djrutland1 [online], Mar. 17, 2013 [retrieved on Jul. 10, 2018], Retrieved from the Internet: <URL:https://djrutland1.wordpress.com/page/22>, 21 pages.
Shaikh, Anees et al., "On Demand Platform for Online Games," IBM Systems Journal, vol. 45, No. 1; Jan. 11, 2006, pp. 7-19.
Swersky, Dave, "The Hows, Whys and Whats of Monitoring Microservices," The New Stack, Jun. 21, 2018 [retrieved on Sep. 1, 2019], Retrieved from the Internet: <URL:https://thenewstack.io/the-hows-whys-and-whats-of-monitoring-microservices/>, 15 pages.
Viennot, Nicolas et al., "Synapse: A Microservices Architecture for Heterogeneous-Database Web Applications," Proceedings of the Tenth European Conference on Computer Systems, Apr. 21, 2015 [retrieved on Sep. 1, 2019], Retrieved from the Internet: <URL:https://roxanageambasu.github.io/publications/eurosys2015synapse.pdf>, 16 pages.
Ye, Meng et al., "System-Performance Modeling for Massively Multiplayer Online Role-Playing Games," IBM Systems Journal, vol. 45, No. 1; Jan. 20, 2006, pp. 45-58.

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10855616B2 (en) 2017-01-11 2020-12-01 Sony Interactive Entertainment LLC Predicting wait time for new session initiation during increased data traffic latency
US11171876B2 (en) 2017-01-11 2021-11-09 Sony Interactive Entertainment LLC Predicting wait time for new session initiation during increased data traffic latency
US11711313B2 (en) 2017-01-11 2023-07-25 Sony Interactive Entertainment LLC Load balancing during increased data traffic latency
US20210334194A1 (en) * 2020-04-22 2021-10-28 International Business Machines Corporation Generation of microservices from a monolithic application based on runtime traces
US11176027B1 (en) * 2020-04-22 2021-11-16 International Business Machines Corporation Generation of microservices from a monolithic application based on runtime traces
US11663115B2 (en) 2020-04-22 2023-05-30 International Business Machines Corporation Generation of microservices from a monolithic application based on runtime traces
US11940904B2 (en) 2020-04-22 2024-03-26 International Business Machines Corporation Generation of microservices from a monolithic application based on runtime traces

Also Published As

Publication number Publication date
WO2020013999A1 (en) 2020-01-16
US20200021505A1 (en) 2020-01-16

Similar Documents

Publication Publication Date Title
US10644970B2 (en) Tracking application utilization of microservices
Maissen et al. Faasdom: A benchmark suite for serverless computing
JP6530462B2 (en) Determining and monitoring the performance capabilities of computer resource services
Figiela et al. Performance evaluation of heterogeneous cloud functions
US10515000B2 (en) Systems and methods for performance testing cloud applications from multiple different geographic locations
US9712410B1 (en) Local metrics in a service provider environment
US10387208B2 (en) Distributed cloud computing elasticity
US11526413B2 (en) Distributed tracing of huge spans for application and dependent application performance monitoring
US20140173618A1 (en) System and method for management of big data sets
US10284660B1 (en) Data flow tokens to trace execution of services in a service provider network
JP7457435B2 (en) Distributed system deployment
US12321250B1 (en) Configurable telemetry data processing via observability pipelines
US12293183B2 (en) Client-side enrichment and transformation via dynamic logic for analytics
US20140280912A1 (en) System and method for determination and visualization of cloud processes and network relationships
US20180150333A1 (en) Bandwidth aware resource optimization
Zhao et al. Evaluating Cloud Platform Architecture with the CARE Framework.
CN110008050A (en) Method and apparatus for processing information
US20230214265A1 (en) High availability scheduler event tracking
Sajal et al. Traceupscaler: Upscaling traces to evaluate systems at high load
CN112953810A (en) Network request processing method and device
Soni Practical AWS Networking: Build and manage complex networks using services such as Amazon VPC, Elastic Load Balancing, Direct Connect, and Amazon Route 53
US9772877B2 (en) Managing I/O operations in a shared file system
Padhy et al. X-as-a-Service: Cloud Computing with Google App Engine, Amazon Web Services, Microsoft Azure and Force. com
Divate et al. High performance computing and big data
CN113760836A (en) Wide table calculation method and device

Legal Events

Date Code Title Description
FEPP Fee payment procedure

Free format text: ENTITY STATUS SET TO UNDISCOUNTED (ORIGINAL EVENT CODE: BIG.); ENTITY STATUS OF PATENT OWNER: LARGE ENTITY

AS Assignment

Owner name: SONY INTERACTIVE ENTERTAINMENT LLC, CALIFORNIA

Free format text: ASSIGNMENT OF ASSIGNORS INTEREST;ASSIGNORS:VINNAKOTA, NITHYA;KAPPAGANTULA, ADITYA;DATTADA, HARI;AND OTHERS;REEL/FRAME:046337/0986

Effective date: 20180709

STPP Information on status: patent application and granting procedure in general

Free format text: NOTICE OF ALLOWANCE MAILED -- APPLICATION RECEIVED IN OFFICE OF PUBLICATIONS

STPP Information on status: patent application and granting procedure in general

Free format text: AWAITING TC RESP., ISSUE FEE NOT PAID

STPP Information on status: patent application and granting procedure in general

Free format text: NOTICE OF ALLOWANCE MAILED -- APPLICATION RECEIVED IN OFFICE OF PUBLICATIONS

STCF Information on status: patent grant

Free format text: PATENTED CASE

MAFP Maintenance fee payment

Free format text: PAYMENT OF MAINTENANCE FEE, 4TH YEAR, LARGE ENTITY (ORIGINAL EVENT CODE: M1551); ENTITY STATUS OF PATENT OWNER: LARGE ENTITY

Year of fee payment: 4