<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Kalix Team</title>
    <description>The latest articles on DEV Community by Kalix Team (@kalix).</description>
    <link>https://dev.to/kalix</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1023844%2F219b5822-6ae3-42ff-87e7-f4def5212ba1.jpg</url>
      <title>DEV Community: Kalix Team</title>
      <link>https://dev.to/kalix</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/kalix"/>
    <language>en</language>
    <item>
      <title>How Kalix Abstracts Away Headaches</title>
      <dc:creator>Kalix Team</dc:creator>
      <pubDate>Thu, 16 Mar 2023 20:22:08 +0000</pubDate>
      <link>https://dev.to/kalix/how-kalix-abstracts-away-headaches-1kbm</link>
      <guid>https://dev.to/kalix/how-kalix-abstracts-away-headaches-1kbm</guid>
      <description>&lt;p&gt;Author - The Kalix Team at Lightbend&lt;/p&gt;

&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;In general, abstraction involves removing or hiding the unnecessary attributes of something to focus on the essentials. To that end, abstraction is one of the fundamental concepts in programming that aims to reduce programming complexity by hiding the low-level (unnecessary) details of the underlying logic or implementation from users. In doing so, abstractions allow developers to design and implement complex software systems more quickly.&lt;/p&gt;

&lt;p&gt;As programming languages continue to evolve, so do the layers of abstraction, which allow for greater reusability of code and greater code efficiency. Kalix is one of such technologies that aim to make the life of developers more manageable by using abstraction.&lt;/p&gt;

&lt;p&gt;This post provides an overview of Kalix, what it does, and how it makes life easier for developers.&lt;/p&gt;

&lt;h2&gt;
  
  
  Abstraction Done Right with Kalix
&lt;/h2&gt;

&lt;p&gt;Software developers today have a lot of wonderful technologies at our disposal that we can use to build robust applications. However, each of these technologies comes with unique complexity—we must understand the underlying system, how it works, and how to integrate it with our applications. This can be time-consuming and require considerable thought and effort.&lt;/p&gt;

&lt;p&gt;Kalix is a platform-as-a-service (PaaS) microservice and API development platform that dramatically simplifies the complexities of building highly scalable, real-time applications. Kalix does this by combining an API-first, database-less, and serverless development approach to provide developers with an additional “application layer” that manages the underlying app’s properties and infrastructural needs on behalf of its users.&lt;/p&gt;

&lt;p&gt;Kalix provides business-critical features we can use to build back-end or full-stack cloud-native applications in any programming language. It combines the necessary software components and abstracting implementation details to provide a unified and simplified application layer.&lt;/p&gt;

&lt;p&gt;With Kalix, developers don’t have to worry about the underlying application infrastructure, such as databases, service meshes, message brokers, caches, and API gateways. These are all abstracted so developers can focus on implementing features and services. In doing so, Kalix unlocks innovation by making it easy for any full-stack or back-end developer to build high-performance, data-centric applications rapidly and at a low cost.&lt;/p&gt;

&lt;p&gt;According to Lightbend, the company behind Kalix, the Kalix developer platform is the industry’s first and only platform enabling anyone to create large-scale, high-performance microservices and APIs without having to perform everyday operations.&lt;/p&gt;

&lt;h2&gt;
  
  
  Kalix Abstractions
&lt;/h2&gt;

&lt;p&gt;Kalix lets us focus on what’s most important in our development processes, abstracting away several of the tedious details.&lt;/p&gt;

&lt;h3&gt;
  
  
  Database
&lt;/h3&gt;

&lt;p&gt;In a typical serverless setting, we require a database to establish an explicit connection between the platform and an application to perform create, read, update, and delete (CRUD) operations. With Kalix, developers no longer need to worry about setting up database schemas, database management, or scaling the database as Kalix provides everything out of the box.&lt;/p&gt;

&lt;p&gt;Kalix automatically manages the data stored in its distributed database without developers or operations personnel intervention. Kalix provides in-memory state data as needed, abstracting the complexities of database management to free developers from database maintenance.&lt;/p&gt;

&lt;p&gt;Therefore, we do not need to be familiar with any database schemas, data caching software, or distributed data management techniques to use Kalix, which makes Kalix uniquely suited for data-centric applications.&lt;/p&gt;

&lt;h3&gt;
  
  
  API
&lt;/h3&gt;

&lt;p&gt;Kalix understands the importance of APIs in developing serverless applications and microservices. As such, it uses an API-first approach that treats APIs as “first-class citizens'' so we can focus on API services and create data objects and structures that our services require—without worrying about how these data objects will persist.&lt;/p&gt;

&lt;p&gt;Kalix abstracts these data objects from persistent storage to allow developers to concentrate on the API structures of their services. Using this API-first strategy, we can define how to expose the API and let the platform handle connectivity for our services.&lt;/p&gt;

&lt;h3&gt;
  
  
  Caching
