Merge "General purpose threadpool for the decision engine"
This commit is contained in:
commit
0366bb38d7
@ -0,0 +1,170 @@
|
|||||||
|
..
|
||||||
|
This work is licensed under a Creative Commons Attribution 3.0 Unported
|
||||||
|
License.
|
||||||
|
|
||||||
|
http://creativecommons.org/licenses/by/3.0/legalcode
|
||||||
|
|
||||||
|
==========================================
|
||||||
|
General purpose decision engine threadpool
|
||||||
|
==========================================
|
||||||
|
|
||||||
|
https://blueprints.launchpad.net/watcher/+spec/general-purpose-decision-engine-threadpool
|
||||||
|
|
||||||
|
Many I/O operations such as writing to disk or waiting for network responses
|
||||||
|
take a long amount of time. By leveraging parallelism the time taken to
|
||||||
|
perform such operations can be drastically reduced. The general purpose
|
||||||
|
threadpool for the decision engine will allow to perform methods in parallel,
|
||||||
|
thereby reducing the time required to perform these operations.
|
||||||
|
|
||||||
|
Problem description
|
||||||
|
===================
|
||||||
|
|
||||||
|
The general purpose threadpool will reduce the time it takes to perform certain
|
||||||
|
operations of the decision engine. Currently, the gathering of metrics or the
|
||||||
|
building of the data model can take large amounts of time proportionally for
|
||||||
|
example.
|
||||||
|
|
||||||
|
Use Cases
|
||||||
|
----------
|
||||||
|
|
||||||
|
- As a user I want the execution of an audit to be performed as quickly as
|
||||||
|
possible.
|
||||||
|
|
||||||
|
Proposed change
|
||||||
|
===============
|
||||||
|
|
||||||
|
Introduce a general purpose threadpool using the `futurist`_ library for which
|
||||||
|
end users can configure the amount of threads. This will introduce a new class
|
||||||
|
that uses a singular pattern so it can be used throughout the decision engine.
|
||||||
|
The threadpool will use the GreenThreadPoolExecutor as it does not conflict
|
||||||
|
with other threadpools used in the decision engine. The singleton will contain
|
||||||
|
several methods to simplify the submission of tasks and waiting for their
|
||||||
|
completion.
|
||||||
|
|
||||||
|
.. _futurist: https://docs.openstack.org/futurist/latest/
|
||||||
|
|
||||||
|
With the threadpool the building of the data model will be parallelized which
|
||||||
|
is done in three steps. First the calls to retrieve information about
|
||||||
|
aggregates and availability zones are executed in parallel. The information is
|
||||||
|
used to submit tasks to gather the information about each compute node.
|
||||||
|
Finally, using `futures`_ will allow to immediately submit a task to retrieve
|
||||||
|
the information about instances for a given compute node.
|
||||||
|
|
||||||
|
.. _futures: https://docs.python.org/dev/library/concurrent.futures.html
|
||||||
|
|
||||||
|
Alternatives
|
||||||
|
------------
|
||||||
|
|
||||||
|
A purpose build threadpool specific for building the data model. However, this
|
||||||
|
would mean that introducing parallelism in other parts of the decision engine
|
||||||
|
would again require the design and implementation of yet another threadpool.
|
||||||
|
|
||||||
|
Data model impact
|
||||||
|
-----------------
|
||||||
|
|
||||||
|
None
|
||||||
|
|
||||||
|
REST API impact
|
||||||
|
---------------
|
||||||
|
|
||||||
|
None
|
||||||
|
|
||||||
|
Security impact
|
||||||
|
---------------
|
||||||
|
|
||||||
|
None
|
||||||
|
|
||||||
|
Notifications impact
|
||||||
|
--------------------
|
||||||
|
|
||||||
|
None
|
||||||
|
|
||||||
|
Other end user impact
|
||||||
|
---------------------
|
||||||
|
|
||||||
|
None
|
||||||
|
|
||||||
|
Performance Impact
|
||||||
|
------------------
|
||||||
|
|
||||||
|
Overall the time take to perform audits should significantly decrease, however,
|
||||||
|
a large amount of threads could negatively impact external services. Because of
|
||||||
|
this the default amount of threads should be a relatively safe value for most
|
||||||
|
OpenStack infrastructures.
|
||||||
|
|
||||||
|
Other deployer impact
|
||||||
|
---------------------
|
||||||
|
|
||||||
|
Deployers should evaluate the amount of threads they want Watcher to use based
|
||||||
|
on the scale of their infrastructure.
|
||||||
|
|
||||||
|
Developer impact
|
||||||
|
----------------
|
||||||
|
|
||||||
|
None
|
||||||
|
|
||||||
|
Implementation
|
||||||
|
==============
|
||||||
|
|
||||||
|
Assignee(s)
|
||||||
|
-----------
|
||||||
|
|
||||||
|
Primary assignee:
|
||||||
|
<dantalion>
|
||||||
|
|
||||||
|
Work Items
|
||||||
|
----------
|
||||||
|
|
||||||
|
- Implement the threadpool singleton based on previous proof of concepts.
|
||||||
|
|
||||||
|
- Modify the method to build the data model to use the three step parallelism
|
||||||
|
as described.
|
||||||
|
|
||||||
|
- Implement relevant test cases to test the threadpool and the building of the
|
||||||
|
data model.
|
||||||
|
|
||||||
|
Dependencies
|
||||||
|
============
|
||||||
|
|
||||||
|
* futurist, A library maintained and developed by OpenStack.
|
||||||
|
|
||||||
|
|
||||||
|
Testing
|
||||||
|
=======
|
||||||
|
|
||||||
|
Both the behavior of the building of the data model as well as the threadpool
|
||||||
|
should be evaluated.
|
||||||
|
|
||||||
|
- The verifying of behavior for helper methods in the threadpool.
|
||||||
|
|
||||||
|
- The verifying of the completeness of the data model when build with
|
||||||
|
parallelization.
|
||||||
|
|
||||||
|
Documentation Impact
|
||||||
|
====================
|
||||||
|
|
||||||
|
The documentation will be updated to include usage examples that indicate to
|
||||||
|
other developers how to best use the threadpool. Additionally, typical use
|
||||||
|
cases in what situations this threadpool will be most useful will be provided.
|
||||||
|
|
||||||
|
|
||||||
|
References
|
||||||
|
==========
|
||||||
|
|
||||||
|
* `futurist`_
|
||||||
|
* `futures`_
|
||||||
|
|
||||||
|
.. _futurist: https://docs.openstack.org/futurist/latest/
|
||||||
|
.. _futures: https://docs.python.org/dev/library/concurrent.futures.html
|
||||||
|
|
||||||
|
History
|
||||||
|
=======
|
||||||
|
|
||||||
|
.. list-table:: Revisions
|
||||||
|
:header-rows: 1
|
||||||
|
|
||||||
|
* - Release Name
|
||||||
|
- Description
|
||||||
|
* - Ussuri
|
||||||
|
- Introduced
|
||||||
|
|
Loading…
Reference in New Issue
Block a user