ざっくりとしたメモ
マスターとスレーブが1:1の場合はテーブル単位での粒度で並列化を行う
仕組みとしてはグループコミットをcidを利用して、同じcid内だったらお互いに競合しないから異なるワーカースレッドによって並列化する。
違うcidだったら(テーブル内の同じ行を更新したり)競合する可能性があるので順番待ちする、という戦略
マルチソースレプリケーション等を行う場合はGTIDを用いて並列化する。
GTIDの最初のブロックであるdomain IDを見て、domain IDの粒度で並列化を行う。
あちらのサーバのDBにdomain id1を割り当てて、こちらのサーバのDBにdomain id2を割り当てると
domain id1内で行われたトランザクションの順序(e.g. T1->T2->T3)と
domain id2内で行われたトランザクションの順序(e.g. T4->T5->T6)は保つが
双方のレプリケーション適応は任意の順で挟まれた形で適応される(e.g.1 T1->T2->T4->T5->T3->T6, e.g.2 T1->T4->T5->T2->T6->T3)
どちらにしてもeventual consistencyなので必ず最新のデータにアクセスしたいならマスターにアクセスが必要
MySQL5.6のslave-parallel-workersの設定で並列化される粒度はDB毎なのでテーブル単位での並列化は行えない