Skip to main content
added 137 characters in body
Source Link
John Wu
  • 27k
  • 10
  • 69
  • 93

I don't know how big a project this is, but it seems to me this shouldn't be a matter of taste. There are design factors to consider. Your team should brainstorm on design factors and then rate them for risk, cost, and probability, then use some sort of objective scoring methodology to rank your options, both of which are perfectly viable for different situations.

Some questions for your group to consider:

How much risk is there that different inbound protocols will conflict with one another? You might want more process isolation if, say, your RS232 driver is leaky. Or maybe it is known to crash the box occasionally, in which case you'd want it to run on a separate machine entirely. Or maybe they're all completely stable, but you want their threads treated differently, e.g. different sized pools, shorter timeouts, or independent config.

Is there state? What is the impact of resetting any of the services? Do you have redundancy?

How fast are you going to grow? If you plan to grow fast, maybe you should try as hard as you can to get all the services running on a single box, so you can scale out more easily.

How complicated is the business logic? If your services are just sort of pass-through to the back end services, option 2 doesn't look so bad. If they are very complicated then option 1 is better.

What will be the release cycle? When you need to deploy bug fixes, is there any advantage to having separate services? Do you plan to synchronize feature releases, or will some channels get releases more often? Will the code be managed by different teams?

Also, be sure to engage your network engineering team, as it sounds like this solution is going to require a lot of plumbing and there may be connectivity concerns as well.

I don't know how big a project this is, but it seems to me this shouldn't be a matter of taste. There are design factors to consider. Your team should brainstorm on design factors and then rate them for risk, cost, and probability, then use some sort of objective scoring methodology to rank your options, both of which are perfectly viable for different situations.

Some questions for your group to consider:

How much risk is there that different inbound protocols will conflict with one another? You might want more process isolation if, say, your RS232 driver is leaky. Or maybe it is known to crash the box occasionally, in which case you'd want it to run on a separate machine entirely.

Is there state? What is the impact of resetting any of the services? Do you have redundancy?

How fast are you going to grow? If you plan to grow fast, maybe you should try as hard as you can to get all the services running on a single box, so you can scale out more easily.

How complicated is the business logic? If your services are just sort of pass-through to the back end services, option 2 doesn't look so bad. If they are very complicated then option 1 is better.

What will be the release cycle? When you need to deploy bug fixes, is there any advantage to having separate services? Do you plan to synchronize feature releases, or will some channels get releases more often? Will the code be managed by different teams?

Also, be sure to engage your network engineering team, as it sounds like this solution is going to require a lot of plumbing and there may be connectivity concerns as well.

I don't know how big a project this is, but it seems to me this shouldn't be a matter of taste. There are design factors to consider. Your team should brainstorm on design factors and then rate them for risk, cost, and probability, then use some sort of objective scoring methodology to rank your options, both of which are perfectly viable for different situations.

Some questions for your group to consider:

How much risk is there that different inbound protocols will conflict with one another? You might want more process isolation if, say, your RS232 driver is leaky. Or maybe it is known to crash the box occasionally, in which case you'd want it to run on a separate machine entirely. Or maybe they're all completely stable, but you want their threads treated differently, e.g. different sized pools, shorter timeouts, or independent config.

Is there state? What is the impact of resetting any of the services? Do you have redundancy?

How fast are you going to grow? If you plan to grow fast, maybe you should try as hard as you can to get all the services running on a single box, so you can scale out more easily.

How complicated is the business logic? If your services are just sort of pass-through to the back end services, option 2 doesn't look so bad. If they are very complicated then option 1 is better.

What will be the release cycle? When you need to deploy bug fixes, is there any advantage to having separate services? Do you plan to synchronize feature releases, or will some channels get releases more often? Will the code be managed by different teams?

Also, be sure to engage your network engineering team, as it sounds like this solution is going to require a lot of plumbing and there may be connectivity concerns as well.

Source Link
John Wu
  • 27k
  • 10
  • 69
  • 93

I don't know how big a project this is, but it seems to me this shouldn't be a matter of taste. There are design factors to consider. Your team should brainstorm on design factors and then rate them for risk, cost, and probability, then use some sort of objective scoring methodology to rank your options, both of which are perfectly viable for different situations.

Some questions for your group to consider:

How much risk is there that different inbound protocols will conflict with one another? You might want more process isolation if, say, your RS232 driver is leaky. Or maybe it is known to crash the box occasionally, in which case you'd want it to run on a separate machine entirely.

Is there state? What is the impact of resetting any of the services? Do you have redundancy?

How fast are you going to grow? If you plan to grow fast, maybe you should try as hard as you can to get all the services running on a single box, so you can scale out more easily.

How complicated is the business logic? If your services are just sort of pass-through to the back end services, option 2 doesn't look so bad. If they are very complicated then option 1 is better.

What will be the release cycle? When you need to deploy bug fixes, is there any advantage to having separate services? Do you plan to synchronize feature releases, or will some channels get releases more often? Will the code be managed by different teams?

Also, be sure to engage your network engineering team, as it sounds like this solution is going to require a lot of plumbing and there may be connectivity concerns as well.