We have always been captivated ❤ and mesmerized 😮 by sci-fi movies like James Bond, and we dreamt of those technologies to become reality one day but here we are in the world of Artificial Intelligence and Deep Learning living at the edge of the Technology driven ecosystem. Visual Recognition has been there around for so long but there didn’t exist any product which handled use cases in a robust manner but after a decade of research and analysis Amazon launched deep learning based image detection and analysis product “Rekognition”.
I have tried giving you a brief overview of Amazon Rekognition through video tutorial which includes setup aws command line interface, maven project, and demo of how to create an application using aws rekognition.
Keep adding leaves in n-ary tree of knowledge but don’t let it get skewed 🙂
In previous post we introduced you all with our new hero Micro Services but now let’s create our first application. Light Bend Inc. created Lagom framework for creating reactive micro services. Its really easy to build micro services applications using Lagom framework because of reduced boiler plate task and code.
Architecture overview of Lagom Application, our application is basically divided into 2 components
- application-api (here we define entity objects and api endpoints)
- application-impl (here we provide the implementation of our services)
- Knowledge of Java 6 and basics of Java 8 functional programming
- Lagom framework for micro services, just have an overview
- Any IDE supporting Java Development (We are using IntellijIdea)
- Cassandra (Basic SQL queries, we are using embedded cassandra), Kafka is internally used by Lagom Framework for message posting.
- Lombok just basic idea, using for automated creation of immutable objects (Just to make code look cleaner and concise)
- Junit Testing Framework
Lagom application works in read and write segregated mode, read side operation which only reads from persistent storage system and doesn’t perform any write operation similarly write side operations makes changes into persistent storage (here we are using embedded cassandra provided by lagom framework)
- We have to create service interface first which contains entity objects and abstract methods which are service endpoints to be exposed to user and their mapping
- Next we have to create service implementation corresponding to abstract methods in service-api. This is the part where we have to focus as we have to define our services here and need to get our hands dirty with code
Below is a snapshot of Lagom project, this is how project structure looks like.
Book.java is Entity class here we are declaring out entity which is to be persisted into DB(we can use any relational database but we are using embedded cassandra), you must be curious as we have not defined getter-setter methods but look there is annotation @Builder lombok framework will create getter-setter on the fly.
BookService.java extends Service interface of Lagom framework, here we provide abstract methods for each service. ServiceCall interface is there which provides implementation for how service is implemented and invoked by Lagom Framework which receives request and response type parameters. Inside descriptor we specify mapping of Call identifiers with corresponding method to be invoked, here we are using restCall method for identifying service call.
There are three types of Call identifiers
- Named Call : In this we directly provide same name or any alternative name corresponding to service method
- Path Call : As name suggests, here we can specify uri path of the resource mapped with service method.
- Rest Call : In this we provide url pattern to be mapped with service method with http methods (GET, POST, PUT, DELETE etc)
Here goes the implementation of BookServiceImpl.java where we provide implementation of abstract methods in service api. Lagom framework create and provide instance of cassandra. We create persistent entity registry and cassandra session which allows us to read and persist the data into cassandra.
“Unity is Strength” is what we believe is de-facto but that’s not true when it comes to behaviour of Web-Services. Monolith application (tightly encapsulated and highly inter-dependent applications) is what existed earlier but in recent time there was need of something called micro services which allows enterprise(large) applications to be broken down into independent application components which communicates to each other in case of interdependent information.
Micro Services need arises because of today’s paced dynamic requirement, let’s take a practical scenario xyz.com is planning to launch sales on electronics items only for 2 days but xyz.com is having different categories of product being hosted on their system e.g. Clothing, Groceries, Beauty Product, Household Products, Accessories etc. But on sales days there will be huge traffic requesting for electronics item mostly so logically we should be able to scale up electronics category of products for 2 days on entire product listing but here monolithic application fails 😦 . As monolithic applications are tightly encapsulated so we cannot scale up or down a particular component of application and segregating(re-engineering) different components is costlier than building an entire application. Here comes our Batman the saviour Micro Services 🙂
REACTIVE in Reactive micro services
Reactive is feather in the cap of micro services architecture, reactive basically represents bunch of additional performance optimisations like Scalable, Robust, Distributed, Resilience, Responsive. Let’s take all these conundrums one by one
- Scalable : One of the core reason for existence of micro services, applications should be scalable as per need
- Robust : Without robustness(consistent performance) any additional functionality doesn’t count. Micro services are designed in such a way that their downtime is almost zero.
- Distributed : Micro services are distributed in nature, that is there is single point of failure.
- Resilience : Because of distributed nature micro services are resilience that is they can recover from failure in almost zero time, micro services architecture allows application to be eventually consistent by using event logs (stable state is achieved after completion of event)
- Responsive : Even if best system is not fast and consistent, there is probability it won’t exist for long. Micro services are designed to make overall system fast and consistent.
In the next post we will meet this new Superhero in the battlefield and will try to save the world from monolithic applications ♥
References and Further Reading