&lt;/h3&gt;

&lt;p&gt;With Kalix, we no longer need to worry about fine-tuning caching layers for our applications. The platform automatically takes care of data caching, allowing developers to focus on what we do best: developing services. This makes developing fast and performant applications a breeze.&lt;/p&gt;

&lt;h3&gt;
  
  
  Scalability
&lt;/h3&gt;

&lt;p&gt;It is challenging to scale an application in a typical traditional hosting environment, let alone have it scale automatically. The performance of any application declines when server resources do not rise according to service demand. This may crash the application, resulting in data loss and potential business loss for any organization.&lt;/p&gt;

&lt;p&gt;Kalix understands that it can be challenging for any organization to scale its service quickly and securely. Kalix takes care of it for us by optimizing cloud resources to automatically make data available to be processed in memory when needed. Kalix makes it easy to build microservices that scale automatically based on demand.&lt;/p&gt;

&lt;p&gt;In addition to its highly scalable and reliable distributed computing platform, many major brands worldwide use Kalix to develop high-performance, massively scalable systems.&lt;/p&gt;

&lt;h2&gt;
  
  
  Benefits of Abstraction
&lt;/h2&gt;

&lt;p&gt;The benefits provided by Kalix abstraction include the following.&lt;/p&gt;

&lt;h3&gt;
  
  
  Save Time
&lt;/h3&gt;

&lt;p&gt;Developers no longer must spend time dealing with unnecessary complexities of the underlying infrastructure required by their application that have nothing to do with the problem we’re trying to solve.&lt;/p&gt;

&lt;p&gt;Using Kalix, we can focus on business logic rather than infrastructure details such as managing databases, servers, caching, scaling, and the network. Kalix frees developers to spend more time on actual business problems, accelerating the business delivery time.&lt;/p&gt;

&lt;h3&gt;
  
  
  Reduce Bugs
&lt;/h3&gt;

&lt;p&gt;The presence of unwanted bugs in our applications can easily break them, impact the user experience, and ultimately disrupt business operations. This could be damaging to any organization’s reputation.&lt;/p&gt;

&lt;p&gt;As each line of code has the potential to introduce bugs into an application, writing non-vital code only increases the chances of introducing these bugs and causing issues in our applications. Fortunately, the abstraction provided by Kalix ensures fewer non-vital pieces of code, leading to fewer bugs.&lt;/p&gt;

&lt;h3&gt;
  
  
  Increase Deployment Efficiency
&lt;/h3&gt;

&lt;p&gt;Kalix makes it possible for developers to focus more on business logic and application deployment, making it easy for development teams to rapidly move from ideation to implementation and deploy products quickly.&lt;/p&gt;

&lt;p&gt;Additionally, a lower number of bugs and a shorter development process results in fewer issues, shorter release cycles, and quicker time to market.&lt;/p&gt;

&lt;h3&gt;
  
  
  Less Infrastructure
&lt;/h3&gt;

&lt;p&gt;Kalix handles most of the heavy lifting, such as managing servers and databases, scaling, caching, and the underlying infrastructure—all while hiding their complexities. The platform’s model eliminates the need to predict growth and purchase equipment. As a result, we pay only for what we use.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Abstract specifications describe what a program does without necessarily saying how it does it. Kalix, from Lightbend, removes this nonessential information, eliminating restrictions and the need to deal with complex implementation details.&lt;/p&gt;

&lt;p&gt;Through abstraction, Kalix allows developers to build high-performance, low-latency applications without worrying about architectural complexity, database management, or developer operations.&lt;/p&gt;

&lt;p&gt;Moreover, its flexibility means that its microservices solution is compatible with any back end, enabling you to work in your desired language without concerns for compatibility. This also makes it cost-efficient and seamless to adopt.&lt;/p&gt;

&lt;p&gt;If easing development, speeding time to market, and saving costs sound appealing, visit &lt;a href="https://www.kalix.io"&gt;Kalix&lt;/a&gt; today to learn more about how their advanced microservices technology can help you transform your product offerings.&lt;/p&gt;

</description>
      <category>kalix</category>
    </item>
    <item>
      <title>Introducing Spring SDK for Kalix</title>
      <dc:creator>Kalix Team</dc:creator>
      <pubDate>Fri, 24 Feb 2023 21:01:45 +0000</pubDate>
      <link>https://dev.to/kalix/introducing-spring-sdk-for-kalix-2pjn</link>
      <guid>https://dev.to/kalix/introducing-spring-sdk-for-kalix-2pjn</guid>
      <description>&lt;p&gt;Author - Renato Cavalcanti. Principal Engineer, Lightbend.&lt;/p&gt;

&lt;h2&gt;
  
  
  The new Spring SDK for Kalix offers a developer experience that is familiar to Spring Boot users.
&lt;/h2&gt;

&lt;p&gt;It allows developers to assemble a Kalix application by annotating Java classes. Compared to other SDKs for Kalix, it frees the developer from describing their API with Protocol Buffers.&lt;/p&gt;

