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.

Ask HN: How do you keep track of releases/deployments of dozens micro-services?

142 pointsby Kunixabout 4 years ago
It&#x27;s been three years since the last thread (https:&#x2F;&#x2F;news.ycombinator.com&#x2F;item?id=16166645), maybe there are more mature solutions now.<p>Interested to hear about current setups, and how it works for you.

35 comments

johnx123-upabout 4 years ago
From the previous discussion <a href="https:&#x2F;&#x2F;news.ycombinator.com&#x2F;item?id=16166645" rel="nofollow">https:&#x2F;&#x2F;news.ycombinator.com&#x2F;item?id=16166645</a><p>1. <a href="https:&#x2F;&#x2F;github.com&#x2F;gocd&#x2F;gocd" rel="nofollow">https:&#x2F;&#x2F;github.com&#x2F;gocd&#x2F;gocd</a> - 6.1k stars<p>2. <a href="https:&#x2F;&#x2F;github.com&#x2F;Shopify&#x2F;shipit-engine" rel="nofollow">https:&#x2F;&#x2F;github.com&#x2F;Shopify&#x2F;shipit-engine</a> - 1.2k stars<p>3. <a href="https:&#x2F;&#x2F;github.com&#x2F;guardian&#x2F;riff-raff" rel="nofollow">https:&#x2F;&#x2F;github.com&#x2F;guardian&#x2F;riff-raff</a> - 252 stars<p>4. <a href="https:&#x2F;&#x2F;github.com&#x2F;ankyra&#x2F;escape" rel="nofollow">https:&#x2F;&#x2F;github.com&#x2F;ankyra&#x2F;escape</a> - 201 stars<p>5. <a href="https:&#x2F;&#x2F;github.com&#x2F;kiwicom&#x2F;crane" rel="nofollow">https:&#x2F;&#x2F;github.com&#x2F;kiwicom&#x2F;crane</a> - 92 stars<p>6. <a href="https:&#x2F;&#x2F;github.com&#x2F;tim-group&#x2F;orc" rel="nofollow">https:&#x2F;&#x2F;github.com&#x2F;tim-group&#x2F;orc</a> - 34 stars<p>7. <a href="https:&#x2F;&#x2F;github.com&#x2F;wballard&#x2F;starphleet" rel="nofollow">https:&#x2F;&#x2F;github.com&#x2F;wballard&#x2F;starphleet</a> - 19 stars (dead?)<p>8. <a href="https:&#x2F;&#x2F;spinnaker.io&#x2F;" rel="nofollow">https:&#x2F;&#x2F;spinnaker.io&#x2F;</a>
评论 #26875718 未加载
bhoustonabout 4 years ago
We just made all the microservices into one big monorepo and we deploy all at the same time.<p>To be honest we tried to avoid the monorepo but it was hellish. Maybe if each microservices was larger and our team was larger but then are they microservices any more?
评论 #26873605 未加载
评论 #26873528 未加载
评论 #26874954 未加载
评论 #26873545 未加载
评论 #27007346 未加载
评论 #26874011 未加载
评论 #26890453 未加载
monster_groupabout 4 years ago
I don&#x27;t keep track. All microservices use continuous deployment pipelines. If you check in code and it passes all the tests, it will make it out to prod some time in the next few hours.
评论 #26873694 未加载
评论 #26873585 未加载
jayd16about 4 years ago
If you need to keep track its probably too late. What makes them services is that they should be able to be deployed without a bunch of orchestration of other services. You can solve this by having backwards compatible apis.<p>That said, to know what changes would actually break things you&#x27;d ideally have a suite of tests.
评论 #26875136 未加载
评论 #26876212 未加载
adamhpabout 4 years ago
Frankly, we don&#x27;t do a great job of it. We have some Ansible deploying to OpenShift via openshift applier, that gets run from some Jenkins jobs. We use a form of Git Flow to do branching and tag releases. It&#x27;s messy.<p>I&#x27;ve been looking at Sentry for this, recently. They have a specific feature for tracking releases (and even relating them to errors vs. commits) which looks very interesting. Haven&#x27;t tried it yet though.
anishdharabout 4 years ago
We&#x27;re building Cortex (<a href="https:&#x2F;&#x2F;www.getcortexapp.com&#x2F;" rel="nofollow">https:&#x2F;&#x2F;www.getcortexapp.com&#x2F;</a>) to solve this problem :) We help you track all your microservices and integrate with all your 3rd party tooling to build a single pane of glass for your architecture. Happy to give you a demo if you&#x27;re interested!
评论 #26877085 未加载
nonameiguessabout 4 years ago
Two ways I&#x27;ve seen it done reasonably well.<p>The somewhat more modern way with Kubernetes deployments is the Helm &quot;chart of charts&quot; pattern, where your system level deployment is a single Helm chart that does nothing but pull in other charts, specifying the required semantic version of each sub-chart in the values.yaml file.<p>The older, but also much more flexible way I&#x27;ve seen it done is through something a local system architect developed a while back that he called a &quot;metamodule.&quot; This was back when Apache Ivy was a preferred means of dependency management when Apache Ant was still a popular build tool and microservices were being deployed as Java OSGi components. Ivy defines a coordinate to uniquely identify a software dependency by organization, module, and revision. So a metamodule was just a module, but like the chart of charts, it doesn&#x27;t define an actual software component, but rather a top-level grouping of other modules. Apache Ivy is significantly more flexible than Helm, however, allowing you to define version ranges, custom conflict managers, and even multiple dependencies that globally conflict but can be locally reconciled as long as the respective downstreams don&#x27;t actually interact with each other.<p>Be aware both of these systems were for defense and intelligence applications. Personally, I would just recommend trunk based development and fail fast in production for most consumer applications, but for things that are safety or mission critical, you can&#x27;t do that and may have very stringent pre-release testing and demonstration requirements and formal customer acceptance before you can release anything at all into ops, in which case you need the more complicated dependency management schemes to be able to use microservices.<p>Arguably, in this case, the simplest thing to do from the developer&#x27;s perspective is don&#x27;t use microservices and do everything as a monorepo instead, but government and other enterprise applications usually don&#x27;t want to operate this way because of being burned so much in the past by single-vendor solutions. It&#x27;s not totally impossible to have a monorepo with multiple vendors, but it&#x27;s certainly a lot harder when they tend to all want to keep secrets from each other and have locally incompatible standards and practices and no direct authority over each other.
drbojingleabout 4 years ago
I&#x27;m curious to see how micro service management evolves over time and learn whether or not it will become viable for small companies. Hopefully one day its as cheap as writing a function is.<p>As it stands, with what I&#x27;ve seen and heard about microservices, I&#x27;d say the best way to deal with micro service anything is to use a monolith 90% of the time and for the rest of the time make sure your micro service could stand as it&#x27;s own SAAS if given enough love.<p>Not a direct solution to your problem but might be an indirect one.
评论 #26874286 未加载
评论 #26877352 未加载
klohtoabout 4 years ago
Flux with GitOps approach, using Helm charts.<p>All of our of microservices have deployment charts, with frozen image versioning. That way, we can can rollout a whole release knowing they are all compatible with each other and can easily fall back just by using git rollback.<p>CI&#x2F;CD updates image versions in affected YAMLs on every backend release and Flux keeps staging in sync. When we are happy, we sync to production branch, Flux syncs and it&#x27;s done.<p>If we spot an issue that we didn&#x27;t see in staging, we either release a hotfix or rollback.
评论 #26876902 未加载
评论 #26875090 未加载
评论 #26874659 未加载
abunuwasabout 4 years ago
In a previous job had tons of microservices and tons of environments, so it was getting difficult to track what was deployed where. We opted for a simple solution to this: we wrote a very simple CLI that makes the deployments and at the same time registers the deployment in a DynamoDB table. Then to get a picture of a certain environment we just had to list all services for that environment. You could also list the history of releases for a certain service in a certain environment.
评论 #26875210 未加载
sdevonoesabout 4 years ago
We don&#x27;t. I&#x27;m just waiting the day we reach more than 100 microservices and my company realises that microservices was a bad idea to begin with. That&#x27;s usually the way it works: learning the hard way.<p>To elaborate:<p>- I do think there is value in &quot;utility microservices&quot;. For example: a microservice to send email, a microservice to filter spam, etc. These are the next level libraries (because they do need to run as services 24&#x2F;7). Management usually don&#x27;t like these kind of microservices because these &quot;domains&quot; usually don&#x27;t belong to any particular team, so managers cannot &quot;own&quot; their success.<p>- I don&#x27;t think there&#x27;s much value in building microservices for the core of your business (e.g., a checkout microservice, a payments microservice, etc.). The usual argument management gives is: &quot;we&#x27;ll make teams more independent and they will be able to delivery stuff faster than with a monolith!&quot;. While this is sometimes true, &quot;faster software delivery&quot; is not on my top list of prioritites when it comes to build software.
vbstevenabout 4 years ago
My usual setup is pretty simple with each service in its own git repository with a Gitlab pipeline:<p><pre><code> * build code * run tests (unit + integration using database) * build docker image * push to gitlab registry * deploy to staging k8s environment by using a custom image that just templates a .yml and does `kubectl apply` against the staging cluster * optional extra &quot;deploy to production&quot; that works in the same way but is triggered with a manual button click in the pipeline. </code></pre> I don&#x27;t do canary deploys or anything. Just deploy to staging, and if it works, promote to production.<p>For some projects I have &quot;staging test scripts&quot; which I can run from my devmachine or CI that check some common scenarios. The test scripts are mostly blackbox using an HTTP client to perform a series of requests and assert responses. (signup flow scenario for example)<p>I would like to move to a monorepo, but I have not yet figured out an easy way to have a separate pipeline for each service that is only triggered when that service has changed.<p>edit: formatting
评论 #26881431 未加载
itielshwartzabout 4 years ago
Founder of <a href="https:&#x2F;&#x2F;Komodor.com" rel="nofollow">https:&#x2F;&#x2F;Komodor.com</a> here, we track changes and alerts across your complete K8s-based stack, analyzing their ripple effect and then providing devs, DevOps and SRE teams the context they need to troubleshoot efficiently. Independently.<p>Feel free to ask question or reach out :)
UK-Al05about 4 years ago
You&#x27;ve broken the microservice abstraction if this a problem.<p>A team should own a microservice, you release as soon as the team able to.<p>You version your apis, so you don&#x27;t break any services which rely on yours.
评论 #26875145 未加载
评论 #26878858 未加载
jokethrowawayabout 4 years ago
Push to master -&gt; jenkins runs linting, tests, applies migration (or fail, requiring manual intervention), build sdocker image, k8s deploys to canary, monitors canary for a bit for errors, k8s deploys to production, tags docker image, notifies slack.<p>In the past, instead of canary, we used a staging environment with manual promotion. That was costing us a cool half a million in AWS overpriced machines (but we were committed to spend a certain amount of money per year in exchange for discounts, so it&#x27;s hard to price things) and it was doubling the testing process (promote to staging, test, promote to prod, test). We have been bitten by issues happening in production and not in staging. With the canary, prod only approach we have higher risks of messing up with real data but we have safeguards in place and the canary approach means that a small portion of the users will see problems. We also have the option to deploy to a canary for devs only.<p>I&#x27;m not happy about using &#x2F; running &#x2F; maintaining jenkins (terrible UI, upgrade path, API to add plugins, etc) but it does the job and it improved a fair bit over the last 5 years. Jenkinsfile are especially nice, even though not being able to easily run them locally is a bit annoying.
mrdonbrownabout 4 years ago
When I worked at Atlassian, we had this issue as well, given all the many services that were deployed for products. A few of us left and created Sleuth [1] to solve it for Atlassian and folks like you. Sleuth helps you know what is deployed, its health, and helps with workflow automation. It also tracks the DORA metrics so you know how healthy a service release processes is.<p>[1] <a href="https:&#x2F;&#x2F;sleuth.io" rel="nofollow">https:&#x2F;&#x2F;sleuth.io</a>
mokslyabout 4 years ago
It depends a little on you definition of “microservice”, but we keep track of a lot of our “mostly single responsibility” data-processes that make up the builk of our AD, IDM and organisational database for 10.000 employees and 300+ IT systems with a mix of azure automation runbooks and local tasks that are activated by azure automation to. This gives us a clear picture of when what is run, alert humans on errors and halts processes.<p>For all-ways-on systems we have a simple dash-board that each service interacts with.<p>We don’t have a fancy CI&#x2F;CD pipeline or anything like that, just a set of rules that you have to follow.<p>Database-wise a service has to register itself with one of our data-gatekeepers, which involves asking for permission for the exact data used with a reason. But beyond that services are rather free to make “add” changes, often in the forms of new tables that are linked with views. It’s not efficient, and we have a couple of cleanup scripts that check if anyone subscribed to all the data, but we’re not exactly Netflix, so the inefficiency is less expensive than doing something about it.
romanhnabout 4 years ago
Check out OpsLevel, seems in line with what you might be looking for. I know the folks behind it, they&#x27;re top tier.
评论 #26877082 未加载
kerblangabout 4 years ago
Since the specific question is &quot;how do you keep track of&quot;, my build &amp; deploy script copies a quick one-liner dump of git information (SHA, date, environment, branch, etc.) to a directory on a shared server, as a text file. Later I can go to that server and `cat versions&#x2F;* | sort` to get a report of what is deployed where&#x2F;when and so on.<p>It helps that I have One Deployment Script To Rule Them All (or really, a couple DSTRTA&#x27;s). When every service has its own special build &amp; deploy script you have to ask nicely and hope people keep up with it. A lot of CI&#x2F;CD systems force you into that corner because of an implicit assumption that each build &amp; deploy is its own special one-off.<p>Anyhow, text files rule, at least as an ad-hoc solution.
100011_100001about 4 years ago
My team is responsible for about 200 microservices being deployed, some of them have 10 or more pods. We don&#x27;t do continuous delivery. Instead it&#x27;s done by 5 different groups deploying once every week or two.<p>Our production deployment jobs are in Jenkins and isolated. It&#x27;s easy to check what was deployed when. We also have a script written that can run an environment report to see what versions and which microservices have been deployed. Along with their CPU&#x2F;memory allocations, number of pods etc.<p>Release management tracks which JIRA stories are in which release, they do it mainly by looking at master merges between prod deployments.
评论 #26874081 未加载
评论 #26874541 未加载
k8s_Heroabout 4 years ago
Have you heard of Komodor? They just held a joint webinar with Epsagon regarding this very issue! You can see a recording of the webinar here: <a href="https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=J32ZoiRVvPg" rel="nofollow">https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=J32ZoiRVvPg</a> Or the product overview here: <a href="https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=Qgio3vF1sPE&amp;t=6s" rel="nofollow">https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=Qgio3vF1sPE&amp;t=6s</a>
selphy1about 4 years ago
We use Octopus Deploy. On commit it autodeploys to dev and sends the team a slack message ([environment] version x (previous was y) deployed by z). Prod deployments are also done through octopus but &quot;manually&quot; by the team when we are ready to make a release. Usually every week or two.
znpyabout 4 years ago
you don&#x27;t. each team keeps track of its own set of micro-services.
评论 #26873814 未加载
mandeepjabout 4 years ago
Looks like someone from AirBnb can shed a light on the topic. They seem to be nailed the Microservices deployments :-)<p><a href="https:&#x2F;&#x2F;www.altoros.com&#x2F;blog&#x2F;airbnb-deploys-125000-times-per-year-with-multicluster-kubernetes&#x2F;" rel="nofollow">https:&#x2F;&#x2F;www.altoros.com&#x2F;blog&#x2F;airbnb-deploys-125000-times-per...</a>
taleodorabout 4 years ago
We work on a solution - <a href="https:&#x2F;&#x2F;relizahub.com" rel="nofollow">https:&#x2F;&#x2F;relizahub.com</a><p>Our community Discord Server (questions on DevOps and DataOps, not limited to Reliza Hub) - <a href="https:&#x2F;&#x2F;discord.gg&#x2F;UTxjBf9juQ" rel="nofollow">https:&#x2F;&#x2F;discord.gg&#x2F;UTxjBf9juQ</a>
sasfnabout 4 years ago
Sauron is a solution to help to track as many microservices as you have, indexing these information into an elasticsearch<p><a href="https:&#x2F;&#x2F;github.com&#x2F;freenowtech&#x2F;sauron" rel="nofollow">https:&#x2F;&#x2F;github.com&#x2F;freenowtech&#x2F;sauron</a>
exabrialabout 4 years ago
I hate to state the obvious... but don&#x27;t do microservices? It&#x27;s the lunacy of the 2000&#x27;s ESB craze but without all the formal testing.<p>The only way to accomplish what you&#x27;re asking for would be extremely thorough mock testing.
raphaeljabout 4 years ago
In the case of web&#x2F;RESTful services, I&#x27;m just relying on Heroku&#x2F;Dokku.
geritwoabout 4 years ago
CI&#x2F;CD can make it manageable with Git and Atlassian tools, or you can build a custom web dashboard if needed. Personally I like version tagging and release management based on semantic versioning.
sidcoolabout 4 years ago
GoCD or Gitlab CI work work well for me. I have CircleCI too, but it&#x27;s initial version did not impress me. I am sure it has improved since.
rileymichaelabout 4 years ago
GitOps w&#x2F;Flux, although currently evaluating ArgoCD for its “app of apps” pattern to more easily provide feature preview environments.
wikibobabout 4 years ago
Don’t have dozens of micro services.<p>This is a serious comment.
评论 #26876021 未加载
评论 #26875886 未加载
anotherhueabout 4 years ago
ArgoCD has been very helpful here. I understand that the upcoming &#x27;Argo Rollouts&#x27; will be even more so.
iostweaksabout 4 years ago
if you want to know how to track a micro services please visit &lt;a href=&quot;<a href="https:&#x2F;&#x2F;iostweaks.net&quot;&gt;ios" rel="nofollow">https:&#x2F;&#x2F;iostweaks.net&quot;&gt;ios</a> Tweaks&lt;&#x2F;a&gt;
caniszczykabout 4 years ago
check out <a href="https:&#x2F;&#x2F;backstage.io" rel="nofollow">https:&#x2F;&#x2F;backstage.io</a>