Coder Social home page Coder Social logo

reactivemanifesto / reactivemanifesto Goto Github PK

View Code? Open in Web Editor NEW
611.0 40.0 174.0 574 KB

The Reactive Manifesto

Home Page: https://www.reactivemanifesto.org

License: Other

reactive reactive-programming distributed-systems asynchronous resilience scalability manifesto

reactivemanifesto's Introduction

The Reactive Manifesto

Organisations working in disparate domains are independently discovering patterns for building software that look the same. These systems are more robust, more resilient, more flexible and better positioned to meet modern demands.

These changes are happening because application requirements have changed dramatically in recent years. Only a few years ago a large application had tens of servers, seconds of response time, hours of offline maintenance and gigabytes of data. Today applications are deployed on everything from mobile devices to cloud-based clusters running thousands of multi-core processors. Users expect millisecond response times and 100% uptime. Data is measured in petabytes. Today's demands are simply not met by yesterday’s software architectures.

We believe that a coherent approach to systems architecture is needed, and we believe that all necessary aspects are already recognised individually: we want systems that are Responsive, Resilient, Elastic and Message Driven. We call these Reactive Systems.

Systems built as Reactive Systems are more flexible, loosely-coupled and scalable. This makes them easier to develop and amenable to change. They are significantly more tolerant of failure and when failure does occur they meet it with elegance rather than disaster. Reactive Systems are highly responsive, giving users effective interactive feedback.

Reactive Systems are:

  • Responsive: The system responds in a timely manner if at all possible. Responsiveness is the cornerstone of usability and utility, but more than that, responsiveness means that problems may be detected quickly and dealt with effectively. Responsive systems focus on providing rapid and consistent response times, establishing reliable upper bounds so they deliver a consistent quality of service. This consistent behaviour in turn simplifies error handling, builds end user confidence, and encourages further interaction.
  • Resilient: The system stays responsive in the face of failure. This applies not only to highly available, mission-critical systems — any system that is not resilient will be unresponsive after a failure. Resilience is achieved by replication, containment, isolation and delegation. Failures are contained within each component, isolating components from each other and thereby ensuring that parts of the system can fail and recover without compromising the system as a whole. Recovery of each component is delegated to another (external) component and high availability is ensured by replication where necessary. The client of a component is not burdened with handling its failures.
  • Elastic: The system stays responsive under varying workload. Reactive Systems can react to changes in the input rate by increasing or decreasing the resources allocated to service these inputs. This implies designs that have no contention points or central bottlenecks, resulting in the ability to shard or replicate components and distribute inputs among them. Reactive Systems support predictive, as well as Reactive, scaling algorithms by providing relevant live performance measures. They achieve elasticity in a cost-effective way on commodity hardware and software platforms.
  • Message Driven: Reactive Systems rely on asynchronous message-passing to establish a boundary between components that ensures loose coupling, isolation, and location transparency. This boundary also provides the means to delegate failures as messages. Employing explicit message-passing enables load management, elasticity, and flow control by shaping and monitoring the message queues in the system and applying back-pressure when necessary. Location-transparent messaging as a means of communication makes it possible for the management of failure to work with the same constructs and semantics across a cluster or within a single host. Non-blocking communication allows recipients to only consume resources while active, leading to less system overhead.

Large systems are composed of smaller ones and therefore depend on the Reactive properties of their constituents. This means that Reactive Systems apply design principles so these properties apply at all levels of scale, making them composable. The largest systems in the world rely upon architectures based on these properties and serve the needs of billions of people daily. It is time to apply these design principles consciously from the start instead of rediscovering them each time.

Sign the manifesto

reactivemanifesto's People

Contributors

arpontes avatar ben7th avatar bolshchikov avatar chech0x avatar dufgui avatar esfand-r avatar he-pin avatar hungaikev avatar ihostage avatar jboner avatar katezer avatar krahman avatar lespinsideg avatar manuelbernhardt avatar marcogalluzzi avatar matthurne avatar megazord avatar mjpt777 avatar nedbat avatar okapies avatar poum avatar projanen avatar qwefgh90 avatar radcortez avatar rasummer avatar rkuhn avatar sopel avatar stuarthalloway avatar ttulka avatar yaak avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

