How to Choose the Right Type of Integration for Your IT Architecture

We compare point-to-point, broker and ESB: when to use each approach and how to choose an integration type for your IT architecture.

  • The basic structure of any integration
  • Point-to-Point
  • Pros of point-to-point integration
  • Useful resource on integration types
  1. point-to-point, broker, ESB 24.4.2024

  2. We examine the specifics, pros and cons of three integration types: point-to-point, via a broker, and via an ESB.

  3. Reading time: 12 min. The internet offers plenty of articles about point-to-point integrations, brokers, and ESB.

  4. As a rule, they focus either on the technical details of building integrations or on the obvious pros and cons of each approach. In this article, KT.Team experts look at all three integration types from the perspective of their internal structure — this highlights not only the obvious but also the hidden advantages and drawbacks of each.

  5. Prefer to explore this material as a podcast?

The basic structure of any integration

  1. Regardless of the integration type, every integration includes: a source system; a system that receives the information; an ETL layer (extract, transform, load); and a data warehouse — the space where information transferred through integrations is stored.

  2. This is a very high-level view that ignores the nuances and logic of each specific integration.

  3. But it is precisely this basic structure that will help us understand the pros and cons of each integration type.

  4. After all, an integration's properties depend precisely on where the ETL functions and the data warehouse sit relative to the systems.

Point-to-Point

The simplest and most straightforward type. There is one system, there is a second system, and they exchange information. For example, one integration uploads products from 1C to the website, and a second one sends new orders from the website to 1C. No intermediaries, extra storage, or shared context. This means that in a point-to-point integration, both the ETL function and the storage live inside the systems themselves. The source system extracts information from its databases and transforms it into a form convenient for consumption.

The receiving system puts the information into its internal storage to process and use it later.

Pros of point-to-point integration

Since no additional systems or databases take part in the integration, point-to-point is the fastest integration type to develop and the simplest to manage. First, boxed versions of systems usually already include some APIs or connectors for standard integrations. Second, this integration type does not require the manager or product owner to get involved in how the integration is built.

The development teams of each system agree among themselves on the API schema and the integration logic. Third, direct integrations transfer information between systems quickly — precisely because there are no intermediaries. Fourth, the initial development of a direct integration with simple logic looks like an inexpensive task. And… in practice, that is where the advantages end.

Useful resource on integration types

We compared the three integration types in a short table. Open the table

Drawbacks of point-to-point integration

  1. The first and biggest drawback of this integration is strong mutual dependency between systems.

  2. Let's continue our example with 1C and an online store.

  3. For a user to place an order, the online store must receive the user's loyalty program status and address from 1C.

  4. If 1C goes down or slows under heavy load, critical information stops reaching the online store.

  5. Customers will not be able to place orders until 1C is back up.

  6. To protect the business from such risks, the development team will keep inventing safeguards: setting flags, devising queues, reinventing asynchronous messaging between systems. In the end, the "inexpensive" direct integration will catch up with and overtake the cost of the "expensive" bus.

  7. Drawback number two: systems start to "know" too much about each other. In what format and at what rate should data be delivered? Which data is redundant or insufficient?

  8. All of this has to be accounted for in the integration logic.

  9. Third drawback: integrations overload the source system, even if it initially works with a small amount of data. For example, a CRM holds customer data that is constantly accessed by the online store, delivery, marketing applications, and so on.

  10. As a result, the load on the CRM grows many times over due to constant requests from other systems.

  11. Fourth drawback: a change in any system triggers a cascade of rework across all related integrations and systems.

  12. Add a new attribute to a product card — and you have to change the logic in every system that consumes that card. And the logic change does not always go smoothly: in especially critical cases there is nothing left to do but roll all the changes back.

  13. The fifth drawback is proxying. For example, both 1C and the online store need to receive stock information from the warehouse software.

  14. To avoid overloading the warehouse software and transferring the same data several times, developers may offer you an "elegant solution": let the WMS send everything only to 1C. And 1C, in turn, passes to the online store not only its own portion of product and order data, but also the stock levels.

  15. The accuracy of the stock data shown in the online store now depends on two systems working at once. 1C (or any intermediary system) ends up overloaded with data outside its core purpose.

  16. In practice we have seen even longer data enrichment chains — they are not that rare. And if something goes wrong in the target system, you have to run an investigation: where the data transfer failed, why, and how to prevent it from happening again. The last and, in our view, most critical drawback: point-to-point integrations block or significantly slow down IT system upgrades.

  17. If in three years you decide to replace that same CRM, you will have to redevelop and reproduce the logic of dozens of integrations — and not only the ones directly connected to the CRM.

  18. Meanwhile, the company becomes hostage to the developers who know a lot about the existing logic.

  19. Giving them up or switching the team to other tasks becomes almost impossible.

  20. The developers themselves become hostages of their own knowledge: even on vacation they must always be reachable by phone — because who knows what might go wrong?

