Skip to content
2023 API Summit Hackathon: Experiment with AI for APIs (August 28 - September 27) Learn More →
Kong Logo | Kong Docs Logo
search
  • We're Hiring!
  • Docs
    • Kong Gateway
      Lightweight, fast, and flexible cloud-native API gateway
      Kong Konnect
      Single platform for SaaS end-to-end connectivity
      Kong Mesh
      Enterprise service mesh based on Kuma and Envoy
      decK
      Helps manage Kong’s configuration in a declarative fashion
      Kong Ingress Controller
      Works inside a Kubernetes cluster and configures Kong to proxy traffic
      Insomnia
      Collaborative API development platform
      Kuma
      Open-source distributed control plane with a bundled Envoy Proxy integration
      Docs Contribution Guidelines
      Want to help out, or found an issue in the docs and want to let us know?
  • API Specs
  • Plugin Hub
    • Explore the Plugin Hub
      View all plugins View all plugins View all plugins arrow image
    • Functionality View all View all arrow image
      View all plugins
      Authentication's icon
      Authentication
      Protect your services with an authentication layer
      Security's icon
      Security
      Protect your services with additional security layer
      Traffic Control's icon
      Traffic Control
      Manage, throttle and restrict inbound and outbound API traffic
      Serverless's icon
      Serverless
      Invoke serverless functions in combination with other plugins
      Analytics & Monitoring's icon
      Analytics & Monitoring
      Visualize, inspect and monitor APIs and microservices traffic
      Transformations's icon
      Transformations
      Transform request and responses on the fly on Kong
      Logging's icon
      Logging
      Log request and response data using the best transport for your infrastructure
  • Support
  • Community
  • Kong Academy
Get a Demo Start Free Trial
decK
1.14.x
  • Home icon
  • decK
  • Design Architecture
  • Design & Architecture
github-edit-pageEdit this page
report-issueReport an issue
  • Kong Gateway
  • Kong Konnect
  • Kong Mesh
  • Plugin Hub
  • decK
  • Kong Ingress Controller
  • Insomnia
  • Kuma

  • Docs contribution guidelines
  • 1.27.x (latest)
  • 1.26.x
  • 1.25.x
  • 1.24.x
  • 1.23.x
  • 1.22.x
  • 1.21.x
  • 1.20.x
  • 1.19.x
  • 1.18.x
  • 1.17.x
  • 1.16.x
  • 1.15.x
  • 1.14.x
  • 1.13.x
  • 1.12.x
  • 1.11.x
  • 1.10.x
  • 1.9.x
  • 1.8.x
  • 1.7.x
  • pre-1.7
enterprise-switcher-icon Switch to OSS
On this pageOn this page
  • Underlying architecture
    • Reverse sync
    • Algorithm
    • Operational outlook
  • Choice of language
You are browsing documentation for an outdated version. See the latest documentation here.

Design & Architecture

Underlying architecture

Reverse sync

One of the most important features of decK is reverse sync, whereby decK can detect entities that are present in Kong’s database but are not part of the state file. This feature increases the complexity of the project as the code needs to perform a sync in both directions: from the state file to Kong, and from Kong to the state file.

Algorithm

Export and Reset

An export or reset of entities is fairly easy to implement. decK loads all the entities from Kong into memory and then serializes it into a YAML or JSON file. For reset, it instead performs DELETE queries on all the entities.

Diff and Sync

The diff of configuration is performed using the following algorithm:

  1. Read the configuration from Kong and store it in a SQL-like in-memory database.
  2. Read the state file from disk, and match the IDs of entities with their respective counterparts in the in-memory state, if they are present.
  3. Now, for entity of each type we perform the following:
    1. Create: if the entity is not present in Kong, create the entity.
    2. Update: if the entity is present in Kong, check for equality. If not equal, then update it in Kong. These two steps are referred to as “forward sync”.
    3. Delete: Go through each entity in Kong (from the in-memory database), and check if it is present in the state file. If yes, don’t do anything; if no, delete the entity from Kong’s database as well.

Certain filters like select-tag or Kong Gateway workspace might be applied to the above algorithm based on the inputs given to decK.

Operational outlook

Based on the above algorithm, you can see how decK can require a large amount of memory and network I/O. While this is true, a few optimizations have been incorporated to ensure good performance:

  • For network operations, decK minimizes the API calls it has to make to Kong to read the state. It uses list endpoints in Kong with a large page size (1000) for efficiency.
  • decK parallelizes various Create/Update/Delete operations where it can. So, if decK and Kong, or Kong and Kong’s database are present far apart in terms of network latency, parallel operations help speed up operations. With smaller installations, this optimization might not be measurable.
  • decK’s memory footprint can be high if the configuration for Kong is huge. This is usually not a concern as decK’s process is short-lived. For very large installations, it is recommended to configure a subset of the large configuration at one time using a technique referred to as distributed configuration. There are avenues to further reduce the memory requirements of decK, although, we don’t know by how much. decK’s code is written with focus on correctness over performance.

Choice of language

decK is written in Go because:

  • Go provides good concurrency primitives which helps ensure high-performance for decK.
  • Go’s compiler spits out a static compiled binary, meaning no other dependency need to be installed on the system. This gives a very good end-user experience as installing, downloading, and copying a single binary is easy and fast.
  • decK’s original goal was much larger than what it is today. If we decide to pursue larger goals (think a control-plane for Kong) in future, Go is probably the best language available to write that type of software.
  • The original author was familiar with Go :)
Thank you for your feedback.
Was this page useful?
Too much on your plate? close cta icon
More features, less infrastructure with Kong Konnect. 1M requests per month for free.
Try it for Free
  • Kong
    THE CLOUD CONNECTIVITY COMPANY

    Kong powers reliable digital connections across APIs, hybrid and multi-cloud environments.

    • Company
    • Customers
    • Events
    • Investors
    • Careers Hiring!
    • Partners
    • Press
    • Contact
  • Products
    • Kong Konnect
    • Kong Gateway
    • Kong Mesh
    • Get Started
    • Pricing
  • Resources
    • eBooks
    • Webinars
    • Briefs
    • Blog
    • API Gateway
    • Microservices
  • Open Source
    • Install Kong Gateway
    • Kong Community
    • Kubernetes Ingress
    • Kuma
    • Insomnia
  • Solutions
    • Decentralize
    • Secure & Govern
    • Create a Dev Platform
    • API Gateway
    • Kubernetes
    • Service Mesh
Star
  • Terms•Privacy
© Kong Inc. 2023