TE
TechEcho
Home24h TopNewestBestAskShowJobs
GitHubTwitter
Home

TechEcho

A tech news platform built with Next.js, providing global tech news and discussions.

GitHubTwitter

Home

HomeNewestBestAskShowJobs

Resources

HackerNews APIOriginal HackerNewsNext.js

© 2025 TechEcho. All rights reserved.

MonolithFirst

539 pointsby r4umalmost 10 years ago

52 comments

ecoffeyalmost 10 years ago
For me the big takeaway is this:<p>Refactoring across the call stack is orders of magnitude easier than refactoring across a socket.<p>Sacrificial or not, you can still write the Monolith as &quot;Service Oriented&quot;, just that boundary is the call stack. Especially if you&#x27;re comfortable with IoC and DI.<p>Building on the latter I&#x27;ve had success with that. Stubbing out hardcoded concepts that I know will come from a as-yet-unwritten service in the future. Then you start pushing those hardcoded things &quot;down and out&quot;; e.g. it was hardcoded in App A, but now App A requests it from App B, but App B just has the hardcoded thing.
评论 #9654823 未加载
评论 #9653961 未加载
评论 #9655348 未加载
krisdolalmost 10 years ago
The companies&#x2F;stacks Fowler encounters are generally in a problematic state. Thoughtworks, like other consulting companies, is generally hired when things are already going wrong. If they are hired to assess a broken monolith stack, the refactoring to microservices is naturally going to yield positive results, and it&#x27;s easy to come to the conclusion that microservices are an improvement when refactoring from a monolith stack. When they are hired to assess a broken microservices stack, it&#x27;s easy to come to the conclusion that starting with microservices is broken. What they don&#x27;t usually see is the hundreds of instances of microservices (and monoliths) working as intended, as there is typically no need to call in a very expensive consultant in those cases. How many times in the case of badly-organized Microservices was the solution to migrate to a single monolith? I imagine the solution is more often to re-organize the services. If that&#x27;s true, then one cannot say that microservices-first fails -- just that badly-organized microservices-first fails.<p>Starting with microservices first, especially in a small team of developers (but more than 1), helps things move much quicker than it did with everyone sharing responsibility for the same codebase. Organizational structure tends to reflect its products&#x27; structure. Microservices requires that the splitting of responsibilities between teams or developers roughly matches the split of responsibilities among services. Otherwise, you&#x27;re just working on micro-monoliths.<p>An actual study needs to be performed before deciding on a &quot;Right Approach&quot; as this piece does.
评论 #9655605 未加载
评论 #9655646 未加载
评论 #9654265 未加载
评论 #9654669 未加载
评论 #9656233 未加载
评论 #9657464 未加载
评论 #9657537 未加载
评论 #9657361 未加载
mpweiheralmost 10 years ago
I had great success converting a &quot;microservices&quot; architecture to a monolith at the BBC back in 2003&#x2F;2004. The result was ~100-1000 times faster (speed was an issue with the original), had a fraction of the code, used 1 machine instead of a dozen, was more maintainable, had effectively zero failures over several years versus several a day, was trivial to install (copy this jar over here) etc.
评论 #9656228 未加载
lmmalmost 10 years ago
I once worked for a company that was sunk by a microservice-first architecture. The &quot;architect&quot; in charge was a big Fowler fan who would quote him to justify every decision. Every developer knew the architecture was wrong (and many said so - but the architect had the authority to overrule them, which is maybe the real problem).<p>I guess it&#x27;s good to finally see some acknowledgement, but this is too late for that particular organization. Beware of hyped architecture bandwagons?
评论 #9653619 未加载
评论 #9654182 未加载
评论 #9654836 未加载
derefralmost 10 years ago
Alternately: design your application as a bunch of Service objects with clear APIs that make (the moral equivalent of) RPC requests to one-another. Do this all in the same process. Whenever a Service turns out to need separate scaling, hoist the code for it out (no need to change it) and replace the &quot;null modem&quot; RPC layer between it and the rest of your code with a real socket-based gateway.<p>Hey! You&#x27;ve just invented Erlang!
评论 #9653789 未加载
评论 #9654349 未加载
评论 #9655749 未加载
评论 #9656229 未加载
评论 #9654359 未加载
noenzymealmost 10 years ago
Experience Report: We just went through the decision to build as a monolith or via microservices. The original decision was to go with microservices as the rest of our systems are designed that way.<p>As the time pressure mounted the microservices that communicated naturally combined. The driving force was just the cycle time. Testing and deploying microservices took longer. Mind you, not minutes vs hours. Just a few extra minutes makes a difference if you do it often enough.<p>One decision that give us confidence we will be able to split the system back out again was to use the stuartsierra&#x2F;component library. By using DI we can be fairly confident we don&#x27;t build dependencies we aren&#x27;t aware of. We simply substitute a client that talks over the network in for the one that does the calculation locally.<p>We are still in the stabilization zone but have already started to split out services. Code velocity is the driving force for the splitting. Certain components are well understood and fairly robust other still young and poorly understood. We want to limit our ability to accidentally screw up something we have already gotten right. So the components that haven&#x27;t changed in a while get spun out.
评论 #9655937 未加载
评论 #9656941 未加载
meesterdudealmost 10 years ago
I&#x27;ve wondered about how to grow a rails app. Really, you can get pretty far on one server. I think people go SOA too soon, instead of just trying to throw more resources at it (which is easier). I mean, basecamp isn&#x27;t SOA and they handle plenty of traffic. Not that everyone is them of course; but most aren&#x27;t amazon, either.<p>Really, I have no qualms with a monolith, but having 100 models to look at &#x2F; understand is not easy. Chunking them up in some way, even if only by name (like product_sku, product_image) can really go a long way in understanding how an app works; thats really what I found attractive about SOA; but I could certainly do without the socket inbetween.
评论 #9656490 未加载
telalmost 10 years ago
There are two orthogonal concerns with microservices. First is the scaling aspect. A microservice architecture has many potential scale point as each independent service can be horizontally scaled independently. Unfortunately, while achieving this is possible in a microservice architecture it&#x27;s an enormous added layer of complexity today.<p>The second aspect is, I think, more obviously compelling in that microservices force large scale modularity boundaries into your application. These are at some level entirely semantic boundaries, but the nature of microservice isolation forces them to be complete boundaries involving isolation, serialization, dirty checking, published APIs&#x2F;interfaces, etc.<p>This, I feel, is unambiguously fantastic.<p>The trick is of course that this can be achieved in a &quot;monolith&quot; just the same. It&#x27;s merely often not because people take advantage off <i>too many</i> features of monolithic development. Shared memory and shared effect space, guaranteed communication causing you to weaken interfaces, fast response time causing you to never be public about the interfaces to a particular submodule. These together lead toward spaghetti code and the interlocking danger of monolithic design.<p>So, avoid them and make a monolith. Breaking it apart later will be easy if there are already logical cuts in your design. Don&#x27;t rely on shared effects, shared state, or &quot;hidden&quot; API layers. You can use REST even within a single system.
spydumalmost 10 years ago
I think a lot of people tend to over-estimate how &quot;scalable&quot; they need their platform to be. Or worse, they spend so much effort on what they think will be a bottleneck, only to find they spent optimizing something which could have run on a single core.<p>I tend to think monolith first makes sense, unless you thoroughly understand the problem-space.. even then, monolithic POC might be worth it just to confirm things.
评论 #9654021 未加载
vendakkaalmost 10 years ago
Conway&#x27;s Law comes into play a little here. Microservices provide organization level flexibility at the cost of operational and development complexity. For small teams and especially at the start of a project, organizational flexibility is usually not needed. Paying the extra ops and dev cost is unnecessary and even dangerous.<p>In the above, when I say microservices incur ops and dev cost here&#x27;s what I&#x27;m talking about<p>* Debugging tools need to function across machine boundaries<p>* Deployments potentially need to be scheduled in multiple stages based on the service dependency graph<p>* Developer and test environments become more complex.<p>* The number of failure modes increases due to the network.<p>All this means we need more code, tools and processes. This investment is worth it and even required for large organizations. They usually have the infrastructure in place and the financial resources to invest. When I was at Google building a microservices based system was so much easier with Borg, Dapper, etc. This kind of tooling is only now emerging in a useable form in the open source world.<p>EDIT: formatting, grammar
ianbickingalmost 10 years ago
I think one of the essential reasons to start with a monolith is cultural. When you have an existing project&#x2F;product and you are making incremental improvements to that project, there&#x27;s a lot of shared understanding (everyone knows what the product already does), and so a small group can go off and work in isolation and get some efficiency from that.<p>When the product doesn&#x27;t even exist, there is not shared understanding. It takes constant communication to prioritize correctly, and to understand the purpose of all the pieces, and to detect cases where an implementation is diverging from the purpose. In a kind of inverted Conway&#x27;s Law, the architecture of the application will affect the communication structures of the team. You don&#x27;t want the team to communication like microservices communicate. You want the team to communicate like a monolith, where everyone is always in everyone else&#x27;s business, where conflict is frequent, but conflict resolution cannot be avoided.<p>I&#x27;m in the middle of a greenfield project where there&#x27;s lots of little pieces communicating to each other over message channels. It&#x27;s not an architectural preference, it&#x27;s just how the environment works. Every single-page-app-style website has at least two services with a message channel. It&#x27;s interesting to look at how this can be technically reminiscent of microservices, but culturally completely different. Those message channels don&#x27;t make my project any less of a monolith (just a kind of annoying to debug monolith). But that&#x27;s because they are deployed together, developed together, no individual has a responsibility that ends at one of those boundaries, there&#x27;s no contract across those boundaries, there&#x27;s few principles applied to the design of those communication channels (experiential and intuitive principles I suppose). That team structure, and that shared relation to the code, feels absolutely right for a new project.
EdSharkeyalmost 10 years ago
Seems like reality is settling in.<p>I mean, it makes sense to me: a team should keep its code well-factored but in a single codebase that&#x27;s integrated and ready to deploy (as one or more deployable units) for as long as is tolerable&#x2F;possible.<p>I think a trigger for splitting a module off from a monolithic codebase would be when its value or resource utilization has become disparate enough from the rest that it deserves its own infrastructure and&#x2F;or its own maintenance crew.
评论 #9655782 未加载
评论 #9656724 未加载
lobster_johnsonalmost 10 years ago
The article misses an important aspect of microservices: They&#x27;re reusable!<p>Almost all of the swathe of microservices we&#x27;ve developed internally are general-purpose. We&#x27;ve built a dozen or more user-facing apps on top of them. If I wanted to build a new app today, I would typically sit down and write a Node + React app with no backend code needed because I can just call our existing services.<p>For example, we have a microservice dedicated to storing documents. With this I can create a todo list, a blog app, a Reddit-type link aggregator with comments, etc. If I need login, there&#x27;s a microservices that mediates between an identity data model and an OAuth account registry. If I need an upvote&#x2F;downvote system, we have a microservices optimized just for that. We have services for sending notifications across different transports (email, SMS); &quot;followings&quot; and sending digests about updates to things you&#x27;re following; organization trees; verifying email addresses and mobile phone numbers and other verification sources; processing photos, audio and video; collecting events for aggregating in an analytics store; etc.<p>This ability to &quot;pick and mix&quot; functionality you need is the real beauty of microservices, in my opinion. It&#x27;s a huge time saver. We just whipped up a new site recently where 95% of the work was purely on the UI, since all the backend parts already existed; the remaining 5% was just code to get data I to the system from a third-party source.<p>This does require that you plan every microservices to be flexible and multitenant from day one. It&#x27;s a challenge, but not a big one.
评论 #9657091 未加载
评论 #9658755 未加载
bad_useralmost 10 years ago
I do agree with this article. We are working on a project based on a micro-services architecture and my experience matches.<p>First of all splinting functionality in multiple services is really hard and the first version of your architecture is probably flawed. It&#x27;s also really hard to establish the responsibilities of each component, the boundaries, whereas it is really easy to take shortcuts that invalidate the modularity or the re-usability of those components.<p>Of course, these wouldn&#x27;t be such big of a deal, except that refactoring becomes really difficult, because refactoring now often involves changes in how these services communicate and moving responsibilities around. Also, we are often talking about teams of more than two or three people, since two or three people will almost always choose to execute a monolith first - so in such teams the responsibilities are often divided between people, with people having an incomplete view of the whole system, so refactoring across the whole stack becomes a real bitch - next to impossible actually if the management or the clients are not acquainted with how software development works, as the development of new features is always preferred over dealing with technical debt (non-software folks do not understand technical debt).<p>Therefore I agree wholeheartedly with what is being said. It&#x27;s not that micro-services don&#x27;t work, however you need very senior people that know how to design such systems and you still have to throw away the first version of the entire system. And if you think you&#x27;re one of those people that think they get it, but never had a failure, then have some patience, as you&#x27;ll get there :-)
ShirsenduKalmost 10 years ago
Micro services Architecture seems to be the new hotness. I feel it to be yet another case of premature optimisation. :(. For me the best way has been writing a monolithic rails app and then writing rack&#x2F;Sinatra apps to break them apart depending upon production bottlenecks. This has helped manage performance as well as code.
评论 #9654078 未加载
rbanffyalmost 10 years ago
Premature optimization is the root of all evil.<p>If you were able to accurately predict the future so you could know what your pain points would be as you grew, you would be wasting your talent writing software. You should be playing the lottery.
评论 #9654161 未加载
jcromartiealmost 10 years ago
Evolutionary design doesn&#x27;t just work, it&#x27;s the only kind of design there is. Design is not done in a vacuum. We fool ourselves when we write software, thinking that we&#x27;re creating something ex-nihilo, plopping it down in Eden and declaring that it is good.
评论 #9654719 未加载
sinzonealmost 10 years ago
This is so true in our case. We started building Mashape, the marketplace for APIs in 2011. Two years later it become +100k loc of spaghetti Java code. We started a big re-write&#x2F;de-coupling phase in 2014 which also opened new business opportunities since we were able to spin off some features as single products.. and this was not expected but definitely created advantages not only from the code&#x2F;productivity side but from a business side too.<p>We have embraced Nginx and built KONG[1] as the main API Gateway for managing our microservices. It made our transition much faster and easier since we were able to orchestrate common functionalities across services, such as logging and authentication, in a few lines of code.<p>[1] A month ago we&#x27;ve released Kong open source: <a href="https:&#x2F;&#x2F;github.com&#x2F;Mashape&#x2F;kong" rel="nofollow">https:&#x2F;&#x2F;github.com&#x2F;Mashape&#x2F;kong</a>
nijikoalmost 10 years ago
Do whatever feels best for your company at the moment.<p>Monolith - Easier and straightforward, less thought on architecting the puzzle, and more about solving the issue at hand. Later down the line, this will cause pain points, should you be able to justify that pain with momentary momentum then this is the option for you.<p>Multi-tier - Decoupled monolithic application, generally happens after second iteration of a monolithic application.<p>Microservices - Modular, and requires more thought behind the interactions and architecture of the system. More thought should be put into also the deploy, and scaling of the system as well. Eventually you will have to do this. It is very obvious this is the natural progression of things as something grows.
swansonalmost 10 years ago
There was an interesting discussion on a recent Bikeshed Podcast episode about Monolith vs Microservices, featuring DHH: <a href="http:&#x2F;&#x2F;bikeshed.fm&#x2F;14" rel="nofollow">http:&#x2F;&#x2F;bikeshed.fm&#x2F;14</a> - worth a listen (you can skip the bits about ActionCable if you aren&#x27;t a Rails user!)
评论 #9655969 未加载
perplexesalmost 10 years ago
This fits in very neatly with Casey Muratori&#x27;s &quot;Compression Oriented Programming&quot; which is essentially Write your usage code first, keep YAGNI in mind, then Refactor.<p>I was once asked in an interview whether, on a new project, I would start with a monolithic app or some sort of SOA. (&quot;Microservices Architecture&quot; is the new SOA)<p>I answered that I would start with a monolith because usually you&#x27;re trying to find product&#x2F;market fit as quickly as possible, and having an SOA would likely slow you down due to its upfront cost. (How many services? Any redundancy? What do they do? How many databases? How do you keep them up? How do you diagnose when they&#x27;re failing? etc)<p>They responded that they always do SOA, that the benefits are clear, that monolithic apps are idiotic, etc.<p>I didn&#x27;t want the job... but I was confused about our differing opinions.<p>What I&#x27;ve learned since then is basically: are you constructing a building, or making an art installation?<p>Construction is thousands of years old. Contractors have huge tables of how long each part of the process takes, in what order, down to the quarter-hour (in some cases) and are fairly accurate in their estimations. (They&#x27;re still hilariously wrong on occasion either in time or budget, building <i>anything</i> is pretty difficult)<p>In this case, architecting SOA would work out since you&#x27;ve done it before. You know about how long it takes, what the pitfalls are, what support infrastructure you need, etc.<p>When you&#x27;re making art, making something new, with new materials, without a manual, with only some best practices in mind, time becomes essentially unbounded.<p>Upfront architecture in this case would be poorly suited to the situation - you&#x27;ll probably end up changing it a lot, and each time you introduce a bit of &quot;rigor&quot; to the system it becomes a bit more difficult to change. Especially over socket boundaries and different API versions.<p>I also feel like bad code has a survivorship bias - you only hear about it because the company took off. To get the company to take off, the code perhaps was necessarily rushed just so the company could stay around long enough to make money.<p>&quot;Ah, but if we could have done it right in the first place!&quot;<p>You don&#x27;t hear about the companies who die, no matter the quality of their code.
tallerholleralmost 10 years ago
As someone who is starting a new project and thinking about microservice first (and first time in general), this is interesting. Im wondering if there are any success stories so far for this case? I like the idea of having just a few coarse services (e.g. users, content, gateway, message queue, web&#x2F;client)<p>Another interesting thing is how to handle microservices orchestration, development, deployment early on without significant investment of time. We&#x27;ve been looking at docker&#x2F;docker-compose and it seems like it should handle it but also seems more geared towards multi-container single-service apps. I&#x27;m wondering if anyone else is using same technology and has input? Maybe as things develop it will handle build&#x2F;mananage&#x2F;orchestrate multi-decoupled services
zefeialmost 10 years ago
I really hate people advocating micro services&#x2F;libraries because they just migrated and &quot;everything got much better&quot;. No, everything got much better because the known&#x2F;actual problem domain changed and system is re-adjusted accordingly. When you start with very little knowledge of the problem domain, any fine-grained architecture is premature optimization, and what you really want is to rapidly expand your understanding of the problem.<p>Projects can fail in many ways, not trying to understand the problem better and not trying to re-adjust after are typical pitfalls. Migrating from monolith to micros is just a natural transition between SOME stages, and it shouldn&#x27;t happen until you hit those stages. You may hit those stages very early, or sometimes never.
sagoalmost 10 years ago
I think there&#x27;s an economic angle here.<p>&quot;Bad&quot; code (like a monolithic system - allow me to beg the question a little) can be cheaper to write, in many cases, than good code. But it is more expensive to scale, maintain, extend and debug.<p>But it means there&#x27;s a lower investment of time to get a product out.<p>So I&#x27;d expect monolithic systems to have a higher success rate being converted post-hoc, because the systems that get that far have proven their worth.<p>Investing more to build a system &#x27;right&#x27; isn&#x27;t necessarily a good move, if you&#x27;re not sure of the return.<p>Or, put another way, investing 5X in 5 cheap-hacky products, and then spending Y &gt;&gt; X to make the one that works un-hacky is often a better strategy than spending that Y up front.
joslin01almost 10 years ago
This is pretty much in line with my philosophy of functionality first <i>then</i> infrastructure. The problems that inevitably sprout while building the functionality will influence future infrastructure &#x2F; plumbing decisions. Of course, some care has to be taken to not entangle everything, but this shouldn&#x27;t be too hard if you take a simple services-oriented architecture or even forego services and just store all your functionality in model classes. Regardless of the approach, the first thing that should be written are the tests that validate the functionality. Getting those passing is the highest priority; <i>how</i> they pass comes after.
andrewstuart2almost 10 years ago
I sometimes wonder if cloud computing would exist as it exists today without relatively inefficient monoliths that <i>had</i> to scale. Once they&#x27;d scaled, the developers could afford to start peeling off the layers, thus only scaling pieces that needed to, leaving them with spare hardware.<p>&quot;Hey, let&#x27;s rent this crap,&quot; said some guy. And cloud computing was born.<p>Obviously I have no evidence of this at all, but I do still wonder, since at least two of the common vendors (Amazon and Google) were tech companies before they offered hosting.
评论 #9654017 未加载
cmaggardalmost 10 years ago
We experienced similar to this at our company. When my coworker and I first arrived, the prior engineers had built the system as a set of microservices but it was completely overarchitected. Our first act was to pull all the parts together into one application.<p>Now that it&#x27;s grown, we&#x27;re starting to look at the microservice approach again, but it&#x27;s been almost four years since we pulled everything together so it makes much more sense given the load&#x2F;functionality we have now relative to then.
leighmccullochalmost 10 years ago
ModularFirst, defer the decision to create a monolith or a microservice architecture. Start with a single application and focus on your software design being modular. One way dependencies, single responsibility, and simple interfaces make a big difference here. Breaking out microservices will be simple if you need to, and if you stick with a single app you&#x27;ll have an app that will grow as a monolith well.
rcoderalmost 10 years ago
I&#x27;ve been part of three teams who attempted monolith-&gt;microsystem transitions. Two succeeded (though at wildly different costs in terms of engineering time and delay) and the other was abandoned after person-years of effort.<p>The common aspect of the successful migrations was their incremental nature: rather than &quot;killing&quot; the monolith all at once, there was a careful and gradual migration of performance-critical sections into services running atop dedicated machines&#x2F;storage&#x2F;etc.<p>Neither of the successful moves happened all at once, or indeed ever 100% replaced the monolith.<p>It wasn&#x27;t just a question of planning, either. The failed migration had a team of three engineers spend ~six months writing detailed component specs, migration plans, etc. The business simply couldn&#x27;t stop (or even maintain the status quo) to let them build the shiny new V2, so it kept getting pushed out and restarted long enough that the plans and specs bit-rotted and the whole thing got scrapped.
评论 #9657244 未加载
abecedariusalmost 10 years ago
Refactoring a system built of microservices is slow and costly, according to the article; the recommendation follows from this. Why can&#x27;t it be fast and easy? Is it essence or accident? (Like, do skilled Erlang programmers agree?) How does refactoring happen in the systems he&#x27;s talking about?
merruaalmost 10 years ago
This also seems like the idea of throw away the first one, you will anyway. The experience of building it as a monolith shows you what micro-services you need. Or maybe avoiding optimization before you need it.
spullaraalmost 10 years ago
I&#x27;ve seen many startups that begin as micro services and have no problem as they scale up. Martin&#x27;s company Tyrpesafe probably only works with companies that find themselves in trouble.
评论 #9654235 未加载
评论 #9655955 未加载
jaunkstalmost 10 years ago
What about testing? And working with large teams? I imagine large software and teams would be abstracted into separate interfaces. Is communication between teams just more difficult to manage? Is reality different from theory? Shouldn&#x27;t each segment be testable and debug-able? How do you effectively execute a large project? Is mashing it all together more of a proof of concept than the final product? As an investor am I on the hook for more than I bargained for? Is technical debt a non-issue?
mwcampbellalmost 10 years ago
Taking the monolith-first idea even further, what percentage of web apps would run just fine on SQLite, MySQL in embedded mode, or (for JVM-based projects) H2?
shinzuialmost 10 years ago
A hybrid approach is a better strategy once you have product&#x2F;market fit. You should build your core domain as a monolith but have auxiliary infrastructure services built as microservices. The hybrid approach has the advantage of safely investing in microservices architecture that would later allow you to refactor your monolith once you truly understand your bounded contexts.
jasimalmost 10 years ago
If you&#x27;re a web developer working with Rails and have large monolithic projects gone unwieldy or tending to go unwieldy, please give &#x27;Growing Rails Applications in Practice&#x27; a try. <a href="https:&#x2F;&#x2F;leanpub.com&#x2F;growing-rails" rel="nofollow">https:&#x2F;&#x2F;leanpub.com&#x2F;growing-rails</a>.<p>(i&#x27;m not affiliated with the authors)
edpichleralmost 10 years ago
I agree with Fowler, and this also fits perfectly with the central idea of the Lean Startup movement we saw last years.
jebbluealmost 10 years ago
I finally read something that Fowler wrote that I can agree with and that isn&#x27;t abstract (or overly abstract).
评论 #9655674 未加载
jaunkstalmost 10 years ago
Macro and micro is relative. A monolith is a kitchen sink and expensive. Take a look at the API space for successful SaaS products especially when they are oriented in business software. It&#x27;s hard to pivot a monolith or even monetize when it ignores the ecosystem it exists in. When it communicates well with other micro services it has natural discovery as a solution to a problem that the customer is looking for. Trello, Harvest, Basecamp, Pivotal, and tons more are all successful because they communicate well outside of their problem space and solve for the problem in their own scope. I do agree that you shouldn&#x27;t be over aggresive on abstractions off the start but you should also consider the players in your space and ask if a segment of you application is solving something of value to others or if your recreating a service that your shouldn&#x27;t compete with but cooperate with.
alrsalmost 10 years ago
Yes, mostly.<p>If you are putting up an API that needs to be available 24&#x2F;7 you need to have the system sufficiently decoupled so that you can go read-only and make schema and infrastructure changes without needing to stop the world.
wellpastalmost 10 years ago
&gt; 1. Almost all the successful microservice stories have started with a monolith that got too big and was broken up.<p>This is pure survivor bias. The majority -- by far -- of &#x27;failure stories&#x27; I know of in the software industry are ones in which a company tried to take their monolithic code base and modularize or microservice-ize it.<p>&gt; 2. Almost all the cases where I&#x27;ve heard of a system that was built as a microservice system from scratch, it has ended up in serious trouble.<p>This is not because microservices-first is inherently flawed. This is purely a skill set issue. Microservices demand a greater skill set. A &#x27;monolithic&#x27; approach puts much less of a demand on the engineer&#x27;s skill set.<p>For a simplistic but illuminative example, if all you know how to do is build systems that operate on global mutable state (most newbie programmers), then of course you will run a lot further in a monolith than if you are trying to do this in a microservices pardigm.<p>This is a simplistic example because effective use of microservices requires much more of a skill set than not using global variables. The truth is that effective use of microservices (knowing how to build architecturally sound software) is way beyond the reach of MOST smart, senior level engineers that I&#x27;ve met in my career. If this sounds arrogant, it&#x27;s not; there&#x27;s a definitive architectural skill set that CAN BE LEARNED but that is missing from most software practitioners. (Our industry&#x2F;academies need to learn how to teach it.)<p>This is the elephant in the room in our industry--and why we spin so many wheels talking about everything else. All of the energy we spend talking about patterns, processes, languages, etc etc do so much less for our industry than if we trained our practitioners in how to construct architecturally sound software systems.
评论 #9654055 未加载
评论 #9654362 未加载
评论 #9654181 未加载
评论 #9654191 未加载
评论 #9654927 未加载
评论 #9654195 未加载
评论 #9655080 未加载
评论 #9654186 未加载
评论 #9654366 未加载
评论 #9654551 未加载
评论 #9654846 未加载
评论 #9656706 未加载
anonyfoxalmost 10 years ago
Try writing your app in elixir&#x2F;phoenix in the first place, easy modularized code like in monoliths, and scalable like a bunch of small separate services. best of two worlds I&#x27;d say.
bsbechtelalmost 10 years ago
Is this not the same as 1) make your code work, 2) refactor? The only difference here is the author is talking about architecture instead of application code?
elminalmost 10 years ago
I have a very different perspective. With tools like Heroku, building systems as microservices is no more time consuming than building a monolithic system. And it&#x27;s much easier to iterate on and improve. Conversly, pulling apart a monolithic system into services is not a fun task.
评论 #9654688 未加载
eshemalmost 10 years ago
key takeaway: Although the evidence is sparse, I feel that you shouldn&#x27;t start with microservices unless you have reasonable experience of building a microservices system in the team.
sailisticesalmost 10 years ago
tl;dr;<p>Microservices first is premature optimization.
oxaloalmost 10 years ago
Microservices: here be dragons.
sailisticesalmost 10 years ago
tl;dr; Microservices first is premature optimization.
dreamfactory2almost 10 years ago
If my understanding of bounded contexts is correct, a bounded context represents the smallest level of granularity when it comes to a service component e.g. a &#x27;customer&#x27; in one domain is not the same thing as in another (and there is therefore no universal reusable &#x27;customer&#x27; service, but instead a much richer service representing a sales or support model in his example).<p>So going by the article, shouldn&#x27;t the direction of travel therefore be from monolith to bounded context (as each domain boundary emerges) - which could be described more accurately as a macroservices architecture?
fleitzalmost 10 years ago
Yup, get to market, incur technical debt, pay it off with cash.
jessaustinalmost 10 years ago
I want to give him the benefit of the doubt and say the &quot;<i>a:link ,</i>&quot; in the following css is a mistake:<p><pre><code> a:link, a:visited { color: #94388e; text-decoration: none; } </code></pre> ...but I&#x27;m pretty sure it&#x27;s not, and this guy really does want to break how unvisited links are displayed.
评论 #9654237 未加载
kraig911almost 10 years ago
My main problem with twitter and the stalled new user base.<p>1. The onboarding social experience is just hard. Finding relevant information of what I want is difficult I wish there was a pane of tweets regarding interests ie gaming, politics etc. Everything in one thread is mind numbing once you follow too many people.<p>2. Context - finding anything is difficult. I don&#x27;t know what a trending hashtag is and the ones presented to me usually are gossip in nature for some reason?<p>3. Some people get so many @&#x27;s that they simply drop off the earth.<p>4. Whats the point of favoriting a tweet? I still don&#x27;t get it.<p>5. Why is it so difficult to use the API since those changes in what 2012?<p>6. 140 characters is just so dang hard for me. I can understand a limit but just 140? I want just a little more space :(
评论 #9655037 未加载