r/Akka 16h ago

I Built an Open-Source Contextual Ad Network with Scala & Apache Pekko Cluster(and Go)

1 Upvotes

An open-source ad network that targets content, not people.

Promovolve is an attempt to get back what magazine advertising had: relevant ads matched to what the reader is actually reading, with no cookies, no user profiles, no cross-site tracking, and no degradation of the reading experience. The page’s content is the only targeting signal. An article about hiking gets ads for hiking gear because of what it is, not because of who is reading it.

Being open source is not incidental: transparency is the product. Publishers and advertisers can inspect the auction, pricing, and pacing logic themselves and verify there is no hidden manipulation, something no closed ad network can offer.

Under the hood, the core API and distributed auction platform are built with Scala and Apache Pekko Cluster, providing a resilient, stateful distributed runtime for serving and budget management. The project also includes Kubernetes deployment manifests, making it straightforward to run in a clustered environment or adapt it to your own infrastructure.

Although Go is used for the BFF, the core platform is entirely built with Apache Pekko Cluster and written in Scala. The reason Go sits in front of the Pekko Cluster is pragmatic.

Go has an excellent ecosystem for HTTP servers, authentication, and user management. Those concerns are largely domain-independent and can evolve separately from the core advertising platform.

The core Ad API, on the other hand, is where the domain complexity lives: auctions, pacing, serving, campaign state, and distributed coordination. That’s where Apache Pekko Cluster shines, so I kept that entire layer in Scala.

The split isn’t because Pekko can’t handle HTTP. It’s because the HTTP-facing user management layer and the distributed advertising engine have very different concerns, and separating them keeps the core platform focused on the domain.

These days it’s common to build a microservice platform by combining a long list of technologies. I wanted to challenge that assumption and show that it isn’t always necessary. My goal was to keep the core platform inside Apache Pekko Cluster and see how far that architecture could go.

If Scala isn’t your thing, you can build the same architecture in Java using Apache Pekko.

https://github.com/promovolve/promovolve

My assumption is that as AI changes how people discover information, many casual searches will be answered directly by LLMs rather than leading users to websites.

The people who still choose to visit a page rather than just ask an LLM are making an intentional decision. That makes those visitors much more valuable to advertisers. If publishers continue to treat that audience as inventory to be maximized at all costs, they risk damaging one of their most valuable assets: the trust of readers who actively choose to be there.

With Promovolve, the creative is generated from what the landing page is actually trying to communicate, while remaining fully editable by the advertiser.

Instead of optimizing a banner purely to get the click, the ad is designed as the beginning of a three-page narrative that naturally leads into the landing page. The message before and after the click stays consistent.

Publishers review the advertiser, the creative, and the landing page. Only approved campaigns are eligible for delivery. The goal is to treat ads as part of the publisher’s editorial experience, not just as inventory to fill.

https://reddit.com/link/1v35yp0/video/rbpm3ph0kpeh1/player

https://reddit.com/link/1v35yp0/video/cj1lykhbkpeh1/player


r/Akka Jul 14 '25

New Agentic framework from Akka

2 Upvotes

I'm the CEO of Akka - http://akka.io.

We are introducing a new agentic platform building, running, and evaluating agentic systems. It is an alternative to Langchain, Crew.ai, Temporal, and n8n.

Docs, examples, courses, videos, and blogs listed below.

We are eager to hear your observations on Akka here in this forum, but I can also share a Discord link for those wanting a deeper discussion.

We have been working with design partners for multiple years to shape our approach. We have roughly 40 ML / AI companies in production, the largest handling more than one billion tokens per second.

Agentic developers will want to consider Akka for projects that have multiple teams collaborating for organizational velocity, where performance-cost matters, and there are strict SLA targets required.

There are four offerings:

  • Akka Orchestration - guide, moderate and control long-running systems
  • Akka Agents - create agents, MCP tools, and HTTP/gRPC APIs
  • Akka Memory - durable, in-memory and sharded data
  • Akka Streaming - high performance stream processing

All kinds of examples and resources:


r/Akka May 08 '25

Building with Akka - series!

8 Upvotes

Hi everyone !
We wanted to share something we’ve been working on at Scalac - a 4-part series called "Building with Akka"
The idea: show how to build a Customer Registry Application using Akka, covering:
 Setting up the project
 Modeling the domain
 Implementing views & APIs
 And finally, deployment