reactivemanifesto's Issues

Typo in German version, should be "September", not "Septempter"

It seems the publishing date is not part of the actual text, so I can't fix it in a PR. On the German version of the site it says

"Veröffentlicht am 16. Septempter 2014 (v2.0)"

The word for the ninth month of the year is spelled September, not Septempter.

clarify that Distribution vs. Simplicity is a trade-off that needs to be made consciously

We currently postulate that every system needs to value Resilience and Elasticity higher than simplicity or maintainability, but there are certainly many cases where avoiding the non-determinism that comes with distribution is more desirable than a few more 9’s in uptime. Most notably this is true for applications that are sufficiently available based on human intervention during office hours—internal services modeling business processes are an example.

Without diluting the point that if you are forced by your requirements designing according to the Reactive principles is our clearly preferred approach, we should add that this force is relative and may be outweighed on a case by case basis. Consequences include applying Reactive at a more coarse-grained granularity or foregoing it entirely—as a conscious and well-educated decision.

Event driven/centric is not bad and a message-driven-only system could be not resilient enough

Example: 2 endpoints. (E1 and E2)
Issue 1: E1 wants to talk to E2, but E2 its down.
MessageDrivenOnly: E1 will fail.
EventCentric: E1 will publish its desire as a durable event, and eventually E2 will get up and receive the payload, as a subscriber.

Issue 2: E2 needs all events that E1 published, but E2 was down for a long time.
MessageDriven: E2 can request historical messages from E1, but what about the new messages that E1 is emmiting while E2 is reading old messages? Back pressure is not allowed.
EventCentric: E2 gets all the events that happened E1, because E2 is always polling for new messages. E2 will be eventually consistent.

Afrikaans Translation

Hi, I have started with an Afrikaans translation.

Will issue a pull request soon if contributions are still welcome :)

Clarify that component boundaries are meant generically, not only for Software

The current text, especially of the Resilience part, is not clear enough on which level of abstraction or architectural granularity we mean, it can be misunderstood to prescribe exactly the Actor Model. While that model is a good fit for the software aspects—but by no means the only one!—we need to make it clear that hardware boundaries are equally important and that encapsulation of different services is a generic concern that can be addressed in several different ways.

Provide learning resources

I think motivation is good, but if we could create a wiki page or a learning resource page, which has correct content for guiding the motivated souls will be effective

WWW is filled with so many content on this, but I feel each puts forwards its own interpretation and confusing the last one we might have red

Brazilian portuguese title.

I don't believe "O Manifesto Reativo" is the best way to refer to this in brazilian portuguese. What you guys would think if the seme title was used on both portuguese versions, or that we used "O manifesto de sistemas reativos", like the spanish one?

Please consider accessibility at least when rendering the manifesto

The rendered copy (web and pdf) use a particularly low contrast font setting. Granted the Reactive Manifesto doesn't mention the idea that a system should be accessible but I feel that increasing the readability of the website would be a great service to your members and potential members. Reference 2, below gives a decent explanation of the concepts in 1.

References:

  1. https://www.w3.org/TR/WCAG21/#contrast-minimum
  2. https://webaim.org/articles/contrast/

Twitter account

Just created a twitter account for Reactive Manifesto (@activemanifesto) and hope to be of help by promoting the site and the great manifesto.

Broken link in Glossary: Component

The glossary entry for Component references "Parnas (1972)". The underlying link redirects to https://kilthub.cmu.edu/, instead of a specific paper.

I suspect that the reference is about "On the Criteria To Be Used in Decomposing Systems into Modules", which I found here:
https://www.win.tue.nl/~wstomv/edu/2ip30/references/criteria_for_modularization.pdf

There's a different report with that title on the kilthub site, but from 1971 rather than 1972:
https://kilthub.cmu.edu/articles/On_the_criteria_to_be_used_in_decomposing_systems_into_modules/6607958

I guess the stable reference would be this one: https://dl.acm.org/citation.cfm?id=361623m
but the ACM doesn't provide a free download of the paper.

