
I'm an experienced software engineer with 8 years of specialization in web and cloud technologies, including 2 years as a lead. I started as a PHP backend developer and have focused on Golang for over 4 years, specializing in microservices, REST API development, infrastructure as code, and Kubernetes. I have full stack experience with React.js, TypeScript, and other JS technologies.
Senior Software Engineer
CareemSenior Golang Engineer
EPAM SystemsSenior Full Stack Engineer
LKQ EuropeJr Software Engineer
WebAppCloudsSoftware Engineer
AutoRABITLead Software Engineer
JustDial
VS Code
Jira
.png)
Docker

Postman
Expo

MS Teams

VS Code

Kubernetes

RabbitMQ

AWS SQS

AWS DynamoDB

MongoDB

Zookeeper

gRPC

RestAPI

D3.js

jQuery
.png)
JWT

SSO
Laravel

SEO

HTML

CSS

GitHub Actions

OpenTelemetry

Prometheus

Kafka

Vue.js

SQS

SNS

SSO

SEO

Firebase Realtime Database
Yeah. Uh, myself, Yas. Uh, I have 8 years of experience in, uh, software development. So I started as, you know, a PHP back end developer, and, uh, now I shifted to, uh, Golang. And, also, I worked as a a lead engineer, uh, in 1 company. So I used to let the front end team, uh, React, uh, front end team. So it's a 5 to 8 people and working individually, goal and developer at the same time. And, uh, yeah. And from last couple of months, uh, I'm focusing on, you know, cloud and, uh, Kubernetes part. So I I'm I'm exploring how to, uh, automate the Kubernetes operations, uh, using, uh, Golang, uh, operators. Uh, so, uh, creating resources or automating the, uh, resources, Kubernetes users. So, um, I'm exploring into that space. And, uh, and, also, I'm, uh, interested in, uh, web 3 space. So, uh, it's like, you know, uh, using, uh, Golang Ethereum SDK. So I used to create, uh, a small contracts. So I'm working on some personal project. Uh, Yeah. And also, uh, I do freelance, uh, in in, uh, uh, free time, like, you know, kind of creating any mobile applications using React Native or, uh, or, you know, Flutter. So yeah. And yeah. Uh, that's it about myself. Yeah. Thank you.
Yeah. Uh, to be, uh, to be honest, uh, I I have not used, uh, MongoDB much. So I'm familiar with, uh, you know, uh, Postgres and, uh, MySQL DBs. But for DB migration and everything, so, uh, using Golang, we we can we can easily have the SQLX, uh, library. So in that, we can have the migrations file And, uh, see, we can do seeding or something. So using, uh, using that, uh, SQL, uh, SQL x package. So, uh, and also or else, you know, you can go with the Go ORM. Uh, so using Go ORM. So we can connect to any DB, uh, not only, uh, the any, uh, SQL drivers. We can connect to the, uh, Mongo DB drivers or Amazon Dynamo DB drivers. Anything we can connect. Yeah. So we can have migrations, uh, migrations folder. Uh, so, uh, so using that, uh, we can see the, uh, migrations uh, DB migrations. Yeah.
Could you discuss how you would create a structure Yeah. Uh, basically, uh, let's say, if you, uh, if you're writing any application, uh, in in in our microservice architecture, so we'll focus on, uh, single single functionality, uh, so that that we can say sing single, uh, responsibility in these all data principles. So, uh, so we'll focus on, uh, creating let's say, if you are creating more login or authentication, uh, model, So we'll we'll, uh, stick to the only to that part, and we can easily, uh, scope we can easily scale the, uh, login or login service or authentication service, uh, using Kubernetes by creating ports or, you know, uh, scaling the ports, uh, replicas and everything. Uh, so and, also, we can route the traffic, uh, to that service, uh, using a load balancer or, you know, ingress or, uh, egress. Yeah. So using this, uh, we can we can, uh, create the structure basic structure so that we can evolve, uh, into, uh, many other services and so that we can scale to, uh, Kubernetes, uh, structure. And also, uh, we can use, uh, even given, uh, structures. Let's say, uh, we can we can let's say in in microservice, uh, architecture, so it's very hard to find the, uh, to to have the map of all service if you are, uh, maintaining hundreds of micro service. So it can be tough to, uh, keep a map for that service discovery. So ensure that, uh, I prefer, uh, even that even architecture. So we can easily, uh, uh, track all the, uh, publishers or subscribers using the topics. So we can have, uh, we can list all the topics at 1 place. And, uh, by that, uh, we can scale the application very easily. And, also, it's a fault tolerance. Uh, even the when our picture, let's say if anything happens. So we can easily retrieve the messages, and we can serve later.
Could you discuss Yeah. Uh, Nishta have discussed about, uh, even given architecture. So it's a it's a, uh, you know, kind of, you know, better way and in industry standard architecture. Uh, so if we can follow we can easily follow using in Golang, we can have the NASH streaming. So they are giving, uh, many, uh, features, uh, using Jetstream. We can, um, we can store the, uh, persistent messages, uh, for longer term. Whereas in RabbitMQ, it's very, very hard to store the, uh, message. Uh, I mean, persistent is not there. So so and, also, uh, let's say, uh, we need to, uh, be careful about, uh, DBs actually. There's, uh, you are when we when you are creating a microservice, so we need to we need to make sure that, uh, let's say you are creating a login, uh, or user, uh, authentication database. So we we can make, uh, only, uh, user stable or authentication DB, uh, uh, deployed separately, uh, not in the centralized DB. So, uh, so we can, uh, we can easily scale, uh, along with the application. So if we distribute the, uh, DBs also in the same way of microservices, so it's it's it's easy to scale. And, again, uh, to maintain, uh, to, uh, let's say, in, uh, uh, to to maintain a data, uh, consistency, again, we need some Kubernetes administration, uh, so we can, uh, find that if for, you know, uh, we can, uh, we need to find that if, uh, and, uh, we need to make the changes accordingly, uh, for deployments or something. Uh, so for that, again, we can write Kubernetes operations. Uh, let's say something, uh, something is, uh, changed so we can easily, uh, automate, uh, the those process using the Kubernetes operations. So, uh, I will explain that.
Yeah. Uh, see, uh, basically, uh, let's say, on the let's say on but, uh, if you if you are getting any, uh, workloads, I mean, kind of, you know, uh, what what I can say. So I'm not familiar with the Kubernetes, uh, kind of, you know, operations. But I can say, uh, let's say, what so using, uh, these patterns. Right? So scheduler patterns or, you know, at at particular time, we need to scale the, uh, we need to scale the application Uh, at particular, uh, let's say if you have, uh, uh, what do you call at the 9 o'clock or let's say if you are a stock, uh, stock engineer. So at every morning, 9:9:9:9:9 o'clock or morning 9:9. So you need to scale the, uh, uh, applications, you know, into more instances. So we can use that scheduler pattern. Uh, so using that, we can easily, uh, scale the, uh, we can easily increase the instant instances on this particular time or, you know, different, uh, kind of, you know, different, uh, time time zones or something. And also, uh, I said, right, so using Kubernetes of operators, we can, uh, using custom controllers, we can easily, uh, achieve these, uh, you know, patents. Uh, we can easily scale the instances using, uh, these custom controllers or, you know, c CRD CRDs. Yeah.
Yeah. Uh, see, uh, 0 downtime. It's very, uh, difficult job, uh, job for any Kubernetes administrators. So that's the, you know, kind of, you know, the SREs came into the picture. And, uh, again, uh, I can say, you know, using these operators and everything. So we can make sure let's say, if any bug or something is happened on the production, so we can easily, uh, uh, it's kind of a, uh, kind of a web playbook. I can say, uh, the Kubernetes operator. Using that operator. So we can let's say if anything is, uh, uh, crashed or something. So we'll try to, uh, we we'll try to reset the, uh, our desired state. So, uh, let's say if we have 3, uh, replicas, uh, 3 part 3 replicas, if something has happened, something is crashed, so this operator, uh, will will, uh, make, uh, what what we call so we it it will increase, uh, uh, our replicas. So it it it always tries to match that, uh, desired state. So, uh, yeah. And, uh, using this, uh, kind of you know? And, again, any Kubernetes, uh, they have inbuilt, uh, in in in inbuilt logic, uh, that is called maybe controller. So they always match to the, uh, same, uh, disaster. So for that, we need to have, uh, in Kubernetes, uh, definitions. I mean, in EMLPulse, we'll have reached out policy, uh, always. Or, you know, uh, if we keep enabled, so and it cannot be recovered. Uh, and, also, we can have the threshold limit, uh, easily, kind of, uh, at so, uh, so we can make sure, uh, let's say, Kubernetes, try for 3 times. Uh, if if, uh, port is failing, try to, uh, try to, uh, recover the port for 3 times so we can make that threshold limit also. We can keep that threshold limit. Yeah. I think, uh, uh, Yeah. Um, yeah.
Audio. Yeah. It's simple. Uh, so before deploying our Go application, so we can have that, uh, uh, raise flag. Right? So, uh, we we can while building the uh, go bill or something, so we can easily we can have the raise flag. Uh, so let's say if you use that flag, so it can say whether any, uh, data risk conditions are there or any coroutines are writing to this, uh, same, uh, resource, same variable. So it can easily find out the, uh, data risk conditions using that flag. Yeah. Yeah. Again, so MongoDB collection. Yeah. And, also, we can make sure, uh, for this data res condition, we can use a mutex, uh, package. We can lock, uh, unlock, uh, the, uh, threads or, you know, the go, uh, the goroutines. Let's say if you are writing to the same resource, same variable or same kind of DB or something. So we can, uh, log that, uh, log, uh, that particular, uh, goroutine. Right? Uh, so write log or we can use a read, uh, read write log. Uh, Yeah.
Audio design and optimize, uh, gross service to handle a large supercomputer. But, uh, what, uh, Yeah. So, uh, we can, uh, we can have, uh, uh, rate link or, you know, uh, in in API gateway. So, uh, so before that, we can, uh, let's say, before our, uh, getting to our, uh, DB or something, Uh, sorry. The our to our application, we can have that rate limiter. And, uh, so we can, uh, let's say if if our microservice is able to set for, uh, 200, uh, request per, you know, uh, nanosecond or something. So, uh, we can, uh, we can have rate linked up for that. And, uh, of, uh, whatever, uh, the let's say, 300 request came, but our, uh, service can serve only 200. So we can, uh, we can make that, uh, remaining 100 request in some cash or something, uh, and we can serve later, uh, in in the next, uh, throughput. Uh, Yeah. So, basically, we can have this, uh, rate limit, uh, uh, if we are getting large number of data. Other side side side side. So even though in systems is always a good, uh, choice for this kind of, uh, data. I mean, large amount of data. So, uh, they they just, uh, subscribe and publish the event. And whenever our service is there, so it it will pick up the, uh, it will pick up the event, and it will serve the, uh, or transactions or anything.
Yeah. Uh, I am not, uh, I'm not into that, uh, deploying applications into the Kubernetes. But, uh, I can say, uh, so, generally, we use, uh, load balances, uh, for navigating the traffic order, you know, uh, using the, uh, ingress or, uh, ingress. And, uh, now we have many kind of, you know, of e, uh, SaaS best, uh, you know, in in AWS. We can easily have the, uh, AWS load balancer, and we can easily load the traffic. And, also, now we have the p APG. Uh, so it's it's a good, uh, what do you call? Google provides a good, uh, API gateway kind of, uh, it it it manages and it tracks all the, uh, network trafficking, and it it balances the trafficking, uh, enabling. Yeah. Pretty much. I am not sure about this service measure, texture, uh, how to deploy. Yeah.
Yeah. Uh, so, uh, we can we can, uh, have this repository pattern. Uh, we can follow that repository pattern. So using using that, we can, uh, we can maintain, I mean, we can maintain the models separately. And, uh, we can mock, uh, and also we can easily write the test cases, uh, using these mocks. I mean, uh, the if we can we can easily, uh, mock the DBs, uh, interfaces. So, yeah, we can follow the repository pattern. Uh, using that, we can connect to any any DB. Uh, so we'll stick to the all the data and everything into the models. And, uh, through models, we can have we can get, uh, from, uh, repository repository to service and then, uh, controller. Uh, so, yeah, uh, using this, we can, uh, differentiate, uh, the, uh, all the best at, uh, model side. And we can we can have in the repository repository pattern I mean, in the repository structure I mean, repository model. So we can all, uh, we can write all queries or something. Let's say, MongoDB. So we can write all the necessary, uh, things in, uh, MongoDB repository and SQL, uh, repository and then service. Yeah.