We'll curate materials for your task

Integration via a broker

  1. In this type of integration, besides the source system and the receiving system, an intermediate layer appears — a message broker.

  2. Systems do not interact with each other — only with Apache Kafka, RabbitMQ, or any similar service.

  3. At the same time, IT systems still initiate the sending and receiving of information. In this integration type, information storage is moved outside the end systems: once information has reached the broker, the receiving system picks it up from there at the agreed time.

  4. At the same time, the ETL logic still stays on the side of the systems taking part in the integration.

  5. At different stages of data transfer, responsibility for extraction, transformation, and loading is split between the source system and the receiving system.

Pros of broker-based integration

  1. Data exchange becomes more controllable.

  2. In the broker you can see which messages were sent out and which were delivered, check the logs, and review the event history. Second: source systems no longer need to find out whether the receiving system is available at the moment a message is sent. Their area of responsibility is limited to the logic of forming their own message queue.

  3. Another advantage of brokers worth highlighting is contract support.

  4. A contract is a check of a message against basic rules (the presence of a specific field in the required format). Equally important in this approach, development becomes more standardized.

  5. Almost every service has tools for connecting a broker. This means no development from scratch, no workarounds, and no need to reinvent integration logic every time.

  6. It is also worth noting that data transfer through a broker is fast — here the broker is almost on par with point-to-point, the fastest integration type.

Drawbacks of broker-based integration

  1. The first major drawback: using a broker puts load on the service that sends the message.

  2. Imagine a situation: the broker is unavailable for some time, and no new messages are added to the queue during that period.

  3. The broker itself does not "know" what any given system tried to send to it. So the source system has to check which message was the last one in the queue and resend everything that accumulated during the downtime.

  4. This logic puts extra load on the system, so there is a temptation to drop it.

  5. But in that case, undelivered messages will sooner or later affect critical business processes.

  6. The second drawback is that the receiving system gets overloaded with unnecessary data.

  7. A broker cannot choose which messages to pass on — it delivers the entire queue. For example, all assortment information or all warehouse stock information from the WMS.

  8. Now imagine that your system does not need the full volume of certain data. For example, the 1C instance running in your Ufa branch does not need customer and order data from all 20 of your branches.

  9. But a system cannot "ask" the broker for filtered data.

  10. It has to receive through integrations everything that the CRM and OMS (Order Management System) send, store it in its own databases, and use internal logic to separate the 5% of needed data from the 95% of excess data.

  11. The third significant drawback is that the contract gets set in stone.

  12. All participants in the process must agree on the format in which messages will be transmitted.

  13. This removes flexibility and increases the labor costs of maintaining a single format.

  14. A less obvious drawback is the lack of a convenient and/or detailed retrospective. For example, the Kafka broker can store historical data — but if something breaks, you have to reprocess the entire message queue from the historically first record to the last.

  15. It is impossible to run any queries on current statuses.

  16. The problem is most acute when you need to share history with another team or perform a migration — extracting this information will be problematic.

  17. This drawback leads to another significant downside: the impossibility of reliable reconciliation.

  18. Systems load both old and new messages from the broker without distinguishing between them.

  19. During reprocessing, a newer message may end up overwritten: for example, an order gets the status "created" instead of "delivered".

  20. Such situations can be avoided, but that requires adding an intermediate reconciliation service or building reconciliation logic into the receiving system.

  21. This also affects speed. On the one hand, systems quickly exchange the entire message stream, but on the other, figuring out what is current and eliminating duplicates is difficult.

  22. That is why reading data is much slower.

  23. Using a broker can lead to proxying just as easily as direct integrations can.

  24. To keep every system in the landscape from receiving redundant data, it is "easier" to route it through one system, normalize it there, and pass the normalized data on. We described above where this leads.

  25. There is also a hidden drawback of a managerial nature. Every system has its own product owner.

  26. But who owns the broker and the integrations tied to it?

  27. Most often, it is the technical department that takes on this role.

  28. For the other departments this is a clear plus (less responsibility), but in that case none of the stakeholder departments will feel in control of the infrastructure.

Integration via a data bus (ESB layer)

