I have a multi-region Sitecore deployment with CDs in the US and the UK using Sitecore 8.2 with MongoDb as the xDb, like this:
UK US
CD1 CD2
Mongo primary + arbiter <-----> Mongo secondary
Mongo is geo-distributed with a connection string on each CD that prefers reads from the nearest replica but will always write to the primary replica. This ensures any kind of read of xDB contact information on page-load is as fast as possible for each region.
I want to upgrade to Sitecore 10.1. MongoDB has been discontinued for xDB (now xConnect) in 10.1 and I must use SQL server.
I have read up on read scale-out (https://doc.sitecore.com/developers/101/platform-administration-and-architecture/en/xconnect-scalable-reads.html) but this does not appear to be relevant to my use case - it's for same-region scale-out, not for geo-replication.
The official docs (https://doc.sitecore.com/developers/101/platform-administration-and-architecture/en/scaling-and-configuring-the-xconnect-collection-service-role.html) state that:
Deploy the xConnect Collection service as close as possible to the xDB Collection database. It is more important to reduce latency between the service and the database than between the service and clients such as Content Delivery.
They also state:
All instances must read from a single centrally located xDB Collection database (database sharding by geography is not supported).
The docs don't state what kind of performance hit you're going to take by the CD communicating to the xConnect service sat in a separate region.
Am I right in thinking that there will be a performance hit due to the db not being geo-replicated? Or is there some other mechanism I'm missing that allows Sitecore to load a contact profile for personalization on page-load? If not, how can I geographically replicate the xConnect collection SQL database in order to minimize read latency on page load within each region?
EDIT I'm specifically talking about the following sequence of events (particularly points 2 and 4) as described in the docs here (https://doc.sitecore.com/developers/101/sitecore-experience-platform/en/tracking-contacts.html)
Contact visits www.sitecore.net - they have the SC_ANALYTICS_GLOBAL_COOKIE set to 60573a38-6925-4d92-8bff-327e41650d8f
Request is sent to xConnect for the device profile matching 60573a38-6925-4d92-8bff-327e41650d8f
The LastKnownContactId of the device profile is used to retrieve a contact from xConnect by its tracker identifier
If the contact exists, it is loaded into session - if not, a new GUID is generated (the new contact will be saved on session end)
At the end of the session, a second interaction is saved against the contact