&lt;p&gt;When using the Kalix Spring SDK, your services are exposed using Spring REST annotations and serialization is backed by the ubiquitous Jackson library. And, most importantly, you can start coding directly in Java.&lt;/p&gt;

&lt;p&gt;To give you a quick preview of how it looks to define an &lt;code&gt;Entity&lt;/code&gt;, the code below shows a Kalix &lt;code&gt;ValueEntity&lt;/code&gt; for an imaginary &lt;code&gt;Customer&lt;/code&gt; model:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kn"&gt;package&lt;/span&gt; &lt;span class="nn"&gt;customer&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;kalix.javasdk.valueentity.ValueEntity&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;kalix.springsdk.annotations.EntityKey&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;kalix.springsdk.annotations.EntityType&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;org.springframework.web.bind.annotation.PostMapping&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;org.springframework.web.bind.annotation.RequestBody&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

&lt;span class="nd"&gt;@EntityType&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"customer"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;CustomerEntity&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nc"&gt;ValueEntity&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;CustomerEntity&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;Customer&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;

  &lt;span class="n"&gt;record&lt;/span&gt; &lt;span class="nf"&gt;Customer&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;email&lt;/span&gt;&lt;span class="o"&gt;){}&lt;/span&gt;
  &lt;span class="n"&gt;record&lt;/span&gt; &lt;span class="nf"&gt;CreateCustomer&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;email&lt;/span&gt;&lt;span class="o"&gt;){}&lt;/span&gt;

  &lt;span class="nd"&gt;@EntityKey&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"customer_id"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
  &lt;span class="nd"&gt;@PostMapping&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"/customers/{customer_id}"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
  &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="nc"&gt;Effect&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;createCustomer&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nd"&gt;@RequestBody&lt;/span&gt; &lt;span class="nc"&gt;CreateCustomer&lt;/span&gt; &lt;span class="n"&gt;create&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;effects&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt;
      &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;updateState&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Customer&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;create&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;create&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;email&lt;/span&gt;&lt;span class="o"&gt;))&lt;/span&gt;
      &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;thenReply&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"done"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
  &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When deployed to Kalix, clients can call the service using any http client. The &lt;code&gt;createCustomer&lt;/code&gt; method is exposed as a regular REST endpoint using Spring’s REST annotations.&lt;/p&gt;

&lt;p&gt;To query Customers by name, you can write:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kn"&gt;package&lt;/span&gt; &lt;span class="nn"&gt;customer&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;kalix.javasdk.view.View&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;kalix.springsdk.annotations.Query&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;kalix.springsdk.annotations.Subscribe&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;kalix.springsdk.annotations.Table&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;org.springframework.web.bind.annotation.GetMapping&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;reactor.core.publisher.Flux&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

&lt;span class="nd"&gt;@Table&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"customers"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="nd"&gt;@Subscribe&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;ValueEntity&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;CustomerEntity&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;CustomerByNameView&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nc"&gt;View&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;CustomerEntity&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;Customer&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;

  &lt;span class="nd"&gt;@GetMapping&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"/customers/by-name/{name}"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
  &lt;span class="nd"&gt;@Query&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"SELECT * FROM customers WHERE name = :name"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
  &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="nc"&gt;Flux&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;CustomerEntity&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;Customer&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;findCustomers&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
  &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The Kalix Spring SDK detects all Kalix components under the main package and registers them to Kalix just as a regular Spring Boot application does.&lt;/p&gt;

&lt;p&gt;That’s basically all that is needed to &lt;strong&gt;implement an Entity with query capabilities&lt;/strong&gt; in Kalix. Just start coding!&lt;/p&gt;

&lt;p&gt;You can try it out yourself by starting a new project using the Maven archetype or by downloading the quickstart sample.&lt;/p&gt;

&lt;h3&gt;
  
  
  To start a new Maven project
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;mvn archetype:generate  
&lt;span class="nt"&gt;-DarchetypeGroupId&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;io.kalix 
&lt;span class="nt"&gt;-DarchetypeArtifactId&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;kalix-spring-boot-archetype
&lt;span class="nt"&gt;-DarchetypeVersion&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1.1.1&lt;span class="sb"&gt;`&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  To download a fully-functional quickstart project
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;kalix quickstart download customer-registry-spring&lt;span class="sb"&gt;`&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can find more details in the new &lt;a href="https://docs.kalix.io/spring/index.html" rel="noopener noreferrer"&gt;Kalix Spring SDK documentation&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;As a new feature we welcome feedback from initial users. Please contact us in the &lt;a href="https://discuss.kalix.io" rel="noopener noreferrer"&gt;Kalix Forum&lt;/a&gt; with any suggestions or report issues on &lt;a href="https://github.com/lightbend/kalix-jvm-sdk" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>gaming</category>
      <category>discuss</category>
      <category>productivity</category>
      <category>career</category>
    </item>
    <item>
      <title>Getting Started with Kalix</title>
      <dc:creator>Kalix Team</dc:creator>
      <pubDate>Thu, 16 Feb 2023 21:58:12 +0000</pubDate>
      <link>https://dev.to/kalix/getting-started-with-kalix-j8f</link>
      <guid>https://dev.to/kalix/getting-started-with-kalix-j8f</guid>
      <description>&lt;p&gt;Author - Johan Andrén. Principal Engineer, Lightbend.&lt;/p&gt;

