Image for post
Image for post
Photo by Steve Johnson on Unsplash

In this post I am expanding on an original question I asked recently where I am looking for an opinionated build/deploy solution. I will provide some context on the software delivery model and tools used today, challenges with it and issues I am seeking to answer.

I live in the backend Java/Kubernetes ecosystem for Cloud/SaaS services so all examples are in context of that world. Tools/frameworks listed are examples only.

TL;DR

There are numerous tools and frameworks that need to be stitched together to perform various necessary steps to deliver a cloud service. …

Image for post
Image for post
Image credit Unsplash

Kubernetes docs give a good explanation of what their probes are but for your app how can we best translate these?

Think of kubelet asking the following questions to your app and here are some suggestions on how you should answer. Note that kubelet continuously asks these questions, not just at startup.

Readiness Probe

Can this pod serve traffic?

Currently I have this limited to “can I connect to my database?” That is the absolute must have. If the database is unreachable then this pod is not ready.

One decision you need to make is about partial availability. For example some microservices may have multiple dependencies. If a subset of those fail (open circuit) does that mean your entire app should now no longer serve traffic? …

Get a Postgres dump:

pg_dump -h <host-name> -U <db-user-name> --password <database-name> > outfile.dmp

This will prompt for a password and then create the dump.

Some commands that are used occasionally and end up needing a stack overflow search.

Hard Reset

Get rid of any commits that are not pushed and reset to origin.

git checkout master
git reset --hard origin/master

Soft Reset

Get rid of commits not pushed but keep the changes.

git reset HEAD~1 --soft

Developing locally in a microservices environment can be a bit of a pain. Assuming a Kubernetes world, Minikube helps immensely and to take it a step further Telepresence is my new friend.

What I am doing is replacing a service running inside Minikube with one running on my local host (in IntelliJ). This helps to debug and change code quickly without have to build the image and update it in Minikube.

Assuming you have 3 microservices with a flow like Request → ServiceA → ServiceB → ServiceC. …

Using a pre-signed S3 URL to upload a gzip file took some time to figure out so here is what worked for me.

I’m using Spring rest template. Note the content-type and content-encoding headers.

gzip s3 upload
Image for post
Image for post
Image Credit

Getting into the world of Ethereum one of the learning curve has been about gas.

Gas is essentially how you track and then compute the cost you need to pay for the transaction you submit to the Etheruem network and is collected by the miners.

Specifically:

gasLimit, startGas, gasUsed, gasRemaining and gasPrice.

The fuel analogy is good but what helps me understand is the unit of measure for each.

I think of all these attributes except gasPrice in the unit “cycle” (thinking about CPU cycles per instruction) while gasPrice is “ETH/cycle”. …

Image for post
Image for post

All images credit: Shailee Dave

I have been involved in online payments for many years in large and small companies. As a backend services engineer it is usually device agnostic for me, but over the years the focus has changed from just web/browser and game consoles (Xbox/PlayStation) to also mobile phones and a whole bunch of connected experiences.

More recently I have had the opportunity to learn about point-of-sale (POS) systems in the physical world and bridge the gap. …

Image for post
Image for post

Large enterprise software groups are usually slower to adopt new tech. There are various legitimate reasons. There are usually years of investments in “legacy” systems and likely the internal rate of return calculations done in the years past for the various programs are still running their course. Also technology trends change quickly so adopting a fad is not wise either. Another important factor is the knowledge built into existing systems that is very expensive (both time and money) to recreate.

That said, microservices is a trend that is clearly gaining momentum in the enterprise, along with cloud deployment architectures. Enterprises are starting to explore microservices not to just increase agility, but also to stay current and attract the best talent. For mobile systems response time, scale and other metrics are also critical to maintain. Moreover, microservices is a familiar paradigm to enterprises, given its similarities to service-oriented architecture, making adoption easier. …

Saving tip for the future. To access your remote sever (DB server in this case) over a SSH tunnel, few steps needed:

1. Create/edit ~/.ssh/config
Add following to proxy all connections using the jump server to host foo

Host foo.remote.com
ProxyCommand ssh username@jump.remote.com exec nc %h %p 2> /dev/null

2. Create tunnel to target on port 3306 which will appear as 7777 on localhost

ssh -C -L
7777:target.remote.com:3306 username@foo.remote.com dstat 10

3. Use SQL developer/workbench to now connect to localhost 7777

foo and remote could be same or different server above.
Good luck.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store