Reputation: 93
I'm building a hospital management system that spans medical functionalities (e.g., RIS, LIS, PACS) and administrative domains such as billing, maintenance, inventory, pharmacy, and human resources. It’s intended to be an all-inclusive hospital management application.
Current Setup
Challenges
Questions
I’d greatly appreciate any advice on how to improve the architecture to achieve scalability, fault tolerance, and maintain the benefits of segmentation with minimal duplication. Let me know if more details are needed!
Upvotes: 0
Views: 61
Reputation: 2743
First, I will nitpick a little bit : you are doing service-oriented architecture (SOA), not microservices.
Now about your system, my first advice is to not ask question about your SOA that you would not ask about a monolithic architecture.
Let take the communication service as an example. If you were building a monolith, you would still have to worry about mails or notifications not being sent, but you would not worry about the other modules not being able to reach the communication module. I recommend you do the same with your SOA.
Elaborate scenarios for the case you cannot send communications for reasons outside your responsibility : your mail provider is shutdown, the network has a failure, ... You can imagine a downgraded scenario, you can use two different providers to minimize the risks, or you can choose to live with it because the odds are low.
When doing SOA, there is a risk a service cannot reach another service, which do not exist in monolith. But there are plenty of ways to ensure that it will not happen :
If you run all your services in Kubernetes, chances are low that services can't communicate together. In a node or the network goes down, the cluster removes the faulty or unreachable node from the cluster, eventually starts new pods to compensate the lost ones, and your system as a whole will continue to run just the same (service availability > server availability).
If you allow me to give you an advice, pay great attention to "transactions". Do not use distributed transaction manager, that is hell. I suggest :
Hope this helps, good luck with your project, this is really ambitious !
Upvotes: 1