Transcript
            
            
              This transcript was autogenerated. To make changes, submit a PR.
            
            
            
            
              Good day, everyone.
            
            
            
              I am Jubin Thomas.
            
            
            
              I work as a technical architect at Signet Jewelers, having 14 plus years of
            
            
            
              experience in supply chain and retail.
            
            
            
              I'm also a senior member of IEEE.
            
            
            
              Before I move on to my topic, I would like to thank Mark and all the
            
            
            
              organizers of CubeNative Conference 2024 to invite me as a speaker.
            
            
            
              Today, I would like to discuss about architecting order management
            
            
            
              systems with scalable microservices with the help of Kubernetes.
            
            
            
              So as you all know, microservices has taken the world by storm and order
            
            
            
              management system is one of the systems where microservices has actually helped
            
            
            
              to scale in a very some of the companies who already have the implementation
            
            
            
              of microservices are Netflix, Spotify, eBay, Amazon Web Services, Airbnb, Uber,
            
            
            
              Nike, Twitter, Walmart, and Verizon.
            
            
            
              The agenda today is basically to go over the overview and infrastructure
            
            
            
              architecture of microservices.
            
            
            
              What are microservices?
            
            
            
              When should we use them?
            
            
            
              What is the right size for a microservice?
            
            
            
              Why is microservice better than monoliths?
            
            
            
              Infrastructure architecture.
            
            
            
              Then we will go over the software architecture and design capability
            
            
            
              centric design, understanding the route and a small example of a
            
            
            
              shopping menu or a shopping cart.
            
            
            
              The microservice scalability, the disadvantages with the CRUD.
            
            
            
              And then we will also discuss about the testing strategies with microservices
            
            
            
              like microservice testing tools.
            
            
            
              And finally, we will discuss about what is docker and kubernetes and
            
            
            
              we will go through the kubernetes architecture and the kubernetes concepts.
            
            
            
              So what is a microservice?
            
            
            
              Microservice is an approach to a Engineer focus on building single
            
            
            
              function modules with well defined interface and operations and It basically
            
            
            
              minimizes the risk and scope of change.
            
            
            
              It is easy to deploy easy to understand across the business
            
            
            
              And the diagram which over here is something which gives us a good
            
            
            
              comparison between a monolith architecture versus the microservice architecture.
            
            
            
              So if you see the image on the left hand side, it says that there is a
            
            
            
              user interface which connects to the business logic and which connects
            
            
            
              to the data layer and data layer is actually connected to the database.
            
            
            
              So there is a monolithic structure in place, which gives a very hard dependency
            
            
            
              of deploying any particular new feature.
            
            
            
              But at the same time, if you look into the microservice architecture,
            
            
            
              The same user interface is actually divided into multiple microservices
            
            
            
              and these microservices are actually connected to the respective database.
            
            
            
              So this gives us a flexibility to deploy these individual components separately.
            
            
            
              So that is basically a great advantage which microservices provides to us.
            
            
            
              Now what is the right size for a microservice?
            
            
            
              Now this question comes that, what kind of size we should have for a microservice
            
            
            
              or how can we define the business logic of a particular microservice.
            
            
            
              So the answer to that question is the business function or domain of the service
            
            
            
              determines more important than its scale.
            
            
            
              So you know, for example, I was talking about the order management system.
            
            
            
              So like payments is the one of the module of order management.
            
            
            
              And then we have.
            
            
            
              checkout as one of the different module of the auto management system.
            
            
            
              These module itself is actually playing a more important role comparatively than
            
            
            
              the scale of these individual modules.
            
            
            
              So one microservice might have dozen of entities and the other the dozen
            
            
            
              of entities, more importantly, it is a part of the microservice play.
            
            
            
              And emphasizing user stories will enable us to precisely outline
            
            
            
              the limits of the business domain.
            
            
            
              Now, why is Microsoft is better than monoliths?
            
            
            
              So as we discussed in one of the previous slides, this monolith architecture
            
            
            
              is built as a large single unit.
            
            
            
              It has RDBMS, which we call it as database.
            
            
            
              Then it has the backend code.
            
            
            
              It could be in Java or any other language.
            
            
            
              And then we have the front end code like HTML, JSP and ASP.
            
            
            
              And these features additionally requires the entire unit to be deployed.
            
            
            
              See, this is the dependency which you were talking about.
            
            
            
              Okay.
            
            
            
              When we need to scale, we have to have multiple copies of the entire application.
            
            
            
              And on the other hand, the microservices is small.
            
            
            
              autonomous services that work together.
            
            
            
              It is loosely coupled with bounded context, and it is a natural consequence
            
            
            
              of applying SRP at the architecture level.
            
            
            
              And this is a typical flow diagram of how the monolithic app is in picture
            
            
            
              versus the microservice architecture.
            
            
            
              So on the left hand side, the image what we see is.
            
            
            
              Basically for a monolith app wherein we see that there's a UI layer and
            
            
            
              then the, business layer, database layer, and the front end, everything is
            
            
            
              all together as a single application.
            
            
            
              And as I was talking about the order management system, so these four
            
            
            
              functionality, like the shopping cart, or basically the checkout
            
            
            
              functionality, then the order system, which basically places the order.
            
            
            
              Then we have the customer system, which basically maintains a track of different
            
            
            
              customers for that particular brand.
            
            
            
              And then we have the inventory system.
            
            
            
              So all of these four systems is all together binded in a
            
            
            
              single monolith application.
            
            
            
              But at the same time, if you look into the right hand side, these
            
            
            
              four different applications like the shopping cart, order, customer, and
            
            
            
              inventory, it The dependency is actually broken here and all these four are
            
            
            
              four separate entities altogether.
            
            
            
              So customer is a separate entity, order is a separate entity, shopping
            
            
            
              cart is a separate entity, inventory is actually a separate entity.
            
            
            
              And this is the greatest advantage which microservice provides that it also
            
            
            
              helps to dependency of the database.
            
            
            
              So if you see customer is actually having a radius and order is basically in MongoDB
            
            
            
              and shopping cart is in SQL server and inventory is actually the oracle database.
            
            
            
              So it gives us the flexibility to have multiple entities, multiple
            
            
            
              databases, but at the same time it can talk to each other.
            
            
            
              Now I will actually go through the the capability centric design, which is one
            
            
            
              of the design technique in microservices.
            
            
            
              Basically the business centric development focuses on business capabilities.
            
            
            
              So the microservices is actually built based on capabilities.
            
            
            
              So as we saw the example, which I was previously telling the example
            
            
            
              of order being a separate entity inventory being a separate entity.
            
            
            
              So these are different capabilities.
            
            
            
              which this monolith system, which is order management system can provide.
            
            
            
              And the responsibility what we have right now is to break this monolith
            
            
            
              system into multiple microservices.
            
            
            
              And each of these individual systems.
            
            
            
              functionalities like the inventory or payments or checkout, all
            
            
            
              these are different capabilities.
            
            
            
              So here in this case, we see that each capability is having the
            
            
            
              front end back end in the database.
            
            
            
              And then there is a product team which basically operates these
            
            
            
              Now understanding the root.
            
            
            
              So An aggregate will have one of its components objects be the aggregate root.
            
            
            
              Any references from outside the aggregate should only go to the aggregate root.
            
            
            
              The root can thus ensure the integrity of the aggregate as a whole.
            
            
            
              And if you look into this, the order is actually connected to all these
            
            
            
              different microservices like the payment strategy and the payment is actually
            
            
            
              having credit card, cash, bank transfer.
            
            
            
              At the same time, order is actually connected to the customer because the
            
            
            
              customer is the one who places the order and then the order can have multiple
            
            
            
              line items and it has a shipping address.
            
            
            
              So this gives us a better picture of how this is actually divided but at
            
            
            
              the same time connected to each other.
            
            
            
              Now this is a typical shopping menu or a shopping cart.
            
            
            
              So we have the order being the primary microservice, and then we have the
            
            
            
              do domain layers wherein we have different entities like order or
            
            
            
              item, shipping, address and payment.
            
            
            
              And then we have the service port.
            
            
            
              Which is Order Repository, Order Service, Order Web Service, Order Query Web
            
            
            
              Service, Shipping Address Web Service, Payment Web Service, and then we have
            
            
            
              the utilities like Order Factory, Order Status Converter, Record State Converter.
            
            
            
              What are these adapters?
            
            
            
              So we have these several adapters which helps us to connect to the system
            
            
            
              individually like the order repository adapter, order service adapter, order
            
            
            
              web service adapter, order query web service adapter, and so on and so forth.
            
            
            
              So these adapters, which basically consists of actual implementation
            
            
            
              of the ports like database access, web services, API, etc.
            
            
            
              And the converters are actually used to convert an enum value to a
            
            
            
              proper integer value in the database.
            
            
            
              For example, order status complete is mapped to an integer
            
            
            
              value 100 in the database.
            
            
            
              Now CRUD, as we all know about CRUD, CRUD is is basically create, read,
            
            
            
              update, and delete functionality.
            
            
            
              So it basically has a presentation layer, then a service layer, then business
            
            
            
              logic layer, and the data access layer, where we can basically query the database
            
            
            
              and push the updates to the database.
            
            
            
              So what is the disadvantage with CRUD?
            
            
            
              It is basically doing a mismatch between the read and write representations
            
            
            
              of the data, It risks data connection while records are logged in the
            
            
            
              data store in a collaborative domain where multiple actors operate in
            
            
            
              parallel on the same set of data.
            
            
            
              These risks increase as the complexity and throughput of the system grows.
            
            
            
              It can manage security and permission more quickly.
            
            
            
              complex because each entity is subject to both read and write operations, which
            
            
            
              might expose data in the wrong context.
            
            
            
              Now we will discuss about the different testing strategies with microservice.
            
            
            
              Just like the other systems, Microservice also has the various testing like we
            
            
            
              have the unit testing is basically the smallest piece of testable software
            
            
            
              in the application to determine whether it behaves as expected.
            
            
            
              Then we have the component testing, which basically helps
            
            
            
              us to do component level testing.
            
            
            
              Then finally, then we also have the integration testing, which
            
            
            
              defines the communication paths and integrations between components to
            
            
            
              test and detect interface errors.
            
            
            
              defects.
            
            
            
              And then we have the integrate integration contract testing, wherein we basically
            
            
            
              do a contract Test within the boundary of an external system verifying that
            
            
            
              it meets the contract expected by a consuming service And finally there is
            
            
            
              an end to end testing which basically tells that a system meets external
            
            
            
              requirements and achieves its goals Testing the entire system from end to
            
            
            
              end And some of the tools which we can actually use for microservice testing
            
            
            
              is Cucumber and JUnit, which helps us to do a mock, and then we have Mockito,
            
            
            
              which is a great tool to basically mock the service responses when each service
            
            
            
              is actually connected to the other one.
            
            
            
              Moving on to the side of deployment land.
            
            
            
              Now, I actually spoke about microservices.
            
            
            
              I spoke about the monolith systems.
            
            
            
              Now, when it comes to the deployment, there are a few things
            
            
            
              which microservice comes handy with, and it really helps a lot.
            
            
            
              Especially when we work with docker.
            
            
            
              Now, what is a docker?
            
            
            
              Docker is an open source platform for developers and sysadmins
            
            
            
              to develop, deploy and run applications within the containers.
            
            
            
              It works on the principle of build, ship and run.
            
            
            
              As you all know that build is a command, build container images on local
            
            
            
              laptop or automated through continuous integration pipeline ship container images
            
            
            
              through container registry, et cetera.
            
            
            
              And run is to run anywhere on cloud and on prem.
            
            
            
              So this is a typical docker architecture where we have a client
            
            
            
              side, which basically does a docker build, docker pull and docker run.
            
            
            
              And then we have a docker host, within that we have a docker daemon
            
            
            
              and the containers with the images.
            
            
            
              And at the other hand it has a registry, and all of these are
            
            
            
              actually interconnected to each other.
            
            
            
              Now let me talk about kubernetes.
            
            
            
              Kubernetes is an open source system for container orchestration.
            
            
            
              So we spoke about the docker and the containers.
            
            
            
              So kubernetes is basically a platform which helps us to manage these containers.
            
            
            
              containers in an effective way.
            
            
            
              And it is focused around scheduling, scaling self healing and auto repairing.
            
            
            
              So this is a typical Kubernetes architecture where we have an API, which
            
            
            
              basically connects to CLI interface.
            
            
            
              And then we have a Kubernetes masters, which connects to multiple
            
            
            
              nodes and the image registry.
            
            
            
              And there are.
            
            
            
              certain kubernetes parameters which I would like to talk about and
            
            
            
              when we talk about kubernetes, we definitely talk about these things.
            
            
            
              So one is pods.
            
            
            
              So pods is one or more containers and volumes.
            
            
            
              It has shared namespace.
            
            
            
              one IP, it has one IP per pod.
            
            
            
              And then we have services.
            
            
            
              Services is something which gives us a stable network endpoint and
            
            
            
              it has a label selector and also the load balancing within it.
            
            
            
              This is what I would like to share as part of my talk.
            
            
            
              I thank you so much to listen to me.
            
            
            
              This is my email ID, jubin.
            
            
            
              thomas at itriplee.
            
            
            
              org.
            
            
            
              I request you to please reach out to me if you have any questions.
            
            
            
              And once again, thank you for having me.