5 ms·
But all those data sources are connected to from the same runtime, right? And to run it locally you need access to dev versions of all of them. And when there
by jameshart 5y ago
But all those data sources are connected to from the same runtime, right?
And to run it locally you need access to dev versions of all of them.
And when there’s a security vulnerability in your comment system your tape library gets wiped.
- jacinda 5y ago> But all those data sources are connected to from the same runtime, right? Yes, this is an accurate assessment from what I've seen. > And to run it locally you need access to dev versions of all of them. In my experience, no. If the runtime never needs to access it because you're only doing development related to datastore A, it shouldn't fall over just because you haven't configured datastore B. Lots of easy ways to either skip this in the runtime or have a mocked interface. > And when there’s a security vulnerability in your comment system your tape library gets wiped. This one really depends but I think can be an accurate criticism of many systems. It's most true, I think, when you're at an in-between scale where you're big enough to be a target but haven't yet gotten big enough to afford more dedicated security testing at an application code level.
- KronisLV 5y agoThis actually feels like a good example of the modularity that i talked about and feature flags. Of course, in some projects, it's not what one would call a new architecture (like in my blog post), but rather just careful usage of feature flags. > But all those data sources are connected to from the same runtime, right? Surely you could have multiple instances of your monolithic app: # Runs internally app_instance_1_admin_interface: environment: FEATURE_ENABLE_ADMIN_INTERFACE=true # Runs interally app_instance_2_tape_backup_job: environment: FEATURE_ENABLE_TAPE_BACKUP_JOB=true # Exposed externally through LB app_instance_3_comment_system: environment: FEATURE_ENABLE_COMMENT_SYSTEM=true If the actual code doesn't violate the 12 Factor App principles, there should be no problems with these runtimes working in parallel: https://12factor.net/ https://12factor.net/ (e.g. storing data in memory vs in something external like Redis, or using the file system for storage vs something like S3) > And to run it locally you need access to dev versions of all of them. With the above, that's no longer necessary. Even in the more traditional monolithic profiles without explicit feature flags at work, i still have different run profiles. Do i want to connect to a live data source and work with some of the test data on the shared dev server? I can probably do that. Do i want to just mock the functionality instead and use some customizable data generation logic for testing? Maybe a local database instance that's running in a container so i don't have to deal with the VPN slowness? Or maybe switch between a local service that i have running locally and another one on the dev server, to see whether they differ in any way? All of that is easily possible nowadays. > And when there’s a security vulnerability in your comment system your tape library gets wiped. Unless the code for the comment system isn't loaded, because the functionality isn't enabled. This last bit is where i think everything falls apart. Too many frameworks out there are okay with "magic" - taking away control over how your code and its dependencies are initialized, oftentimes doing so dynamically with overcomplicated logic (such as DI in the Spring framework in Java), vs the startup of your application's threads being a matter of a long list of features and their corresponding feature flag/configuration checks in your programming language of choice. Personally, i feel that in that particular regard, we'd benefit more from a lack of reflection, DSLs, configuration in XML/YAML etc., at least when you're trying to replace writing code in your actual programming language with those, as opposed to using any of them as simple key-value stores for your code to process.
- jameshart 5y agoYou're talking about something very odd here... a monorepo, with a monolithic build output, but that... transforms into any of a number of different services at runtime based on configuration? Is this meant to be simpler than straight separate codebase microservices?
- Retric 5y agoIt’s not that odd. Databases, print servers, or web servers for example do something similar with multiple copies of the same software running on a network with different settings. Using a single build for almost identical services running on classified and unclassified networks is what jumps to mind.
- jameshart 5y agoTo what end? Code reuse?
- Retric 5y agoIt can be. If you have two large services that need 99+% of the same code and their built by the same team it can be easier to maintain them as a single project. A better example is something like a chain restaurant running their point of sale software at every location so they can keep operating when the internet is out. At the same time they want all that data on the same corporate network for analysis, record keeping, taxes etc.
- smaudet 5y agoIts really not odd at all...this is how compilers work...we have been doing it forever. Microservices were a half baked solution to a non-problem, partly driven by corporate stupidity and charlotan 'security' experts - I'm sure big companies make it work at enough scale, but everything in a microservice architecture was achievable with configuration and hot-patching. Incidentally, you don't get rid of either with a MCS architecture, you just have more of it with more moving parts...absolute sphegetti mess nightmare.
- Retric 5y ago> But all those data sources are connected to from the same runtime, right? Not always directly, often a modern wrapper is setup around a legacy system that was never designed for network access. This can easily mean two different build systems etc, but people argue about what is and isn’t a monolith at that point. Nobody counts the database or OS as separate systems in these breakdowns so IMO the terms are somewhat flexible. Plenty of stories go “In the beginning someone built a spreadsheet … shell script … and the great beast was hidden behind a service. Woe be unto thee who dare dare disturb his slumber.”