官术网_书友最值得收藏!

How to do it...

Migrating data from a monolith database to a new store fronted by a new service, without any impact on availability or consistency, is a difficult but common task when making the transition to microservices. Using our fictional photo-messaging application, we can imagine a scenario where we want to create a new microservice responsible for handling media uploads. In this scenario, we'd follow a common dual-writing pattern:

  1. Before writing a new service to handle media uploads, we'll assume that the monolith architecture looks something like the following diagram, where HTTP requests are being handled by the monolith, which presumably reads the multipart/form-encoded content body as a binary object and stores the file in a distributed file store (Amazon's S3 service, for example). Metadata about the file is then written to a database table, called attachments, as shown in the following diagram:

  1. After writing a new service, you now have two write paths. In the write path in the monolith, make a call to your service so that you're replicating the data in the monolith database as well as the database fronted by your new service. You're now duplicating new data and can write a script to backfill older data. Your architecture now looks something like this:
  1. Find all read paths in your Client and Monolith code, and update them to use your new service. All reads will now be going to your service, which will be able to give consistent results.
  2. Find all write paths in your Client and Monolith code, and update them to use your new service. All reads and writes are now going to your service, and you can safely delete old data and code paths. Your final architecture should look something like the following (we'll discuss edge proxies in later chapters):

Using this approach, you'll be able to safely migrate data from a monolith database to a new store created for a new microservice without the need for downtime. It's important not to skip this step; otherwise, you won't truly realize the benefits of microservice architectures (although, arguably, you'll experience all the downsides!). 

主站蜘蛛池模板: 清镇市| 广饶县| 且末县| 扎鲁特旗| 滦南县| 思茅市| 宜阳县| 延寿县| 永川市| 东海县| 海兴县| 宣威市| 栖霞市| 固原市| 长泰县| 广安市| 肃南| 吉安市| 赤壁市| 台南县| 乐清市| 津南区| 通榆县| 湘西| 瓮安县| 玉田县| 布尔津县| 新建县| 昌图县| 石台县| 资兴市| 黔西县| 凤凰县| 宜章县| 寻乌县| 正镶白旗| 建昌县| 福海县| 枞阳县| 内乡县| 桓台县|