&lt;h2&gt;
  
  
  We want to show you how easy it is to get going with Kalix and how quickly you can start building high-performance APIs and microservices.
&lt;/h2&gt;

&lt;p&gt;In this article we will guide you through getting started with the needed tools to create, build and deploy your first Java based Kalix service.&lt;/p&gt;

&lt;p&gt;Creating, deploying and managing Kalix services is done through a command line utility (CLI) which needs to be installed first. Let’s start with installing the command line client.&lt;/p&gt;

&lt;p&gt;The steps are a little bit different depending on if you are on a Windows, MacOS or Linux machine, see individual instructions for each platform in the &lt;a href="https://docs.kalix.io/kalix/index.html" rel="noopener noreferrer"&gt;documentation here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Once the client has been installed, create a Kalix account by opening a terminal window and executing:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;kalix auth login
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This will open up a browser window with the Kalix log in page.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb5x03yeij53027el0f2q.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb5x03yeij53027el0f2q.jpg" alt="Kalix Login"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Start creating a new account by clicking “Register” or through an existing google account.&lt;/p&gt;

&lt;p&gt;Once the account is created you will end up in a window asking you to authorize your CLI, choose “Authorize” to give the CLI permission to deploy and manage projects and services for your account.&lt;/p&gt;

&lt;p&gt;The CLI which was waiting for this permission will now say “You are now logged in”.&lt;/p&gt;

&lt;p&gt;Kalix services are organized into projects, to deploy a first service we need to create a project, let’s do so with our CLI executing:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;kalix project new my-project &lt;span class="nt"&gt;--region&lt;/span&gt; gcp-us-east1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We now have an empty project called &lt;code&gt;my-project&lt;/code&gt; created, and selected as default when deploying services.&lt;/p&gt;

&lt;p&gt;Implementing a Kalix service is done through one of the available Kalix SDKs, you can currently build projects using the &lt;a href="https://docs.kalix.io/java/index.html" rel="noopener noreferrer"&gt;Java or Scala SDK&lt;/a&gt; or the &lt;a href="https://docs.kalix.io/javascript/index.html" rel="noopener noreferrer"&gt;TypeScript or JavaScript SDK&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;To make getting started easy, the command line client provides several quickstart projects that we can start from, take a look at the available quickstarts using:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;kalix quickstart list
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Let’s download the &lt;code&gt;customer-registry-java&lt;/code&gt; project, build and deploy it.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;kalix quickstart download customer-registry-java
unzipping file  customer-registry/pom.xml
unzipping file  customer-registry/README.md
unzipping file  customer-registry/docker-compose.yml
unzipping file  customer-registry/src
...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Open the project in your favorite Java IDE and take a look at the protobuf service descriptors in &lt;code&gt;src/main/proto&lt;/code&gt; and the corresponding entity service implementation in &lt;code&gt;src/main/java/customer/domain/Customer.java.&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;We’ll deploy the project to Kalix by first compiling the Java sources and package them as a docker image, the image is then published to docker hub where Kalix will fetch it to deploy and start the service.&lt;/p&gt;

&lt;p&gt;To continue you will have to have the following installed and available on your PATH:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  A recent version of Docker&lt;/li&gt;
&lt;li&gt;  JDK 11 or later&lt;/li&gt;
&lt;li&gt;  A recent version of Apache Maven&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Make sure that docker is logged in to docker hub:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;docker login
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Update the “dockerImage” property in pom.xml replacing &lt;code&gt;my-docker-repo&lt;/code&gt; with your docker hub account name, this is where the artifact will be published.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fra573f1k18j0z0t3cuto.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fra573f1k18j0z0t3cuto.png" alt="Properties"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Build, package and publish the project using maven:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;cd &lt;/span&gt;customer-registry
&lt;span class="nv"&gt;$ &lt;/span&gt;mvn deploy
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This will both publish the docker image to docker hub and then deploy the published image to Kalix, in the output you will see:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;[&lt;/span&gt;info] Deploying project to Kalix
&lt;span class="o"&gt;[&lt;/span&gt;info] Executing &lt;span class="sb"&gt;`&lt;/span&gt;kalix service deploy customer-registry johanandren/customer-registry:1.0-SNAPSHOT-20220622124847&lt;span class="sb"&gt;`&lt;/span&gt;
&lt;span class="o"&gt;[&lt;/span&gt;info] Done.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can use the command line to verify that the service has been deployed:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;kalix service list
NAME                AGE   REPLICAS   STATUS   DESCRIPTION
customer-registry   82s   1          Ready
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;By default a deployed service is not available to the public internet, it needs to be exposed using &lt;code&gt;kalix service expose customer-registry&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Since this is just a sample, let’s not publish it to the world. It is also possible to create a proxy connection from your local machine, giving us access to the service without exposing it to the internet, let’s try that out:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;kalix service proxy customer-registry &lt;span class="nt"&gt;--grpcui&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Creating the proxy forwards port 8080 from the local machine to the running service, so we can hit it with a client, on the command line we can use &lt;code&gt;curl&lt;/code&gt; for plain HTTP or &lt;code&gt;grpcurl&lt;/code&gt; for gRPC calls, but the additional parameter &lt;code&gt;--grpcui&lt;/code&gt; here gives us a nice web-UI to explore and do sample calls to our running service.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkldnuioosxwi1skajiz2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkldnuioosxwi1skajiz2.png" alt="gRPC Web UI"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;All the available methods of the deployed service can be seen in the method drop-down, each allowing triggering a call directly from your browser.&lt;/p&gt;

