A computer-implemented method comprising: receiving a transaction request for a plurality of database services (134, 310, 316) of a plurality of microservices (304, 306), each microservice (304, 306) including a corresponding database service (134, 310, 316) and a local transaction manager (320, 322) of the database service (134, 310, 316); submitting to each local transaction manager (320, 322) a local commit request corresponding to the transaction request for the database service (134, 310, 316) with which the respective local transaction manager (320, 322) is associated; receiving (1110, 1112) a plurality of local commit decisions of the local commit requests from each of the local transaction managers (320, 322), wherein the local commit decision from a particular one of the local transaction managers (320, 322) is based on a conflict check using an Optimistic Concurrency Control Protocol and a local cache of the local transaction manager (320, 322) storing logs of committed transactions performed on the database server of the database service (134, 310, 316) with which the local transaction manager (320, 322) is associated; generating (1114, 1116) a physical commit request to each of the local transaction managers (320, 322) based on the local commit decisions and a global commit decision, said global commit decision being generated based on the plurality of local commit decisions; communicating the global commit decision to the local transaction managers, each of the local transaction managers (320, 322) being configured to submit the physical commit request to a database server (312, 318) of the database service (134, 310, 316) with which the local transaction manager (320, 322) is associated based on the global commit decision; persisting, by each of the local transaction managers (320, 322), a log of committed transactions for the corresponding local transaction manager (320, 322) based on the order of transaction commit; and deterministically applying, by each of the local transaction managers (320, 322), the committed transactions from the log to the database server (312, 318) corresponding to the local transaction manager (320, 322) in the order of the log. receiving a transaction request for a plurality of database services (134, 310, 316) of a plurality of microservices (304, 306), each microservice (304, 306) including a corresponding database service (134, 310, 316) and a local transaction manager (320, 322) of the database service (134, 310, 316); submitting to each local transaction manager (320, 322) a local commit request corresponding to the transaction request for the database service (134, 310, 316) with which the respective local transaction manager (320, 322) is associated; receiving (1110, 1112) a plurality of local commit decisions of the local commit requests from each of the local transaction managers (320, 322), wherein the local commit decision from a particular one of the local transaction managers (320, 322) is based on a conflict check using an Optimistic Concurrency Control Protocol and a local cache of the local transaction manager (320, 322) storing logs of committed transactions performed on the database server of the database service (134, 310, 316) with which the local transaction manager (320, 322) is associated; generating (1114, 1116) a physical commit request to each of the local transaction managers (320, 322) based on the local commit decisions and a global commit decision, said global commit decision being generated based on the plurality of local commit decisions; communicating the global commit decision to the local transaction managers, each of the local transaction managers (320, 322) being configured to submit the physical commit request to a database server (312, 318) of the database service (134, 310, 316) with which the local transaction manager (320, 322) is associated based on the global commit decision; persisting, by each of the local transaction managers (320, 322), a log of committed transactions for the corresponding local transaction manager (320, 322) based on the order of transaction commit; and deterministically applying, by each of the local transaction managers (320, 322), the committed transactions from the log to the database server (312, 318) corresponding to the local transaction manager (320, 322) in the order of the log.