Прежде чем копаться в деталях; Я просто хочу прояснить, что корпоративные базы данных, такие как oracle, предназначены для одновременной работы сотен вещей ... поэтому делать по одному из приложения за раз совершенно не обязательно. Аналогичным образом, во многих местах используются микроуслуги для параллельной обработки тысяч запросов в секунду.
Должен ли я быть осторожным, когда 2 экземпляра A пытаются получить доступ к базе данных oracle одновременно?
Это полностью зависит от операций, которые вы выполняете с базой данных, и от того, как вы их выполняете. Если вы используете транзакции базы данных, даже сложные рабочие процессы, состоящие из нескольких операторов, могут быть изолированы / безопасны при параллельном выполнении (на самом деле это очень нормально).
Но ... если я отправлю два параллельных запроса к вашим микросервисам, и это приведет к тому, что два потока (независимо от того, какое приложение) попытаются создать один и тот же объект в одной и той же таблице, один из них будет бить другой и другой потерпит неудачу (при условии, что ваша база данных имеет надлежащие ограничения).
Это может произойти даже с одним экземпляром вашей службы A, если вы разрешите ему иметь несколько соединений с базой данных (что вероятно, если вы используете библиотеку).
Итак ... если у вас есть несколько экземпляров микросервиса, разговаривающего с БД, вы, вероятно, не можете легко контролировать то, что они не пытаются делать одно и то же одновременно, поэтому вы должны иметь защитное кодирование для обнаружения и обработки при отправке дублирующих данных в БД и т. д. Кроме того, вы должны знать, что состояние БД может измениться из-за приложения, находящегося за пределами этого приложения, и перезагружать данные, если вы периодически что-то кэшируете.
Кроме того, что произойдет, если у меня будет только 1 экземпляр A и 2 экземпляра B, которые пытаются одновременно отправить сериализованные объекты в A?
Обычно это было бы нормально / ожидаемо. Идея в том, что вы создаете больше копий своего микро-сервиса, так как они требуются из-за нагрузки. Обычно микро-сервисы обрабатывают несколько запросов одновременно, будь то с помощью REST, сокетов и т. Д.
Итак, запросы не будут ждать ... если вы специально не закодировали свой единственный экземпляр A, чтобы иметь единственное соединение с базой данных и обрабатывать запросы в очереди. Но опять же, это зависит от ваших личных деталей реализации.