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

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!). 

主站蜘蛛池模板: 桐庐县| 玛多县| 洛浦县| 娱乐| 镇坪县| 蒙山县| 平阴县| 铅山县| 隆化县| 福海县| 哈密市| 梁平县| 浮梁县| 汉阴县| 福安市| 锡林郭勒盟| 洪泽县| 法库县| 丰城市| 丹东市| 丁青县| 兴城市| 莱西市| 琼海市| 姚安县| 西和县| 拜泉县| 云和县| 简阳市| 大安市| 松潘县| 澄江县| 元氏县| 文登市| 锡林浩特市| 蒙山县| 布拖县| 陆河县| 伊吾县| 太白县| 安康市|