re: inter-service communication, if you're already using redis and you're not extremely latency sensitive, check out redis streams.
re: "accurate view of what 'cash' is available" - your worry sounds like a dirty read error. In your case, your portfolio service shouldn't rely on raw balances from an exchange but instead some view of "certified balances." If say you're transferring assets between exchanges, the transfer process would wait to updated the certified balances until the transfer has been completed on both ends.