System Integration
System Integration
Topics Covered:
E
xplanation of the four integration methods.
System integration methods
There are a variety of methods for achieving connectivity between unrelated systems.
Based on the type of usage and business requirements, there are four common
integration methods as follows:
1. Vertical integration. This strategy enables an organization to integrate unrelated
subsystems into one functional unit by creating silos based on their functionalities. Each
layer or element in vertical integration works upward and the process of integration is
expedited by using only a handful of vendors, partners and developers. Considered to
be the quickest method of integration, it can also be the riskiest, as it requires a
significant capital investment.
2. Horizontal integration. The horizontal integration method, also known as the
enterprise service bus (ESB), assigns a specialized subsystem to communicate with
other subsystems. It reduces the number of interfaces connecting directly to the ESB to
just one, decreasing integration costs and providing flexibility. It's also considered a
business expansion strategy, where one company might acquire another one from the
same business line or value chain.
3. Point-to-point integration. Also commonly known as star integration or spaghetti
integration, this method interconnects the remaining subsystems. Once connected,
these interconnected systems resemble a star polyhedron. Most companies segment
their processes during point-to-point integration. For example, a separate accounting
system could track finances; a web analytics system could manage website traffic; and a
customer resource management (CRM) system would integrate Salesforce. Depending
on the organizational needs, data from each system could be pulled and combined.
4. Common data format. The common data format helps businesses by providing data
translation and promoting automation. This method was created to avoid having an
adapter for every process of converting data to or from other formats of applications. For
integration to take place, enterprise application integration is used, which enables the
transformation of the data format of one system to be accepted by another system. A
popular example of a common data format is the conversion of zip codes to city names
by merging objects from one application or database to another.
Benefits of system integration
Integrations of all types are beneficial whether they're conducted for CRM or enterprise
resource planning (ERP).
The following are a few benefits of system integration:
Automation and streamlining of processes. The biggest benefit of system integration
is the streamlining and aggregation of relevant and correlated data. This helps with
automating and simplifying data collection and processing of data across the different
subsystems.
Improved accessibility and syncing of data. Due to the streamlined processes, users
don't have to wait for the data to be manually synced up across multiple systems to
access it. For example, if one subsystem makes a data change, it's automatically
updated for other systems as well. This improves the accessibility and real-time
availability of data.
Improved data accuracy. The accuracy of data is improved. Since all data is
automatically updated and synchronized between disparate subsystems, the chances of
inaccuracy are reduced, as users no longer access outdated data.
Increased efficiency and revenue. System integration automates the flow of
information between systems, eliminating the need for repetitive and manual data entry.
This enables users to allocate their time and resources wisely and improve their overall
efficiency. It also helps with increased revenue potential. For example, in the healthcare
industry, an integrated payment system opens up more channels for payment collection
at every patient interaction.
Scalability. Most integrated systems rely heavily on the cloud for data storage, which
makes business scalability less of a challenge. Instead of having a separate computing
platform for each subsystem, integrated systems enable all subsystems to use a
centralized storage platform, thus eliminating the need for replication of resources. If a
business grows exponentially and additional storage is required, it can be quickly scaled
up by the cloud provider.
Cost effective. With an integration platform, companies don't need to exhaust their
financial resources to manage individual subsystems and software applications and
accrue extra maintenance costs. Integrated systems also eliminate repetitive tasks and
eradicate the need for multiple data stores, which drastically cuts down on data storage
costs.
Challenges of system integration
System integration is an intricate process. Even with the best strategies in place and a
multitude of resources at a company's disposal, things don't always go as planned.
The following are common challenges of system integration:
Legacy systems. Organizations that have been around for a while tend to have legacy
systems in place that are critical to their business processes and can't be replaced
easily. The challenges to achieving integration mostly have to do with the inherent
difficulties of linking a series of diverse and monolithic existing systems that could be
produced by multiple different manufacturers. Other integration challenges can include a
lack of a coherent or unifying data structure linking all of the different systems, an
unwieldy framework of multiple different applications and support systems, the sheer
age of the different systems and the actual delivery of the information to key business
units that need it. These data integration challenges hinder overall process efficiency
because poor data exchange between systems prevents quick communication among
business units.
Rapid changes in the integration landscape. The IT and information systems
landscapes are dynamic and constantly evolving. When it comes to system integrations
with rapidly changing requirements, time is of the essence. System integration projects
that take longer than expected tend to get complex and difficult to pursue. In a dynamic
environment, the best approach is to go with an agile working strategy with short-term,
ad hoc objectives that slowly build toward full integration by linking various subsystems
where necessary.
Lack of skilled resources. System integration requires a certain expertise, such as an
extensive understanding of the technology industry and the latest trends, as well as a
strong command of programming languages and system codes. Even if organizations
have top-notch integration technology in place, they also need integration experts who
have the knowledge and required integration skills. While most companies struggle to
find and retain employees with such skill sets, some hire external contractors that might
fall short of expertise.
Lack of accountability. System integration involves various subsystems and multiple
stakeholders, including vendors and system owners, none of whom are responsible for
the entire integration process. Each involved party only takes care of their side of the
integration and doesn't offer accountability if something outside their territory goes
wrong. This ambiguity over ownership of different subsystems can cause serious issues
with accountability during system integrations and can cause project interruptions and
setbacks.
Picking the right integration tool. From cloud to hybrid options, there's an
overabundance of systems integration tools available on the market. This can make it
challenging for businesses to pick the right one for their needs and requirements.
Integration and CRM systems
Companies strive to integrate their CRM systems with other components of the business
to help streamline the marketing and sales processes, organizing and updating customer
information with the hopes of deepening customer relationships and boosting revenue
and growth.
The following are some use cases and advantages of integrating CRM systems:
The main goal of integrating a CRM system with other, smaller systems is to prevent
manual data entry and save employees time by removing redundant, unnecessary or
tedious steps. For example, a company might integrate its website with its marketing
automation software to bring customer information directly into the CRM system. Any
action a prospect takes on the website can be logged and a new record can be
automatically created in the system.
Other uses of CRM integration include integrating email systems with a CRM and
automatically importing basic customer information -- such as name, company, email
address and phone number -- from emails into the CRM to facilitate follow-up contacts
and log a record of interactions. Integration with other CRM systems is a key component
of product development, as companies must make their products compatible with
existing products to cater to the customer and maximize their reach and applicability.
This often involves altering the new product's programming code to match the existing
product's code so that integration can take place. Integration during product
development also refers to the process in which separately produced components are
combined and problems in their interactions are addressed.
Companies will often try to integrate their CRM system with their legacy ERP or
accounting systems to link financial information to assist customer service. Some
integration touchpoints can be handled by the default functionality within the software
packages themselves, but some configuration still needs to take place. Custom
functionality might need to be built in, depending on the business's needs and the
limitations of both systems.
2. Integration Patterns and Strategies
Migration is the act of moving data from one system to the other. A migration contains a
source system where the data resides at prior to execution, a criteria which determines
the scope of the data to be migrated, a transformation that the data set will go through, a
destination system where the data will be inserted, and an ability to capture the results of
the migration to know the final state vs the desired state.
Why is migration valuable?
Data migration is essential to all data systems. We spend a lot of time creating and
maintaining data, and migration is key to keep that data agnostic from the tools that we
use to create it, view it, and manage it. Without migration, we would lose all the data that
we have amassed any time that we want to change tools — crippling our ability to be
productive in the digital world.
When is migration useful?
Data migration occurs when moving from one system to another, moving f to another or
newer instance of that system, spinning up a new system that extends your current
infrastructure, backing up a dataset, adding nodes to database clusters, replacing
database hardware, consolidating systems and many more.
What is middleware?
Middleware is software that enables one or more kinds of communication or connectivity
between applications or application components in a distributed network. By making it
easier to connect applications that weren't designed to connect with one another, and
providing functionality to connect them in intelligent ways, middleware streamlines
application development and speeds time to market.
There are many types of middleware. Some, such as message brokers or transaction
processing monitors, focus on one type of communication. Others, such as web
application servers or mobile device middleware, provide the full range of
communication and connectivity capabilities needed to build a particular type of
application. Still others, such as a cloud-based integration platform as a service
(iPaaS) offering or an enterprise service bus (EBS), function as a centralized integration
hub for connecting all the components in an enterprise. (There's even middleware that
lets developers build their own customized middleware.)
Middleware got its name because the first middleware typically acted as a mediator
between an application front-end, or client, and a back-end resource - e.g., a database,
mainframe application or specialized hardware device - from which the client might
request data.
But today's middleware operates well beyond this scope. Portal middleware, for
example, encompasses the application front-end as well as tools for back-end
connectivity; database middleware typically includes its own data store. And as you'll
read below, an emerging class of middleware leverages container technology to help
developers connect to resources distributed across multiple clouds.
Data or database middleware simplifies access to, and interaction with, back-end
databases. Typically database middleware is some form of SQL database server.
API (application programming interface) middleware provides tools developers can
use to create, expose and manage APIs for their applications - so that other developers
can connect to them. Some API middleware includes tools for monetizing APIs -
enabling other organizations to use them, at cost. Examples of API middleware include
API management platforms, API gateways and API developer portals.
Object request broker (ORB) middleware acts as broker between a request from one
application object or component, and the fulfillment of that request by another object or
component on the distributed network. ORBs operate with the Common Object Request
Broker Architecture (CORBA), which enables one software component to make a
request of another without knowing where other is hosted, or what its UI looks like - the
"brokering" handles this information during the exchange.
Transactional middleware provides services to support the execution of data
transactions across a distributed network. The best-known transactional
middleware are transaction processing monitors (TPMs), which ensure that transactions
proceed from one step to the next - executing the data exchange,
adding/changing/deleting data where needed, etc. - through to completion.
Portal middleware provides tools and resources for integrating content and capabilities
from various related applications 'at the glass' - or on a single screen - to create a single,
composite application.
Robotics middleware simplifies the process of integrating robotic hardware, firmware
and software from multiple manufacturers and locations.
Enterprise application integration middleware
Platform middleware (or application platform middleware) can further support application
development and accelerate application delivery by providing a runtime hosting
environment - such as a Java runtime environment (Java RE), or containers, or both - for
application or business logic. Platform middleware can include or combine enterprise
application servers, web servers, and content management systems, as well as the
other middleware types listed above.
Middleware and cloud-native applications
Cloud-native is an application development approach that leverages fundamental cloud
computing technologies, with the goal of providing a consistent development,
deployment and management across on-premises, private cloud or public cloud
environments.
Practically speaking, today cloud native-applications are applications built
from microservices, and deployed in containers orchestrated using Kubernetes.
Microservices are loosely-coupled application components that encompass their own
stack, and can be deployed and updated independently of one another, and
communicate with one another using a combination of REST APIs, message brokers
and event streams. Containers are lightweight executables that package application
code – such as microservices – together with just the OS libraries and dependencies
needed to run that code on any traditional IT or cloud infrastructure.
Together these and related technologies create a powerful, develop-once-deploy-
anywhere platform for delivering net-new hybrid cloud applications, and
for modernizing traditional legacy systems for use in the cloud. But they also lead to a
complex development environment that combines even more software applications, data
sources, programming languages, tools and distributed systems.
Middleware can resolve some of this complexity, but running containerized applications
with conventional middleware can add complexities of its own, as well as the kind of
infrastructure overhead that containers were designed to eliminate. For this reason,
popular cloud application development platforms such as Cloud Foundry (link resides
outside IBM) and Red Hat Open Shift evolved to include containerized middleware -
middleware modularized so that just the required connectivity functions can be packaged
in a container.
Greater adaptability
SOA is more adaptable to advances in technology. You can modernize your applications
efficiently and cost effectively. For example, healthcare organizations can use the
functionality of older electronic health record systems in newer cloud-based applications.
What are the basic principles of service-oriented architecture?
There are no well-defined standard guidelines for implementing service-oriented
architecture (SOA). However, some basic principles are common across all SOA
implementations.
Interoperability
Each service in SOA includes description documents that specify the functionality of the
service and the related terms and conditions. Any client system can run a service,
regardless of the underlying platform or programming language. For instance, business
processes can use services written in both C# and Python. Since there are no direct
interactions, changes in one service do not affect other components using the service.
Loose coupling
Services in SOA should be loosely coupled, having as little dependency as possible on
external resources such as data models or information systems. They should also be
stateless without retaining any information from past sessions or transactions. This way,
if you modify a service, it won’t significantly impact the client applications and other
services using the service.
Abstraction
Clients or service users in SOA need not know the service's code logic or
implementation details. To them, services should appear like a black box. Clients get the
required information about what the service does and how to use it through service
contracts and other service description documents.
Granularity
Services in SOA should have an appropriate size and scope, ideally packing one
discrete
business function per service. Developers can then use multiple services to create a
composite service for performing complex operations.
What are the components in service-oriented architecture?
There are five main components in service-oriented architecture (SOA).
Service
Services are the basic building blocks of SOA. They can be private—available only to
internal users of an organization—or public—accessible over the internet to all.
Individually, each service has three main features.
Service implementation
The service implementation is the code that builds the logic for performing the specific
service function, such as user authentication or bill calculation.
Service contract
The service contract defines the nature of the service and its associated terms and
conditions, such as the prerequisites for using the service, service cost, and quality of
service provided.
Service interface
In SOA, other services or systems communicate with a service through its service
interface. The interface defines how you can invoke the service to perform activities or
exchange data. It reduces dependencies between services and the service requester.
For example, even users with little or no understanding of the underlying code logic can
use a service through its interface.
Service provider
The service provider creates, maintains, and provides one or more services that others
can use. Organizations can create their own services or purchase them from third-party
service vendors.
Service consumer
The service consumer requests the service provider to run a specific service. It can be
an entire system, application, or other service. The service contract specifies the rules
that the service provider and consumer must follow when interacting with each other.
Service providers and consumers can belong to different departments, organizations,
and even industries.
Service registry
A service registry, or service repository, is a network-accessible directory of available
services. It stores service description documents from service providers. The description
documents contain information about the service and how to communicate with it.
Service consumers can easily discover the services they need by using the service
registry.
How does service-oriented architecture work?
In service-oriented architecture (SOA), services function independently and provide
functionality or data exchanges to their consumers. The consumer requests information
and sends input data to the service. The service processes the data, performs the task,
and sends back a response. For example, if an application uses an authorization
service, it gives the service the username and password. The service verifies the
username and password and returns an appropriate response.
Communication protocols
Services communicate using established rules that determine data transmission over a
network. These rules are called communication protocols. Some standard protocols to
implement SOA include the following:
• Simple Object Access Protocol (SOAP)
• RESTful HTTP
• Apache Thrift
• Apache ActiveMQ
• Java Message Service (JMS)
You can even use more than one protocol in your SOA implementation.
What is an ESB in service-oriented architecture?
An enterprise service bus (ESB) is software that you can use when communicating
with a system that has multiple services. It establishes communication between services
and service consumers no matter what the technology.
Benefits of ESB
An ESB provides communication and transformation capabilities through a reusable
service interface. You can think of an ESB as a centralized service that routes service
requests to the appropriate service. It also transforms the request into a format that is
acceptable for the service’s underlying platform and programing language.
What are the limitations in implementing service-oriented architecture?
Limited scalability
System scalability is significantly impacted when services share many resources and
need to coordinate to perform their functionality.
Increasing interdependencies
Service-oriented architecture (SOA) systems can become more complex over time and
develop several interdependencies between services. They can be hard to modify or
debug if several services are calling each other in a loop. Shared resources, such as
centralized databases, can also slow down the system.
Single point of failure
For SOA implementations with an ESB, the ESB creates a single point of failure. It is a
centralized service, which goes against the idea of decentralization that SOA advocates.
Clients and services cannot communicate with each other at all if the ESB goes down.
Microservices on AWS help you innovate faster, reduce risk, accelerate time to market,
and decrease your total cost of ownership. Get started with SOA and microservices on
AWS by creating an AWS account today.
WSO2
Figure 2: A microservices architecture is characterized by smart endpoints and dumb
pipes.
Although it sounds quite simple to break up a monolithic app and central ESB and
offload those functions to each service, there are quite a few challenges that we face.
So, it’s quite important to understand the common microservices integration patterns and
select the suitable technologies and frameworks for implementing them. Let’s look at two
of these key microservice integration patterns, active composition and reactive
composition.
Active composition pattern for microservices architecture
In an active composition pattern, microservices communicate using request-response
style communication, where a given microservice can invoke one or more other
microservices using synchronous messaging protocols such as REST/HTTP, gRPC
remote procedure call, and the GraphQL API query language, among others. Figure 3
illustrates such a microservices integration scenario where services are organized based
on different interaction types.
In an active composition microservice implementation, we can identify the core or
atomic services. These are fine-grained, self-contained services, with no or minimal
external service dependencies, that consist mostly of business logic and little or no
network communication logic.
WSO2
Figure 3: In the active composition pattern, microservices communicate using
synchronous messaging protocols.
Atomic microservices often cannot be directly mapped to a business function as they are
too fine-grained. Hence a specific business function may require a composition of
multiple atomic or core services. The middle layer comprises such composite or
integration microservices. These services often have to support a significant portion of
the ESB functions such as routing, transformations, orchestration, resiliency, and
stability.
By contrast, composite or integration services are coarse-grained relative to atomic
services. They are independent from each other and contain business logic (e.g. routing,
what services to call, and how to do data type mapping) and network communication
logic (e.g. inter-service communication through various protocols and resiliency
behaviors such as circuit breakers).
You will expose a selected set of your composite services—or even some atomic
services—as managed APIs using API services and/or edge services. These are special
types of composite services that apply basic routing capabilities, versioning of APIs, API
security patterns, throttling, and monetization, as well as create API compositions. As
shown in Figure 3, these APIs are centrally managed by a control plane or API
management layer.
The benefit of active composition is that you can select diverse implementation
technologies to implement core, composite, and API services. However, a drawback of
this pattern is the inter-service coupling and dependencies. A given service may depend
on one or more downstream services. So, active composition is suitable only for certain
microservices interactions where interactive request-response style is a key
requirement.
a query is simply a request for information. Similarly, the meaning of a query in database
management is a request for data. If you need to access, manipulate, delete, or retrieve
data from your relational database, you'll need a database query written using a specific
syntax.
Now let’s take a look at how these patterns are applied in real-world microservices
implementations.
Active and reactive patterns in real-world microservices implementations
In most real-world microservices implementations, we have to use a hybrid of active and
reactive composition. As shown in Figure 5, we can use synchronous messaging-based
composition for most of the external facing services. Such functions are often exposed to
the consumers via an API gateway layer, which is comprised of multiple API services,
and these functions are managed centrally by the API control plane.
Usually, the communications between API services and consumers leverage RESTful
messaging or the GraphQL API query language. API services and management layers
can be implemented using open source technologies such as WSO2 API Manager,
Kong, and Gluu or commercial alternatives such as Apigee, IBM, Software AG, and
Tibco.
WSO2
Figure 5: Real-world microservices implementations typically make use of both active
and reactive composition.
Both active and reactive composition styles require a rich integration framework or
programming language that can cater to various integration and composition needs. For
example, these may include message transformations, connectors to different systems
and services, synchronous or asynchronous event-driven messaging, or support for a
variety of different message exchange patterns. There are a few open source integration
frameworks that are microservices friendly including Camel-K, WSO2 Micro Integrator,
and Micronaut.io. These capabilities also are supported in certain programming
languages (e.g. Ballerina.io) and language frameworks (e.g. Spring Boot).
Rather than using conventional RESTful messaging, the internal synchronous
communication between services can leverage gRPC as the communication technology,
owing to its performance, type-safety-ness and contract-driven nature.
The asynchronous event-driven services interaction can utilize event bus technology,
such as software leveraging the Apache Kafka, NATS, or AMQP protocols. The
asynchronous services should have integration logic that can consume or produce
messages and exchange them with the event bus. Most of the integration technologies
that we have discussed in this article can be used, but these same messaging standards
are often supported within the libraries of most standard programming languages as
well. When using messaging infrastructure, it’s important not to isolate any business
logic from the event bus.
In this article, we discussed the two main approaches to a pure microservices
implementation. However, in most real-world scenarios, microservices-based
applications have to be integrated with monolithic systems in the enterprise. Thus you
might want to build a bridging layer, often known as the anti-corruption layer, between
the microservices and monolithic subsystems. In most practical use cases, the
microservices and monolithic subsystems co-exist side by side, with the anti-corruption
layer allowing the two to be seamlessly integrated without changing either of those
systems. Existing integration technologies, such as an ESB or integration bus, can be
used to implement the anti-corruption layer.
What is Camel K?
Apache Camel K is an open-source integration framework that allows developers to
build and deploy cloud-native applications and microservices quickly and easily. It
leverages the power of Apache Camel, which is a popular open-source integration
framework, and runs on top of Kubernetes, a popular container orchestration platform.
The “K” in Camel K stands for Kubernetes, which means that Camel K is designed to
work seamlessly with Kubernetes. It provides a Kubernetes-native way of building and
deploying microservices using Camel-based integrations.
One of the key features of Apache Camel K is its simplicity. It provides a lightweight and
easy-to-use development model that allows developers to focus on building business
logic instead of worrying about the underlying infrastructure.
Apache Camel K also provides a wide range of connectors and components that can be
used to integrate with various systems and services, such as databases, messaging
systems, and cloud services.
Overall, Apache Camel K is a powerful and flexible integration framework that is well-
suited for building and deploying cloud-native applications and microservices on
Kubernetes.
Use cases of APACHE CAMEL K
Apache Camel K is an integration platform built on top of Apache Camel that enables
developers to easily build and deploy cloud-native integrations using Kubernetes. Here
are some common use cases for Apache Camel K:
1. Cloud-native integrations: Apache Camel K allows you to build cloud-native integrations
that can be easily deployed and managed on Kubernetes. This makes it an ideal
platform for integrating microservices and other cloud-based systems.
2. Event-driven architecture: Apache Camel K provides a powerful event-driven
architecture that can be used to build real-time integrations that respond to events as
they occur. This makes it an ideal platform for building event-driven applications that
need to respond to changes in real-time.
3. IoT integrations: Apache Camel K can be used to build integrations for IoT devices and
sensors. This makes it an ideal platform for building IoT applications that need to collect
data from a large number of sensors and devices.
4. API management: Apache Camel K can be used to build APIs that can be easily
integrated with other systems. This makes it an ideal platform for building API gateways
and managing API traffic.
5. Data integration: Apache Camel K can be used to build data integrations that can move
data between different systems. This makes it an ideal platform for building data
pipelines that need to move data between different databases, systems, or applications.
6. ETL: Apache Camel K can be used to build ETL (Extract, Transform, Load) processes
that can be used to move data from one system to another. This makes it an ideal
platform for building data processing pipelines that need to transform data in real-time.
Overall, Apache Camel K is a powerful integration platform that can be used to build a
wide range of cloud-native integrations that can be easily deployed and managed on
Kubernetes.
Administration¶
The Micro Integrator Dashboard and Command Line Interface (CLI) are specifically
designed for monitoring and administration of the Micro Integrator instances. Each of
these tools are capable of binding to a single server instance by invoking
the management API that is exposed by the server. This allows you to view and manage
artifacts, logs/log configurations, and users of a server instance.
The Streaming Integrator allows you to integrate static data sources with streaming data
sources. Thus, it enables various types of applications (e.g., files, cloud-based
applications, data stores, streaming applications) to access streaming data and also
exposes their output in a streaming manner. This is useful for performing ETL (Extract,
Transform, Load) operations, capturing change data (i.e., CDC operations), and stream
processing.
Micronaut framework
Micronaut is an open source JVM-based software framework for building lightweight,
modular applications and microservices. Micronaut is known for its ability to help
developers create apps and microservices with small memory footprints and short
startup times. An important advantage of the Micronaut framework is that startup time
and memory consumption are not tied to the size of an app's codebase. This makes the
development of integration tests much easier and their execution much faster.
A big difference between Micronaut and other frameworks is that Micronaut analyzes
metadata as soon as the application is compiled. During this compilation phase
Micronaut will generate an additional set of classes that represent the state of the
application already preconfigured. This enables dependency injection (DI) and aspect-
oriented programming (AOP) behavior to be applied much more efficiently when the
application finally runs.
Micronaut, which was introduced in 2018 by the creators of the Grails framework,
provides native support for service discovery, distributed configuration, client-side load
balancing and authentication. The framework is licensed under the Apache License v2
and the Micronaut Foundation oversees best practices and documentation.
What should developers know about Micronaut?
The Micronaut framework was designed for building and testing low-memory
microservices, serverless applications and message-driven microservices.
It does this by avoiding the common disadvantages of most traditional Java frameworks,
including runtime reflection for dependency injection, dynamic classloading, runtime byte
code generation and proxy generation. The framework was designed specifically with
cloud architecture in mind. Apache Maven and Gradle can be used as build tools.
Components of the modular framework predefine how programmers address the
following:
dependency injection
inversion of control (IoC)
aspect-oriented programming (AOP)
configuration and configuration sharing
service discovery
HTTP routing
client-side load-balancing
proxies
How does Micronaut work?
Micronaut is designed to function as both a client and server framework. The framework
features an annotation-based programming model that is very similar to the Java Spring
framework. Unlike the Spring framework, however, Micronaut does not use Java
Reflection APIs. Instead, it integrates directly with the Java compiler through annotation
processors. This allows Micronaut to compute an additional set of classes that sit
alongside user-defined classes. The classes serve to perform dependency injection, as
well as define compilation time and aspect-oriented proxies in a completely reflection-
free manner.
Because of the way Micronaut integrates directly with language compilers, however, the
only JVM languages Micronaut can currently support are Java, Kotlin or Groovy. Plans
exist to introduce support for other languages in the future.
Why is Micronaut so well-suited for microservices?
Micronaut has many features that are tailor-made for microservices, including the
following:
Reactive Streams. Micronaut supports any framework that implements the Reactive
Streams standard. The framework also integrates with reactive database drivers for SQL
and NoSQL databases.
Message-driven microservices. Micronaut supports many different messaging
systems, including Kafka, RabbitMQ, MQTT, JMS and NATS.io. Pulsar support is
planned for a future release.
Serverless functions. Micronaut supports the development, testing and deployment of
serverless functions for many different cloud providers, including AWS Lambda, Oracle
Functions, Google Cloud Functions and Azure Functions.
OpenAPI documentation. Micronaut creates a YAML file at compilation time that can
be added as a static resource later on or served through the browser using tools such as
Swagger UI.
GraalVM-ready. Micronaut applications can be compiled into GraalVM native images to
reduce startup times even more. GraalVM uses a closed-world static analysis approach
to produce native images that require configuration for any dynamic parts of the
application. Micronaut's relative lack of reflection and dynamic classloading mean that
less configuration is required to get a GraalVM native image operational.
What are some alternatives to Micronaut?
Alternatives to the Micronaut framework include:
Spring Boot
Node.js
Django
ASP.NET
Laravel
Android SDK
Rails
Some frameworks in the list above, including ASP.NET and Spring, have begun to
integrate some of the ideas pioneered by Micronaut.
Data integration is one of the steps of data pre-processing that involves combining data
residing in different sources and providing users with a unified view of these data.
• It merges the data from multiple data stores (data sources)
• It includes multiple databases, data cubes or flat files.
• Metadata, Correlation analysis, data conflict detection, and resolution of semantic
heterogeneity contribute towards smooth data integration.
• There are mainly 2 major approaches for data integration - commonly known as "tight
coupling approach" and "loose coupling approach".
Tight Coupling
o Here data is pulled over from different sources into a single physical location through
the process of ETL - Extraction, Transformation and Loading.
o the single physical location provides a uniform interface for querying the data.
ETL layer helps to map the data from the sources so as to provide a uniform data
o warehouse. This approach is called tight coupling since in this approach the data is
tightly coupled with the physical repository at the time of query.
ADVANTAGES:
1. Independence (Lesser dependency to source systems since data is physically copied
over)
2. Faster query processing
3. Complex query processing
4. Advanced data summarization and storage possible
5. High Volume data processing
DISADVANTAGES: 1. Latency (since data needs to be loaded using ETL)
1. Costlier (data localization, infrastructure, security)
Loose Coupling
o Here a virtual mediated schema provides an interface that takes the query from the
user, transforms it in a way the source database can understand and then sends the
query directly to the source databases to obtain the result.
o In this approach, the data only remains in the actual source databases.
o However, mediated schema contains several "adapters" or "wrappers" that can
connect back to the source systems in order to bring the data to the front end.
ADVANTAGES:
Data Freshness (low latency - almost real time)
Higher Agility (when a new source system comes or existing source system changes -
only the corresponding adapter is created or changed - largely not affecting the other
parts of the system)
Less costly (Lot of infrastructure cost can be saved since data localization not required)
DISADVANTAGES:
1. Semantic conflicts
2. Slower query response
3. High order dependency to the data sources
For example, let's imagine that an electronics company is preparing to roll out a new
mobile device. The marketing department might want to retrieve customer information
from a sales department database and compare it to information from the product
department to create a targeted sales list. A good data integration system would let the
marketing department view information from both sources in a unified way, leaving out
any information that didn't apply to the search.
II. DATA TRANSFORMATION:
In data mining pre-processes and especially in metadata and data warehouse, we use
data transformation in order to convert data from a source data format into destination
data.
We can divide data transformation into 2 steps:
• Data Mapping:
It maps the data elements from the source to the destination and captures any
transformation that must occur.
• Code Generation:
It creates the actual transformation program.
Data transformation:
• Here the data are transformed or consolidated into forms appropriate for mining.
• Data transformation can involve the following:
Smoothing:
• It works to remove noise from the data.
• It is a form of data cleaning where users specify transformations to correct data
inconsistencies.
• Such techniques include binning, regression, and clustering.
Aggregation:
• Here summary or aggregation operations are applied to the data.
• This step is typically used in constructing a data cube for analysis of the data at
multiple granularities.
• Aggregation is a form of data reduction.
Generalization :
• Here low-level or “primitive” (raw) data are replaced by higher-level concepts through
the use of concept hierarchies.
• For example, attributes, like age, may be mapped to higher-level concepts, like youth,
middle-aged, and senior.
• Generalization is a form of data reduction.
Normalization:
• Here the attribute data are scaled so as to fall within a small specified range, such as
1:0 to 1:0, or 0:0 to 1:0.
• Normalization is particularly useful for classification algorithms involving neural
networks, or distance measurements such as nearest-neighbor classification and
clustering
• For distance-based methods, normalization helps prevent attributes with initially large
ranges (e.g., income).
• There are three methods for data normalization:
1. min-max normalization:
o performs a linear transformation on the original data
o Suppose that minA and maxA are the minimum and maximum values of an attribute, A.
o Min-max normalization maps a value, v, of A to v0 in the range [new minA;newmaxA]
by computing
o Min-max normalization preserves the relationships among the original data values.
1. z-score normalization
o Here the values for an attribute, A, are normalized based on the mean and standard
deviation of A.
When applications are retrying on errors, they could choose a uniform configuration for
retrying across all the retryable errors or they may want to fine tune it with the help of
“Error retry configuration”. For example, in case of events based services, a problem
with the availability of an infrastructure component can be given more time to be
remediated before retrying as opposed to lets say some temporary issue related to
concurrency. At the very least, infrastructure errors are worth retrying for higher duration.
There is no point halting the retry of the current event and consuming new events if the
basic infrastructure service unavailability itself will not allow to process those.
Raising Incidents
In the end when all retries have failed, there needs to be a way to escalate the error and
raise an incident whenever needed. There are cases where the problem can simply be
thrown back to the user through notifications and it is upon that user to resubmit the
needed request but that leads to a bad user experience if the problem was due to some
internal technical issue. This is especially true in case of events based architectures.
Asynchronous integration patterns usually make use of DLQ as another error handling
pattern. However, DLQ is only a temporary step in the overall process. Whether through
DLQ or by other means, if there is way to reliably escalate the error so that it leads to
creation of an incident / dispatch of an operational alert, that would be a desirable
outcome. How can we design such an integration with incident management system/
alert management system? Here are few options:
The first approach utilizes the logging feature which is available in all the applications
and the least resistant and assured path to reporting an error. When application is done
with all the retries and it is trying to escalate an error, we need to try ad give it the most
reliable path where there are less chances of error. Logging fits in well in that criteria.
However, we want to separate out these logs from all other error logs otherwise the
incident management system will be flooded with errors which may not be relevant. We
call these logs as “Error alerts” — Logging of these error alerts can be done by a
dedicated library/component whose job is to format the error alert with the required and
maximum amount of information and log it in the required format. An example would be:
{
“logType”: “ErrorAlert”,
“errorCode”: “subA.compA.DB.DatabaseA.Access_Error”,
“businessObjectId”: “234323”,
“businessObjectName”: “ACCOUNT”,
“InputDetails” : “<Input object/ event object>”,
“InputContext” : “ any context info with the input”,
“datetime”: “date time of the error”,
“errorDetails” : “Error trace”,
“..other info as needed”: “…”
}
These logs are read by a log aggregator (which would already be there due to log
monitoring stack most of the organizations employ). The log aggregator would route
these logs to a different component whose action is to read these log events, read a
configuration and raise incidents/ alerts as needed. There is again a DLQ handling
needed here if things go wrong which will require monitoring & addressing.
Creation of incident/ alert requires some configuration so that a meaningful & actionable
incident can be created. Below is an example of the configuration attributes needed.
This could be dependent on a specific indent management system employed by the
organization. This configuration could also drive different kinds of actions. Given that the
error codes follow a particular taxonomy across the organization, this could very well
become a central configuration if needed.