We just published Part 4 (deployment!), but if you’re interested, you can start from the beginning and follow the whole process.
Here’s the link if you want to check it out: https://scalac.io/blog/akka-platform-intro/


r/Akka May 05 '25

Announcing a new tech podcast: CTO Asks CTO!

3 Upvotes

Our first guest: Jonas Bonér - CTO and creator of Akka, interviewed by Scalac’s CTO Łukasz Marchewka.
First episode’s topics: designing distributed systems, the future of the Akka Platform, AI, and much more.
Listen here: https://scalac.io/blog/jonas-boner-akka-cto-ask-cto/


r/Akka Nov 12 '24

[Meetup] Functional World #12 | How to handle things in your project without DevOps around?

2 Upvotes

Just one week to go! Join Functional World event - this time it's open to everyone - no matter what language you code in ;) Join us for a hands-on session where you’ll learn how to keep things smooth and fast, even when there’s no DevOps around. And leading the way is Darek, our DevOps pro from Scalac :) You can read more or sign up here if you want to be updated ;) You can also go directly on YouTube.

See you on November 19th at 6 PM CET!


r/Akka May 16 '24

Apache Software Foundation Announces New Top-Level Project Apache Pekko

Thumbnail
news.apache.org
9 Upvotes

r/Akka Mar 23 '24

unpark usage in my akka system

2 Upvotes

Hi guys, Do you have any idea why Unsafe.unpark has a high CPU time.

the system has mainly two dispatchers
1- the default dispatcher.
2- JDBC dispatcher that uses blocking API. (50 Threads pool size)
and the cpu has two cores.


r/Akka Mar 18 '24

Handling WebSocket Client Disconnects With Pending Messages to be Delivered

2 Upvotes

I have a case where my client opens a WebSocket connection upon which I subscribe to a MQTT topic and fetch the messages that I need to publish to this client. It could be that in-between the client disconnects and my message that I need to send to this client is not available anymore. So I re-write this message back to MQTT. Since I use Play Framework for my WebSocket server, I have an Actor that handles it. Here it is:

class OCPPActor(sink: ActorRef, chargingStationId: String, isPersistentConn: Boolean = false) extends Actor with Timers {

private val mqttConfig = bindings.appConfig.mqttConfig

// This will schedule to send the KeepAlive for WebSocket connections timers.startTimerWithFixedDelay("KeepAliveKey", "KeepAlive", 50.seconds) MqttClientFactory.subscribe(sink, mqttConfig, chargingStationId, MqttQos.EXACTLY_ONCE) // Subscribe to dead letters to handle message sending failures context.system.eventStream.subscribe(self, classOf[DeadLetter])

override def receive: Receive = {

case jsValue: JsValue => // handle jsValue

case DeadLetter(msg, _, _) if msg.isInstanceOf[MqttCSMSMessage] => logger.error("Failed to send CSMSMessage due to CS disconnection") val str = msg.asInstanceOf[MqttCSMSMessage].toString // TODO: This should be a Json String MqttClientFactory.publish(mqttConfig, chargingStationId, MqttQos.EXACTLY_ONCE, str)

case "KeepAlive" =>

logger.info("Received message KeepAlive .........") // TODO: How to deal with msgTypeId. I just choose a random value sink ! Json.toJson(heartbeatResponse(2,"HeartbeatRequest"))

case msg: Any =>

logger.warn(s"Received unknown message ${msg.getClass.getTypeName} that cannot be handled, " + s"eagerly closing websocket connection") timers.cancel("KeepAliveKey") self ! PoisonPill } }

As you can see that the case DeadLetter handles the scenarios where I know that the write to the client via the open WebSocket fails. Is this a good approach? What pitfalls could I expect?


r/Akka Feb 22 '24

What to do with your End Of Life Akka?

Thumbnail
softwaremill.com
2 Upvotes

r/Akka Nov 23 '23

Integrating Akka persistence actors with Redis

Thumbnail
medium.com
1 Upvotes

r/Akka Sep 06 '23

TDD with Akka.Net

2 Upvotes

I have two related questions:

  1. What are recommended approaches / or suggestions for doing TDD with Akka.net? [or just any advice building testable akka systems].

  2. For testing in general, does it make sense to only test the whole actor system (or isolated actor hierarchies) instead of individual actors?