Safari crash in "Sign the manifesto" on the web page

Version 6.0.5 (8536.30.1) on Mountain Lion (10.8.5), clicking the "Sign the manifesto" button causes Safari to unceremoniously crash - it instantly disappears. I signed the manifesto using Chrome, which worked flawlessly.

Here's some of the output that would go to Apple:

Process:         WebProcess [1682]
Path:            /System/Library/PrivateFrameworks/WebKit2.framework/WebProcess.app/Contents/MacOS/WebProcess
Identifier:      com.apple.WebProcess
Version:         8536 (8536.30.1)
Build Info:      WebKit2-7536030001000000~9
Code Type:       X86-64 (Native)
Parent Process:  ??? [1680]
User ID:         9900184

Date/Time:       2013-11-26 09:44:37.785 -0500
OS Version:      Mac OS X 10.8.5 (12F45)
Report Version:  10

Interval Since Last Report:          490191 sec
Crashes Since Last Report:           265424
Per-App Interval Since Last Report:  568886 sec
Per-App Crashes Since Last Report:   4
Anonymous UUID:                      

Crashed Thread:  0  Dispatch queue: com.apple.main-thread

Exception Type:  EXC_CRASH (SIGABRT)
Exception Codes: 0x0000000000000000, 0x0000000000000000

Application Specific Information:
Assertion failed: (s->stack->next != NULL), function CGGStackRestore, file Context/CGGStack.c, line 77.

Bundle controller class:
BrowserBundleController

Please list the major authors of the manifesto

It would be nice to know who wrote the Reactive Manifesto. I have heard some claim that this is just a vehicle for pushing people towards Akka, though I know that several non-Typesafe people have also contributed. Listing the major contributors would allow people to make up their own mind about whether this is a marketing exercise by one company or the consensus view of a broad range of specialists from across the industry. Greater transparency will either give more credence to the opinions therein or make it clear that this is mainly the work of some smart people in one or two companies. Either way, the community will benefit from that transparency.

I thought about doing a pull request based on the commit log, but I suspect a lot of the contribution has happened in emails and conversations rather than through GitHub. :)

Responsive, resilient, elastic are desired qualities whereas message-driven is a design approach

The characterization of reactive systems mixes two things:

  • Responsive, resilient, and elastic are desired quality attributes of a reactive system. The description is not enlightening. One can argue that those are desired qualities of general distributed systems.
  • Message-driven is the key design approach to be followed in reactive systems.

Overall, the quality attributes (responsive, resilient, elastic) are the result of employing a message-driven design.

My suggestion:

  • Describe reactive systems as systems that follow a message-driven approach, possibly adding some other constraints to be more specific.
  • Add a separate subsection to say what qualities well-designed reactive systems shall exhibit. In here you mention responsive, resilient, elastic. But you could also add: runtime autonomy and loose-coupling.
  • Acknowledge that tradeoffs exist.

improve text readability

Hi,

I'd like to contribute some css change that potentially could improve the reading experience of the reactive manifesto, but not sure where I can make a pull-request to.

Any hint?


#chargedByZenHub

A grammar question

Hi,
In first sentence of the manifesto, what does "look the same" refer to? "software" or "patterns"?
thanks.

Need Huge "We Are Reactive" img (svg)

I'm trying to promote Reactivity at work, and want to print out a banner. Is it possible for you guys to host original svg/psd files as well?

(Specifically I'm wanting an orange right)

'reactivemanifesto' ribbon has size issues on mobile browsers

For instance if you tried to read Play documentation on the phone the ribbon will be shield big portion of useful text - I guess that this ribbon should very tiny on small screen sizes.

tested on: ios 7 - safari, chrome ; android 4.0.4 chrome

Visual for REACTIVE manifesto adoption needed

Hi all.
To arg about REACTIVE approach and it's adoption by people, I think it will be a good idea to represent that in a simple graphic.
We have actualy 16700 signed people but no idea of evolution of this number.
I think it wil be easy with the date and the number of signing people at this date.
Regards
Nico

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.