&lt;p&gt;You should now be well set up to further explore what is possible with Kalix. Here are a few starting points in the documentation:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;a href="https://docs.kalix.io/kalix/using-cli.html#_expose_a_service_route" rel="noopener noreferrer"&gt;Exposing a service to the public internet&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;a href="https://docs.kalix.io/java/writing-grpc-descriptors-protobuf.html#_transcoding_http" rel="noopener noreferrer"&gt;Map the gRPC services to nice HTTP/json endpoints&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;a href="https://docs.kalix.io/java/actions-publishing-subscribing.html" rel="noopener noreferrer"&gt;Publishing and subscribing events to a message broker&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;a href="https://docs.kalix.io/java/views.html" rel="noopener noreferrer"&gt;Querying state using views&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;a href="https://docs.kalix.io/services/using-acls.html" rel="noopener noreferrer"&gt;Fine grained service access control using ACLs&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Next steps
&lt;/h2&gt;

&lt;p&gt;Visit &lt;a href="https://kalix.io" rel="noopener noreferrer"&gt;Kalix.io&lt;/a&gt; to learn more or register for a &lt;a href="https://console.kalix.io/register" rel="noopener noreferrer"&gt;free trial&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>kalix</category>
    </item>
    <item>
      <title>Kalix: Move to the Cloud. Extend to the Edge. Go Beyond.</title>
      <dc:creator>Kalix Team</dc:creator>
      <pubDate>Mon, 13 Feb 2023 23:25:32 +0000</pubDate>
      <link>https://dev.to/kalix/kalix-move-to-the-cloud-extend-to-the-edge-go-beyond-3bi8</link>
      <guid>https://dev.to/kalix/kalix-move-to-the-cloud-extend-to-the-edge-go-beyond-3bi8</guid>
      <description>&lt;p&gt;Author - Jonas Bonér. CEO/CTO, Lightbend.&lt;/p&gt;

&lt;h2&gt;
  
  
  Moving to the cloud and edge comes with big rewards such as new use-cases and business opportunities.
&lt;/h2&gt;

&lt;p&gt;But how to efficiently build cloud and edge applications can be a confusing journey, mainly due to the lack of managed platforms that unifies:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Developer Experience (DX) for modeling and building stateful and stateless cloud-native and edge-native applications (including consistency and query models).&lt;/li&gt;
&lt;li&gt;  ZeroOps Experience, merging the cloud and edge into a single “thing,” a cloud-to-edge continuum that provides a unified way to do system design, deployment, and operations.&lt;/li&gt;
&lt;li&gt;  Reactive Runtime that delivers ultra-low latency with high resilience throughout the whole range of cloud and edge applications by continuously optimizing data access, placement, locality, and replication.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We set out to create a powerful PaaS that addresses these challenges for the cloud-to-edge continuum. An API PaaS that enables any developer with any language to build high-performance, data-centric applications without a database.&lt;/p&gt;

&lt;p&gt;We did it. This is the story of &lt;a href="https://kalix.io" rel="noopener noreferrer"&gt;Kalix&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cloud complexity is slowing down engineering teams
&lt;/h2&gt;

&lt;p&gt;Cloud infrastructure today is a thriving ecosystem of products driving innovation in many areas. But cloud infrastructure is proving to be quite complex, skills are limited, and development teams are drowning in how, where, when, and even why to make use of it. Business initiatives structured on the promise of the cloud—speed to market, scalability, and cost-effectiveness—are instead faced with slower and more costly projects than projected, fraught with overwhelmed engineering teams and a growing accumulation of technical debt.&lt;/p&gt;