At first glance, integration through an ESB layer looks more complex than the previous types. It includes, first, the source and consumer systems. Second, a separate layer of ETL microservices that pick up or deliver data and also transform and normalize information. Third, a storage tier separated from both the systems and the ETL. There are different ways to technically implement the bus approach.

We will look at a conceptually sounder approach, where the bus controls the transfer/delivery of requests between services.

Pros of using a service bus

  1. The basic structure of ESB integrations helps explain where their advantages come from.

  2. This is the only integration approach where all three components are separated and each performs strictly its own function: systems generate and consume data, the ETL layer delivers it to the right destination in the right form, and the storage (logically enough) stores the data.

  3. One result of this is, for example, reduced load on services, since they contain no integration logic.

  4. The service's job is to provide access to its data via API (for a modern service), FTP, or any other exchange method the service supports. The ETL layer itself will pick up the data and pass it on to the warehouse.

  5. The service "thinks" only about keeping all the information it is responsible for up to date and complete.

  6. The second advantage follows from the first — the source system does not need to know the technical requirements of the system consuming the data.

  7. Data format, transfer speed, update frequency — all this logic lives in the ETL layer.

  8. The load on each system becomes controllable. In the ETL layer you can regulate the system load and change settings: for example, keep 1C free of load during the day and update data only in the evening.

  9. Moreover, you can control the request rate: how many packets per unit of time are delivered to the service.

  10. The bus takes on information filtering. In the previous section, we looked at the example of a branch's 1C that has to pull 20 times more information than it needs to operate. With integration via an ESB, this does not happen.

  11. The bus sends a service only the data it really needs — all it takes is building that logic into the connector.

  12. A properly built ESB integration implies fault tolerance of the entire IT architecture.

  13. Services do not exchange data directly: the ETL layer saves it to dedicated storage and retrieves the current version from there when needed. For example, if your bonus management system is temporarily unavailable, it will not affect order placement in the online store in any way.

  14. The online store will get the bonus points and personal discount data from the data warehouse.

  15. When the bonus management system comes back online, the connector will inform it about redeemed points and new orders so it can recalculate personal discounts for repeat customers. In a broader sense, using an ESB provides flexibility and resilience to cascading changes. Imagine you decided to replace a foreign CRM with a CIS one.

  16. If you chose the point-to-point integration type, you would have to, first, redevelop the point-to-point integrations between the CRM and other systems, and second, modify the integrations of other systems that use CRM data. With an ESB, you only need to develop the flows out of and into the CRM.

  17. The flows of consumer systems remain unchanged.

  18. It may seem that using an intermediate layer reduces speed.

  19. In practice, however, the exchange speed is very high: tens, hundreds, thousands of messages are delivered within 400-500 milliseconds! Another advantage, more obvious to companies with many data flows: standardized development. The ETL layer uses standard logic for receiving and sending data.

  20. Developing new connectors essentially comes down to reproducing already-built logic, adjusted for a specific data type or the specifics of a system.

Drawbacks of using a service bus

  1. The main drawback is the upfront effort.

  2. To do integrations right, you need to stop and think about the IT architecture: define each system's areas of responsibility; understand what information it receives and from where, what it sends, which of it is necessary, and which is redundant.

  3. Here it is important not to overcomplicate the overall approach and to think strategically, so that the chosen model proves viable for years to come.

  4. The effort required to prepare the bus for launch also shows in the seemingly high cost of the integrations.

  5. Right from the start you will have to pay for business analysis, for designing the integration logic, and for implementing the bus tools — the ETL layer, DWH, and so on.

  6. In our experience, this is about 90% of the cost of implementing and owning an ESB.

  7. The remaining 10% is support for integrations already in place.

  8. Misunderstanding the approach or lacking experience with ESB means the person responsible for implementation may build the integration incorrectly — for example, by pushing excess business logic into the intermediate layer.

  9. This affects both immediate development speed and the cost of future enhancements.

  10. The worst outcome of poorly designed bus integrations is turning a flexible, transferable architecture into a monolith.

  11. Instead of keeping things simple and transparent, the team writes an enormous number of lines of code.

  12. Instead of loose coupling and fault tolerance, the result is an architecture that is hard to maintain.

  13. To keep things from getting to that point, you need a competent implementation team: the entry threshold here is higher than for integrations

Point-to-Point

.

Learn about KT.Team's experience building integrations via ESB

  1. Implemented a scalable service bus for ATIMO→

  2. Enabled Polaris to easily launch new products on marketplaces→

  3. Developed a target system integration architecture for a manufacturing enterprise.

  4. Implemented ESB technology and launched 48 data flows→

Discuss the article: How to choose the right integration type for…

Send via: