|
6 年之前 | |
---|---|---|
.. | ||
src | 6 年之前 | |
README.md | 6 年之前 | |
benchmark_config.json | 6 年之前 | |
configuration.png | 7 年之前 | |
officefloor-micro.dockerfile | 6 年之前 | |
officefloor-netty.dockerfile | 6 年之前 | |
officefloor-rapidoid.dockerfile | 6 年之前 | |
officefloor-raw.dockerfile | 6 年之前 | |
officefloor-spring_data.dockerfile | 6 年之前 | |
officefloor-thread_affinity.dockerfile | 6 年之前 | |
officefloor-tpr.dockerfile | 6 年之前 | |
officefloor.dockerfile | 6 年之前 |
OfficeFloor provides true inversion of control.
Inversion of Control = Dependency Injection + Continuation Injection + Thread Injection
More information can be found at http://officefloor.net
OfficeFloor completes inversion of control by adding two new paradigms:
In doing this, OfficeFloor is capable of running different threading models (e.g. both asynchronous single threaded and synchronous multi-threaded). In actual fact, OfficeFloor opens up mixing the threading models within the application and even introduces ability for taking advantage of thread affinity to CPUs.
This follows OfficeFloor modeling people in an office environment. As per the paper OfficeFloor: using office patterns to improve software design ( free download here ), OfficeFloor follows:
This allows OfficeFloor to better align to how business processes actually work:
In other words, people think/behave synchronously but organise asynchronously. Hence, both thread models are in play in modelling business processes. Furthermore, OfficeFloor makes development of asynchronous applications easier. This is achieved by allowing the developer to avoid asynchronous coding by having synchronous functions co-ordinated asynchronously (just like workers above).
Further to this, graphical configuration is used. The configuration for the officefloor benchmark test is the following:
OfficeFloor can use different HTTP server components:
Having these comparisons allows developers to see the trade-offs in using different HTTP components to handle HTTP request servicing.
Note: OfficeFloor's web plugins are called WoOF (Web on OfficeFloor).
As mentioned, OfficeFloor uses different threading models. It does not inherit the threading model imposed by the HTTP component. Hence, there are various threading models tested to see trade-offs:
Note: the OfficeFloor team are working with PostgreSql ADBA for asynchronous database interaction via asynchronous threading model.
While much focus is on HTTP handling, performance also is impacted by database interaction. The above tests use raw SQL queries to provide optimised through put. However, in "real world" applications ORMs are typically used:
officefloor-spring_data (with possibly officefloor-netty incorporated) is likely representative of application development, as provides the mature easier abstractions for the developer to work with (and less code to managed). However, the above tests show the trade-off costs in performance for the easier development.
OfficeFloor is targeted at cloud and SOA/micro-service environments. In these environments, applications do not operate in isolation with a single database. Applications need to interact with multiple other services that result in:
Furthermore, OfficeFloor handles this by using separate thread pools per downstream systems. This way if a down stream system goes slow, only threads of that thread pool tie up. Requests using other downstream resources continue to be serviced by the separated thread pools.
This leads to a more robust and responsive experience for the user.
Unfortunately, benchmark test coverage is yet to highlight this advantage of OfficeFloor. However, if OfficeFloor can not perform as a typical web application, this robustness and responsiveness is mute against the sheer performance capabilities of frameworks managed by cloud elastic scale solutions.