&lt;p&gt;To tackle some of this complexity, Kubernetes has emerged as the de facto standard “operating system” for the cloud today; it is excellent at managing, orchestrating, and ensuring availability and scalability of empty “boxes”: the containers. But that’s only half of the story. It matters equally much what you put in these “boxes” and how you stitch them together into a single coherent system. There are too many options and decisions today, leaving developers with the task of building a complete application in a more or less ad hoc fashion. Often using tools, techniques, and patterns that they already know but are not designed for the world of these distributed systems—e.g., the cloud, microservices, Kubernetes, service meshes—setting them up for failure.&lt;/p&gt;

&lt;p&gt;There needs to be an equal investment in the application layer to address this problem. We need to make it easier for the developer to build complete applications, bring together, complement, and take full advantage of all the excellent underlying cloud infrastructure we have at our disposal. Also, more efficient cloud infrastructure utilization results in better performing and more scalable applications, lower costs, and reduced environmental impact.&lt;/p&gt;

&lt;p&gt;That sounds simple enough, but there are many roadblocks preventing organizations from fully embracing the value of what cloud infrastructure can provide, including managing local and distributed application data with consistency and integrity.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Managing local and distributed workflow, communication, and coordination.&lt;/li&gt;
&lt;li&gt;  Managing client context and communication.&lt;/li&gt;
&lt;li&gt;  Maintaining business rules and operational semantics of the application as a whole.&lt;/li&gt;
&lt;li&gt;  Ensuring intelligent and adaptive co-location of data, compute, and end-user.&lt;/li&gt;
&lt;li&gt;  Integration with other systems.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So, how can we help developers manage this complexity gracefully? With a programming model and a holistic Developer Experience (DX) designed specifically for the cloud and edge, working in concert with the underlying infrastructure in maintaining application properties and requirements on behalf of its users.&lt;/p&gt;

&lt;h2&gt;
  
  
  Serverless, sure—but no cigar
&lt;/h2&gt;

&lt;p&gt;Alfred North Whitehead famously said, “&lt;em&gt;Civilization advances by extending the number of important operations which we can perform without thinking of them.&lt;/em&gt;” This quote translates directly to software development. We are constantly climbing the ladder of abstractions, trying to do more with less, faster, and automate away as much as possible.&lt;/p&gt;

&lt;p&gt;The Serverless DX is a considerable step in this direction and shows the way for the future DX for the cloud and edge. As I’ve said for a long time, the Serverless DX is too revolutionary to be left to Function-as-a-Service (FaaS) products. In the last year, we have seen many different products, such as databases, message brokers, and API platforms, providing a serverless DX.&lt;/p&gt;

&lt;p&gt;It's all great and a step in the right direction, but application developers are left with many different SDKs and APIs that need to be understood how to compose, each with its own feature set, semantics, guarantees, and limitations. Creating an integration project and a new bag of challenges to maintain—end-to-end correctness, data integrity, and consistency, ensuring efficiency, scalability, and availability of the system as a whole—is all very hard. As we all know, systems most often break at their boundaries when trying to compose disparate parts into a cohesive whole.&lt;/p&gt;

&lt;p&gt;We believe we can do better than this by taking yet another step on the ladder of abstractions and developing a unifying abstraction layer that pulls together the necessary pieces—including databases, message brokers, caches, services meshes, API gateways, blob storages, CDN networks, CI/CD products, etc.—and exposes them into one single unified programming model and DX, tailored for the cloud and edge. A programming model with well-defined and thought-through holistic semantics, ensuring end-to-end guarantees and SLAs. A programming model and Serverless DX that lets us as developers focus on the essence of value creation: building direct end-user and business value that leaves us with a coherent, understandable, predictable, and maintainable system, all managed for us in the cloud.&lt;/p&gt;

&lt;p&gt;As Stephen O’Grady, RedMonk &lt;a href="https://redmonk.com/sogrady/2022/03/21/vertical-integration/" rel="noopener noreferrer"&gt;writes&lt;/a&gt;, calling for &lt;em&gt;vertical integration&lt;/em&gt; between the application and database layers: “&lt;em&gt;There are already too many primitives for engineers to deeply understand and manage them all, and more arrive by the day. And even if that were not the case, there is too little upside for the overwhelming majority of organizations to select, implement, integrate, operate and secure every last component or service. Time spent managing enterprise infrastructure minutiae is time not spent building out its own business.&lt;/em&gt;”&lt;/p&gt;

&lt;h2&gt;
  
  
  Meet Kalix!
&lt;/h2&gt;

