In general we divide our story into two parts: the dark and the bright.
The dark story is about PHP, MySQL with full text search and everything in one big pile of code. It's monolithic, cumbersome, and slow to develop. It worked well for quite some time, but we knew that at some point we wouldn’t be able to keep this going.
So let's fast forward to the bright story.
We are currently migrating component after component into a service-oriented architecture. We develop most of the things you see on rebuy.de.
Each service offers a RESTish API. RabbitMQ interconnects the services.
Our services have evolved quite differently. There are very new and shiny ones, based on Spring 4 and PostgreSQL. They are completely isolated from one another. And there are some older ones, utilizing Spring 3, which share the same database with other services.
At last, we have some very old PHP based services. Those are some of the oldest services that are still in use.
Our big plan™ is to finally migrate away from the dark times and only use isolated services.
We've accepted that the migration will take some time and therefore, we've tried to make this as smooth as possible.
First, we implemented a tool to publish messages directly from database changes. Now it only takes some lines of good java code to publish a message once a row in our database changes. This tool acts as a binary replication client for our mysql master and reads every change in the binary log.
For every interesting table there are one or more brokers for every event (INSERT, UPDATE, DELETE). Each broker decides what message to publish. In the not so bright times, we used this heavily to get new services started. Nowadays, new services do not heavily depend on this anymore.