If the entire application is the actor system, that would mean you would only have tests which tests the whole system, whereas normally there would also be functional and unit tests.


r/Akka Sep 04 '23

Architecture decisions when using Akka.Net

2 Upvotes

When following the clean architecture, it is possible to decouple external dependencies such as database providers or frameworks by defining an interface. This interface is then normally used in the Application layer and implemented in the Infastructure layer.

This makes it possible to implement any database provider without having to make changes to the application logic.

Is something similar possible when using Akka.Net?

In other words, is it possible to write an application where the Akka.net implementation is abstracted in such a way that it would be possible to switch to another framework?


r/Akka Jul 08 '23

In Akka, how to make an actor accept different subsets of messages at different times?

Thumbnail self.scala
1 Upvotes

r/Akka Jun 11 '23

Event().none vs Event().unhandled

2 Upvotes

What is the difference between Event().none and Event().unhandled? It's my understanding that in both cases, nothing gets persisted, but I'm sure there is more nuance as .none is specifically mentioned to be used for read-only cases by the documentation.


r/Akka Jun 11 '23

I am looking for descriptions of Akka's internal components

Thumbnail self.scala
2 Upvotes

r/Akka May 16 '23

Łukasz Michniewicz BUILDING MULTIPLAYER GAME BACKEND WITH AKKA ON AWS LAMBDA Scalar Conference 2023

Thumbnail
youtube.com
2 Upvotes

r/Akka May 12 '23

akka projection - rate limiter

1 Upvotes

What would be the right way to add a rate limiter to an akka projection?

thanks

ps. aiming to slow down ingestion/reading inputs (in order to use less cpu/io)


r/Akka Sep 09 '22

Getting started in Akka with Scala ?

3 Upvotes

Hi everyone! I've just buy the book 'Akka in Action' for learning Akka.

However, while I was reading, I thought that it is not really good for someone who doesn't have any experience like me (I just know few concepts like actors, concurrency and so on but I've never throw any single line of akka)

Do you know some books to start with Akka?

Thanks! 😊


r/Akka Sep 08 '22

Why We Are Changing the License for Akka

Thumbnail
lightbend.com
1 Upvotes

r/Akka Jul 26 '22

Understanding Akka Projections

5 Upvotes

Can someone help me with resources for an in-depth intuition and understanding of Akka Projections along with some coding examples?

The documentation does give an explanation but I'm not satisfied with the coding examples.

Thanks in advance!


r/Akka May 03 '22

Drinking a river of IoT data with Akka.NET. Talk by Hannes Lowette

Thumbnail
youtu.be
1 Upvotes

r/Akka Mar 22 '22

How to update new version of actor in akka cluster without downtime? I use Akka typed 2.6 and deploy in docker container. Thank you for reading

3 Upvotes

I mean, if I have a new actor (new code), how can I deploy to replace the existing one running on the cluster. I've read in Akka document about Rolling update, but I couldn't see the detail.


r/Akka Jan 19 '22

Does akka http meet your performance expectation in production?

10 Upvotes

For my case, i recently re-implemented an old Go code of an event gateway rest API with Scala + Akka HTTP. The reason is that we are a data engineering team, and none of us are familiar with Golang stack. We re-code it to improve maintainability.

The logic is extremely simple, the HTTP server just listens for POST requests, extract the payload in raw bytes and forward to Kafka.

Previously, with the Go (Gin) version, with 1 Core, we are able to reach 2.5K RPS. Now, with the Akka HTTP version, we could not go higher than 1.1K RPS.

The Akka HTTP version is 10.2.7.

Initially, we thought It could be the Kafka producer that slows the server down, but it wasn't, without the Kafka producer, RPS did not improve.

Is this a valid outcome? That we have to accept that Go(Gin) is >2x faster than Akka HTTP?


r/Akka Jan 18 '22

Questiona bout Akka Streams documentation

2 Upvotes

In the Akka Streams documentation here they give a "browser embedded example" that they say you can edit and run in the browser.

What do they mean by this and how are you supposed to do that? They don't offer any more information on that example.

Thank you!


r/Akka Dec 17 '21

Akka monolith

5 Upvotes

Has anyone built an akka monolith? Would it be a good idea to start with a modular monolith and then split it into microservices once scalability is an issue?