<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Peter Evans - Ezeiatech</title>
	<atom:link href="https://ezeiatech.com/author/peterevans/feed/" rel="self" type="application/rss+xml" />
	<link>https://ezeiatech.com</link>
	<description>Global technology consulting company</description>
	<lastBuildDate>Fri, 05 Jan 2024 07:27:50 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.5.7</generator>

<image>
	<url>https://ezeiatech.com/wp-content/uploads/2022/04/cropped-Ezeiatech-Icon-32x32.png</url>
	<title>Peter Evans - Ezeiatech</title>
	<link>https://ezeiatech.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Master Worker Architecture Using Vert.x</title>
		<link>https://ezeiatech.com/master-worker-architecture-using-vert-x/</link>
		
		<dc:creator><![CDATA[Peter Evans]]></dc:creator>
		<pubDate>Tue, 04 Jan 2022 11:20:00 +0000</pubDate>
				<category><![CDATA[Quick Tips]]></category>
		<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Technology]]></category>
		<guid isPermaLink="false">http://13.127.63.32/?p=2524</guid>

					<description><![CDATA[<p>Today we are going to explain how Vert.x can be used for creating distributed Master Worker Paradigm. In large scale systems it’s applicable to wide variety of problems. Just to refresh our memories about what Vert.x Vert.x as we know is a lightweight framework for creating distributed microservices. It can sale up and scale out [&#8230;]</p>
<p>The post <a href="https://ezeiatech.com/master-worker-architecture-using-vert-x/">Master Worker Architecture Using Vert.x</a> first appeared on <a href="https://ezeiatech.com">Ezeiatech</a>.</p>]]></description>
										<content:encoded><![CDATA[<p>Today we are going to explain how <strong>Vert.x</strong> can be used for creating distributed Master Worker Paradigm. In large scale systems it’s applicable to wide variety of problems.</p>



<h2 class="wp-block-heading"><strong>Just to refresh our memories about what Vert.x</strong></h2>



<p><strong>Vert.x</strong> as we know is a lightweight framework for creating distributed microservices. It can sale up and scale out depending on your needs. It also takes away all your pain of dealing with complexity of heavily multithreaded environments, race conditions etc. etc.</p>



<p>Primary unit of work in <strong>Vert.x</strong> is a verticle. Verticles are thread safe and they can run locally or remotely. One Verticle interacts with other verticle using Events which carry data with them.</p>



<h3 class="wp-block-heading"><strong>Let’s take a day to day scenario.</strong></h3>



<p>We are getting lot of requests. Each request is independent of each other but we are unable to process all these requests on the commodity hardware that we have. How to serve all these requests coming to our cool high traffic website?</p>



<p>Well one answer is serve each request in a new “thread” and keep increasing the CPU Cores (Scale Up) and hope it will work. This is what your webserver does. Problem is you can only increase no of cores to a limit (How high you can go?).</p>



<p>Once you reach that limit you will add more such machines and leave it to load balancer to divide all these requests equally between all machines. Sounds familiar?</p>



<p>Well, you will have problem relying on load balancer when every service in the system faces same issue. Every time you will have to scale these services and keep re-configuring load balancer. What if this was possible in application layer dynamically. What if we could scale up and out without any pain of load balancer. &nbsp;Good news is it can be achieved using Vert.x except load balancing happens inside your application layer. There can be lot of benefits of this approach which I will discuss some other time but for now let’s just focus on how can this be achieved using Vert.x.</p>



<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-2 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-1 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<h3 class="wp-block-heading"><strong>So this problem has 2 major challenges</strong>:</h3>



<ol>
<li>How to divide the work between different machines so that we can keep up with this load.</li>



<li>How to combine the result from all this processing so that we can return this result to client (master) who needs answers from all workers before proceeding further (Can this be achieved by load balancer?).</li>
</ol>
</div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<figure class="wp-block-image size-full"><img fetchpriority="high" decoding="async" width="471" height="239" src="http://13.127.63.32/wp-content/uploads/2022/04/vert-x-master-worker.png" alt="vert-x-master-worker" class="wp-image-2525" srcset="https://ezeiatech.com/wp-content/uploads/2022/04/vert-x-master-worker.png 471w, https://ezeiatech.com/wp-content/uploads/2022/04/vert-x-master-worker-300x152.png 300w" sizes="(max-width: 471px) 100vw, 471px" /></figure>
</div>
</div>
</div>
</div>



<p>So Master is like Management whose only job is to distribute all the work to developers (like you and me) and when work is done. Combine all the statuses, create a report and notify the boss and hopefully get a fat pay hike (sounds familiar?).</p>



<p>In terms of Vert.x We have a master Verticle which gets lot of work to do. But Master does not want to do any work.Why? Because its a “Master”. So master wants to assign all this work to Workers. Worker are also verticles in Vert.x. But then problem arises that master needs to know if all work is completed so that it can make right decision about what to do next.</p>



<p>So here is high level architecture we are going to flow.</p>



<p>Ok..so in order to simulate this first lets create lot of work.</p>



<figure class="wp-block-image size-full"><img decoding="async" width="881" height="376" src="http://13.127.63.32/wp-content/uploads/2022/04/code1-1.png" alt="code1-1" class="wp-image-2528" srcset="https://ezeiatech.com/wp-content/uploads/2022/04/code1-1.png 881w, https://ezeiatech.com/wp-content/uploads/2022/04/code1-1-300x128.png 300w, https://ezeiatech.com/wp-content/uploads/2022/04/code1-1-768x328.png 768w" sizes="(max-width: 881px) 100vw, 881px" /></figure>



<figure class="wp-block-image size-full"><img decoding="async" width="821" height="345" src="http://13.127.63.32/wp-content/uploads/2022/04/code1-2.png" alt="code1-2" class="wp-image-2529" srcset="https://ezeiatech.com/wp-content/uploads/2022/04/code1-2.png 821w, https://ezeiatech.com/wp-content/uploads/2022/04/code1-2-300x126.png 300w, https://ezeiatech.com/wp-content/uploads/2022/04/code1-2-768x323.png 768w" sizes="(max-width: 821px) 100vw, 821px" /></figure>



<p>So worker does the work and sends an event on event bus with result.</p>



<p>Now master needs to combine all these results. This is way cool features introduced in Vert.x 3…Composable futures It makes this so easy.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="754" height="205" src="http://13.127.63.32/wp-content/uploads/2022/04/code1-3.png" alt="code1-3" class="wp-image-2530" srcset="https://ezeiatech.com/wp-content/uploads/2022/04/code1-3.png 754w, https://ezeiatech.com/wp-content/uploads/2022/04/code1-3-300x82.png 300w" sizes="(max-width: 754px) 100vw, 754px" /></figure>



<p>That’s all !!.&nbsp; We hope this will be useful in some of your scenario.</p>



<p>Source code is available at&nbsp;<a href="https://github.com/singhmarut/vertx-master-worker-simulator">https://github.com/singhmarut/vertx-master-worker-simulator</a></p>



<p>Happy coding !!</p>



<p>Thank you for reading. For continued insights and in-depth discussions, please follow our <a href="https://ezeiatech.com/blog/" target="_blank" rel="noreferrer noopener">blogs</a> at <a href="https://ezeiatech.com/" target="_blank" rel="noreferrer noopener">Ezeiatech</a>.</p><p>The post <a href="https://ezeiatech.com/master-worker-architecture-using-vert-x/">Master Worker Architecture Using Vert.x</a> first appeared on <a href="https://ezeiatech.com">Ezeiatech</a>.</p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Apache Camel – Why You Should Learn?</title>
		<link>https://ezeiatech.com/apache-camel-why-you-should-learn/</link>
		
		<dc:creator><![CDATA[Peter Evans]]></dc:creator>
		<pubDate>Sun, 15 Nov 2020 10:53:00 +0000</pubDate>
				<category><![CDATA[Quick Tips]]></category>
		<category><![CDATA[Apache Camel]]></category>
		<category><![CDATA[Technology]]></category>
		<guid isPermaLink="false">http://13.127.63.32/?p=2512</guid>

					<description><![CDATA[<p>Recently I encountered a problem related to integration with some third party APIs. These days it is pretty common to outsource some activity for a company, integrating with social networking website, integration with third party tools installed on company premises. These tools can be built on various technologies and integration between different component becomes an [&#8230;]</p>
<p>The post <a href="https://ezeiatech.com/apache-camel-why-you-should-learn/">Apache Camel – Why You Should Learn?</a> first appeared on <a href="https://ezeiatech.com">Ezeiatech</a>.</p>]]></description>
										<content:encoded><![CDATA[<p>Recently I encountered a problem related to integration with some third party APIs. These days it is pretty common to outsource some activity for a company, integrating with social networking website, integration with third party tools installed on company premises.</p>



<p>These tools can be built on various technologies and integration between different component becomes an issue when people start writing code for individual component and do not target integration as one cohesive process.</p>



<p>Result is cluttered tightly coupled development based on many assumptions.&nbsp;Necessity&nbsp;is to take a comprehensive uniform approach to tackle this problem.</p>



<p>Various open source ESB and commercial solutions are available for this but in my experience I have found that using an ESB right away is a difficult thing for developers to accept as every ESB faces a certain style of development.</p>



<p>So approach should be slowly introduce the concept involved in an ESB during development process.</p>



<p>One such core ingredient in ESB is called &nbsp;Enterprise Integration Patterns into core modules and let people learn the concept and admire them.</p>



<p>Enterprise Integration Patterns (EIP) are patterns just like GOF patterns but context is “integration” between disparate systems.</p>



<p>These patterns are well documented in the book by&nbsp;<a href="http://www.amazon.com/exec/obidos/search-handle-url/105-9796798-8100401?%5Fencoding=UTF8&amp;search-type=ss&amp;index=books&amp;field-author=Gregor%20Hohpe">Gregor Hohpe</a>&nbsp;and&nbsp;<a href="http://www.amazon.com/exec/obidos/search-handle-url/105-9796798-8100401?%5Fencoding=UTF8&amp;search-type=ss&amp;index=books&amp;field-author=Bobby%20Woolf">Bobby Woolf</a>.</p>



<p>If you want to have a quick look at what these patterns are then go to <a rel="noreferrer noopener" href="http://camel.apache.org/enterprise-integration-patterns.html" target="_blank">http://camel.apache.org/enterprise-integration-patterns.html</a></p>



<p>Apache Camel is an out of the box solution which implements all patterns described in EIP and provides integration with many more components which can help developers by avoiding pain of writing boilerplate code. It also gives many useful implementations which will bring a consistency in your large code base that everyone will be able to easily understand.</p>



<p>Patterns are a proven way of building robust scalable and easy maintenance software and following them religiously can make a developer’s life easier and make organization save huge amount of money in long term.</p>



<p>Camel not only provides implementation of these EIP but more importantly it’s syntax is so fluent that it brings a paradigm shift the way one writes integration code.</p>



<p>It is an important framework to learn for a Java developer and I do not find any direct&nbsp;alternative&nbsp;in Microsoft world.</p>



<p>Just to give you an idea consider a simple scenario. You want to integrate to a third party API like a social networking, Courier Service, Text to Speech service or something else. It may so happen that while calling this API network glitch occurs and your call does not succeed. What do you want to do?</p>



<p>You guessed it right..All we can do is retry. So probably you will write a while loop which will check the HTTP status of this API and then if it’s not 200 then just retry. OK you can do that but problem is very common to be faced by every developer in your team so all of them are writing same type of code.</p>



<p>If you are a well managed team then you will probably create a shared library and publish it to your local maven repo and inform about it.</p>



<p>Great..you did that. Let’s add another twist to the tale..You want to retry but after some time. What do you do? Put sleep somewhere in your while loop. Again enhance your library and roll out a new version. Over the period you will come up with many such problems and end up writing same code which is there in camel (only better implemented).</p>



<p>Camel on the other hand provides a nice fluent interface which promotes consistent coding style across the board and you have a tool in your hand which solves lot of your problems out of the box.</p>



<p>In the next article we will try to develop a small application for building a fault tolerant application using Apache Camel.</p><p>The post <a href="https://ezeiatech.com/apache-camel-why-you-should-learn/">Apache Camel – Why You Should Learn?</a> first appeared on <a href="https://ezeiatech.com">Ezeiatech</a>.</p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>NoSQL and It’s Importance</title>
		<link>https://ezeiatech.com/nosql-and-its-importance/</link>
		
		<dc:creator><![CDATA[Peter Evans]]></dc:creator>
		<pubDate>Mon, 17 Feb 2020 10:41:00 +0000</pubDate>
				<category><![CDATA[Quick Tips]]></category>
		<category><![CDATA[NOSQL]]></category>
		<category><![CDATA[Technology]]></category>
		<guid isPermaLink="false">http://13.127.63.32/?p=2506</guid>

					<description><![CDATA[<p>Just attended a conference at thoughtworks office in Delhi. It was a great talk. Neal Ford was&#160;phenomenal&#160;and he really showed how technical presentations should be given. They do not have to be boring. To my surprise he has also written a book about presentations. Anyways, coming to the point. Talk started with introduction to No [&#8230;]</p>
<p>The post <a href="https://ezeiatech.com/nosql-and-its-importance/">NoSQL and It’s Importance</a> first appeared on <a href="https://ezeiatech.com">Ezeiatech</a>.</p>]]></description>
										<content:encoded><![CDATA[<p>Just attended a conference at thoughtworks office in Delhi. It was a great talk. Neal Ford was&nbsp;phenomenal&nbsp;and he really showed how technical presentations should be given. They do not have to be boring. To my surprise he has also written a book about presentations.</p>



<p>Anyways, coming to the point. Talk started with introduction to No SQL, what it is and what kind of use cases it might be fit. As expected lot of people were from RDBMS background so it was very hard for them to initially understand the concept of No SQL.</p>



<p>Fortunately that was not the case with me as I have been&nbsp;exploring&nbsp;these technologies for last couple of years and I have delivered some successful projects using Neo4J and MongoDB.</p>



<p>So I would like to put my thought process forward.</p>



<p>No SQL means that people in SQL world should look out for alternative persistence&nbsp;technologies&nbsp;when need arises. Lot of times when data needs to be stored SQL does not provide a natural way of storing it.</p>



<p>Take for example&nbsp;hierarchical&nbsp;data and unstructured data. Many to Many relationships are not a pretty sight anyways.</p>



<p>I found SQL to be very limited in features and capabilties when it comes to storing hierachical data.</p>



<p>All you can do is create child parent relationship and do recursive queries. As we all know 7 out of 10 times in a big application database is the first culprit and you need real experts to fine tune SQL Queries when you start feeling that application is not behaving upto &nbsp;expectations and users are drifting away.</p>



<p>No SQL can be divided primarily in four categories:</p>



<ol><li>Document Based (Mongo, Couch)</li><li>Key Value (Redis, Memcache, Dynamo, Riak)</li><li>Columnar Database (Cassandra, HBase)</li><li>Graph (InfiniteDB, neo4J)</li></ol>



<p>Out of these 4 graph database have a unique place and easier to decide at least in my experience. Whenever data is&nbsp;hierarchical&nbsp;and relations can not be modeled using RDBMS easily one can go for neo4J.&nbsp;Hierarchical&nbsp;data may require deep traversals and RDBMS definitely does not rock at this.</p>



<p>Document databases are easiest to use and MongoDB is a sheer pleasure to work with. It gets up and running very easily and have most features compared to any other&nbsp;database&nbsp;when it comes to querying.</p>



<p>So I will divide this post into some headings.</p>



<h3 class="wp-block-heading"><strong>When to use No SQL</strong></h3>



<p>My answer is always. Hardly there is any application today which does not have unstructured data. Everybody wants to grow so it is most likely that sooner or later you are going to generate data that will be large. Be it from social media, your own click stream capture. Storing Web logs or whatever. You want lot of users to come to your site. &nbsp;More the merrier so yes you will generate lot of data.</p>



<p>So having a polyglot persistence built in right from the&nbsp;beginning&nbsp;in&nbsp;application&nbsp;is gonna help you at later stage.</p>



<p>It’s easier to define what kind of use cases No SQL is not a good fit rather than finding good use cases (except big data).</p>



<p>When you need strong ACID support (Financial information specifically). Payments, User registration then I will never think about storing these in a No SQL. Risk is just too great.</p>



<p>Some people argue like one gentleman at the conference that amazon is using Dynamo for storing user cart information. May be it can be used. But I will not agree with this 100%. Reason is simple. All NoSQL databases are eventual consistent. That means due to replication there is a delay in syncing the data on multiple machines.</p>



<p>So when you run a &nbsp;query you do not know which copy of data will be returned whether that’s latest information or old information. So if you use Mongo may be there is a chance in theory that user will see his old cart and not latest one and next time he looks at his cart he might be seeing latest one. I would not want this. So consider this use case out of scope for mongodb.</p>



<p>Some NoSQL dbs like Riak provide vector clocks but they have their own problems.</p>



<p><a href="http://docs.basho.com/riak/latest/references/appendices/concepts/Vector-Clocks/">http://docs.basho.com/riak/latest/references/appendices/concepts/Vector-Clocks/</a></p>



<p>So one has to be very careful in such&nbsp;scenarios.</p>



<p>Take another use of promotional campaigns. Lot of companies do promotional campaigns and they need to store these huge emails and they even track their performances then it is a definite use case for a NoSQL. Data is huge..it does not have to be transactional and if we loose some data due to some node failure we will not loose our job.</p>



<p>In No SQL world two principles are very prevalent.</p>



<ol><li><strong>Prefer redundancy over normalisation</strong>. Disk is cheap theortecally infinite and No SQL due to in built horizontal scalability have no problem handling data. So when you have to optimize your query do not change your schema but you can store redundant data in separate table suitable for this query only.<br>Design schema for your queries. Write down use cases and design your data storage accordingly. Do not try to do otherwise as in SQL world.</li><li><strong>Design your app for Consistenc</strong>y&nbsp;.relations/rules/data quality are all handled in application as NoSQL does not&nbsp;guarantee&nbsp;this. There are no joins and locks are at row&nbsp;level.</li></ol>



<p>Let’s look at some of the use cases for each database.</p>



<h3 class="wp-block-heading"><a rel="noreferrer noopener" href="http://mongodb.org/" target="_blank">MongoDB</a></h3>



<p>It should be first choice by default..more so when you do not have much experience with No SQL world. Most close to RDBMS supported by excellent client drivers and easily integrated with any stack PHP, Java, Python, Node JS you name it.</p>



<p>It can be used as a general purpose database. Supports secondary indexes. Shards easily</p>



<p>Only problem I find with MongoDB is versioning. I never know what version of data is going to be returned to me.</p>



<h3 class="wp-block-heading"><a rel="noreferrer noopener" href="http://www.neo4j.org/" target="_blank">Neo4J</a></h3>



<p>Most suitable for Social Graphs. Deep traversals. Recommendations. Implemented a subject hierarchy using this and traversals were damn fast. Provides excellent Apis in Java..supports REST. No other fully open source graphDB comes to close to this one.</p>



<p>Hypergraph is comparable but lets down in Apis compare to Neo4J especially traversals.</p>



<h2 class="wp-block-heading"><strong>Column Oriented</strong></h2>



<h3 class="wp-block-heading"><a rel="noreferrer noopener" href="http://cassandra.apache.org/" target="_blank">Cassandra</a>&nbsp;and&nbsp;<a rel="noreferrer noopener" href="http://hbase.apache.org/" target="_blank">HBase</a></h3>



<p>Both are column based with minor differences here and there. Cassandra was developed by Facebook and became an Apache incubator later on. HBase sits on top of hadoop.</p>



<p>Their use case I see is only one. When you have lots of data.&nbsp;Hundreds&nbsp;of TB to PB and you just want to do Map Reduce though Cassandra provides CQL. You will know when you have that much data.</p>



<h2 class="wp-block-heading"><strong>Key Value Pair</strong></h2>



<p>e.g Memcache/Redis – They are damn good at what they do. Primarily used in caching layer they can server data to your clients insanely fast. Can shard on&nbsp;hundreds&nbsp;of servers easily and redis even provides many useful Data Structures in built.</p>



<p>So here in short I just provided my experience with No SQL.</p>



<p>Comments are welcome.</p><p>The post <a href="https://ezeiatech.com/nosql-and-its-importance/">NoSQL and It’s Importance</a> first appeared on <a href="https://ezeiatech.com">Ezeiatech</a>.</p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>My Opinion About PHP</title>
		<link>https://ezeiatech.com/my-opinion-about-php/</link>
		
		<dc:creator><![CDATA[Peter Evans]]></dc:creator>
		<pubDate>Mon, 23 Dec 2019 10:28:00 +0000</pubDate>
				<category><![CDATA[Quick Tips]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Technology]]></category>
		<guid isPermaLink="false">http://13.127.63.32/?p=2503</guid>

					<description><![CDATA[<p>PHP has become one of the primary technologies while developing web applications these days. While working for Talentica &#160;I can recall at that time there was only one project on PHP and mostly people were doing Java. After PHP5 it regained it’s strength and became one of primary stack for developers. I would try to [&#8230;]</p>
<p>The post <a href="https://ezeiatech.com/my-opinion-about-php/">My Opinion About PHP</a> first appeared on <a href="https://ezeiatech.com">Ezeiatech</a>.</p>]]></description>
										<content:encoded><![CDATA[<p>PHP has become one of the primary technologies while developing web applications these days. While working for Talentica &nbsp;I can recall at that time there was only one project on PHP and mostly people were doing Java. After PHP5 it regained it’s strength and became one of primary stack for developers. I would try to explain what is my thinking about it.</p>



<p>There are 4 stacks that are very popular these days for an internet application to be built in.</p>



<ol><li>Java world – Spring/Grails ( I have worked on both)</li><li>.Net world – Asp.Net/C# Combination</li><li>Ruby World – Ruby on Rails</li><li>PHP – LAMP Stack (Zend/Symfony)</li></ol>



<p>Ruby on Rails, PHP frameworks and Grails are built around same philosophy i.e. Rapid Application Development. They follow an approach called Convention over configuration.</p>



<p>They all follow same development style and are supported by dynamic languages Grooy/PHP/Ruby. e.g. MVC is the universally accepted pattern for developing Web Applications now.</p>



<p>An internet application would typically have three layers.</p>



<ol><li>Presentation Layer – All frameworks provide a rendering engine to easily create web pages. Some even provide pluggable engines so you get a choice.</li><li>Business Layer – Usually is written in one primary language but often interacts with external services.</li><li>DB Layer – ORM like hibernate/GORM/ActiveRecord/Doctrine.</li></ol>



<p>Almost all stacks provide an easy to use ORM layer which conceptually works in more or less same manner.</p>



<p>I do not see how someone experienced in GORM would have any problem working with Symfony ORM or Active Record.</p>



<p>Consider search which is a very important factor for a website. You will integrate a tool like Solr/Elastic Search in your application. It hardly matters what language you use for accessing Solr, you will still be doing similar calls.</p>



<p>As far as MySQL is concerned it is Database and is totally independent of language being used though there might be some differences in syntax of ORM layers. I have worked on C++/.Net/Java and Grails and I find myself equally at ease because underlying remains same.</p>



<p>Yes it is true that you can do faster development if you have someone who is&nbsp;experienced&nbsp;only in the stack you are using but things change when it comes to scalability.</p>



<p>Having said that largest of the applications today follow an approach called “right tool for the right job”. e.g. FB uses PHP as their Front End application but in the backed they have whole lot of languages including Java/C++/Erlang. That is how they achieve the scalability.</p>



<p>Facebook long before created a project called Thrift just to achieve seamless integration between different languages and is widely used today. I have used it myself to call Neo4J API in Java from .Net as .Net apis were not available for this graph database.</p>



<p>Even twitter story is very famous and they all solve their scalability problems on JVM and not Ruby on Rails which has been their primary stack for a long time.</p>



<p>PHP by design is not a multithreaded language and I am sure that people when they look for scalability they more often than not try to go to JVM and apache projects. This is called Polyglot style of programming where you do not stick just to one stack but do the right thing.</p>



<p>It is tremendous tool for creating sites quickly and gives many features/plugins out of the box but it can not solve all the problems a&nbsp;successful&nbsp;website will face in future.</p>



<p>I know some of the e-commerce company who quickly created a website by using Magento but now find it extremely difficult to scale due to it’s design of database which follows EAV model.</p>



<p>Though scalability is again subjective and it depends on what you are looking for. One may argue that many sites will never reach the scale of Facebook and Twitter but my argument is simple that if using right tool is the approach then it will not harm you. It is like Test Driven Development.&nbsp;Some people find it wastage of time&nbsp;but gives you robustness undoubtedly.</p>



<p>Take another&nbsp;scenario&nbsp;of NoSQL. I have used couple of NoSQL solutions and for a start up it is important to save cash, they do not try to Scale UP as bigger machines are quite expensive but scale out using commodity hardware. Hence NoSQL. NoSQL is&nbsp;analogous&nbsp;with Big data these days.</p>



<p>Again this is called polyglot persistence and is heavily in use today. It is easier to keep using MySQL but there are problems where MySQL does not scale well hence you look to add a new stack in your development process.</p>



<p>I have introduced new technologies time to time very systematically and that is how I have been able to solve scaling problems. These technologies at the same time have saved considerable time of the team. e.g. Using MongoDB we were able to solve long standing problems of sending and storing bulk emails for campaigns.</p>



<p>So I am of the opinion for different jobs different tools are required and they should be used systematically in a timely fashion. If right strategy is adopted they can give tremendous results in productivity and scalability.</p>



<p>As far as my experience with PHP is concerned then apart from fixing some bugs in an existing PHP application.</p>



<p>As part of my job I would not mind using or learning any&nbsp;technology&nbsp;including PHP but my effort would always be in the direction of doing the right thing keeping in mind time and budget constraints. Having worked in different stacks in my career I think this is something I really like about myself.</p><p>The post <a href="https://ezeiatech.com/my-opinion-about-php/">My Opinion About PHP</a> first appeared on <a href="https://ezeiatech.com">Ezeiatech</a>.</p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Web Application Scalability – ElasticSearch VS Redis</title>
		<link>https://ezeiatech.com/web-application-scalability-elasticsearch-vs-redis/</link>
		
		<dc:creator><![CDATA[Peter Evans]]></dc:creator>
		<pubDate>Sun, 18 Aug 2019 10:05:00 +0000</pubDate>
				<category><![CDATA[Quick Tips]]></category>
		<category><![CDATA[Elastic Search]]></category>
		<category><![CDATA[Redis]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Web Applications]]></category>
		<guid isPermaLink="false">http://13.127.63.32/?p=2497</guid>

					<description><![CDATA[<p>Its 3rd article in Web Scalability. Today I am looking at various projects going on in Indian Start ups&#160;and I am thrilled by variety of technologies being used. While this sounds good at the same time I feel we are unable to utilize core strengths of technologies used. Their usage in architecture will always be [&#8230;]</p>
<p>The post <a href="https://ezeiatech.com/web-application-scalability-elasticsearch-vs-redis/">Web Application Scalability – ElasticSearch VS Redis</a> first appeared on <a href="https://ezeiatech.com">Ezeiatech</a>.</p>]]></description>
										<content:encoded><![CDATA[<p>Its 3rd article in Web Scalability. Today I am looking at various projects going on in Indian Start ups&nbsp;and I am thrilled by variety of technologies being used.</p>



<p>While this sounds good at the same time I feel we are unable to utilize core strengths of technologies used.</p>



<p>Their usage in architecture will always be dependent on person to person and their experience and comfort level. But some simple things if adopted early stage can give immense benefits.</p>



<p>One such technology is our simple cache which is being used everywhere but alas not in the right way.</p>



<p>It’s called redis. Yes the kind of benefit this humble software can bring to create a highly scalable websites is awesome.</p>



<p>I have seen many startups are using Elastic Search as a “Cache”. Yes, I can not imagine someone doing this until you are total nuts. ES is an indexing technology and not a “Cache”. It will never update in real time which is what is expected from cache. It will never be in sync with underlying storage and hence almost always have stale data.</p>



<p>Using it as primary data source for anything is simply insane and shows the immaturity of the architect who chose it in the first place. It will not work except for most trivial projects.</p>



<p>Anyways ES has its niche but it’s not a cache but Redis is. It provides many advanced data structures and can do hell lot of thing in caching layer itself.</p>



<p>One needs to take a hard look at various data structures provided and how they can be used to create a “real” caching layer on top of it and get same output which one was hoping to get from ES out of the box.</p>



<p>It has sets/hashes/sorted sets/lists etc.</p>



<p>Keep putting data at the rate your site might never experience and retrieve it at blazingly fast speed.</p>



<p>Most importantly its single thread model brings the consistency one might need for creating distributed counters.</p>



<p>Think about it and if you are confused how it can be used for your use case just like always drop an email..who knows I may like your use case interesting enough and help you.</p><p>The post <a href="https://ezeiatech.com/web-application-scalability-elasticsearch-vs-redis/">Web Application Scalability – ElasticSearch VS Redis</a> first appeared on <a href="https://ezeiatech.com">Ezeiatech</a>.</p>]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