&lt;p&gt;So what is the ideal programming model and DX for cloud application development and edge computing? What is the minimum set of things developers need to be in charge of that can’t be outsourced, generated, or automated? I think it comes down to three things:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; &lt;em&gt;Domain data&lt;/em&gt;—how to model the business data; its structure, constraints, guarantees, and query model.&lt;/li&gt;
&lt;li&gt; &lt;em&gt;Business logic&lt;/em&gt;—how to act and operate on the data; mine intelligence, transform, downsample, relay, and trigger side-effects.&lt;/li&gt;
&lt;li&gt; &lt;em&gt;API&lt;/em&gt;—how to communicate and coordinate between services and the outside world, using workflow, dataflow, communication, and coordination patterns.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;In &lt;a href="https://kalix.io" rel="noopener noreferrer"&gt;Kalix&lt;/a&gt;, developers only have to care about these three things. They can &lt;em&gt;declaratively&lt;/em&gt; define the API for a service (the commands and events it receives and emits), the domain data the service manages (including its constraints, guarantees, and how to query it), and then write the business logic. Once complete, push it up to the cloud, and the rest is on Kalix.&lt;/p&gt;

&lt;p&gt;Kalix is a fully managed PaaS for building event-driven, data-centric, real-time, cloud-native applications. It’s a complete developer and zero-ops experience from start to finish. Developers never have to see or care about any underlying infrastructure, including databases, message brokers, caches, service meshes, and API gateways. It provides “vertical integration” and extends serverless by being “&lt;em&gt;databaseless&lt;/em&gt;,” reducing complexity and time-to-market immensely. Since Kalix manages all services and underlying infrastructure pieces in the system end-to-end, it can look across them all in a holistic way, learning how they operate collectively and optimizing things at a system level (instead of at the individual service or infrastructure component level).&lt;/p&gt;

&lt;p&gt;Kalix builds on the lessons we have learned from more than a decade of building &lt;a href="https://akka.io" rel="noopener noreferrer"&gt;Akka&lt;/a&gt; (leveraging the actor model) and our experience helping large (and small) enterprises move to the cloud and use it in the most time, cost, and resource-efficient way possible.&lt;/p&gt;

&lt;p&gt;Nowadays, businesses get measured by their data: the quality of their data, the insights they can get from their increasing volumes of data, and the speed at which they can deliver it to their users. Speed has become a competitive advantage, getting intelligence and value from your data faster—ideally in real-time, as it “flies by.”&lt;/p&gt;

&lt;p&gt;Kalix leverages Akka to enable this new category of applications: ultra-low-latency, high-throughput, scalable, always-available, self-healing, and self-adapting distributed applications, delivered through a simple polyglot programming model available to most popular languages today—including Java, Scala, TypeScript, and JavaScript, with Go, Python, Swift, Kotlin, and more around the corner.&lt;/p&gt;

&lt;h2&gt;
  
  
  Kalix: bridging the worlds of edge and cloud
&lt;/h2&gt;

&lt;p&gt;We have moved closer to &lt;em&gt;edge computing&lt;/em&gt; in the last couple of years. Today, our industry has a well-built-out edge infrastructure. Most cloud providers offer small data centers out at the edge. CDN networks allow you to attach compute to the static data served. 5G is radically changing what's possible and how customers consume data and services. The edge opens up many new exciting use-cases and possibilities for serving customers more reliably and efficiently. Examples of use-cases include emergency services, trading systems, health care, factories, autonomous vehicles, e-commerce, farming, and gaming—the list is significant and growing.&lt;/p&gt;

&lt;p&gt;From an architectural perspective, the edge consists of hierarchical layers between the cloud and the devices; each layer is further away from the cloud but closer to the end-users. This means both new opportunities and challenges:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;

&lt;thead&gt;

&lt;tr&gt;

&lt;th&gt;Further out, toward the devices:&lt;/th&gt;

&lt;th&gt;Further in, towards the cloud:&lt;/th&gt;

&lt;/tr&gt;

&lt;/thead&gt;

&lt;tbody&gt;

&lt;tr&gt;

&lt;td&gt;10,000s to 100,000s of PoPs to coordinate (millions of “things” if we count the devices).&lt;/td&gt;

&lt;td&gt;10s to 1000s of nodes to coordinate.&lt;/td&gt;

&lt;/tr&gt;

&lt;tr&gt;

&lt;td&gt;Unreliable networks and hardware.&lt;/td&gt;

&lt;td&gt;Reasonably reliable networks and hardware.&lt;/td&gt;

&lt;/tr&gt;

&lt;tr&gt;

&lt;td&gt;Limited resources and compute power.&lt;/td&gt;

&lt;td&gt;Vast resources and compute power.&lt;/td&gt;

&lt;/tr&gt;

&lt;tr&gt;

&lt;td&gt;Ability to take local, faster, but less accurate decisions.&lt;/td&gt;

&lt;td&gt;Ability to take global, slower, but more knowledgeable decisions.&lt;/td&gt;

&lt;/tr&gt;

&lt;tr&gt;

&lt;td&gt;Low latency real-time streaming through in-process processing.&lt;/td&gt;

