A method, device, electronic device and medium for constructing task scheduling
By using the backtracking event algorithm to record the status evolution process of the scheduler in the SaaS platform, the problem of not being able to know the status evolution of the scheduler in the prior art is solved, and support for the storage of important context information, subsequent requirements evolution and problem investigation is achieved.
Patent Information
- Application Number
- CN202111539360.5
- Authority / Receiving Office
- CN · China
- Patent Type
- Patents(China)
- Current Assignee / Owner
- Filing Date
- 2021-12-15
- Publication Date
- 2025-04-01
- Estimated Expiration
- 2041-12-15
AI Technical Summary
The task scheduling methods in the existing SaaS platform only retain the current state of the scheduler, and it is impossible to know how the scheduler evolves to the current state, resulting in the loss of important context information, affecting subsequent demand evolution and problem investigation.
Intelligent state management is realized through backtracking event algorithms, recording and storing events to accurately record the process of how the scheduler evolves to the current state, and save important context information.
It realizes accurate recording of the scheduler state evolution process, saves important context information, and solves the obstacles to subsequent demand evolution and problem investigation.
Smart Images

Figure CN114416341B_ABST
Abstract
Description
Technical Field
[0001] The present invention relates to the field of SaaS platforms, and in particular to a method, device, electronic device and medium for constructing task scheduling. Background Art
[0002] SaaS, also known as Software as a Service, is a platform where software developers provide software for online use. SaaS providers build the network infrastructure required for enterprise informatization, so that enterprises can use information systems through the Internet without having to purchase software and hardware separately.
[0003] For SaaS service providers, building a SaaS system consists of two parts: upper-layer services and underlying multi-tenant systems. Upper-layer services are software services sold by providers to create value for customers; the underlying multi-tenant system is a specific way to implement the SaaS model, which can enable a single instance to serve multiple organizations, where tenants refer to customers who are granted the right to use SaaS services.
[0004] At present, the task scheduling of most SaaS services will directly persist the current status information of the scheduler in the database. When the task is scheduled next time, the status information of the scheduler is first retrieved from the database, and then the corresponding scheduling operation is performed according to the retrieved scheduler status. The main defects of this method in actual business are: it is mainly based on recording the status, only retaining the current status of the scheduler, but it is impossible to know how the scheduler evolved to the current status, which easily leads to the loss of important context information, and thus hinders the subsequent evolution of requirements and troubleshooting. Summary of the invention
[0005] The technical solution of the present invention provides a method, device, electronic device and medium for constructing task scheduling. The technical problem to be solved by the present invention is: to realize intelligent state management through a backtracking event algorithm, mainly recording and storing events, accurately recording the process of how the scheduler evolves to the current state, saving important context information, and clearing obstacles for subsequent demand evolution, problem troubleshooting and other tasks.
[0006] In the first aspect, an embodiment of the present invention provides a method for constructing task scheduling, comprising: receiving a processing instruction for a target object, and selecting a corresponding scheduler according to the processing instruction; obtaining historical event data of the scheduler from a database according to a received obtain event function; calling a conversion function according to the historical event data to obtain a first state of the target object; according to the received execution function corresponding to the target object, converting the first state to a second state, and obtaining an execution event corresponding to the execution function; calling an add event function to store the execution event in the database.
[0007] Its further technical solution is that after calling the add event function and storing the execution event in the database, the method also includes, if a new execution function of the target object is received, applying the new execution function to the second state, transforming the second state into a third state, and outputting a new execution event; calling the add event function to persistently store the new execution event.
[0008] Its further technical solution is that the historical event data of the scheduler is obtained from the database according to the received event acquisition function, including: obtaining historical event data from an event snapshot point; the event snapshot point includes a snapshot, and the snapshot saves the current state of the scheduler; the event snapshot point is used to record the event position corresponding to the current state of the scheduler.
[0009] Its further technical solution is that the event acquisition function is:
[0010] f(dispatcherId,start,end)=>events
[0011] Where dispatcherId is the dispatcher identifier, start is the starting position, end is the ending position, and events is the corresponding event;
[0012] The scheduler identifier is an event storage form of the scheduler, and the corresponding event is an event occurring between a start position and an end position.
[0013] Its further technical solution is that the conversion function is:
[0014] f(dispatcher,events)=>dispatcher
[0015] Among them, dispatcher is the scheduler, events is the corresponding event, and dispatcher is the first state.
[0016] Its further technical solution is that the execution function is:
[0017] f(dispatcher,command)=>Events
[0018] Wherein, dispatcher is the dispatcher, command is the command, and Events is the event generated by the command;
[0019] The added event function is:
[0020] f(dispatcherId,en,Events)=>ack
[0021] Wherein, dispatcherId is the identifier of the dispatcher, en is the expected number of events, Events is the execution event, that is, the event generated by the command, and ack is a flag to confirm the successful addition.
[0022] Its further technical solution is that the method also includes: receiving the expected number of events and execution events input by the user; adding the execution events to the event stream of the corresponding scheduler, and judging whether the number of events in the event stream is consistent with the expected number of events; if the number of events in the event stream is consistent with the expected number of events, determining that the persistent storage is successful; wherein the expected number of events is the sum of the historical event data and the number of execution events.
[0023] In a second aspect, an embodiment of the present invention provides a device for constructing task scheduling, wherein the task scheduling device includes a unit for executing the method described in the first aspect.
[0024] In a third aspect, the present invention provides an electronic device comprising: a processor, a communication interface, a memory and a communication bus, wherein the processor, the communication interface and the memory communicate with each other via the communication bus; the memory is used to store computer programs; and the processor is used to implement the steps of the method described in the first aspect when executing the program stored in the memory.
[0025] In a fourth aspect, the present invention provides a computer-readable storage medium having a computer program stored thereon, wherein the computer program, when executed by a processor, implements the steps of the method described in the first aspect.
[0026] The above technical solution provided by the embodiment of the present invention has the following advantages compared with the prior art:
[0027] In the technical solution of the embodiment of the present invention, intelligent state management is achieved through a backtracking event algorithm, which accurately records the event process of how the scheduler evolves to the current state, saves important context information, and clears obstacles for subsequent demand evolution, problem troubleshooting and other tasks.
[0028] Therefore, the technical solution of the present invention includes: calling the get event function to obtain the historical event data of the scheduler from the database; calling the conversion function according to the historical event data to obtain the first state of the target object; passing the first state and the received command as parameters to the execution function and calling it to obtain the second state and the corresponding execution event; calling the add event function to store the execution event in the database. The present invention can solve the objective defects of the prior art, specifically including:
[0029] 1. The existing technology only retains the current state of the scheduler, but cannot know how the scheduler evolved to the current state. This is equivalent to losing some context information, which will hinder the subsequent demand evolution and problem troubleshooting.
[0030] 2. The data structure of the scheduler's status information may be complex and large. Frequently writing its status information to the database will also cause certain performance problems. BRIEF DESCRIPTION OF THE DRAWINGS
[0031] The accompanying drawings, which are incorporated in and constitute a part of this specification, illustrate embodiments consistent with the invention and, together with the description, serve to explain the principles of the invention.
[0032] In order to more clearly illustrate the embodiments of the present invention or the technical solutions in the prior art, the drawings required for use in the embodiments or the description of the prior art will be briefly introduced below. Obviously, for ordinary technicians in this field, other drawings can be obtained based on these drawings without paying any creative labor.
[0033] Figure 1 A flowchart of a method for constructing task scheduling provided by an embodiment of the present invention.
[0034] Figure 2 A sub-flow diagram of a method for constructing task scheduling provided in an embodiment of the present invention.
[0035] Figure 3 It is a structural diagram of a task scheduling device provided by another embodiment of the present invention.
[0036] Figure 4 It is a structural diagram of a task scheduling device provided by another embodiment of the present invention.
[0037] Figure 5 It is a schematic diagram of the structure of an electronic device provided by another embodiment of the present invention. DETAILED DESCRIPTION
[0038] The following will be combined with the drawings in the embodiments of the present invention to clearly and completely describe the technical solutions in the embodiments. Obviously, the embodiments described below are only part of the embodiments of the present invention, not all of the embodiments. Based on the embodiments of the present invention, all other embodiments obtained by ordinary technicians in this field without creative work are within the scope of protection of the present invention.
[0039] It should be understood that the terms used in this description of the embodiments of the present invention are only for the purpose of describing specific embodiments and are not intended to limit the embodiments of the present invention. As used in the description of the embodiments of the present invention and the appended claims, unless the context clearly indicates otherwise, the singular forms of "a", "an" and "the" are intended to include plural forms.
[0040] Example 1
[0041] See also Figure 1 , Figure 1 A flowchart of a method for constructing task scheduling provided by an embodiment of the present invention. The embodiment of the present invention proposes a method for constructing task scheduling, which is applied to a distributed computing cluster of a SAAS platform, and divides a large processing task into small tasks of the same type in several intermediate processing stages, and then distributes them to different distributed nodes for calculation, and implements scheduling through a scheduler.
[0042] Specifically, the method for constructing task scheduling includes the following steps.
[0043] S101, receiving a processing instruction for a target object, and selecting a corresponding scheduler according to the processing instruction.
[0044] Among them, the target object is any tenant of the SaaS platform; the processing instruction is an instruction that can change the status of the tenant; the scheduler is a distributed computing cluster scheduling module, which is used to distribute the received tasks. The scheduler of each node is centered on the database. A single scheduler cannot perceive the existence of other schedulers and only communicates indirectly through the database.
[0045] The above steps can manage the scheduler on a single node, and further manage the tenants on a single node.
[0046] S102: Acquire historical event data of the scheduler from a database according to the received event acquisition function.
[0047] Wherein, according to the received event acquisition function, the event acquisition function is called.
[0048] In one embodiment, the event acquisition function described in step S102 above is:
[0049] f(dispatcherId,start,end)=>events
[0050] Among them, dispatcherId is the dispatcher identifier, start is the starting position, end is the ending position, and events is the historical event data;
[0051] The scheduler identifier is the event storage form of the scheduler, the corresponding event range is the events occurring within the range between the starting position and the ending position; and the historical event data is the corresponding event range from the starting position to the ending position.
[0052] For example, according to the processing instruction, the corresponding first scheduler is selected, and according to the received event acquisition function, the first, second, third, and up to Nth item of historical event data of the first scheduler are obtained from the database. At this time, the starting position is the first item and the ending position is the Nth item.
[0053] The above steps obtain the occurrence events between item 1 to item N, which defines the target range of the above steps.
[0054] S103: Call a conversion function according to the historical event data to obtain a first state of the target object.
[0055] In one embodiment, the conversion function in step S103 above is:
[0056] f(dispatcher,events)=>dispatcher
[0057] Among them, dispatcher is the scheduler, events is the historical event data, and dispatcher is the first state.
[0058] For example, calling the conversion function, we get the 1st, 2nd, 3rd, and Nth historical events that happened in the past, which are: transfer 100 yuan, transfer 200 yuan, transfer 300 yuan, and transfer N×100 yuan. Finally, we return the latest state, that is, the first state is: (1+2+3…+N)×100 yuan.
[0059] The above steps not only output the first state, but also trace back the historical events that occurred before the first state, which is conducive to the subsequent demand evolution and problem troubleshooting.
[0060] S104: According to the received execution function corresponding to the target object, the first state is changed to a second state, and an execution event corresponding to the execution function is obtained.
[0061] According to the received execution function corresponding to the target object, the first state and the received command are passed as parameters to the execution function and called.
[0062] The first state is transformed into the second state, and the execution event corresponding to the execution function is obtained, that is, the second state and the execution event corresponding to the second state are obtained.
[0063] In one embodiment, the execution function described in step S104 above is:
[0064] f(dispatcher,command)=>Events
[0065] Among them, dispatcher is the scheduler, command is the command, and Events is the execution event, that is, the event generated by the command.
[0066] For example, if the first state continues to transfer 100 yuan, the execution event at this time is: transfer 100 yuan.
[0067] The second state at this time is: (1+2+3...+N+1)×100 yuan.
[0068] The above steps solve the problem of comprehensive information acquisition after the scheduler continues to have events: on the one hand, the state of the scheduler is updated in real time, and on the other hand, the events that occur in the scheduler are recorded in real time.
[0069] S105, calling an add event function to store the execution event in the database.
[0070] In one embodiment, the event adding function described in step S105 above is:
[0071] f(dispatcherId,en,Events)=>ack
[0072] Wherein, dispatcherId is the identifier of the dispatcher, en is the expected number of events, Events is the execution event, that is, the event generated by the command, and ack is a flag to confirm the successful addition.
[0073] In one embodiment, after the above step S105, the following steps are also included: receiving the expected number of events and execution events input by the user, adding the execution events to the event stream of the corresponding scheduler, and determining whether the number of events in the event stream is consistent with the expected number of events; if the number of events in the event stream is consistent with the expected number of events, determining that the persistent storage is successful; wherein the expected number of events is the sum of the historical event data and the number of execution events.
[0074] For example, receiving the expected event number E input by the user, adding the execution event to the event stream of the corresponding scheduler, and determining whether the event number M of the event stream is consistent with the expected event number E;
[0075] If the number of events M in the event stream is consistent with the expected number of events E, the persistent storage is determined to be successful; wherein the expected number of events is the sum of the number of historical event data N and the number of executed events K, that is, M=N+K.
[0076] The above steps fully record the events that occur in the scheduler, and define the conditions for successful persistent storage by the expected number of events. This has high computing efficiency and solves the cost problem of frequent computing.
[0077] The task scheduling in the prior art is mainly based on recording status, while steps S101-S105 overcome this technical defect and implement intelligent state management through a backtracking event algorithm, accurately recording the event process of how the scheduler evolves to the current state, saving important context information, and clearing obstacles for subsequent demand evolution, problem troubleshooting, and other tasks.
[0078] Example 2
[0079] See also Figure 2 , Figure 2 A flowchart of another method for constructing task scheduling provided by an embodiment of the present invention.
[0080] Specifically, the method for constructing task scheduling includes the following steps.
[0081] S201, receiving a processing instruction for a target object, and selecting a corresponding scheduler according to the processing instruction.
[0082] S202: Acquire historical event data of the scheduler from an event snapshot point according to the received event acquisition function.
[0083] The event snapshot point includes a snapshot, and the snapshot stores the current state of the scheduler; the event snapshot point is used to record the event position corresponding to the current state of the scheduler.
[0084] The above steps solve the problem that when the event stream of a scheduler contains a large number of events, performance issues may occur in the event acquisition function and the conversion function due to excessive data volume.
[0085] Furthermore, historical event data is obtained from event snapshot points, that is, the event snapshot mechanism is used to save snapshots of the scheduler state and its corresponding event positions. In this way, the conversion function can be backtracked from the corresponding snapshot point, and the number of events that need to be obtained is significantly reduced.
[0086] S203: Call a conversion function according to the historical event data to obtain a first state of the target object.
[0087] S204: According to the received execution function corresponding to the target object, the first state is changed to a second state, and an execution event corresponding to the execution function is obtained.
[0088] S205, calling an add event function to store the execution event in the database.
[0089] S206: If a new execution function of the target object is received, the new execution function is applied to the second state, the second state is transformed into a third state, and a new execution event is output.
[0090] In one embodiment, the execution function described in step S206 above is:
[0091] f(dispatcher,command)=>Events
[0092] Among them, dispatcher is the scheduler, command is the command, and Events is the execution event, that is, the event generated by the command.
[0093] For example, the second state is (1+2+3...+N+1)×100 yuan, and 200 yuan is continued to be transferred for the second state. The execution event at this time is: transfer 200 yuan.
[0094] The third state at this time is: (1+2+3…+N+1+2)×100 yuan.
[0095] S207, calling the add event function to persistently store the new execution event.
[0096] In one embodiment, the event adding function described in step 207 above is:
[0097] f(dispatcherId,en,Events)=>ack
[0098] Wherein, dispatcherId is the identifier of the dispatcher, en is the expected number of events, Events is the execution event, that is, the event generated by the command, and ack is a flag to confirm the successful addition.
[0099] In one embodiment, after the above step S207, the following steps are also included: receiving the expected number of events and execution events input by the user, adding the execution events to the event stream of the corresponding scheduler, and determining whether the number of events in the event stream is consistent with the expected number of events; if the number of events in the event stream is consistent with the expected number of events, determining that the persistent storage is successful; wherein the expected number of events is the sum of the historical event data and the number of execution events.
[0100] The above solution implements intelligent state management through the backtracking event algorithm, accurately recording the event process of how the scheduler evolves to the current state. On this basis, when the event stream of a scheduler contains a large number of events, the above solution uses the event snapshot mechanism to save the snapshot of the scheduler state and its corresponding event position, so as to start backtracking from the corresponding snapshot point, and the number of events that need to be obtained is also significantly reduced.
[0101] Example 3
[0102] See also Figure 3 Embodiment 3 of the present invention provides a block diagram of a device for constructing task scheduling, and the task scheduling device includes:
[0103] A selection unit 71, configured to receive a processing instruction for a target object and select a corresponding scheduler according to the processing instruction;
[0104] An event acquisition unit 72, configured to acquire historical event data of the scheduler from a database according to a received event acquisition function;
[0105] A conversion unit 73, configured to call a conversion function according to the historical event data to obtain a first state of the target object;
[0106] An execution unit 74, configured to transform the first state into a second state according to the received execution function corresponding to the target object, and obtain an execution event corresponding to the execution function;
[0107] The event adding unit 75 is used to call the event adding function to store the execution event in the database.
[0108] In one embodiment, the event acquisition function is:
[0109] f(dispatcherId,start,end)=>events
[0110] Where dispatcherId is the dispatcher identifier, start is the starting position, end is the ending position, and events is the corresponding event;
[0111] The scheduler identifier is an event storage form of the scheduler, and the corresponding event is an event occurring between a start position and an end position.
[0112] The conversion function is:
[0113] f(dispatcher,events)=>dispatcher
[0114] Among them, dispatcher is the scheduler, events is the corresponding event, and dispatcher is the first state.
[0115] The execution function is:
[0116] f(dispatcher,command)=>Events
[0117] Wherein, dispatcher is the dispatcher, command is the command, and Events is the event generated by the command;
[0118] The added event function is:
[0119] f(dispatcherId,en,Events)=>ack
[0120] Wherein, dispatcherId is the identifier of the dispatcher, en is the expected number of events, Events is the execution event, that is, the event generated by the command, and ack is a flag to confirm the successful addition.
[0121] The above scheme provides a device for constructing task scheduling, which can realize intelligent state management through a backtracking event algorithm, accurately record the event process of how the scheduler evolves to the current state, save important context information, and clear obstacles for subsequent demand evolution, problem troubleshooting and other tasks.
[0122] Example 4
[0123] See also Figure 4 Embodiment 4 of the present invention provides another block diagram of a device for constructing task scheduling, the task scheduling device comprising:
[0124] A selection unit 71, configured to receive a processing instruction for a target object and select a corresponding scheduler according to the processing instruction;
[0125] The event snapshot unit 76 is used to obtain historical event data from an event snapshot point; wherein the event snapshot point includes a snapshot, and the snapshot saves the current state of the scheduler; the event snapshot point is used to record the event position corresponding to the current state of the scheduler.
[0126] A conversion unit 73, configured to call a conversion function according to the historical event data to obtain a first state of the target object;
[0127] An execution unit 74, configured to transform the first state into a second state according to the received execution function corresponding to the target object, and obtain an execution event corresponding to the execution function;
[0128] The event adding unit 75 is used to call the event adding function to store the execution event in the database.
[0129] The new execution unit 77 is used to receive the new execution function of the target object, apply the new execution function to the second state, transform the second state into a third state, and output a new execution event.
[0130] The newly added event unit 78 is used to call the added event function to persistently store the newly executed event.
[0131] The above scheme provides another device for constructing task scheduling, which can realize intelligent state management through the backtracking event algorithm, and accurately record the event process of how the scheduler evolves to the current state. On this basis, when the event stream of a scheduler contains a large number of events, the above scheme uses the event snapshot mechanism to save the snapshot of the scheduler state and its corresponding event position, so as to start backtracking from the corresponding snapshot point, and the number of events that need to be obtained is also significantly reduced.
[0132] Example 5
[0133] like Figure 5 As shown, an embodiment of the present invention provides an electronic device, including a processor 111, a communication interface 112, a memory 113, and a communication bus 114, wherein the processor 111, the communication interface 112, and the memory 113 communicate with each other through the communication bus 114.
[0134] Memory 113, used for storing computer programs;
[0135] In one embodiment of the present invention, the processor 111 is used to implement the method provided by any one of the aforementioned method embodiments when executing the program stored in the memory 113 .
[0136] An embodiment of the present invention further provides a computer-readable storage medium having a computer program stored thereon, and when the computer program is executed by a processor, the steps of the method provided in any of the aforementioned method embodiments are implemented.
[0137] In summary, the task scheduling in the prior art is mainly based on recording status, which is unable to realize demand evolution and problem troubleshooting, and the present invention overcomes this technical defect.
[0138] The present invention realizes intelligent state management through a backtracking event algorithm, accurately records the event process of how the scheduler evolves to the current state, saves important context information, and clears obstacles for subsequent demand evolution, problem troubleshooting and other tasks.
[0139] It should be noted that, in this article, relational terms such as "first" and "second" are only used to distinguish one entity or operation from another entity or operation, and do not necessarily require or imply any such actual relationship or order between these entities or operations. Moreover, the terms "include", "comprise" or any other variants thereof are intended to cover non-exclusive inclusion, so that a process, method, article or device including a series of elements includes not only those elements, but also other elements not explicitly listed, or also includes elements inherent to such process, method, article or device. In the absence of further restrictions, the elements defined by the sentence "comprise a ..." do not exclude the existence of other identical elements in the process, method, article or device including the elements.
[0140] The above description is only a specific embodiment of the present invention, so that those skilled in the art can understand or implement the present invention. Various modifications to these embodiments will be apparent to those skilled in the art, and the general principles defined herein may be implemented in other embodiments without departing from the spirit or scope of the present invention. Therefore, the present invention will not be limited to the embodiments shown herein, but should conform to the widest scope consistent with the principles and novel features invented herein.
Claims
1. A method for constructing task scheduling, comprising: receiving a processing instruction for a target object, and selecting a corresponding scheduler according to the processing instruction; Acquire historical event data of the scheduler from a database according to the received acquisition event function; According to the historical event data, a conversion function is called to obtain a first state of the target object; According to the received execution function corresponding to the target object, the first state is changed to a second state, and an execution event corresponding to the execution function is obtained; Calling an add event function to store the execution event in the database; Wherein, the method further comprises: Receive the desired number of events input by the user and execute the events; Adding the execution event to the event stream of the corresponding scheduler, and determining whether the number of events in the event stream is consistent with the expected number of events; If the number of events in the event stream is consistent with the expected number of events, it is determined that the persistent storage is successful; wherein the expected number of events is the sum of the number of historical event data and the number of executed events.
2. The method according to claim 1, characterized in that: After calling the add event function and storing the execution event in the database, the method further includes: If a new execution function of the target object is received, the new execution function is applied to the second state, the second state is transformed into a third state, and a new execution event is output; The add event function is called to persistently store the new execution event.
3. The method according to claim 1, characterized in that The acquiring the historical event data of the scheduler from the database according to the received acquisition event function includes: The historical event data is obtained from an event snapshot point; the event snapshot point includes a snapshot, and the snapshot stores the current state of the scheduler; the event snapshot point is used to record the event position corresponding to the current state of the scheduler.
4. The method according to claim 1, characterized in that The event acquisition function is: f(dispatcherId,start,end)=>events Where dispatcherId is the dispatcher identifier, start is the starting position, end is the ending position, and events is the corresponding event; The scheduler identifier is an event storage form of the scheduler, and the corresponding event is an event occurring between a start position and an end position.
5. The method according to claim 4, characterized in that The conversion function is: f(dispatcher,events)=>dispatcher Among them, dispatcher is the scheduler, events is the corresponding event, and dispatcher is the first state.
6. The method according to claim 5, characterized in that The execution function is: f(dispatcher,command)=>Events Wherein, dispatcher is the dispatcher, command is the command, and Events is the event generated by the command; The added event function is: f(dispatcherId,en,Events)=>ack Wherein, dispatcherId is the identifier of the dispatcher, en is the expected number of events, Events is the execution event, that is, the event generated by the command, and ack is a flag to confirm the successful addition.
7. A device for constructing task scheduling, characterized in that: The task scheduling device comprises a unit for executing the method as claimed in any one of claims 1-6.
8. An electronic device, characterized in that: include: Memory, used to store computer programs; A processor, for implementing the steps of the method according to any one of claims 1 to 6 when executing a program stored in a memory.
9. A computer-readable storage medium having a computer program stored thereon, characterized in that: When the computer program is executed by a processor, the steps of the method according to any one of claims 1 to 6 are implemented.
Citation Information
Patent Citations
Compute services for a platform of services associated with a blockchain
WO2021165816A1