Fix typos and change some grammatical constructions
This commit is contained in:
@@ -2,8 +2,8 @@
|
||||
title: "ADR"
|
||||
ring: assess
|
||||
quadrant: methods-and-patterns
|
||||
|
||||
---
|
||||
|
||||
Architecture Decision Records
|
||||
|
||||
ADR is a lightweight documentation of important architecture decisions taken by the team.
|
||||
|
||||
@@ -2,32 +2,19 @@
|
||||
title: "Akka Streams"
|
||||
ring: assess
|
||||
quadrant: languages-and-frameworks
|
||||
|
||||
---
|
||||
|
||||
In our backend services, we frequently encounter the task to transform data
|
||||
coming from and uploading to external sources and services.
|
||||
In our backend services, we frequently encounter the task to transform data coming from and uploading to external sources and services.
|
||||
|
||||
Building more complex data transformation processes with Akka Actors has proven
|
||||
very difficult for us in the past.
|
||||
Building more complex data transformation processes with Akka Actors has proven very difficult for us in the past.
|
||||
|
||||
Seeing this data as a stream of elements could allow handling them piece by
|
||||
piece and only keeping as much of the data in-process as can currently be
|
||||
handled.
|
||||
Seeing this data as a stream of elements could allow handling them piece by piece and only keeping as much of the data in-process as can currently be handled.
|
||||
|
||||
[Akka Streams](http://doc.akka.io/docs/akka/current/scala/stream/index.html) is
|
||||
a [Reactive Streams](http://www.reactive-streams.org/) implementation that
|
||||
provides a very end-user friendly API for setting up streams for data
|
||||
processing that are bounded in resource usage and efficient. It uses the Akka
|
||||
Actor Framework to execute these streams in an asynchronous and parallel
|
||||
fashion exploiting today's multi-core architectures without having the user to
|
||||
interact with Actors directly. It handles things such as message resending in
|
||||
failure cases and preventing message overflow. It is also interoperable with
|
||||
other Reactive Streams implementations.
|
||||
[Akka Streams](http://doc.akka.io/docs/akka/current/scala/stream/index.html) is a [Reactive Streams](http://www.reactive-streams.org/) implementation that provides a very end-user friendly API for setting up streams for data processing that are bounded in resource usage and efficient.
|
||||
It uses the Akka Actor Framework to execute these streams in an asynchronous and parallel fashion exploiting today's multi-core architectures without having the user to interact with Actors directly.
|
||||
It handles things such as message resending in failure cases and preventing message overflow. It is also interoperable with other Reactive Streams implementations.
|
||||
|
||||
Our first trials with Akka Streams were promising but we haven't yet implemented
|
||||
complex services with it.
|
||||
Our first trials with Akka Streams were promising but we haven't yet implemented complex services with it.
|
||||
|
||||
We will continue looking into it together with the
|
||||
[Alpakka](/languages-and-frameworks/alpakka.html) Connectors for integration
|
||||
We will continue looking into it together with the [Alpakka](/languages-and-frameworks/alpakka.html) Connectors for integration
|
||||
work.
|
||||
|
||||
@@ -2,18 +2,10 @@
|
||||
title: "Alpakka"
|
||||
ring: assess
|
||||
quadrant: languages-and-frameworks
|
||||
|
||||
---
|
||||
|
||||
When using [Akka Streams](/languages-and-frameworks/akka-streams.html) to build
|
||||
reactive data transformation services you usually need to connect to several
|
||||
different services such as FTP, S3 buckets, AMQP brokers or different databases.
|
||||
When using [Akka Streams](/languages-and-frameworks/akka-streams.html) to build reactive data transformation services you usually need to connect to several services such as FTP, S3 buckets, AMQP brokers or different databases.
|
||||
|
||||
[Alpakka](https://developer.lightbend.com/docs/alpakka/current/) provides
|
||||
integration building blocks for Akka Streams to access these services in a
|
||||
reactive fashion and contains transformations for working with XML, CSV or
|
||||
JSON structured data.
|
||||
[Alpakka](https://developer.lightbend.com/docs/alpakka/current/) provides integration building blocks for Akka Streams to access these services in a reactive fashion and contains transformations for working with XML, CSV or JSON structured data.
|
||||
|
||||
Combined, Akka Streams and Alpakka enable us to build small reactive
|
||||
integration services with minimal resource consumption and good performance, and
|
||||
are a good alternative to larger ESB solutions or integration tools.
|
||||
Combined, Akka Streams and Alpakka enable us to build small reactive integration services with minimal resource consumption and good performance, and are a good alternative to larger ESB solutions or integration tools.
|
||||
|
||||
@@ -2,16 +2,14 @@
|
||||
title: "Angular"
|
||||
ring: trial
|
||||
quadrant: languages-and-frameworks
|
||||
|
||||
---
|
||||
In addition to numerous major upgrades from version 2 to 5, which often needed a "hands-on" approach, a lot has happened in the Angular
|
||||
ecosystem in 2017. Specifically, the improvements in the HTTP-Client, which now requires less coding effort. Or
|
||||
the vast improvements on angular.cli such as aot (ahead of time compile) for faster rendering, fewer requests and
|
||||
much smaller builds, to just name the most important ones.
|
||||
|
||||
We have achieved particularly good results using Angular in large and medium-size projects. Actually,
|
||||
it's our framework-of-choice in our telecommunication sector teams as a single-page application framework (SPA) for microservice front
|
||||
ends.
|
||||
In addition to numerous major upgrades from version 2 to 5, which often needed a "hands-on" approach, a lot has happened in the Angular ecosystem in 2017.
|
||||
Specifically, the improvements in the HTTP-Client, which now requires less coding effort.
|
||||
Or the vast improvements on angular.cli such as aot (ahead of time compile) for faster rendering, fewer requests and much smaller builds, to just name the most important ones.
|
||||
|
||||
We have achieved particularly good results using Angular in large and medium-size projects.
|
||||
Actually, it's our framework-of-choice in our telecommunication sector teams as a single-page application framework (SPA) for microservice front ends.
|
||||
|
||||
The convenient scaffolding of unit- and end-to-end-tests provides a quality-driven workflow.
|
||||
Also, the module- and component architecture helps to keep the codebase understandable end maintainable.
|
||||
|
||||
@@ -2,10 +2,7 @@
|
||||
title: "Artifactory"
|
||||
ring: adopt
|
||||
quadrant: platforms-and-aoe-services
|
||||
|
||||
---
|
||||
|
||||
Artifactory is now used in every newly started project at AOE and plays a
|
||||
central role as an artifact repository for libraries, applications and docker
|
||||
images. While cleanup is still an issue, we recommend the adoption of an
|
||||
artifact repository in all our projects.
|
||||
Artifactory is now used in every newly started project at AOE and plays a central role as an artifact repository for libraries, applications and docker images.
|
||||
While cleanup is still an issue, we recommend the adoption of an artifact repository in all our projects.
|
||||
|
||||
@@ -2,7 +2,6 @@
|
||||
title: "AsciiDoc"
|
||||
ring: assess
|
||||
quadrant: tools
|
||||
|
||||
---
|
||||
|
||||
AsciiDoc is a [lightweight markup language](https://en.wikipedia.org/wiki/Lightweight_markup_language) such as Markdown.
|
||||
|
||||
@@ -2,7 +2,6 @@
|
||||
title: "Axure"
|
||||
ring: trial
|
||||
quadrant: tools
|
||||
|
||||
---
|
||||
|
||||
[Axure](https://www.axure.com/) is a tool that enables the creation of flowcharts, wireframes, mockups, user journeys and more.
|
||||
|
||||
@@ -4,7 +4,5 @@ ring: adopt
|
||||
quadrant: languages-and-frameworks
|
||||
---
|
||||
|
||||
We have been using babel for some time now. Since we have started using it, we don't have to
|
||||
struggle with unimplemented features of ECMAScript. In this regard, JavaScript is
|
||||
JavaScript, no matter what browser you are using. We we strongly recommend
|
||||
using Babel or similar solutions (e.g. TypeScript).
|
||||
We have been using babel for some time now. Since we have started using it, we don't have to struggle with unimplemented features of ECMAScript.
|
||||
In this regard, JavaScript is JavaScript, no matter what browser you are using. We strongly recommend using Babel or similar solutions (e.g. TypeScript).
|
||||
|
||||
@@ -12,6 +12,6 @@ Blameless Post Mortems provide a concept of dealing with failures that inevitabl
|
||||
|
||||
Based on trust, and under the assumption that every person involved had good intentions to do the best-possible job given the information at hand, Blameless Post Mortems provide an opportunity to continuously improve the quality of software and infrastructure and the processes to deal with critical situations.
|
||||
|
||||
The post mortem documentation usually consists of both a timeline of the events leading to an incident and the steps taken to its remediation, as well as future actions and learnings for increasing reslience and stability of our services.
|
||||
The post mortem documentation usually consists of both a timeline of the events leading to an incident and the steps taken to its remediation, as well as future actions and learnings for increasing resilience and stability of our services.
|
||||
|
||||
At AOE, we strive to conduct a Blameless Post Mortem meeting after every user-visible incident.
|
||||
|
||||
@@ -2,7 +2,6 @@
|
||||
title: "CRC Games"
|
||||
ring: assess
|
||||
quadrant: methods-and-patterns
|
||||
|
||||
---
|
||||
|
||||
Class Responsibility Collaboration Card Games are a method to discuss and align the software design - especially useful for object-oriented software.
|
||||
@@ -10,7 +9,7 @@ Class Responsibility Collaboration Card Games are a method to discuss and align
|
||||
A proper software design is one of the most important things to ensure the sucess and the maintainability of your software.
|
||||
Especially for iterative development methods, where you work on a software task by task, it is important to have designs sessions that also look forward to the next iterations and the conceptional whole.
|
||||
|
||||
And for software design to be sucessfull, it is very important that everybody (in the team) has the same understanding of the design and stands behind it.
|
||||
And for software design to be successful, it is very important that everybody (in the team) has the same understanding of the design and stands behind it.
|
||||
|
||||
CRC sessions help to design and align the high-level object design and collaboration of your system with the whole team. During such sessions new team members can learn from the experience and explanations of tropers.
|
||||
|
||||
@@ -24,15 +23,11 @@ This is how we often conduct a CRC Session:
|
||||
* Put the most promising ones on Post-its. (You can add more at any time)
|
||||
* CRC session:
|
||||
* 1 or 2 people stand up and try to explain the scenario with the help of the classes.
|
||||
* This is similar to explaining a sequence diagramm and the cards are put on the table from left to right. During or after this, you can discuss design decisions and alternatives with the team.
|
||||
* This is similar to explaining a sequence diagram and the cards are put on the table from left to right. During or after this, you can discuss design decisions and alternatives with the team.
|
||||
* After this, someone else can stand up and present a potential alternative sequence.
|
||||
* Once the team is aligned on a version they want to implement, it makes sense that it is repeated by different persons. Being exact is very important and avoids the situation where people can have an individual understanding of the model. The model and the collaboration lives in the heads of the people in the team – therefore it is important that everyone understands it the same way.
|
||||
* Closing:
|
||||
* We are often not too enthusiatic about adding a list of "collaborators" to the cards, since the sequence explains this very well.
|
||||
* We are often not too enthusiastic about adding a list of "collaborators" to the cards, since the sequence explains this very well.
|
||||
* So just take a picture and document the result somewhere, so that you can review the status for the next CRC session.
|
||||
* Maybe some decisions are worth being documented in your [Architecture decision records](/methods-and-patterns/adr.html)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -2,7 +2,6 @@
|
||||
title: "Docker"
|
||||
ring: adopt
|
||||
quadrant: platforms-and-aoe-services
|
||||
|
||||
---
|
||||
|
||||
Docker has pulled off very quickly and we updated it to "adopt".
|
||||
@@ -2,8 +2,8 @@
|
||||
title: "Elasticsearch"
|
||||
ring: adopt
|
||||
quadrant: platforms-and-aoe-services
|
||||
|
||||
---
|
||||
|
||||
We are continuing to use Elasticsearch successfully in [Searchperience®] and have benefited from the aggregation features for related use cases such as rendering category trees.
|
||||
We are also using Elasticsearch for some microservices as our persistence solution.
|
||||
|
||||
|
||||
@@ -2,9 +2,7 @@
|
||||
title: "Gatling"
|
||||
ring: adopt
|
||||
quadrant: tools
|
||||
|
||||
---
|
||||
|
||||
Gatling is now the de-facto tool of choice for load testing in all of our
|
||||
projects, having superseded JMeter completely. We therefore moved it to the
|
||||
**Adopt** level.
|
||||
Gatling is now the de-facto tool of choice for load testing in all of our projects, having superseded JMeter completely.
|
||||
We therefore moved it to the **Adopt** level.
|
||||
@@ -4,9 +4,9 @@ ring: assess
|
||||
quadrant: tools
|
||||
---
|
||||
|
||||
Until now, we have been using [Jenkins](https://jenkins.io/) for almost every single task that we have automated. With [Gitlab CI](https://about.gitlab.com/features/gitlab-ci-cd/) on the market, we have a number of new possibilities.
|
||||
Until now, we have been using [Jenkins](https://jenkins.io/) for almost every single task that we have automated. With [GitLab CI](https://about.gitlab.com/features/gitlab-ci-cd/) on the market, we have a number of new possibilities.
|
||||
|
||||
Some of the highlights are:
|
||||
Some highlights are:
|
||||
|
||||
* Multi-platform – you can execute builds on Unix, Windows, OSX, and any other platform that supports Go.
|
||||
* Multi-language – build scripts are command-line driven and work with Java, PHP, Ruby, C and any other language.
|
||||
|
||||
@@ -4,10 +4,8 @@ ring: trial
|
||||
quadrant: tools
|
||||
---
|
||||
|
||||
[Gitlab](https://about.gitlab.com/) provides nearly the same feature set as [Github](https://github.com/), but at a lower price. It also provides the possibility of hosting iternally, which is essential for us.
|
||||
[Gitlab](https://about.gitlab.com/) provides nearly the same feature set as [Github](https://github.com/), but at a lower price. It also provides the possibility of hosting internally, which is essential for us.
|
||||
|
||||
We are migrating more and more repositories from [gitolite](http://gitolite.com/gitolite/index.html), even from SVN to gitlab, as it provides a more stable and user friendly interface.
|
||||
We are migrating more and more repositories from [gitolite](http://gitolite.com/gitolite/index.html), even from SVN to gitlab, as it provides a more stable and user-friendly interface.
|
||||
|
||||
Gitlab also makes user/permission handling easier than our old gitolite. We don't need the IT team every time a new repository needs to be set up.
|
||||
|
||||
|
||||
|
||||
@@ -2,7 +2,6 @@
|
||||
title: "Go / Golang"
|
||||
ring: trial
|
||||
quadrant: languages-and-frameworks
|
||||
|
||||
---
|
||||
|
||||
We have moved Go to Trial because multiple teams have used Go with success for different services and tools.
|
||||
|
||||
@@ -2,13 +2,12 @@
|
||||
title: "GRPC"
|
||||
ring: assess
|
||||
quadrant: languages-and-frameworks
|
||||
|
||||
---
|
||||
|
||||
gRPC, "A high-performance, Open Source, universal RPC framework," is a framework to easily connect clients and servers in an RPC setup.
|
||||
gRPC was initially built at Google, and uses protobuf service definitions for method and payload specification.
|
||||
Essentially, this makes it possible to define methods that a server exposes, with either a single payload or an incoming stream - either as a single response or a stream of responses.
|
||||
The definition itself is carried out with the help of protobuf to define message types and method signatures, and then client and server interfaces are compiled for the language(s) you want. Currently there is support for languages such as C++, Java, Python, Go and many more.
|
||||
The definition itself is carried out with the help of protobuf to define message types and method signatures, and then client and server interfaces are compiled for the language(s) you want. Currently, there is support for languages such as C++, Java, Python, Go and many more.
|
||||
The shared language-neutral protobuf definition allows you to create all code for all languages automatically and helps with the interoperability of different systems.
|
||||
|
||||
From a technical point of view, gRPC uses HTTP/2 as a transport, directly benefitting from the default TLS encryption.
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
title: "HAL / HATEOAS"
|
||||
ring: trial
|
||||
quadrant: methods-and-patterns
|
||||
|
||||
---
|
||||
|
||||
We still recommend the usage of HAL and HATEOAS.
|
||||
|
||||
But, depending on the resource structure, there are some pitfalls to be aware of:
|
||||
|
||||
@@ -2,7 +2,6 @@
|
||||
title: "Helm"
|
||||
ring: trial
|
||||
quadrant: tools
|
||||
|
||||
---
|
||||
|
||||
For managing deployments within Kubernetes we use Helm, which makes templating Kubernetes configuration files super easy (also known as Helm charts).
|
||||
|
||||
@@ -2,12 +2,9 @@
|
||||
title: "Invision"
|
||||
ring: trial
|
||||
quadrant: tools
|
||||
|
||||
---
|
||||
|
||||
Invision is an online tool used to work and collaborate on design and prototypes and to share them between clients and the team.
|
||||
|
||||
We use it in many projects now to present prototypes and designs and it helps in understanding the planned user experience.
|
||||
Also, we use this directly as a reference from the user stories to help the development teams in understanding and implementing the right frontend and backend functionalities.
|
||||
|
||||
|
||||
|
||||
@@ -2,7 +2,6 @@
|
||||
title: "Jest"
|
||||
ring: adopt
|
||||
quadrant: tools
|
||||
|
||||
---
|
||||
|
||||
Updated to "adopt".
|
||||
@@ -3,8 +3,9 @@ title: "Keycloak"
|
||||
ring: adopt
|
||||
quadrant: tools
|
||||
---
|
||||
|
||||
Most distributed systems still face a growing demand for user management, authentication, authorization and Single sign-on. In light of a growing security demand and specialization, the Open Source project JBoss Keycloak is a perfect match.
|
||||
|
||||
Keyloak has been a growing project from the outset and has a strong community. Keyloak is based on standards such as OAuth2, OIDC and SAML2. Securing a distributed system is supported by adapters, which are provided by Keycloak developers for different technology stacks. If there is no adapter for your technology stack, an integration on the protocol level with a library is simple. Many configurable features require no coding in the integrated projects. The required configuration is managed via code and promoted as usual.
|
||||
Keycloak has been a growing project from the outset and has a strong community. Keycloak is based on standards such as OAuth2, OIDC and SAML2. Securing a distributed system is supported by adapters, which are provided by Keycloak developers for different technology stacks. If there is no adapter for your technology stack, an integration on the protocol level with a library is simple. Many configurable features require no coding in the integrated projects. The required configuration is managed via code and promoted as usual.
|
||||
|
||||
We use Keycloak in our OM3 suite for several authentication-related use cases – such as user management for system users and Single sign-on for customers. The OAuth access tokens can be used to secure APIs that access sensitive information. In addition, Keycloak is part of the AOE infrastructure and helps in securing the various services to support employees and customers.
|
||||
|
||||
@@ -2,7 +2,6 @@
|
||||
title: "Kubernetes"
|
||||
ring: adopt
|
||||
quadrant: platforms-and-aoe-services
|
||||
|
||||
---
|
||||
|
||||
Kubernetes has developed into the quasi-standard for container orchestration: Nearly every cloud provider provides managed Kubernetes, and even Docker Enterprise uses Kubernetes.
|
||||
|
||||
@@ -2,10 +2,9 @@
|
||||
title: "Microservices"
|
||||
ring: adopt
|
||||
quadrant: methods-and-patterns
|
||||
|
||||
---
|
||||
|
||||
We continue to belief in the microservices concept and its related patterns and best practices. However, it's worth mentioning that we we had to learn some lessons when it came to resilient thinking and deployment-related dependencies between microservices.
|
||||
We continue to belief in the microservices concept and its related patterns and best practices. However, it's worth mentioning that we had to learn some lessons when it came to resilient thinking and deployment-related dependencies between microservices.
|
||||
|
||||
We feel that our microservice-based applications are more robust than monolithic ones have been. Thanks to the
|
||||
split of the overall complexity into multiple services, new employees or team members are becoming productive within days or a few weeks.
|
||||
@@ -13,4 +12,3 @@ split of the overall complexity into multiple services, new employees or team me
|
||||
In order to get microservices right and to benefit from the advantages, there is a lot more required.
|
||||
The following "pyramid of need" for microservices shows this:
|
||||

|
||||
|
||||
|
||||
@@ -2,15 +2,14 @@
|
||||
title: "PACT"
|
||||
ring: trial
|
||||
quadrant: tools
|
||||
|
||||
---
|
||||
|
||||
PACT (http://pact.io/) is a family of frameworks that provides support for *Consumer Driven Contract testing* accross different langauages and frameworks.
|
||||
PACT (http://pact.io/) is a family of frameworks that provides support for *Consumer Driven Contract testing* across different languages and frameworks.
|
||||
|
||||
Consumer Driven Contract testing is a pattern for testing interfaces/boundaries between services.
|
||||
|
||||
It allows "consumers" to run tests against a defined Mock and record the defined interactions (=PACT).
|
||||
It puts "providers" in the position to run the PACT tests inside theire Continuous Integration Pipelines, so that the provider knows if he might break any consumers.
|
||||
It puts "providers" in the position to run the PACT tests inside their Continuous Integration Pipelines, so that the provider knows if he might break any consumers.
|
||||
|
||||
This approach makes sense in organisations where teams collaborate more closely (See [Strategic Domain Driven Design](/methods-and-patterns/strategic-domain-driven-design.html) ), e.g. to build [Microservice oriented architectures](/methods-and-patterns/microservices.html)
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@ quadrant: methods-and-patterns
|
||||
|
||||
---
|
||||
|
||||
Ports and Adapters is an architecture or layering approach for software design. As with other layering approaches, it seperates different concerns in different layers, where dependencies are only allowed from the outside to the inside.
|
||||
Ports and Adapters is an architecture or layering approach for software design. As with other layering approaches, it separates different concerns in different layers, where dependencies are only allowed from the outside to the inside.
|
||||
|
||||
We use "ports and adapters" with success for (larger) applications, which contain certain business logic and/or provide several ways to access the services.
|
||||
We often use the approach hand-in-hand with Domain Driven Design. In comparison with other layering patterns (e.g. layered architecture) it allows you to have a true technology-free core (domain) model. Why? Because, with the concept of "secondary ports" (=interfaces), it inverts the control and allows outer layers to provide adapters (=implementations of the defined interface).
|
||||
|
||||
@@ -2,7 +2,6 @@
|
||||
title: "Puppet Environments"
|
||||
ring: trial
|
||||
quadrant: platforms-and-aoe-services
|
||||
|
||||
---
|
||||
|
||||
Puppet Environments has proven to work well for our projects using Puppet.
|
||||
|
||||
@@ -4,8 +4,7 @@ ring: adopt
|
||||
quadrant: languages-and-frameworks
|
||||
---
|
||||
|
||||
The past months have shown that React is still a great fit for us for frontend-heavy
|
||||
applications. With its rewritten core in version 16, Facebook shows how
|
||||
important this framework is for them. Therefore, Facebook is investing a lot of effort into React and a
|
||||
healthy community. In addition, we **REALLY** enjoy writing React
|
||||
components – so much so, that we have to move this library into **adopt**!
|
||||
The past months have shown that React is still a great fit for us for frontend-heavy applications.
|
||||
With its rewritten core in version 16, Facebook shows how important this framework is for them.
|
||||
Therefore, Facebook is investing a lot of effort into React and a healthy community.
|
||||
In addition, we **REALLY** enjoy writing React components – so much so, that we have to move this library into **adopt**!
|
||||
|
||||
@@ -2,33 +2,17 @@
|
||||
title: "Reactive Programming"
|
||||
ring: trial
|
||||
quadrant: methods-and-patterns
|
||||
|
||||
---
|
||||
|
||||
Classic (web-) applications typically consist of transactions that submit
|
||||
large forms to the server side, which then processes these and, in response, returns HTML
|
||||
for the browser to render. Today's applications have more and more
|
||||
fine-grained 'real-time'-like aspects: A simple modification of a form field
|
||||
could trigger a complete roundtrip to the server including other services and
|
||||
persistence. Naturally, all of these transactions should respect the
|
||||
expectations of a user who wants a highly interactive application.
|
||||
Classic (web-)applications typically consist of transactions that submit large forms to the server side, which then processes these and, in response, returns HTML for the browser to render.
|
||||
Today's applications have more and more fine-grained 'real-time'-like aspects: A simple modification of a form field could trigger a complete round trip to the server including other services and persistence.
|
||||
Naturally, all of these transactions should respect the expectations of a user who wants a highly interactive application.
|
||||
|
||||
"Reactive Programming" tries to provide an answer to the challanges mentioned above
|
||||
by raising the level of abstraction. This allows you to focus on the stream of
|
||||
events that make up your business logic in a responsive, asynchronous fashion.
|
||||
"Reactive Programming" tries to provide an answer to the challenges mentioned above by raising the level of abstraction.
|
||||
This allows you to focus on the stream of events that make up your business logic in a responsive, asynchronous fashion.
|
||||
|
||||
There are various descriptions of what Reactive Programming actually is - at
|
||||
the most general level it is programming with asynchronous data streams and
|
||||
contains tools to create, manipulate, combine and filter these streams. Under the term
|
||||
"Reactive Programming", we summarize the principles and implementations that
|
||||
underlie [ReactiveX](http://reactivex.io/) and the [Reactive
|
||||
Manifesto](https://www.reactivemanifesto.org/).
|
||||
There are various descriptions of what Reactive Programming actually is - at the most general level it is programming with asynchronous data streams and contains tools to create, manipulate, combine and filter these streams.
|
||||
Under the term "Reactive Programming", we summarize the principles and implementations that underlie [ReactiveX](http://reactivex.io/) and the [Reactive Manifesto](https://www.reactivemanifesto.org/).
|
||||
|
||||
"Reactive Programming" is employed in many of our services – frontend and
|
||||
backend – but not always as an explicitly choosen pattern. As different
|
||||
plattforms have different means to tackle this style of programming, we choose
|
||||
to include "Reactive Programming" as a general Method and Patterns Item in
|
||||
addition to concrete libraries and APIs such as
|
||||
[Rx.JS](languages-and-frameworks/rxjs.html) or [Akka
|
||||
Streams](/languages-and-frameworks/akka-streams.html) to highlight the
|
||||
importance of the approach in general.
|
||||
"Reactive Programming" is employed in many of our services – frontend and backend – but not always as an explicitly chosen pattern.
|
||||
As different platforms have different means to tackle this style of programming, we choose to include "Reactive Programming" as a general Method and Patterns Item in addition to concrete libraries and APIs such as [Rx.JS](languages-and-frameworks/rxjs.html) or [Akka Streams](/languages-and-frameworks/akka-streams.html) to highlight the importance of the approach in general.
|
||||
|
||||
@@ -2,7 +2,6 @@
|
||||
title: "Scala Lang"
|
||||
ring: adopt
|
||||
quadrant: languages-and-frameworks
|
||||
|
||||
---
|
||||
|
||||
Scala is used in many projects at AOE. We have therefore moved it to the **adopt** level.
|
||||
|
||||
@@ -2,7 +2,6 @@
|
||||
title: "Self-service infrastructure"
|
||||
ring: assess
|
||||
quadrant: methods-and-patterns
|
||||
|
||||
---
|
||||
|
||||
With growing teams, growing projects and growing infrastructures, we decided to follow the "You build it, you run it" approach, and when we started to run Kubernetes, where we have a great abstraction layer between infrastructure and applications, we decided to make the developer teams write their own Helm charts.
|
||||
|
||||
@@ -2,7 +2,6 @@
|
||||
title: "SonarQube"
|
||||
ring: assess
|
||||
quadrant: tools
|
||||
|
||||
---
|
||||
|
||||
At AOE, we're evaluating SonarQube to get an historical overview of the code quality of our Projects. With SonarQube, you can get a quick hint about the condition of your code. It analyzes many languages and provides numerous static analysis rules.
|
||||
|
||||
@@ -2,9 +2,7 @@
|
||||
title: "Spring Boot"
|
||||
ring: trial
|
||||
quadrant: languages-and-frameworks
|
||||
|
||||
---
|
||||
|
||||
We have had good experiences with Spring Boot, and already have several Spring Boot-based services running in
|
||||
production. We like the ease of kickstarting new services and the variety of tools in the Spring ecosystem.
|
||||
|
||||
production. We like the ease of kick-starting new services and the variety of tools in the Spring ecosystem.
|
||||
|
||||
@@ -2,7 +2,6 @@
|
||||
title: "Styleguide Driven Development"
|
||||
ring: adopt
|
||||
quadrant: methods-and-patterns
|
||||
|
||||
---
|
||||
|
||||
Updated to "adopt".
|
||||
@@ -2,11 +2,10 @@
|
||||
title: "Terraform"
|
||||
ring: trial
|
||||
quadrant: tools
|
||||
|
||||
---
|
||||
|
||||
For the infrastructure of our OM3 projects we run multiple Kubernetes clusters, and to orchestrate the infrastructure provisioning we quickly decided to go with Terraform.
|
||||
Terraform allows us to easily manage our infrastructure, from AWS EC2 instances to RabbitMQ message queues.
|
||||
Also, the Kops installer for Kubernetes on AWS uses Terraform as its main building brick, and we can trigger Kops via Terraform.
|
||||
|
||||
We bring terraform together with [Helm](/tools/helm.html) to manage similar parts of the infrastructure, for example a shared file with domainname to application mappings allows us to provision Route 53 DNS entries via Terraform and then roll out Kubernetes Ingress definitions with the appropriate hostname to service mapping via Helm.
|
||||
We bring terraform together with [Helm](/tools/helm.html) to manage similar parts of the infrastructure, for example a shared file with domain name to application mappings allows us to provision Route 53 DNS entries via Terraform and then roll out Kubernetes Ingress definitions with the appropriate hostname to service mapping via Helm.
|
||||
|
||||
@@ -2,7 +2,6 @@
|
||||
title: "Vue.js"
|
||||
ring: trial
|
||||
quadrant: languages-and-frameworks
|
||||
|
||||
---
|
||||
|
||||
Updated to "trial".
|
||||
@@ -4,9 +4,6 @@ ring: adopt
|
||||
quadrant: tools
|
||||
---
|
||||
|
||||
In the last few years, Webpack has grown to become the de-facto standard for Web
|
||||
bundling in the JavaScript-Ecosystem. With Version 3, Webpack is a more robust
|
||||
and better documented bundler with nice new features such as
|
||||
[scope hoisting](https://webpack.js.org/plugins/module-concatenation-plugin/).
|
||||
Because of this, and because of the continuously growing community, we have adopted Webpack for nearly
|
||||
every single-page application we have.
|
||||
In the last few years, Webpack has grown to become the de-facto standard for Web bundling in the JavaScript-Ecosystem.
|
||||
With Version 3, Webpack is a more robust and better documented bundler with nice new features such as [scope hoisting](https://webpack.js.org/plugins/module-concatenation-plugin/).
|
||||
Because of this, and because of the continuously growing community, we have adopted Webpack for nearly every single-page application we have.
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
title: "Yarn"
|
||||
ring: trial
|
||||
quadrant: tools
|
||||
|
||||
---
|
||||
|
||||
Yarn is a dependency management tool for frontend (node) projects similar to npm. It also uses the npm registry and
|
||||
infrastructure. According to Yarn, the benefits are that Yarn is much faster, automatically writes a .lock file and
|
||||
builds up a local cache to be even faster when installing packages again.
|
||||
|
||||
Reference in New Issue
Block a user