&lt;td&gt;Batch-oriented, high latency to backend services (from the edge users' perspective).&lt;/td&gt;

&lt;/tr&gt;

&lt;tr&gt;

&lt;td&gt;Calls for weaker consistency guarantees (eventual or causal consistency).&lt;/td&gt;

&lt;td&gt;Allows for stronger consistency guarantees (ACID).&lt;/td&gt;

&lt;/tr&gt;

&lt;tr&gt;

&lt;td&gt;More resilient and available (data, compute, and user co-located, so all needed to serve user is already there).&lt;/td&gt;

&lt;td&gt;Less resilient and available (dependent on a fast, reliable connection to the backend cloud to send/fetch data and perform computations).&lt;/td&gt;

&lt;/tr&gt;

&lt;tr&gt;

&lt;td&gt;Requires fine-grained data replication and mobility (that is adaptive and selective).&lt;/td&gt;

&lt;td&gt;Coarse-grained batch-oriented data replication is possible, and data can be stationary.&lt;/td&gt;

&lt;/tr&gt;

&lt;/tbody&gt;

&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;On top of all this, edge computing means orders of magnitude more user and telemetry data to manage. In fact, to this extent, &lt;a href="https://www.gartner.com/smarterwithgartner/what-edge-computing-means-for-infrastructure-and-operations-leaders" rel="noopener noreferrer"&gt;Gartner predicts&lt;/a&gt; that by 2025, 75% of enterprise-generated data will be created and processed at the edge, compared to 10% today. That’s a lot of critical and very demanding challenges for most organizations to tackle in less than three years to try and keep pace with known and (potentially even more harmful) competitors they don’t even know of yet that are building native solutions. Organizations can’t afford to add another layer of complexity to the picture by adding a new and distinct class of products, tools, techniques, and worries to evolve and keep up.&lt;/p&gt;

&lt;p&gt;We need to see the &lt;em&gt;edge as a continuum&lt;/em&gt; extending the cloud. Where we simply deploy applications that can run and move seamlessly between cloud and edge layers, depending on where it is currently most efficient for them to execute. What we need is a geo-distributed &lt;em&gt;cloud to edge data plane&lt;/em&gt; serving application data that can run anywhere: from the public cloud to 10,000s of Points-of-Presence (PoPs) out at the edge of the network, in close physical approximation to its users, where the co-location of data, processing, and end-user ensures ultra-low latency and high-throughput. A &lt;em&gt;data plane&lt;/em&gt; consumed as a PaaS, with a single unified programming model and DX, where the question of if you are running in the cloud or at the edge is a deployment and runtime decision, not a development or architectural decision.&lt;/p&gt;

&lt;p&gt;As discussed, low latency and high throughput are some of the most compelling advantages of edge computing. But many miss that the edge is equally much about high reliability and availability. It means that we can build applications that can continue to function without disruption in the face of failure. Applications composed of multiple autonomous services, all working independently with local data always right there, physically co-located with the end-user. Where services can communicate and share data point-to-point at the edge directly and not depend on an always-up connection back to the central cloud. This architecture (so-called &lt;a href="https://www.local-first-cooperation.org/" rel="noopener noreferrer"&gt;local-first software&lt;/a&gt;) allows for highly resilient systems, systems that must run 24/7 without stopping and that can adaptively detect, react to, and cope with the failure of its parts.&lt;/p&gt;

&lt;p&gt;Kalix is moving toward making this vision a reality. We are currently working on extending the Kalix cloud PaaS to the edge as a &lt;em&gt;cloud-to-edge data plane&lt;/em&gt;. Soon, developers will be able to build services without worrying if they will—now or eventually—run in the cloud or at the far edge; the programming model and operational experience are the same. With Kalix, semantics throughout the cloud-to-edge continuum will be maintained and ensure that the data will always be where it needs to be (and just the data that is currently required and nothing more); always available, correct, and consistent; injected into the services on an as-needed basis, automatically, timely, efficiently, and intelligently.&lt;/p&gt;

&lt;p&gt;With Kalix and its innovative Developer and ZeroOps Experience, powered by its low-latency and resilient Reactive Runtime, building cloud applications and extending them to the edge is now simple, just as it should be.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;NOTE:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Watch the accompanying webinar &lt;a href="https://kalix.io/webinar/kalix-tackling-the-cloud-to-edge-continuum" rel="noopener noreferrer"&gt;Kalix: Tackling the Cloud to Edge Continuum&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Next steps
&lt;/h2&gt;

&lt;p&gt;Visit &lt;a href="https://kalix.io" rel="noopener noreferrer"&gt;Kalix.io&lt;/a&gt; to learn more or register for a &lt;a href="https://console.kalix.io/register" rel="noopener noreferrer"&gt;free trial&lt;/a&gt;. Developers can review documentation and get started with videos &lt;a href="https://kalix.io/developer" rel="noopener noreferrer"&gt;here&lt;/a&gt; .&lt;/p&gt;

</description>
      <category>walkthroughs</category>
      <category>programming</category>
      <category>learning</category>
    </item>
  </channel>
</rss>
