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

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

主站蜘蛛池模板: 公安县| 拉孜县| 涟水县| 贵港市| 澎湖县| 呼伦贝尔市| 岐山县| 庄浪县| 唐山市| 嘉善县| 金溪县| 建始县| 阳春市| 阳谷县| 永城市| 西平县| 泰安市| 平邑县| 射阳县| 牙克石市| 东港市| 基隆市| 林周县| 永修县| 迁安市| 吴堡县| 乐安县| 沙田区| 内丘县| 荆州市| 竹北市| 沂源县| 武安市| 铜鼓县| 两当县| 栖霞市| 嵩明县| 汽车| 武冈市| 嘉黎县| 泾川县|