CINXE.COM

Phani – Engineering Blog

<!doctype html> <html lang="en-US"> <head> <script type="text/javascript" src="https://cdn.cookielaw.org/consent/3959dac5-afc8-4ac6-a2c2-f91a2836f1c6/OtAutoBlock.js" ></script> <script src="https://cdn.cookielaw.org/scripttemplates/otSDKStub.js" type="text/javascript" charset="UTF-8" data-domain-script="3959dac5-afc8-4ac6-a2c2-f91a2836f1c6" ></script> <script type="text/javascript"> function OptanonWrapper() { } </script> <meta charset="UTF-8"> <link rel="profile" href="https://gmpg.org/xfn/11"> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script> <title>Phani &#8211; Engineering Blog</title> <meta name='robots' content='max-image-preview:large' /> <link rel="alternate" type="application/rss+xml" title="Engineering Blog &raquo; Feed" href="https://engineering.zeta.tech/feed/" /> <link rel="alternate" type="application/rss+xml" title="Engineering Blog &raquo; Comments Feed" href="https://engineering.zeta.tech/comments/feed/" /> <link rel="alternate" type="application/rss+xml" title="Engineering Blog &raquo; Posts by Phani Feed" href="https://engineering.zeta.tech/author/phani_marpaka/feed/" /> <script> window._wpemojiSettings = {"baseUrl":"https:\/\/s.w.org\/images\/core\/emoji\/15.0.3\/72x72\/","ext":".png","svgUrl":"https:\/\/s.w.org\/images\/core\/emoji\/15.0.3\/svg\/","svgExt":".svg","source":{"concatemoji":"https:\/\/engineering.zeta.tech\/wp-includes\/js\/wp-emoji-release.min.js?ver=6.6.1"}}; /*! This file is auto-generated */ !function(i,n){var o,s,e;function c(e){try{var t={supportTests:e,timestamp:(new Date).valueOf()};sessionStorage.setItem(o,JSON.stringify(t))}catch(e){}}function p(e,t,n){e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(t,0,0);var t=new Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data),r=(e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(n,0,0),new Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data));return t.every(function(e,t){return e===r[t]})}function u(e,t,n){switch(t){case"flag":return n(e,"\ud83c\udff3\ufe0f\u200d\u26a7\ufe0f","\ud83c\udff3\ufe0f\u200b\u26a7\ufe0f")?!1:!n(e,"\ud83c\uddfa\ud83c\uddf3","\ud83c\uddfa\u200b\ud83c\uddf3")&&!n(e,"\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc65\udb40\udc6e\udb40\udc67\udb40\udc7f","\ud83c\udff4\u200b\udb40\udc67\u200b\udb40\udc62\u200b\udb40\udc65\u200b\udb40\udc6e\u200b\udb40\udc67\u200b\udb40\udc7f");case"emoji":return!n(e,"\ud83d\udc26\u200d\u2b1b","\ud83d\udc26\u200b\u2b1b")}return!1}function f(e,t,n){var r="undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?new OffscreenCanvas(300,150):i.createElement("canvas"),a=r.getContext("2d",{willReadFrequently:!0}),o=(a.textBaseline="top",a.font="600 32px Arial",{});return e.forEach(function(e){o[e]=t(a,e,n)}),o}function t(e){var t=i.createElement("script");t.src=e,t.defer=!0,i.head.appendChild(t)}"undefined"!=typeof Promise&&(o="wpEmojiSettingsSupports",s=["flag","emoji"],n.supports={everything:!0,everythingExceptFlag:!0},e=new Promise(function(e){i.addEventListener("DOMContentLoaded",e,{once:!0})}),new Promise(function(t){var n=function(){try{var e=JSON.parse(sessionStorage.getItem(o));if("object"==typeof e&&"number"==typeof e.timestamp&&(new Date).valueOf()<e.timestamp+604800&&"object"==typeof e.supportTests)return e.supportTests}catch(e){}return null}();if(!n){if("undefined"!=typeof Worker&&"undefined"!=typeof OffscreenCanvas&&"undefined"!=typeof URL&&URL.createObjectURL&&"undefined"!=typeof Blob)try{var e="postMessage("+f.toString()+"("+[JSON.stringify(s),u.toString(),p.toString()].join(",")+"));",r=new Blob([e],{type:"text/javascript"}),a=new Worker(URL.createObjectURL(r),{name:"wpTestEmojiSupports"});return void(a.onmessage=function(e){c(n=e.data),a.terminate(),t(n)})}catch(e){}c(n=f(s,u,p))}t(n)}).then(function(e){for(var t in e)n.supports[t]=e[t],n.supports.everything=n.supports.everything&&n.supports[t],"flag"!==t&&(n.supports.everythingExceptFlag=n.supports.everythingExceptFlag&&n.supports[t]);n.supports.everythingExceptFlag=n.supports.everythingExceptFlag&&!n.supports.flag,n.DOMReady=!1,n.readyCallback=function(){n.DOMReady=!0}}).then(function(){return e}).then(function(){var e;n.supports.everything||(n.readyCallback(),(e=n.source||{}).concatemoji?t(e.concatemoji):e.wpemoji&&e.twemoji&&(t(e.twemoji),t(e.wpemoji)))}))}((window,document),window._wpemojiSettings); </script> <style id='wp-emoji-styles-inline-css'> img.wp-smiley, img.emoji { display: inline !important; border: none !important; box-shadow: none !important; height: 1em !important; width: 1em !important; margin: 0 0.07em !important; vertical-align: -0.1em !important; background: none !important; padding: 0 !important; } </style> <link rel='stylesheet' id='wp-block-library-css' href='https://engineering.zeta.tech/wp-includes/css/dist/block-library/style.min.css?ver=6.6.1' media='all' /> <style id='classic-theme-styles-inline-css'> /*! This file is auto-generated */ .wp-block-button__link{color:#fff;background-color:#32373c;border-radius:9999px;box-shadow:none;text-decoration:none;padding:calc(.667em + 2px) calc(1.333em + 2px);font-size:1.125em}.wp-block-file__button{background:#32373c;color:#fff;text-decoration:none} </style> <style id='global-styles-inline-css'> :root{--wp--preset--aspect-ratio--square: 1;--wp--preset--aspect-ratio--4-3: 4/3;--wp--preset--aspect-ratio--3-4: 3/4;--wp--preset--aspect-ratio--3-2: 3/2;--wp--preset--aspect-ratio--2-3: 2/3;--wp--preset--aspect-ratio--16-9: 16/9;--wp--preset--aspect-ratio--9-16: 9/16;--wp--preset--color--black: #000000;--wp--preset--color--cyan-bluish-gray: #abb8c3;--wp--preset--color--white: #ffffff;--wp--preset--color--pale-pink: #f78da7;--wp--preset--color--vivid-red: #cf2e2e;--wp--preset--color--luminous-vivid-orange: #ff6900;--wp--preset--color--luminous-vivid-amber: #fcb900;--wp--preset--color--light-green-cyan: #7bdcb5;--wp--preset--color--vivid-green-cyan: #00d084;--wp--preset--color--pale-cyan-blue: #8ed1fc;--wp--preset--color--vivid-cyan-blue: #0693e3;--wp--preset--color--vivid-purple: #9b51e0;--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple: linear-gradient(135deg,rgba(6,147,227,1) 0%,rgb(155,81,224) 100%);--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan: linear-gradient(135deg,rgb(122,220,180) 0%,rgb(0,208,130) 100%);--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange: linear-gradient(135deg,rgba(252,185,0,1) 0%,rgba(255,105,0,1) 100%);--wp--preset--gradient--luminous-vivid-orange-to-vivid-red: linear-gradient(135deg,rgba(255,105,0,1) 0%,rgb(207,46,46) 100%);--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray: linear-gradient(135deg,rgb(238,238,238) 0%,rgb(169,184,195) 100%);--wp--preset--gradient--cool-to-warm-spectrum: linear-gradient(135deg,rgb(74,234,220) 0%,rgb(151,120,209) 20%,rgb(207,42,186) 40%,rgb(238,44,130) 60%,rgb(251,105,98) 80%,rgb(254,248,76) 100%);--wp--preset--gradient--blush-light-purple: linear-gradient(135deg,rgb(255,206,236) 0%,rgb(152,150,240) 100%);--wp--preset--gradient--blush-bordeaux: linear-gradient(135deg,rgb(254,205,165) 0%,rgb(254,45,45) 50%,rgb(107,0,62) 100%);--wp--preset--gradient--luminous-dusk: linear-gradient(135deg,rgb(255,203,112) 0%,rgb(199,81,192) 50%,rgb(65,88,208) 100%);--wp--preset--gradient--pale-ocean: linear-gradient(135deg,rgb(255,245,203) 0%,rgb(182,227,212) 50%,rgb(51,167,181) 100%);--wp--preset--gradient--electric-grass: linear-gradient(135deg,rgb(202,248,128) 0%,rgb(113,206,126) 100%);--wp--preset--gradient--midnight: linear-gradient(135deg,rgb(2,3,129) 0%,rgb(40,116,252) 100%);--wp--preset--font-size--small: 13px;--wp--preset--font-size--medium: 20px;--wp--preset--font-size--large: 36px;--wp--preset--font-size--x-large: 42px;--wp--preset--spacing--20: 0.44rem;--wp--preset--spacing--30: 0.67rem;--wp--preset--spacing--40: 1rem;--wp--preset--spacing--50: 1.5rem;--wp--preset--spacing--60: 2.25rem;--wp--preset--spacing--70: 3.38rem;--wp--preset--spacing--80: 5.06rem;--wp--preset--shadow--natural: 6px 6px 9px rgba(0, 0, 0, 0.2);--wp--preset--shadow--deep: 12px 12px 50px rgba(0, 0, 0, 0.4);--wp--preset--shadow--sharp: 6px 6px 0px rgba(0, 0, 0, 0.2);--wp--preset--shadow--outlined: 6px 6px 0px -3px rgba(255, 255, 255, 1), 6px 6px rgba(0, 0, 0, 1);--wp--preset--shadow--crisp: 6px 6px 0px rgba(0, 0, 0, 1);}:where(.is-layout-flex){gap: 0.5em;}:where(.is-layout-grid){gap: 0.5em;}body .is-layout-flex{display: flex;}.is-layout-flex{flex-wrap: wrap;align-items: center;}.is-layout-flex > :is(*, div){margin: 0;}body .is-layout-grid{display: grid;}.is-layout-grid > :is(*, div){margin: 0;}:where(.wp-block-columns.is-layout-flex){gap: 2em;}:where(.wp-block-columns.is-layout-grid){gap: 2em;}:where(.wp-block-post-template.is-layout-flex){gap: 1.25em;}:where(.wp-block-post-template.is-layout-grid){gap: 1.25em;}.has-black-color{color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-color{color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-color{color: var(--wp--preset--color--white) !important;}.has-pale-pink-color{color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-color{color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-color{color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-color{color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-color{color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-color{color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-color{color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-color{color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-color{color: var(--wp--preset--color--vivid-purple) !important;}.has-black-background-color{background-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-background-color{background-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-background-color{background-color: var(--wp--preset--color--white) !important;}.has-pale-pink-background-color{background-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-background-color{background-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-background-color{background-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-background-color{background-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-background-color{background-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-background-color{background-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-background-color{background-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-background-color{background-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-background-color{background-color: var(--wp--preset--color--vivid-purple) !important;}.has-black-border-color{border-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-border-color{border-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-border-color{border-color: var(--wp--preset--color--white) !important;}.has-pale-pink-border-color{border-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-border-color{border-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-border-color{border-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-border-color{border-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-border-color{border-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-border-color{border-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-border-color{border-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-border-color{border-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-border-color{border-color: var(--wp--preset--color--vivid-purple) !important;}.has-vivid-cyan-blue-to-vivid-purple-gradient-background{background: var(--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple) !important;}.has-light-green-cyan-to-vivid-green-cyan-gradient-background{background: var(--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan) !important;}.has-luminous-vivid-amber-to-luminous-vivid-orange-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange) !important;}.has-luminous-vivid-orange-to-vivid-red-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-orange-to-vivid-red) !important;}.has-very-light-gray-to-cyan-bluish-gray-gradient-background{background: var(--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray) !important;}.has-cool-to-warm-spectrum-gradient-background{background: var(--wp--preset--gradient--cool-to-warm-spectrum) !important;}.has-blush-light-purple-gradient-background{background: var(--wp--preset--gradient--blush-light-purple) !important;}.has-blush-bordeaux-gradient-background{background: var(--wp--preset--gradient--blush-bordeaux) !important;}.has-luminous-dusk-gradient-background{background: var(--wp--preset--gradient--luminous-dusk) !important;}.has-pale-ocean-gradient-background{background: var(--wp--preset--gradient--pale-ocean) !important;}.has-electric-grass-gradient-background{background: var(--wp--preset--gradient--electric-grass) !important;}.has-midnight-gradient-background{background: var(--wp--preset--gradient--midnight) !important;}.has-small-font-size{font-size: var(--wp--preset--font-size--small) !important;}.has-medium-font-size{font-size: var(--wp--preset--font-size--medium) !important;}.has-large-font-size{font-size: var(--wp--preset--font-size--large) !important;}.has-x-large-font-size{font-size: var(--wp--preset--font-size--x-large) !important;} :where(.wp-block-post-template.is-layout-flex){gap: 1.25em;}:where(.wp-block-post-template.is-layout-grid){gap: 1.25em;} :where(.wp-block-columns.is-layout-flex){gap: 2em;}:where(.wp-block-columns.is-layout-grid){gap: 2em;} :root :where(.wp-block-pullquote){font-size: 1.5em;line-height: 1.6;} </style> <link rel='stylesheet' id='zetaengnblog-style-css' href='https://engineering.zeta.tech/wp-content/themes/zetaengnblog/style.css?ver=1.0.0' media='all' /> <script id="core-js-js-extra"> var ajax_posts = {"ajaxurl":"https:\/\/engineering.zeta.tech\/wp-admin\/admin-ajax.php","noposts":"No older posts found"}; </script> <script src="https://engineering.zeta.tech/wp-content/themes/zetaengnblog/js/core.js?ver=6.6.1" id="core-js-js"></script> <link rel="https://api.w.org/" href="https://engineering.zeta.tech/wp-json/" /><link rel="alternate" title="JSON" type="application/json" href="https://engineering.zeta.tech/wp-json/wp/v2/users/7" /><link rel="EditURI" type="application/rsd+xml" title="RSD" href="https://engineering.zeta.tech/xmlrpc.php?rsd" /> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=5"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title> Home page </title> <meta name="description" content="Home page"> <meta name="description" content=""> <link rel="alternate" hreflang="en-US" href="" /> <link rel="canonical" href="" /> <meta name="x-sitemap-settings" content="daily,1"> <meta name="google-site-verification" content="Gyg3Spsr-pKlZLcNRhXHV_2X7aHr72bXxNgj-StYLpo" /> <!-- FACEBOOK OG META TAG --> <script src="https://unpkg.com/aos@next/dist/aos.js"></script> <meta property="og:title" content="Launch Next-Gen Credit Cards With Zeta" /> <meta property="og:description" content="Zeta is the world’s first Omni Stack for credit cards. A single stack for Origination, Processing, FRM, Rewards, Loans, APIs, and Apps" /> <meta property="og:image" content="https://s3.ap-south-1.amazonaws.com/zeta-website-images-prod/images/zeta-opengraph-preview.png" /> <meta property="og:type" content="website" /> <meta property="og:url" content="https://www.zeta.tech" /> <meta property="og:site_name" content="www.zeta.tech" /> <base href="/" /> <!-- Google Font --> <link rel="preconnect" href="https://fonts.googleapis.com"> <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> <link href="https://fonts.googleapis.com/css2?family=Inter:wght@200;400;500;600;700&family=Manrope:wght@400;500;600;700&display=swap" rel="stylesheet"> <!-- Google Font End --> </head> <body class=" main-page is-white-mobi-nav"> <!-- Web Banner View --> <section class="z-banner"> <div class="cover"></div> <div class="header-search"> <div class="z-container"> <form role="search" method="get" id="searchform" class="searchform" action="https://engineering.zeta.tech/"> <div> <label class="screen-reader-text" for="s">Search for:</label> <input type="search" id="search-form" placeholder="Search form" value="" name="s" id="s" /> <!-- <input type="submit" id="searchsubmit" value="Search" /> --> </div> </form> </div> </div> <div class="z-container"> <nav> <a href="/" class="logo-top" aria-label="Brand Logo"> <img src="/wp-content/uploads/2022/11/logo-white-xx.png" alt="Brand logo"/> </a> </nav> <h1 class="title"><a href="/" rel="home">Engineering @Zeta</a></h1> </div> </section> <section class="search-bar"> <div class="z-container text-right"> <button class="search-toggle"> <span></span> </button> </div> </section> <!-- / Web Banner View --> <main id="primary" class="site-main"> <header class="page-header"> <h1 class="page-title">Author: <span>Phani</span></h1> </header><!-- .page-header --> <article id="post-329" class="post-329 post type-post status-publish format-standard has-post-thumbnail hentry category-uncategorized"> <header class="entry-header"> <h2 class="entry-title"><a href="https://engineering.zeta.tech/prestoprestodb-what-it-offers-and-where-and-how-it-can-be-used/" rel="bookmark">Presto(PrestoDB)- What it Offers and Where and How it can be used</a></h2> <div class="entry-meta"> <span class="posted-on">Posted on <a href="https://engineering.zeta.tech/prestoprestodb-what-it-offers-and-where-and-how-it-can-be-used/" rel="bookmark"><time class="entry-date published" datetime="2023-01-24T11:53:54+00:00">January 24, 2023</time><time class="updated" datetime="2023-02-15T10:14:06+00:00">February 15, 2023</time></a></span><span class="byline"> by <span class="author vcard"><a class="url fn n" href="https://engineering.zeta.tech/author/phani_marpaka/">Phani</a></span></span> </div><!-- .entry-meta --> </header><!-- .entry-header --> <a class="post-thumbnail" href="https://engineering.zeta.tech/prestoprestodb-what-it-offers-and-where-and-how-it-can-be-used/" aria-hidden="true" tabindex="-1"> <img width="1200" height="613" src="https://engineering.zeta.tech/wp-content/uploads/2023/01/1_4lksLQ-UVCbc5HgvEG6Kvw.jpeg" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="Presto(PrestoDB)- What it Offers and Where and How it can be used" decoding="async" fetchpriority="high" srcset="https://engineering.zeta.tech/wp-content/uploads/2023/01/1_4lksLQ-UVCbc5HgvEG6Kvw.jpeg 1200w, https://engineering.zeta.tech/wp-content/uploads/2023/01/1_4lksLQ-UVCbc5HgvEG6Kvw-300x153.jpeg 300w, https://engineering.zeta.tech/wp-content/uploads/2023/01/1_4lksLQ-UVCbc5HgvEG6Kvw-1024x523.jpeg 1024w, https://engineering.zeta.tech/wp-content/uploads/2023/01/1_4lksLQ-UVCbc5HgvEG6Kvw-768x392.jpeg 768w" sizes="(max-width: 1200px) 100vw, 1200px" /> </a> <div class="entry-content"> <figure class="wp-block-image"><img decoding="async" src="https://miro.medium.com/max/1400/1*4lksLQ-UVCbc5HgvEG6Kvw.jpeg" alt=""/></figure> <p id="f800"><strong>What is Presto?</strong></p> <p id="39f5">Presto (or PrestoDB) is a distributed, fast, reliable SQL Query Engine that fetches data from heterogeneous data sources querying large sets((TB, PB) of data and processes in memory. It originated in Facebook as a result of Hive taking a long time to execute queries of TB, and PB magnitude. The problem with Hive was that it would store intermediate results on disk which resulted in a significant I/O overhead on disk. In 2015, Netflix showed PrestoDB was 10 times faster than Hive. Presto is written in Java. It resembles a massively parallel processing (MPP) system that facilitates the separation between storage and computing and allows it to scale its computing power horizontally by adding more servers.</p> <p id="3080"><strong>What Presto is Not?</strong></p> <p id="5318">Since Presto understands SQL, it is not a general-purpose relational database. It is not a replacement for MySQL, Oracle, etc., though it provides the features of a standard database. It was not designed to handle OLTP. Its main benefit and value can be seen in Data Warehousing and Analytics where a large volume of data is collected from various sources to produce reports. They fit into the world of OLAP.</p> <p id="e0df"><strong>Presto Architecture</strong></p> <figure class="wp-block-image"><img decoding="async" src="https://miro.medium.com/max/1400/0*x1-t8KAntu7EjEEA" alt=""/></figure> <p id="61e6"><strong>Presto Concepts</strong></p> <p id="1616"><strong>Coordinator</strong>: This is the brain of presto. It receives the query from the client, parses, plans, and manages the worker nodes. It keeps a track of activity on worker nodes and coordinates the execution of the query. It fetches the results from the worker nodes and returns the final result to the client. Additionally, Presto uses a discovery service that is running on the coordinator, where each worker can register and periodically send their heartbeat. This runs on the same HTTP server — including the same port.</p> <p id="583b"><strong>Worker</strong>: Worker nodes are the nodes that execute the tasks and process data. They fetch data from connectors and exchange intermediate data with each other. HTTP is the communication between coordinators and workers, coordinators and clients, and between workers</p> <p id="3d19"><strong>Connector</strong>: Presto uses a connector to connect to various data sources. In the world of databases, this equates to DB drivers. Each connector needs to implement 4 SPI(Service Provider Interface)</p> <ol class="wp-block-list"> <li>Metadata SPI</li> <li>Data Location SPI</li> <li>Data Statistics SPI</li> <li>Data Source SPI</li> </ol> <p id="a9e0"><strong>Catalog</strong>: The catalog contains schemas and references to a data source via a connector.</p> <p id="c735"><strong>Schema</strong>: A schema is a collection of tables. In RDBMS like PostgreSQL and MySQL, this translates to the concept of Schema or a Database.</p> <p id="9cd9"><strong>Table</strong>: Collection of data in terms of rows, columns, and associated data types.</p> <p id="f0d1"><strong>Statement</strong>: Statements are defined in the ANSI SQL standard, consisting of clauses, expressions, and predicates.</p> <p id="a1ec"><strong>Query:&nbsp;</strong>The previous SQL statement is parsed into a query and creates a distributed query plan consisting of a series of interconnected stages that contain all of the below elements.</p> <p id="3e1a"><strong>Stage:&nbsp;</strong>The execution is structured in a hierarchy of stages that resembles a tree. They model the distributed query plan but are not executed by the worker nodes.</p> <p id="8168"><strong>Task:</strong>&nbsp;Each stage consists of a series of tasks that are distributed over the Presto worker nodes. Tasks contain one or more parallel drivers.</p> <p id="ac89"><strong>Split:</strong>&nbsp;Tasks operate on splits, which are sections of a larger data set.</p> <p id="48ba"><strong>Driver:</strong>&nbsp;Drivers work with the data and combine operators to produce output that is aggregated by a task and delivered to another task in another stage. Each driver has one input and one output.</p> <p id="496d"><strong>Operator:</strong>&nbsp;An operator consumes, transforms, and produces data.</p> <p id="9a01"><strong>Exchange:</strong>&nbsp;Exchanges transfer data between Presto nodes for different stages in a query.</p> <p id="23c4"><strong>Presto Connectors</strong></p> <p id="8e7f">Overall there are 30+ known connectors that Presto supports. The following are a few well know connectors that Presto supports.</p> <ol class="wp-block-list"> <li>BigQuery Connector</li> <li>Cassandra Connector</li> <li>Elasticsearch Connector</li> <li>Hive Connector</li> <li>JMX Connector</li> <li>Kafka Connector</li> <li>MongoDB Connector</li> <li>Oracle/MySQL/PostgreSQL Connector</li> <li>Prometheus Connector</li> <li>Redis Connector</li> <li>Redshift Connector</li> <li>Delta Lake Connector</li> </ol> <p id="3bad"><strong>Event Listener</strong></p> <p id="54e7">One of the nice things about Presto is clean abstractions, one such clean abstraction is Event Listeners. Event Listener allows you to write custom functions that listen to events happening inside the engine. Event listeners are invoked for the following events:</p> <ol class="wp-block-list"> <li>Query creation</li> <li>Query completion</li> <li>Split completion</li> </ol> <p id="768e">To Create Custom Listeners we would need to do the following:</p> <ol class="wp-block-list"> <li>Implement EventListener and EventListenerFactory interfaces.</li> <li>Register the plugins and deploy the plugin to Presto.</li> </ol> <p id="ce8c">Query Optimization</p> <p id="259c">PrestoDB uses two optimizers. The Rule-Based Optimizer (RBO) applies filters to remove irrelevant data and uses hash joins to avoid full cartesian joins. This includes strategies such as predicate pushdown, limit pushdown, column pruning, and decorrelation. It also uses a Cost-Based Optimizer (CBO). Here it uses statistics of the table (e.g., number of distinct values, number of null values, distributions of column data) to optimize queries and reduce I/O and network overhead. The following are ways to see available statistics and see cost-based analysis of a query</p> <p id="fee1">SHOW STATS FOR table_name — Approximated statistics for the named table</p> <p id="798e">SHOW STATS FOR ( SELECT query ) — Approximated statistics for the query result</p> <p id="166e">EXPLAIN SELECT query — Execute statement and show the distributed execution plan with the cost of each operation.</p> <p id="6dbb">EXPLAIN ANALYZE SELECT — Execute statement and show the distributed execution plan with the cost and duration of each operation.</p> <p id="05ba"><strong>SQL Language and SQL Statement Syntax</strong></p> <p id="e9c0">We can use DDL, DML, DQL, DCL, TCL which modern databases support. The following are supported in PrestoDB</p> <ol class="wp-block-list"> <li>DDL — Create, Alter, Drop, Truncate</li> <li>DML — Insert, Delete, Call</li> <li>TCL — Commit, Rollback, Start Transaction</li> <li>DQL — Select</li> <li>DCL — Grant, Revoke</li> </ol> <p id="b69f">It also supports the following data types</p> <p id="6a29">Boolean, TINYINT, SMALLINT, INTEGER, BIGINT, DOUBLE, DECIMAL, VARCHAR, CHAR, JSON, DATE, TIME, TIMESTAMP, ARRAY, MAP, IPADDRESS</p> <p id="0693">An Example with JMX Connector</p> <p id="a7dd">Java Management Extensions (JMX) gives information about the Java Virtual Machine and software running inside JVM. With the JMX connector, we can query JMX information from all nodes in a Presto cluster. JMX is actually a connector that is figured so that chosen JMX information will be periodically dumped and stored in tables (in the “jmx” catalog) which can be queried. JMX is useful for debugging and monitoring Presto metrics.</p> <p id="2583">To configure the JMX connector, create catalog properties file&nbsp;<em>etc/catalog/jmx.properties</em>&nbsp;with the following</p> <p id="46f4">connector.name=jmx</p> <p id="6242">JMX connector supports 2 schemas — current and history</p> <p id="3737">To enable periodical dumps, define the following properties:</p> <p id="b076">connector.name=jmx</p> <p id="4de9">jmx.dump-tables=java.lang:type=Runtime,com.facebook.presto.execution.scheduler:name=NodeScheduler</p> <p id="2232">jmx.dump-period=10s</p> <p id="fe53">jmx.max-entries=86400</p> <p id="8dc2">We will use jdbc driver to connect to presto — com.facebook.presto.jdbc.PrestoDriver</p> <p id="d928">the following is used to extract the JVM version of every node.<code><em><span class="has-inline-color has-accent-color">String dbUrl= “jdbc:presto://localhost:9000/catalogName/schemaName”;</span></em></code></p> <blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"> <p><code><em><span class="has-inline-color has-accent-color">Connection conn = null;</span></em></code></p> <p><code><em><span class="has-inline-color has-accent-color">Statement stmt = null;</span></em></code></p> <p><code><em><span class="has-inline-color has-accent-color">try {</span></em></code></p> <p><code><em><span class="has-inline-color has-accent-color">Class.forName(“com.facebook.presto.jdbc.PrestoDriver”);</span></em></code></p> <p><code><em><span class="has-inline-color has-accent-color">conn = DriverManager.getConnection(dbUrl, “username”, “password”);</span></em></code></p> <p><code><em><span class="has-inline-color has-accent-color">stmt = conn.createStatement();</span></em></code></p> <p><code><em><span class="has-inline-color has-accent-color">String sql = “SELECT node, vmname, vmversion from jmx.current.java.lang:type=runtime”;</span></em></code></p> <p><code><em><span class="has-inline-color has-accent-color">ResultSet res = stmt.executeQuery(sql);</span></em></code></p> <p><code><em><span class="has-inline-color has-accent-color">while (res.next()) {</span></em></code></p> <p><code><em><span class="has-inline-color has-accent-color">String node= res.getString(“node”);</span></em></code></p> <p><code><em><span class="has-inline-color has-accent-color">String vmname= res.getString(“vmname”);</span></em></code></p> <p><code><em><span class="has-inline-color has-accent-color">String vmversion= res.getString(“vmversion”);</span></em></code></p> <p><code><em><span class="has-inline-color has-accent-color">}</span></em></code></p> <p><code><em><span class="has-inline-color has-accent-color">res.close();</span></em></code></p> <p><code><em><span class="has-inline-color has-accent-color">stmt.close();</span></em></code></p> <p><code><em><span class="has-inline-color has-accent-color">conn.close();</span></em></code></p> <p><code><em><span class="has-inline-color has-accent-color">} catch (SQLException se) {</span></em></code></p> <p><code><em><span class="has-inline-color has-accent-color">se.printStackTrace();</span></em></code></p> <p><code><em><span class="has-inline-color has-accent-color">} catch (Exception e) {</span></em></code></p> <p><code><em><span class="has-inline-color has-accent-color">e.printStackTrace();</span></em></code></p> <p><code><em><span class="has-inline-color has-accent-color">} finally {</span></em></code></p> <p><code><em><span class="has-inline-color has-accent-color">try {</span></em></code></p> <p><code><em><span class="has-inline-color has-accent-color">if (stmt != null) stmt.close();</span></em></code></p> <p><code><em><span class="has-inline-color has-accent-color">} catch (SQLException sqlException) {</span></em></code></p> <p><code><em><span class="has-inline-color has-accent-color">sqlException.printStackTrace();</span></em></code></p> <p><code><em><span class="has-inline-color has-accent-color">}</span></em></code></p> <p><code><em><span class="has-inline-color has-accent-color">try {</span></em></code></p> <p><code><em><span class="has-inline-color has-accent-color">if (conn != null) conn.close();</span></em></code></p> <p><code><em><span class="has-inline-color has-accent-color">} catch (Exception e) {</span></em></code></p> <p><code><em><span class="has-inline-color has-accent-color">e.printStackTrace();</span></em></code></p> <p><code><em><span class="has-inline-color has-accent-color">}</span></em></code></p> <p><code><em><span class="has-inline-color has-accent-color">}</span></em></code></p> <p><code><em><span class="has-inline-color has-accent-color">}</span></em></code></p> <p><code><em>}</em></code></p> </blockquote> <p id="ca3e">If we want to see all of the available MBeans by running SHOW TABLES, we can use SHOW TABLES FROM jmx.current</p> <p id="f181">If we want to see the open and maximum file descriptor counts for each node then the following is the query — SELECT openfiledescriptorcount, maxfiledescriptorcount</p> <p id="8c16">FROM jmx.current.java.lang:type=operatingsystem`</p> <p id="24d8"><strong>Where can Presto be used?</strong></p> <ol class="wp-block-list"> <li>It can be used in Data Warehouse where data is fetched from multiple sources in TB and PB to query and process large datasets</li> <li>It can be used to run ad hoc queries from various sources through multiple connectors anytime we want and wherever the data resides</li> <li>It can be used for generating reports and dashboards as data is collected from various sources that are in multiple formats for analytics and business intelligence</li> <li>We can aggregate TBs of data from multiple data sources and run ETL queries against that data instead of using legacy batch processing systems, we can use presto to run efficient and high throughput queries</li> <li>We can query data on a data lake without the need for transformation. we can query any type of data in a data lake, including both structured and unstructured data as there are various connectors to pull from structured and unstructured sources</li> </ol> <p id="ac77">Author:&nbsp;<a rel="noreferrer noopener" href="https://medium.com/u/ff0a3ad2cb29?source=post_page-----6adfe10465e6--------------------------------" target="_blank">Bhargav Maddikera</a> </p> </div><!-- .entry-content --> <footer class="entry-footer"> <span class="cat-links">Posted in <a href="https://engineering.zeta.tech/category/uncategorized/" rel="category tag">Uncategorized</a></span><span class="comments-link"><a href="https://engineering.zeta.tech/prestoprestodb-what-it-offers-and-where-and-how-it-can-be-used/#respond">Leave a Comment<span class="screen-reader-text"> on Presto(PrestoDB)- What it Offers and Where and How it can be used</span></a></span> </footer><!-- .entry-footer --> </article><!-- #post-329 --> <article id="post-309" class="post-309 post type-post status-publish format-standard has-post-thumbnail hentry category-uncategorized tag-api tag-observability tag-troubleshooting"> <header class="entry-header"> <h2 class="entry-title"><a href="https://engineering.zeta.tech/effective-troubleshooting/" rel="bookmark">Effective Troubleshooting</a></h2> <div class="entry-meta"> <span class="posted-on">Posted on <a href="https://engineering.zeta.tech/effective-troubleshooting/" rel="bookmark"><time class="entry-date published updated" datetime="2022-09-02T12:12:05+00:00">September 2, 2022</time></a></span><span class="byline"> by <span class="author vcard"><a class="url fn n" href="https://engineering.zeta.tech/author/phani_marpaka/">Phani</a></span></span> </div><!-- .entry-meta --> </header><!-- .entry-header --> <a class="post-thumbnail" href="https://engineering.zeta.tech/effective-troubleshooting/" aria-hidden="true" tabindex="-1"> <img width="503" height="475" src="https://engineering.zeta.tech/wp-content/uploads/2022/09/6rsyo0-e1662101218245.jpeg" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="Effective Troubleshooting" decoding="async" srcset="https://engineering.zeta.tech/wp-content/uploads/2022/09/6rsyo0-e1662101218245.jpeg 503w, https://engineering.zeta.tech/wp-content/uploads/2022/09/6rsyo0-e1662101218245-300x283.jpeg 300w" sizes="(max-width: 503px) 100vw, 503px" /> </a> <div class="entry-content"> <p>Troubleshooting is a part of an engineer&#8217;s life. Whether it is API timeouts, issues with functionality, misconfigurations, or any number of other issues, we often need to roll up our sleeves and fix things. Based on my experience and tenure at <a href="http://www.zeta.tech" data-type="URL" data-id="www.zeta.tech">Zeta</a>, I would like to share some guidelines, learning resources, and tips and tricks that have helped me troubleshoot issues.</p> <h2 class="wp-block-heading"><strong>Guidelines</strong></h2> <p>Incidents can come anytime and challenge us in new ways. Continuous preparation and learning equip us to solve the incidents. There is an ever-growing list that will continue to evolve and I have attempted to capture some key information with 40&#8217;s in mind.</p> <h3 class="wp-block-heading"><strong>The 4Os</strong></h3> <ul class="wp-block-list"><li>Observability: <a href="https://opentelemetry.io/docs/concepts/signals/">Signals</a> emitted by the application contribute toward observability. Lack of observability affects the MTTD because in the absence of the right signals, troubleshooting is based on hypothesis. Therefore, it would require some trial and error to confirm and replicate before fixing.</li><li>Operability: Controls to operate the system like turning on and off features, updating configurations, bumping resources, restarting applications, etc. Good operability controls help solve the incidents once the root cause is identified and helps reduce MTTR.</li><li>Optimization: No system can support 1 Million TPS from the first day. Optimization needs to continuously happen and keep up with the expected traffic from our customers. This involves not only code changes but also tuning configurations, choice of resources, etc.</li><li>Onboarding: The majority of incidents of lower severity or issues might be due to misconfigurations. Right onboarding with proper steps becomes crucial to avoid incidents related to this.</li></ul> <h3 class="wp-block-heading"><strong>Preparing for Troubleshooting</strong></h3> <div class="wp-block-image"><figure class="aligncenter"><img decoding="async" src="https://lh6.googleusercontent.com/Y1RlAA1X2Er0brkCXhNJ_PL9Fh07Hscnx1ny50Odb9hrjInKAZYgrP4Xcr6IZ5-Uiv3yWDFrmKx_O_g5vDmeIhGlyPBGLnq1MoB5feOfIfOkCVslqFSvQJIilgExn-o70DWRcnWtWwHgY0hq_yHVT9_Ow_cS4mC-HeHvJyXbKoKHUoh2N6H7jSJ_oQ" alt=""/></figure></div> <p><strong>Preparing the Application</strong></p> <ul class="wp-block-list"><li>Ensure your application is publishing the right Signals.</li><li>Use structured logging as it helps in capturing important attributes in logs like entityID, requestID and analyze logs end to end.</li><li>Design the system and APIs using operability in mind. Always design CRUD APIs for an entity and make sure you can use them to fix data issues, disable product features temporarily, etc.</li><li>If operability controls cannot be exposed as APIs, do expose them via JMX. Operations that can be performed via JMX are as follows:<ul><li>Clear Cache</li><li>Change log levels</li><li>Disable features</li><li>Increase or decrease cache size</li></ul></li><li>Get PGWatch and PGBadger enabled for all the PostgreSQL databases your application connects to. This helps in troubleshooting querying performance. These can be monitored regularly.</li><li>Having a good test coverage might not seem related to incidents, but having 80% test cases not only helps prevent incidents but can also help in reproducing issues locally.</li><li>Performance benchmarking the application, having a dedicated setup, and knowing the TPS of your APIs helps to know the right configurations for your application in production, the known supported TPS and doing this exercise is in itself a good learning.</li><li>Have runbooks handy around the flows with mitigation steps.</li></ul> <h4 class="wp-block-heading"><strong>Preparing the Cluster</strong></h4> <div class="wp-block-image"><figure class="aligncenter"><img decoding="async" src="https://lh6.googleusercontent.com/S_EhTrk6ZbtO-ojLyqzbPAJZ43exymWn216ubpUXaeUmOUYZcgzGtC9YKtROjZhRWtyts_ag6EhNs1lYKUv8skyRyUp37mlzqXbQA7DVXjmL0h4Qi8gt3qQ5kH5A1LuTjQHASk824y2opt3pTVI2-PT7yxTRojvXLy0X2LqXynr3JgVhn373SSQnxQ" alt=""/></figure></div> <ul class="wp-block-list"><li>Ensure auditing is proper at all layers. This is very useful in determining which call landed for your APIs, how much time it took, and by whom it was called.&nbsp;</li><li>Ensure all the applications emit appropriate signals and can be effectively monitored.</li><li>Ensure customer services owned by the cluster are well known and documented and runbooks prepared for it.</li><li>Ensure Configurations to operate the system are properly documented, idempotent, and have minimal steps. Keep on iterating them to include new features.</li><li>Maintain a runbook containing flows documented by application and customer service containing known issues and resolution steps.</li></ul> <h4 class="wp-block-heading"><strong>Preparing Yourself</strong></h4> <div class="wp-block-image"><figure class="aligncenter"><img decoding="async" src="https://lh5.googleusercontent.com/7bIdkmRF-fSMAAV06RZYfPFd1R0sDZg02Qn5MoRcPQJtkYhC9EivSL8H5DiWhXyaQC9oJ5R42i0kGJhaHEv7qwn9movjof1s-g_tSA6T-SOyMdXsyN188MZ2QvVrQbvL8Zv1lfnW9oR6KTf-HteCxUlVnMc451n1EFzGpawNG2kzfBw8zj_vGowUQg" alt=""/></figure></div> <ul class="wp-block-list"><li>Be familiar with Observability Tools used. They provide a lot of insights while troubleshooting incidents.</li><li>Product Context helps a lot. Go through the resources like training videos, documents, and code to be familiar with the critical flows. Connecting the business context, domain, and technical context helps relate the issue with the impact and probable fault points.</li><li>Know thy system well and know the systems you depend on and the systems which depend on you better.</li><li>Familiarity with the tools like Kibana, Prometheus Queries, Grafana, Eclipse MAT, Kubectl, etc., helps a lot.</li></ul> <h3 class="wp-block-heading"><strong>During Troubleshooting</strong></h3> <ul class="wp-block-list"><li>While restarting to solve a problem, ensure you always take the thread and heap dump of the java process. It&#8217;s all about the evidence.</li><li>Always check if the problem is with only one instance due to multi-threading/concurrency issues. Deadlocks can cause that; in this case, taking a thread dump and restarting can quickly help resolve the issue.</li><li>There are many ways to solve a problem. Try to get out of the incident/issue first and then work on improvement. Sometimes out of the box solutions can save us a lot of time and get us out of tough situations.</li><li>When reporting an issue or passing the baton to another team, always provide as much supporting information as possible. Filling these in the FIR helps with triaging and sometimes can help in quick pointers based on a birds-eye view. Some examples are as follows:<ul><li>Kibana Link containing logs</li><li>Inputs Passed</li><li>APIs called</li><li>Errors observed</li><li>Time Window</li><li>Grafana Dashboards Link containing key metrics which might indicate a problem</li><li>Sequence of Steps performed</li><li>Configurations related to the issue</li><li>Reference for Code for your team or others&nbsp;</li></ul></li><li>Actively report your observations in the preferred internal communication medium of triaging issues or incidents. It helps in keeping the stakeholders posted and might help in parallel debugging and some Eureka moments.</li></ul> <h3 class="wp-block-heading"><strong>After Troubleshooting</strong></h3> <ul class="wp-block-list"><li>Rigor in RCA and IAI is very important. Whether the issue is for one user vs. an issue for millions of users, it does not matter, as ignoring an issue with lower impact might lead to the issue getting escalated in terms of impact.</li><li>Always try to identify IAIs. The IAIs can be process related, product related, or tech related. It might be specific to one cluster or applicable across, which is also acceptable.</li><li>When doing RCA of an incident, consider the 5 Whys to be completed only when you know the root cause that will fix the issue for good and avoid reoccurrence.</li><li>Capture all the evidence in the RCA Document. Since links expire, capturing screenshots helps.</li><li>Do not forget to prioritize the IAIs.</li><li>All the evidence may not be available. Refer to the Tips and Tricks section on how to solve these.</li><li>Find IAIs which improve the 4Os.</li></ul> <h2 class="wp-block-heading"><strong>Tips and Tricks</strong></h2> <div class="wp-block-image"><figure class="aligncenter"><img decoding="async" src="https://lh6.googleusercontent.com/RxOPdeUe1DDvm39qa3fjnq5Xz18j4dku8B8nA6leaZQbYCGsk-pPuI5mS9vKS0W231TFFnXlJ4YMjwInx6b-QatCpL4jzdgEJGMGEqVLc_hAREjViFqymBkYl_UuvrsnI8C7pH5Wa7PVaJ0w_BVUvPQxudUU-yHBvid7tb1EqjYWUoTF4KtOqVKyWQ" alt=""/></figure></div> <p>There are times when we may fall short on the observations and are unclear on what to do next. Some tips and tricks which can help are as follows:</p> <h3 class="wp-block-heading"><strong>Timeouts</strong></h3> <ul class="wp-block-list"><li>Ensure common libraries used have the right instrumentation and logs to track ingress and egress flows. If available, use them to check logs around that time window.</li><li>Add logs and metrics around ingress and egress flows for an application and simulate again to reproduce.</li><li>Check the resources allocated to Kubernetes pods. CPU throttling of even 1% can impact the application heavily.</li><li>Check the code line by line from source to destination to see inefficiencies. Some of the common inefficiencies are:<ul><li>Connection Pool settings for HTTP Calls.</li><li>Connection Pool settings for DB Calls.</li><li>Time taken by external calls. Percentile 95 and 99 metrics. Variations in them.</li><li>Requests getting queued in the executor used for external calls.</li><li>Time spent in Executor Queues.</li></ul></li><li>Check the data as problems might be with setup and specific input as the associated data might be the reason for inefficiency.</li></ul> <h3 class="wp-block-heading"><strong>Queries taking time on PostgreSQL RDS</strong></h3> <ul class="wp-block-list"><li>Use EXPLAIN and ANALYZE to check the query plan.</li><li>If your database queries are taking more than 20ms Percentile 95, especially for a table with less than 1 million rows, assume there is a problem and start analyzing the problem.</li><li>Slowest individual queries in PGBadger helps.</li><li>Ensure RDS has sufficient resources and is not running low on CPU, Memory, or IOPS.</li><li>Enable Performance Insights to monitor instance performance if not getting an idea of the issue.</li><li>PGWatch has nice dashboards which capture very useful information about what&#8217;s happening in the database. Checkout Juno integration in OWCC and ensure PGWatch is enabled with dashboards getting populated.</li></ul> <h2 class="wp-block-heading"><strong>Learning Resources</strong></h2> <ul class="wp-block-list"><li><a href="https://kubernetes.io/docs/reference/kubectl/cheatsheet/">kubectl cheatsheet</a></li><li><a href="https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/">Resource Management for Pods and Containers</a></li><li><a href="https://www.elastic.co/guide/en/elasticsearch/reference/7.7/query-dsl-query-string-query.html#query-string-syntax">Lucene Syntax</a></li><li><a href="https://static.googleusercontent.com/media/sre.google/en//static/pdf/building_secure_and_reliable_systems.pdf">Building Secure and Reliable Systems</a></li><li><a href="https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_Storage.html">Amazon RDS DB instance storage</a></li><li><a href="https://zeta-tm.atlassian.net/wiki/spaces/AURA/pages/2658371182/PostgreSQL+Key+Optimization+Areas">PostgreSQL Key Optimization Areas</a></li></ul> <h2 class="wp-block-heading"><strong>Tools</strong></h2> <ul class="wp-block-list"><li><a href="https://www.eclipse.org/mat/">Eclipse MAT</a></li><li><a href="https://fastthread.io/">https://fastthread.io/</a></li><li><a href="https://minikube.sigs.k8s.io/docs/start/">Minikube</a></li></ul> <figure class="wp-block-image"><img decoding="async" src="https://lh6.googleusercontent.com/0xJ0w4-C1IhJh3hoRIDH_WxMeqHRCEICs9jvhIaLNy1FN9BhSCPSCIfTOeCZLcOHZ72cQPOaB5tvnj5nyok0EII7AXTlv3wX5E496074hOkAqilpQio9Gn3k0il0ZP6nGBscP7VqL0n-lPDIC_BtDAI9NJtJ5xbIC5sOpBmqCcFCzDQdsL52C9nrPQ" alt=""/></figure> <p>Author: Shubham Jha</p> <p>Edits by: Mercy Mochary, Swetha Kommi</p> <p>Reviewed by: Phani Marupaka</p> </div><!-- .entry-content --> <footer class="entry-footer"> <span class="cat-links">Posted in <a href="https://engineering.zeta.tech/category/uncategorized/" rel="category tag">Uncategorized</a></span><span class="tags-links">Tagged <a href="https://engineering.zeta.tech/tag/api/" rel="tag">API</a>, <a href="https://engineering.zeta.tech/tag/observability/" rel="tag">Observability</a>, <a href="https://engineering.zeta.tech/tag/troubleshooting/" rel="tag">Troubleshooting</a></span><span class="comments-link"><a href="https://engineering.zeta.tech/effective-troubleshooting/#respond">Leave a Comment<span class="screen-reader-text"> on Effective Troubleshooting</span></a></span> </footer><!-- .entry-footer --> </article><!-- #post-309 --> <article id="post-294" class="post-294 post type-post status-publish format-standard has-post-thumbnail hentry category-uncategorized tag-ci-cd tag-compute tag-data-processing tag-infrastructure tag-messaging tag-mobile-apps tag-mobileinfra tag-security tag-server tag-tech tag-web-applications"> <header class="entry-header"> <h2 class="entry-title"><a href="https://engineering.zeta.tech/zeta-tech-stack/" rel="bookmark">Zeta Tech Stack</a></h2> <div class="entry-meta"> <span class="posted-on">Posted on <a href="https://engineering.zeta.tech/zeta-tech-stack/" rel="bookmark"><time class="entry-date published updated" datetime="2021-09-15T11:24:35+00:00">September 15, 2021</time></a></span><span class="byline"> by <span class="author vcard"><a class="url fn n" href="https://engineering.zeta.tech/author/phani_marpaka/">Phani</a></span></span> </div><!-- .entry-meta --> </header><!-- .entry-header --> <a class="post-thumbnail" href="https://engineering.zeta.tech/zeta-tech-stack/" aria-hidden="true" tabindex="-1"> <img width="1730" height="874" src="https://engineering.zeta.tech/wp-content/uploads/2021/09/Screenshot-2021-09-15-at-11.22.00-AM.png" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="Zeta Tech Stack" decoding="async" srcset="https://engineering.zeta.tech/wp-content/uploads/2021/09/Screenshot-2021-09-15-at-11.22.00-AM.png 1730w, https://engineering.zeta.tech/wp-content/uploads/2021/09/Screenshot-2021-09-15-at-11.22.00-AM-300x152.png 300w, https://engineering.zeta.tech/wp-content/uploads/2021/09/Screenshot-2021-09-15-at-11.22.00-AM-1024x517.png 1024w, https://engineering.zeta.tech/wp-content/uploads/2021/09/Screenshot-2021-09-15-at-11.22.00-AM-768x388.png 768w, https://engineering.zeta.tech/wp-content/uploads/2021/09/Screenshot-2021-09-15-at-11.22.00-AM-1536x776.png 1536w" sizes="(max-width: 1730px) 100vw, 1730px" /> </a> <div class="entry-content"> <p>Zeta is in the business of providing a full-stack, cloud-native, API-first neo-banking platform including a digital core and a payment engine for issuance of credit, debit, and prepaid products. These products enable legacy banks and new-age fintech institutions to launch modern retail and corporate fintech products.&nbsp;</p> <p>Zeta currently provides its platform and products to BFSI issuers in India, Asia, and LATAM. Zeta’s products are used by banks such as RBL Bank, IDFC First Bank, and Kotak Mahindra Bank, 14000 corporates, and over 2 million users. Zeta is a SOC 2, ISO 27001, ISO 9001:2008, PCI DSS certified company.</p> <p>How does Zeta continuously deliver at these high levels without compromising on security? Let us take a look at Zeta’s tech stack to find out.</p> <h2 class="wp-block-heading">Server Applications</h2> <p>A server application is designed to install, operate, and host applications and associated services for end-users.</p> <h3 class="wp-block-heading">Compute Runtimes</h3> <p><strong>Technology used</strong>:&nbsp;<em>Kubernetes, GitOps, Apache Openwhisk, Apache Flink, and Camunda.&nbsp;</em></p> <p>Following are the runtime applications in Zeta.</p> <ul class="wp-block-list"><li><strong>Atlantis</strong>&nbsp;is a docker runtime container deployed using GitOps based end-to-end orchestration with the help of Kubernetes.</li><li><strong>Aster</strong>&nbsp;is an open-source serverless platform run on Apache Openwhisk that runs various short-lived jobs on-demand.&nbsp;</li><li><strong>Rhea</strong>&nbsp;is an application used to execute BPMN workflows that run on the Camunda platform.</li><li><strong>Perseus</strong>&nbsp;is an adaptation of Apache Flink to run complex event processing tasks. Apache Flink is a framework and processing engine used for computations at any scale.</li></ul> <p>We use&nbsp;<strong>Camunda</strong>&nbsp;to define workflows and automate decision-making.&nbsp;</p> <p>Apache Flink provides a high-throughput, low-latency streaming engine and supports event-time processing and state management. It has allowed us to perform computations at any scale.</p> <h3 class="wp-block-heading">Cluster Management</h3> <p><strong>Technology used</strong>:&nbsp;<em>Kubernetes, Kong, and Calico.</em>&nbsp;</p> <p>A cluster management tool is an essential service used to group the clusters and nodes. This is used to:</p> <ul class="wp-block-list"><li>Monitor nodes in the cluster.</li><li>Configure services.</li><li>Administer cluster services.&nbsp;</li></ul> <p>We prefer using open-source systems in our tech stack. That is why we use Kubernetes as our orchestration system to efficiently manage and deploy containers.&nbsp;</p> <p><strong>Ingress</strong>&nbsp;and API Gateways run using Kong. Kong supports high availability clusters and an extensive range of plugins to address various concerns like authentication, security, and monitoring.</p> <p>We have also developed 2 in-house tools, Sprinkler and Hades. Sprinkler is our Egress gateway and Hades is our file input/output gateway.&nbsp;</p> <p>We use the Calico plugin to manage the container network interface.</p> <p>We are evaluating Istio to adopt it as our open service mesh. A service mesh controls how different parts of an application share data with each other.</p> <h3 class="wp-block-heading">Messaging Infrastructure</h3> <p><strong>Technology used</strong>:&nbsp;<em>Apache Kafka, Apache Nifi, Apache Flink, KSQL, and Kafka.</em></p> <p>A messaging system transfers data from one application to another. We use the following components to seamlessly transfer messages within Zeta’s various applications and clusters.</p> <ul class="wp-block-list"><li><strong>Apache Kafka</strong>&nbsp;is used as a message broker. It allows us to handle high volumes of data and passes messages from one end to the other.&nbsp;</li><li><strong>Atropos</strong>&nbsp;is a message-based integration bus based on Kafka developed by Zeta.</li><li>Apache Nifi is used to implement ETL Pipelines.&nbsp;</li><li><strong>Perseus</strong>, developed by Zeta, uses Apache Flink to process complex events.&nbsp;</li><li><strong>Sinope&nbsp;</strong>uses KSQL and Kafka connectors to bridge the message/event world and the batch/file world. KSQL and Kafka connectors enable rich data integration and streaming.</li></ul> <h3 class="wp-block-heading">Data Stores</h3> <p><strong>Technology used</strong>:&nbsp;<em>Postgresql, Amazon S3, Amazon RedShift, ClickHouse, and Redis.</em></p> <p>Postgresql is used to store transactional data and Amazon S3 is our data lake. We use Amazon RedShift and ClickHouse as our data warehouse and Redis, an open-source memory data structure, to store cache.</p> <p>Application Performance Monitoring (APM) and Business Performance Monitoring (BPM) uses the ElasticSearch engine.</p> <h3 class="wp-block-heading">Data Processing</h3> <p><strong>Technology used</strong>:&nbsp;<em>Presto SQL, Sparta, and Apache Superset.</em></p> <p>The data processing unit is an essential part of any server application. It converts data available in the system (machine-readable data) to a human-readable format.&nbsp;</p> <p>We use the Presto SQL query engine to process big data and Sparta for stream processing. Stream processing allows us to convert data in motion directly to continuous streams.&nbsp;</p> <p>The Power Centre stores various data models and allows us to modify data and enables the reuse of data. The Power Centre is an adaption of Apache Superset.</p> <h3 class="wp-block-heading">CI/CD</h3> <p><strong>Technology used</strong>:&nbsp;<em>Jenkins, ArgoCD, and Sonarqube.</em></p> <p>Jenkins is used for Continuous Integration (CI) and ArgoCD for Continuous Deployment (CD).</p> <p>Our servers use Sonarqube, an open-source platform, for static code analysis.</p> <h3 class="wp-block-heading">Observability</h3> <p><strong>Technology used</strong>:&nbsp;<em>Grafana, Kibana, Fluentd, and Hypertrace.</em></p> <p>Observability is defined as the ability of the internal states of a system to be determined by its external outputs. External outputs can be anything such as alerts, visual representation, and&nbsp; infrastructure tracing.</p> <p>We have developed&nbsp;<strong>Prometheus</strong>&nbsp;as our event monitoring system. Prometheus stores all metrics in the database.&nbsp;</p> <p>We use Grafana for our dashboards and alerts and Kibana for log analysis. The purpose of both these applications is to visualize and navigate data. We also use Fluentd, an open-source data collector, for logs and metrics collection.</p> <p>All applications should have a distributed tracing system. Hypertrace is our tracing system. It helps us debug applications and&nbsp;log information about their execution.</p> <h3 class="wp-block-heading">Security Monitoring</h3> <p><strong>Technology used</strong>:&nbsp;<em>HELK and Jackhammer.</em></p> <p>Security monitoring is another essential unit to analyze data to detect any suspicious behavior or changes to the network.&nbsp;</p> <p>HELK is an ELK (Elasticsearch, Logstash &amp; Kibana) stack with advanced hunting analytic capabilities provided by the implementation of Spark and Graphframes technologies.</p> <p>Kratos, an in-house adaption of Jackhammer, is our Security CI.</p> <p>We are evaluating RockNSM, a&nbsp;premier sensor platform for Network Security Monitoring (NSM) hunting and incident response (IR) operations.&nbsp;</p> <h3 class="wp-block-heading">Hardware Security Module (HSM)</h3> <p><strong>Technology used</strong>:&nbsp;<em>Safenet, Gemalto and nCipher/ Entrust nShield Solo.</em></p> <p>HSM manages digital keys, encryption and decryption, and provides strong authentication. We use the following HSMs:</p> <ul class="wp-block-list"><li>Safenet and Gemalto as Network HSM.</li><li>nCipher/ Entrusy nShield Solo.</li><li><strong>Harpocrates</strong>, developed by Zeta, is our HSM as a service interface.&nbsp;</li></ul> <h2 class="wp-block-heading">Mobile Application</h2> <p><strong>Technology used</strong>:&nbsp;<em>Firebase Hosting, Websockets, HTTPS.</em></p> <p><strong>Languages used</strong>:&nbsp;<em>Kotlin, Java, Objective C, Swift.</em></p> <p>We develop mobile applications as native apps, React Native apps, and web apps.</p> <p>Kotlin and Java are used to develop our Android applications and Objective C and Swift for our iOS applications.</p> <p>Firebase Hosting helps with Analytics and Crash detection in the server. Websockets and HTTPS make it possible for two-way communication between the server and the user.</p> <h2 class="wp-block-heading">Web Applications</h2> <p><strong>Technology used</strong>:&nbsp;<em>Typescript, SCSS transpilers, Vue.js, Bulma, Buefy, Webpack, Rollup, Verdaccio, Lerna, and Sentry.</em></p> <p><strong>Languages used</strong>:&nbsp;<em>HTML, CSS, Javascript, Node JS, and Express JS</em></p> <p>We use HTML, CSS, Javascript, Node JS, and Express JS to develop our web applications.</p> <p>Typescript and SCSS transpilers convert program code from one language to another.</p> <p>Vue.js is our Javascript framework and Bulma is our CSS framework. Buefy is a user interface component and is made using both Bulma and Vue js. Webpack and Rollup are the JavaScript build tools.&nbsp;</p> <p>Verdaccio, an NPM registry, serves the purpose of a Private NPM repository. The repository is managed by Lerna, a workflow optimization tool. Sentry, an Application monitoring tool, is used to monitor errors.</p> <h2 class="wp-block-heading">Cyber Security</h2> <p><strong>Technology used</strong>:&nbsp;<em>Trivy,&nbsp;Clair,&nbsp;CloudSploit,&nbsp;MobSF,&nbsp;ZAP</em></p> <p>The challenge when building a product is how we balance ease of use with security. At Zeta, we use&nbsp;Trivy for CI docker scanning and Clair for CD docker scanning.</p> <p>CloudSploit is our Cloud Security Posture Management.&nbsp; We use MobSF for mobile application security.</p> <p>ZAP for web applications is all in CI/CD.</p> <h2 class="wp-block-heading">Best Tech Stack = Best Performance?</h2> <p>Building a system that can provide these functionalities and process over 1 million transactions per second is not easy. While Zeta uses the best tech stack, building a robust framework to continuously deliver at the highest levels without compromising on security would not have been possible without Zeta’s talented engineers.</p> </div><!-- .entry-content --> <footer class="entry-footer"> <span class="cat-links">Posted in <a href="https://engineering.zeta.tech/category/uncategorized/" rel="category tag">Uncategorized</a></span><span class="tags-links">Tagged <a href="https://engineering.zeta.tech/tag/ci-cd/" rel="tag">CI/CD</a>, <a href="https://engineering.zeta.tech/tag/compute/" rel="tag">compute</a>, <a href="https://engineering.zeta.tech/tag/data-processing/" rel="tag">data processing</a>, <a href="https://engineering.zeta.tech/tag/infrastructure/" rel="tag">infrastructure</a>, <a href="https://engineering.zeta.tech/tag/messaging/" rel="tag">messaging</a>, <a href="https://engineering.zeta.tech/tag/mobile-apps/" rel="tag">Mobile Apps</a>, <a href="https://engineering.zeta.tech/tag/mobileinfra/" rel="tag">MobileInfra</a>, <a href="https://engineering.zeta.tech/tag/security/" rel="tag">security</a>, <a href="https://engineering.zeta.tech/tag/server/" rel="tag">server</a>, <a href="https://engineering.zeta.tech/tag/tech/" rel="tag">tech</a>, <a href="https://engineering.zeta.tech/tag/web-applications/" rel="tag">Web Applications</a></span><span class="comments-link"><a href="https://engineering.zeta.tech/zeta-tech-stack/#respond">Leave a Comment<span class="screen-reader-text"> on Zeta Tech Stack</span></a></span> </footer><!-- .entry-footer --> </article><!-- #post-294 --> <article id="post-287" class="post-287 post type-post status-publish format-standard has-post-thumbnail hentry category-uncategorized tag-bnpl tag-savings"> <header class="entry-header"> <h2 class="entry-title"><a href="https://engineering.zeta.tech/buy-now-pay-later-how-does-it-work/" rel="bookmark">Buy Now Pay Later: How Does it Work?</a></h2> <div class="entry-meta"> <span class="posted-on">Posted on <a href="https://engineering.zeta.tech/buy-now-pay-later-how-does-it-work/" rel="bookmark"><time class="entry-date published updated" datetime="2021-07-26T13:32:02+00:00">July 26, 2021</time></a></span><span class="byline"> by <span class="author vcard"><a class="url fn n" href="https://engineering.zeta.tech/author/phani_marpaka/">Phani</a></span></span> </div><!-- .entry-meta --> </header><!-- .entry-header --> <a class="post-thumbnail" href="https://engineering.zeta.tech/buy-now-pay-later-how-does-it-work/" aria-hidden="true" tabindex="-1"> <img width="1400" height="603" src="https://engineering.zeta.tech/wp-content/uploads/2021/07/1_mjb86jSsv70Dvrrk9xoH7w.gif" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="Buy Now Pay Later: How Does it Work?" decoding="async" loading="lazy" /> </a> <div class="entry-content"> <p id="8585">In our previous 2 blogs (<a href="https://zetablogs.medium.com/buy-now-pay-later-the-modern-day-credit-card-d849a3c46277">BNPL: The Modern-day Credit Card</a>&nbsp;&amp;&nbsp;<a href="https://zetablogs.medium.com/buy-now-pay-later-the-real-deal-or-just-hype-121213c48f54">BNPL: The Real Deal or Just Hype</a>), we compared the buy now pay later model to traditional credit cards and looked at its market share, both globally and in India. While it is a viable alternative to credit cards, has gained a lot of worldwide traction, and is capturing a lot of market share, how does it work?</p> <figure class="wp-block-image"><img decoding="async" src="https://miro.medium.com/max/1240/0*kAjJ_JrKj0Sg8am_" alt=""/></figure> <h1 class="wp-block-heading" id="9cc1">Operating Models</h1> <p id="41f2">Buy now pay later has multiple operating models.</p> <ul class="wp-block-list"><li>EMI with interest</li><li>EMI without interest</li><li>Deferred payment model</li><li>Down payment and loan model</li><li>Hybrid model. Allows users to defer the down payment and the balance is converted to EMIs.</li></ul> <p id="14f0"><strong>Model</strong></p> <p id="ad3d">EMI with interest</p> <p id="fbc6">Here, the entire bill amount is converted to a loan.</p> <ul class="wp-block-list"><li>Interest rates vary between 12% — 36%.</li><li>2 months to 36 months loan term.</li><li>EMI amount includes interest charged. EMI = (Principal + Interest)/Tenure.</li></ul> <p id="b44d"><strong>EMI without interest</strong></p> <p id="f037">Here,&nbsp;companies refund the interest as a cashback to the customer or as a discount on the price of the product or service.</p> <ul class="wp-block-list"><li>Effective interest rate of 0%.</li><li>Fixed or short-term loans (up to 12 months).</li><li>EMI does not have an interest component. EMI= Principal/Tenure.</li></ul> <p id="8db5"><strong>Deferred payment</strong></p> <p id="5d8a">Here, the bill amount is converted to a short-term loan, which the customer pays back to the company within a fixed duration (typically 15 or 30 days).</p> <p id="f7f1">In this scenario, companies may charge the customer processing fees or convenience fees.</p> <p id="d96a"><strong>Down payment loan model</strong></p> <p id="8090">This is similar to traditional loans. A customer makes a purchase by making a downpayment and the balance amount is converted to EMIs.</p> <p id="c680">Here, companies charge customers an interest, which is added to the EMI.</p> <p id="27a2">This is mostly used by companies such as Bajaj Finserv and Home Credit for offline transactions. Each transaction is treated as a separate loan and reflects in the customer’s CIBIL report.</p> <p id="be0d"><strong>Hybrid Model</strong></p> <p id="c280">This is a combination of the deferred payment and down payment loan model.</p> <p id="d631">Customers can pay the entire bill amount back within a fixed duration or convert the amount to EMI.</p> <h1 class="wp-block-heading" id="c3fc">Charges</h1> <p id="a05c">Typically, companies do not charge customers registration fees or annual maintenance fees to use their buy now pay later product. This, however, does not mean that there are no charges when you make payments using the buy now pay later option.</p> <p id="76f4">Apart from interest, companies charge customers processing and convenience fees, among other fees. While these are lower than what traditional credit cards would charge you, they are not non-existent.</p> <figure class="wp-block-image"><img decoding="async" src="https://miro.medium.com/max/1000/0*EK2qhaIXsOuAKDPi" alt=""/></figure> <p id="e821"><strong>Fees</strong></p> <p id="68e0"><strong>Interest on loan amount</strong></p> <blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p>Interest charged on the loan. Varies between 12% and 36% and it can go up to 66%.</p><p>The interest rate depends upon the company’s business model, total loan amount, product or service purchased, and loan tenure.</p></blockquote> <p id="0e01"><strong>Processing fee</strong></p> <p id="90cf">A fee is charged to process the transaction. Typically 0%. However, some companies might charge a small amount.</p> <p id="0191"><strong>Convenience fees</strong></p> <p id="e1bf">A fee is charged to use the service. Varies from company to company.</p> <p id="1513">For example, Paytm charges 0% — 3% on your net monthly spending.</p> <p id="999c"><strong>Late fee</strong></p> <p id="1232">Fee charged when you miss your payments. This varies from company to company and the outstanding amount.</p> <p id="ef7e"><strong>Interest on non-payment of minimum amount</strong></p> <p id="a52e">The interest charged when you do not make the minimum monthly payment.</p> <p id="ada6">Varies from company to company. Could be between 18% and 36%.</p> <p id="8250"><strong>Preclosure charges</strong></p> <p id="7f22">Amount charged to close your loan early.</p> <p id="7d17">Varies from company to company. For example, LazyPay charges 4% of the outstanding amount when you close your loan early.</p> <p id="a082"><strong>Revolve fees</strong></p> <blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p>Fee charged when you request for an extension on the due date. Varies from company to company.</p><p>When you request for an extension, you are not charged late fees or interest for missing your minimum monthly payment.</p><p>If granted, allows you to make payment at a later date without it being marked as a non-payment by the company and your CIBIL score is not affected.</p></blockquote> <p id="7ebd"><strong>Activation fees</strong></p> <p id="30c3">Most companies do not charge you an activation fee. However, some do. For example, Mobikwik charges you a 1-time activation fee of ₹99.</p> <p id="b7f6"><strong>Other fees</strong></p> <blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p>Some companies have others charges such as joining fees, subscription fees, annual charges, or EMI bounce charges.</p><p>For example, Dhani Pay has a subscription fee varying between ₹199 and ₹1,799 per month.</p><p>Companies such as Bajaj Finserv and Home Credit charge an annual fee of ₹99.</p></blockquote> <h1 class="wp-block-heading" id="e9e4">Future of Buy Now Pay Later</h1> <p id="a982">There has been an increased uptake for the buy now pay later model in the educational sector as well. School and college fees are not small payments, especially when they are paid quarterly or annually. The buy now pay later model has made it easier to make these payments.</p> <p id="8d38">UPI payments have made digital payments more accessible to everyone in India. The tea shop down the road and even your local barber accept UPI payments. Companies such as LazyPay have integrated buy now pay later with UPI to capitalize on the popularity of UPI and make buy now pay later more accessible.</p> <p id="442b">Other companies such as Slice, ZestMoney, Mystro, Krazybee, and Lazypay are exploring new ways to offer buy now and pay later to customers. One such idea is to offer gift vouchers on EMI. Users can purchase gift vouchers of different amounts and different brands and pay for them using the buy now pay later method. This means financial institutions need not tie up with merchants to offer buy now pay later to their customers. This will make a popular product even more popular and more accessible.</p> <p id="2e91">Thank You</p> <p id="2e91"><a rel="noreferrer noopener" href="https://medium.com/u/fd174b1c67b8?source=post_page-----b205aabdac6a--------------------------------" target="_blank">Phani Marupaka</a>, <a rel="noreferrer noopener" href="https://medium.com/u/3b073f67da3a?source=post_page-----b205aabdac6a--------------------------------" target="_blank">Hemchander Gunashekar</a></p> </div><!-- .entry-content --> <footer class="entry-footer"> <span class="cat-links">Posted in <a href="https://engineering.zeta.tech/category/uncategorized/" rel="category tag">Uncategorized</a></span><span class="tags-links">Tagged <a href="https://engineering.zeta.tech/tag/bnpl/" rel="tag">BNPL</a>, <a href="https://engineering.zeta.tech/tag/savings/" rel="tag">Savings</a></span><span class="comments-link"><a href="https://engineering.zeta.tech/buy-now-pay-later-how-does-it-work/#respond">Leave a Comment<span class="screen-reader-text"> on Buy Now Pay Later: How Does it Work?</span></a></span> </footer><!-- .entry-footer --> </article><!-- #post-287 --> <article id="post-282" class="post-282 post type-post status-publish format-standard has-post-thumbnail hentry category-uncategorized tag-bnpl tag-credit tag-fintech tag-payments tag-savings"> <header class="entry-header"> <h2 class="entry-title"><a href="https://engineering.zeta.tech/buy-now-pay-later-the-real-deal-or-just-hype/" rel="bookmark">Buy Now Pay Later: The Real Deal or Just Hype</a></h2> <div class="entry-meta"> <span class="posted-on">Posted on <a href="https://engineering.zeta.tech/buy-now-pay-later-the-real-deal-or-just-hype/" rel="bookmark"><time class="entry-date published updated" datetime="2021-07-26T13:29:07+00:00">July 26, 2021</time></a></span><span class="byline"> by <span class="author vcard"><a class="url fn n" href="https://engineering.zeta.tech/author/phani_marpaka/">Phani</a></span></span> </div><!-- .entry-meta --> </header><!-- .entry-header --> <a class="post-thumbnail" href="https://engineering.zeta.tech/buy-now-pay-later-the-real-deal-or-just-hype/" aria-hidden="true" tabindex="-1"> <img width="1080" height="720" src="https://engineering.zeta.tech/wp-content/uploads/2021/07/buy-now-pay-later.jpeg" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="Buy Now Pay Later: The Real Deal or Just Hype" decoding="async" loading="lazy" srcset="https://engineering.zeta.tech/wp-content/uploads/2021/07/buy-now-pay-later.jpeg 1080w, https://engineering.zeta.tech/wp-content/uploads/2021/07/buy-now-pay-later-300x200.jpeg 300w, https://engineering.zeta.tech/wp-content/uploads/2021/07/buy-now-pay-later-1024x683.jpeg 1024w, https://engineering.zeta.tech/wp-content/uploads/2021/07/buy-now-pay-later-768x512.jpeg 768w" sizes="(max-width: 1080px) 100vw, 1080px" /> </a> <div class="entry-content"> <p id="bf67">In our&nbsp;<a href="https://zetablogs.medium.com/buy-now-pay-later-the-modern-day-credit-card-d849a3c46277">previous blog</a>&nbsp;(<a href="https://zetablogs.medium.com/buy-now-pay-later-the-modern-day-credit-card-d849a3c46277">BNPL — The Modern Day Credit Card</a>), we compared buy now pay later to traditional credit cards. We compared the two products and spoke about the different types of buy now pay later offered to customers. But, is buy now pay later all it is made out to be or is it just a flash in the pan?</p> <figure class="wp-block-image"><img decoding="async" src="https://miro.medium.com/max/1400/0*wf87qODjwkGOjpAa" alt=""/></figure> <h1 class="wp-block-heading" id="88d5">Global Market</h1> <p id="2584">Globally, providers such as Klarna, Afterpay, and Affirm have paved the way for the buy now pay later ecosystem. In 2019, buy now pay later had a global market size of US$7.3 billion.&nbsp;<a href="https://www.coherentmarketinsights.com/market-insight/buy-now-pay-later-platforms-market-4013#:~:text=The%20global%20buy%20now%20pay%20later%20platforms%20market%20was%20valued,21.2%25%20between%202020%20and%202027.">Coherent Market Insights</a>, expected it to grow to US$33.6 billion by 2027 at a CAGR of 21.2%.</p> <p id="516b">While Australia and Sweden were the top markets a few years back, the buy now pay later trend has caught on in the UK and the US.</p> <p id="6967"><a href="https://worldpay.globalpaymentsreport.com/en/">Worldpay</a>&nbsp;suggests that buy now pay later spending in the UK would rise from £9.6 billion in 2020 to £26.4 billion in 2024. According to&nbsp;<a href="https://www.forbes.com/sites/ronshevlin/2020/11/22/the-24-billion-buy-now-pay-later-battle/?sh=269819f12f53">Fobes</a>, Americans made $20 billion worth of purchases using BNPL programs in 2019 and will spend $24 billion on products and services using a BNPL service in 2020.</p> <p id="6d4d"><strong>Company</strong></p> <p id="e845"><strong>Key Metrics</strong></p> <p id="2f33">Afterpay</p> <ul class="wp-block-list"><li>Operations in Australia, USA, UK, New Zealand.</li><li>7.3 Million users.</li><li>Major Market: USA</li><li>Market Cap: $17.7BN</li></ul> <p id="075f">Klarna</p> <ul class="wp-block-list"><li>Operations in 15 countries.</li><li>Market Cap: $33BN</li></ul> <p id="03fd">Affirm</p> <ul class="wp-block-list"><li>Operations in USA &amp; CANADA</li><li>Market Cap: $16.73 Bn</li></ul> <h1 class="wp-block-heading" id="75a8">Indian Market</h1> <p id="c1ff">The trends are similar in India.&nbsp;<a href="https://www.businesswire.com/news/home/20210420005935/en/India-Buy-Now-Pay-Later-Market-to-2028---75-KPIs-on-Buy-Now-Pay-Later-Trends-by-End-Use-Sectors-Operational-KPIs-Retail-Product-Dynamics-and-Consumer-Demographics---ResearchAndMarkets.com#:~:text=According%20to%20the%20Q4%202020,industry%20in%20India%20remains%20strong.">Businesswire</a>&nbsp;expects the buy now pay later payment adoption to grow steadily between 2021 and 2028, recording a CAGR of 24.2%. It expects the gross merchandise value in India to increase from US$ 6.990.5 million in 2020 to US$ 52827.2 million by 2028.</p> <p id="9f42">Buy now pay later is offered by multiple companies in India. LazyPay, ZestMoney, and Simpl are few of the pure buy now pay later companies. Other e-commerce companies such as Amazon and Flipkart, wallet providers such as Paytm and Mobikwik, banks such as ICICI and HDFC, and payment gateways such as Razorpay offer this as an option to their customers.</p> <p id="5d6b"><strong>Company</strong></p> <p id="c68a"><strong>Key Metrics</strong></p> <p id="38d8">LAZYPAY (PayU)</p> <ul class="wp-block-list"><li>4 million active users.</li><li>2 million transactions per month (December 2020).</li><li>250+ merchant base.</li></ul> <p id="29c1">ZestMoney</p> <ul class="wp-block-list"><li>6 million registered users in (February 2020).</li><li>Average transaction: Rs. 12,000/-</li><li>Tie-up with 15,000+ merchants.</li></ul> <p id="d841">Flipkart PayLater</p> <ul class="wp-block-list"><li>65 million existing Flipkart users.</li><li>Active on Flipkart, Myntra and 2Gud.</li><li>Focuses on customers tier 2 and tier 3 cities.</li></ul> <p id="1220">Paytm Postpaid</p> <ul class="wp-block-list"><li>7 million users (November 2020).</li><li>Tie-up with 5 lakh+ merchants.</li></ul> <p id="4eae">ICICI PayLater</p> <ul class="wp-block-list"><li>Available only to ICICI Bank customers on ICICI platforms such as Pockets, iMobile App, and their bank website.</li><li>Default payment option Razorpay buy now pay later customers.</li></ul> <p id="587f">Bajaj Finserv</p> <ul class="wp-block-list"><li>Available all over India.</li><li>Available in offline and online stores.</li><li>8000+ stores online stores</li><li>1 lakh+ offline stores in 1900+ cities</li></ul> <p id="bd11">PineLabs</p> <ul class="wp-block-list"><li>Provides buy now pay later via POS machines</li><li>Has 95% of the offline buy now pay later market share.</li><li>30 million users.</li><li>Tie-up with 1.5 lakh merchants.</li></ul> <h1 class="wp-block-heading" id="b3c3">Here to Stay</h1> <p id="3f03">Buy now pay later is an attractive offering from financial institutions. In 2020, buy now pay later accounted for 2.1% of ecommerce transactions worldwide, according to&nbsp;<a href="https://worldpay.globalpaymentsreport.com/en/">Worldpay</a>. This number is expected to double by 2024.</p> <p id="dc6b">In India,&nbsp;<a href="https://inc42.com/buzz/pay-later-cardless-credit-benefits-grew-over-30-in-2019-flipkart-fintech-head/">buy now pay later grew over 30% in 2019</a>. According to a&nbsp;<a href="https://www.livemint.com/money/personal-finance/buy-now-pay-later-option-hit-among-women-survey-11614847666544.html">survey conducted by ZestMoney</a>&nbsp;in 2020, 60% of women surveyed said they would use buy now pay later and 51% said they prefer it over credit cards.</p> </div><!-- .entry-content --> <footer class="entry-footer"> <span class="cat-links">Posted in <a href="https://engineering.zeta.tech/category/uncategorized/" rel="category tag">Uncategorized</a></span><span class="tags-links">Tagged <a href="https://engineering.zeta.tech/tag/bnpl/" rel="tag">BNPL</a>, <a href="https://engineering.zeta.tech/tag/credit/" rel="tag">Credit</a>, <a href="https://engineering.zeta.tech/tag/fintech/" rel="tag">FinTech</a>, <a href="https://engineering.zeta.tech/tag/payments/" rel="tag">Payments</a>, <a href="https://engineering.zeta.tech/tag/savings/" rel="tag">Savings</a></span><span class="comments-link"><a href="https://engineering.zeta.tech/buy-now-pay-later-the-real-deal-or-just-hype/#respond">Leave a Comment<span class="screen-reader-text"> on Buy Now Pay Later: The Real Deal or Just Hype</span></a></span> </footer><!-- .entry-footer --> </article><!-- #post-282 --> <article id="post-277" class="post-277 post type-post status-publish format-standard has-post-thumbnail hentry category-uncategorized tag-bnpl tag-credit tag-money"> <header class="entry-header"> <h2 class="entry-title"><a href="https://engineering.zeta.tech/buy-now-pay-later-the-modern-day-credit-card/" rel="bookmark">Buy Now Pay Later: The Modern Day Credit Card</a></h2> <div class="entry-meta"> <span class="posted-on">Posted on <a href="https://engineering.zeta.tech/buy-now-pay-later-the-modern-day-credit-card/" rel="bookmark"><time class="entry-date published updated" datetime="2021-07-26T13:25:14+00:00">July 26, 2021</time></a></span><span class="byline"> by <span class="author vcard"><a class="url fn n" href="https://engineering.zeta.tech/author/phani_marpaka/">Phani</a></span></span> </div><!-- .entry-meta --> </header><!-- .entry-header --> <a class="post-thumbnail" href="https://engineering.zeta.tech/buy-now-pay-later-the-modern-day-credit-card/" aria-hidden="true" tabindex="-1"> <img width="499" height="496" src="https://engineering.zeta.tech/wp-content/uploads/2021/07/BNPL-1-e1627286726314.jpeg" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="Buy Now Pay Later: The Modern Day Credit Card" decoding="async" loading="lazy" srcset="https://engineering.zeta.tech/wp-content/uploads/2021/07/BNPL-1-e1627286726314.jpeg 499w, https://engineering.zeta.tech/wp-content/uploads/2021/07/BNPL-1-e1627286726314-300x298.jpeg 300w, https://engineering.zeta.tech/wp-content/uploads/2021/07/BNPL-1-e1627286726314-150x150.jpeg 150w" sizes="(max-width: 499px) 100vw, 499px" /> </a> <div class="entry-content"> <p id="1e46">Zeta,&nbsp;<a href="https://www.zeta.tech/us/newsroom/zeta-funding-omni-stack?_hsmi=129189445&amp;_hsenc=p2ANqtz-9lk8eVDxvBV72gAm8UMUufR6d2IXt9j1hZLxXaIWy8Oa-C-TKMT7zW74wI2XgXgz_N0qVaE9FtmFNmyhs5WM06S1Qf5A">the 14th Indian unicorn in 2021</a>, is rethinking payments from core to the edge, algorithms to form factors, applications to solutions. Cipher, one of Zeta’s offerings,&nbsp;<a href="https://zetablogs.medium.com/tuning-cipher-to-1m-tps-for-ease-of-scaling-of-online-authentications-part-2-30699cc273dc">was able to successfully handle 1 Million Transactions per Second (1M TPS)</a>, illustrating the scalability and elasticity with which banks can handle online transactions. In our endeavor to make payments invisible, we are exploring and evaluating the buy now pay later payment (BNPL) model.</p> <p id="0128">BNPL allows consumers to make&nbsp;purchases without any upfront payments. A modern-day offering from financial institutions, BNPL offers consumers small loans to buy the products or services they want. These loans are typically interest-free as long as they are paid back within the specified time frame.</p> <p id="4f75">Key features of BNPL are:</p> <ul class="wp-block-list"><li>Easy and instant credit to people in the 18–40 age group with little to no credit history.</li><li>Offer interest-free EMIs to the consumers for online or offline purchases and includes school fees, college fees, and medical bills.</li></ul> <h1 class="wp-block-heading" id="978c">BNPL vs Traditional Credit Cards</h1> <p id="7504">In today’s world where customers are spoilt for choice and want to be rewarded for making purchases, taking more than a few minutes to onboard a customer and adding extra charges and hidden fees to their payments is a turnoff. Financial institutions also want to capitalize on the trend of instant buying by offering a quick checkout experience where first-time customers do not have to enter details such as card number, CVV, and OTP to make a purchase.</p> <p id="e943">BNPL has grown in popularity with customers and financial institutions because of its various benefits over traditional credit cards.</p> <figure class="wp-block-image"><img decoding="async" src="https://miro.medium.com/max/1400/0*79YlJJNWSeD6fGed" alt=""/></figure> <p id="14b0">BNPL accounts can be created instantly within minutes making it the more convenient option for first-time users. Credit cards traditionally could take up to a week to be approved and then there is the time it takes for it to be shipped to the customer. The customer then has to activate it before they can use it.</p> <p id="1cd9">Unlike traditional credit cards, BNPL charges very little in terms of registration fees, annual charges, processing charges, convenience fees, etc. making it more appealing to customers.</p> <p id="026c">This is not to say BNPL does not charge customers anything extra. In the BNPL model, fees are mostly charged in the form of interest for the borrowed amount and late fees for missed payments. However, most financial institutions offer 0% EMI on BNPL payments, making it even more popular. This has helped rapidly grow the BNPL customer base.</p> <h1 class="wp-block-heading" id="14fd">Credit Cards: A thing of the past?</h1> <p id="7b0f">The BNPL industry has grown both globally and in India over the last few years. The 2020 pandemic has only increased its popularity.</p> <p id="917f">In India, the payment option has&nbsp;<a href="https://www.livemint.com/money/personal-finance/buy-now-pay-later-platform-gaining-popularity-68-customer-from-outside-tier-1-city-says-zestmoney-11611844970228.html">grown in popularity in tier 2 and tier 3 cities</a>&nbsp;where consumers do not have easy access to credit cards or cannot get easy short-term, low-interest loans.</p> <p id="a274">BNPL has numerous advantages over traditional credit cards. Traditional credit cards still have a place, especially for corporate applications, but the benefits and convenience BNPL offers are sure to see it continue to grow in popularity over the next few years.</p> <h1 class="wp-block-heading" id="ac81">Up Next…</h1> <p id="f82f">In our next blogs (<a href="https://zetablogs.medium.com/buy-now-pay-later-the-real-deal-or-just-hype-121213c48f54">BNPL: The Real Deal or Just Hype</a>,&nbsp;<a href="https://zetablogs.medium.com/buy-now-pay-later-how-does-it-work-b205aabdac6a">How Does BNPL Work</a>) , we will discuss the global and Indian BNPL market and go into detail about how the BNPL model works.</p> </div><!-- .entry-content --> <footer class="entry-footer"> <span class="cat-links">Posted in <a href="https://engineering.zeta.tech/category/uncategorized/" rel="category tag">Uncategorized</a></span><span class="tags-links">Tagged <a href="https://engineering.zeta.tech/tag/bnpl/" rel="tag">BNPL</a>, <a href="https://engineering.zeta.tech/tag/credit/" rel="tag">Credit</a>, <a href="https://engineering.zeta.tech/tag/money/" rel="tag">Money</a></span><span class="comments-link"><a href="https://engineering.zeta.tech/buy-now-pay-later-the-modern-day-credit-card/#respond">Leave a Comment<span class="screen-reader-text"> on Buy Now Pay Later: The Modern Day Credit Card</span></a></span> </footer><!-- .entry-footer --> </article><!-- #post-277 --> <article id="post-268" class="post-268 post type-post status-publish format-standard has-post-thumbnail hentry category-security tag-fintech tag-mobile-applications tag-mobileinfra tag-payments tag-security"> <header class="entry-header"> <h2 class="entry-title"><a href="https://engineering.zeta.tech/security-principles-for-mobile-applications/" rel="bookmark">Security Principles for Mobile Applications</a></h2> <div class="entry-meta"> <span class="posted-on">Posted on <a href="https://engineering.zeta.tech/security-principles-for-mobile-applications/" rel="bookmark"><time class="entry-date published updated" datetime="2021-06-14T10:17:27+00:00">June 14, 2021</time></a></span><span class="byline"> by <span class="author vcard"><a class="url fn n" href="https://engineering.zeta.tech/author/phani_marpaka/">Phani</a></span></span> </div><!-- .entry-meta --> </header><!-- .entry-header --> <a class="post-thumbnail" href="https://engineering.zeta.tech/security-principles-for-mobile-applications/" aria-hidden="true" tabindex="-1"> <img width="700" height="317" src="https://engineering.zeta.tech/wp-content/uploads/2021/06/mobile-application-security-for-developers.png" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="Security Principles for Mobile Applications" decoding="async" loading="lazy" srcset="https://engineering.zeta.tech/wp-content/uploads/2021/06/mobile-application-security-for-developers.png 700w, https://engineering.zeta.tech/wp-content/uploads/2021/06/mobile-application-security-for-developers-300x136.png 300w" sizes="(max-width: 700px) 100vw, 700px" /> </a> <div class="entry-content"> <p id="178a">The challenge when building a secure mobile application is how we balance ease of use with security. Applications that are easy to use are the ones that succeed. However, any compromise on security could have disastrous consequences. Mobile applications that handle payments have more stringent security protocols when compared to utility applications. However, to succeed, it has to be just as easy to use.</p> <p id="ce4b">These were the topics of discussion&nbsp;at Rootconf’s Data Privacy Conference held in April 2021. The roundtable, moderated by Suman Kar, included Madhusudhan Sambojhu from Able.do, Chirayu Desai from Calyx Institute, and&nbsp;<a href="https://medium.com/u/d510d552a926?source=post_page-----2e6f6b2adbbf--------------------------------" target="_blank" rel="noreferrer noopener">Apurva Jaiswal</a>, Engineering Manager at Zeta.</p> <p id="a151"><a href="https://www.zeta.tech/">Zeta</a>&nbsp;develops cloud-native mobile-first banking and payment platforms that meet these exact requirements. We aim to move away from lengthy checkout forms and OTP-based payment authorization. Our platform allows merchants to securely accept payments from around the world and allows customers to make these payments with a&nbsp;<a href="https://getonecard.app/blog/onecard-swipe-to-pay/">single swipe</a>.</p> <p id="35f5">Let us discuss some of the security principles we follow at Zeta when designing our mobile applications.</p> <h1 class="wp-block-heading" id="4675">Zero-trust Principle</h1> <p id="eb9d">Adopting a zero-trust approach is important when it comes to securing data on applications. Organizations building the application should ensure they have implemented all necessary security measures to protect user data. They should not depend on the application hosts for this.</p> <p id="0fa9">There are 2 types of data that we need to secure in mobile applications:</p> <ul class="wp-block-list"><li>Data at rest.</li><li>Data at motion.</li></ul> <p id="7c12">All sensitive data should be saved in vault storage and should be accessible with explicit consent from the user.</p> <p id="fb2b">Since mobile devices are sandboxed from day one, it helps protect application data, stored on the device’s internal storage, from hackers and other applications on the device. Some tools that can be used to secure data are Charles proxy, Wireshark, Firebase, and SonarQube.</p> <p id="fb2b">[su_youtube_advanced url=&#8221;https://www.youtube.com/watch?v=f-boD_oQ5ts&amp;ab_channel=PhaniMarpaka&#8221; autoplay=&#8221;no&#8221;]</p> <p></p> <p id="9024">At Zeta, we ensure user data is opaque to the cloud provided and is end-to-end protected. We distill and sanitize the network edges. We ensure end-to-end authentication and access control using IAM and RBAC.</p> <p id="4568">Listed below are some best practices we have adopted at Zeta when building mobile applications.</p> <h1 class="wp-block-heading" id="9911">Mobile Application Security</h1> <figure class="wp-block-image"><img decoding="async" src="https://miro.medium.com/max/2400/1*OZVFKR004lwWkJzi0gVRaw.jpeg" alt=""/></figure> <p id="a825">Mobile application security is the measures taken by the application developer to secure the applications from external threats. A breach in mobile security gives hackers access to the user’s personal information, their current location, banking information, and much more. Some best practices are:</p> <ul class="wp-block-list"><li>Perform root checks using Google SafetyNet API and Rootbeer. On iOS devices check for functions that should not be available in a non-rooted device.</li><li>Use SSL Pinning to prevent attackers from analyzing your application functionality and the way it communicates with the server.</li><li>Build strong and customizable authentication flows: — Phone number + OTP, Phone number + OTP + password</li><li>Do not allow concurrent logins.</li><li>Analyze user behavior and trigger re-authentication in case of risks.</li><li>Have a strong device binding ID (Device ID + Sim ID)</li><li>Do not issue tokens when the device binding ID changes.</li><li>Server triggered data wipeout.</li><li>Screen record and screen capture protection.</li><li>Launcher image protection.</li></ul> <h1 class="wp-block-heading" id="89e7">APK Security</h1> <p id="70f7">It is not enough to secure your application while it is being used. It is critical to ensure your application is hosted and distributed from a secure platform. This prevents hackers from gaining access to your code repository and exploiting it to gain unauthorized access to user data. Some best practices are:</p> <ul class="wp-block-list"><li>Never distribute APKs through APK/IPA files. Use standard firebase app distribution/testflight.</li><li>Never release debug builds.</li><li>Assume whatever goes in APK is public information :- The Native Development Kit (NDK), Prefer server-side secrets</li><li>Implement code obfuscation.</li><li>Incorporate proguard rules in your builds.</li></ul> <h1 class="wp-block-heading" id="13bc">Identity Establishment and Authentication</h1> <p id="4fa9">When onboarding a customer on your mobile application, it is important to establish their identity. This allows us to ensure only that person has access to the application on their device. Some best practices are:</p> <ul class="wp-block-list"><li>Challenge a user using multiple identity vectors such as phone number, email, bank account number, and password. Challenges should be sent on different communication channels</li><li>Each vector is identified by a specific IdP.</li><li>Implement Social Authentication.</li><li>Use penny testing to verify a user’s account.</li><li>Successful authentication leads to a 256 bit AES symmetric key between server and client using ECDHE-ECDSA-AES256 bit key exchange.</li><li>Subsequent device sessions are established using OATH-based HOTP of monotonically increasing session count.</li><li>256 bit Symmetric Keys.</li><li>OATH-based HOTP for authentication.</li><li>Key setup using ECDHE-ECDSA-AES256 bit.</li><li>Real-time locating system (RTLS) optimized transport based on TLS 1.2. : — Key exchange through ECDHE-ECDSA-AES256 bit key (Equivalent to RSA 372 bit), Encryption, authentication, and integrity check through AES 128 bit in counter mode with SHA-256 based HMAC.</li></ul> <figure class="wp-block-image"><img decoding="async" src="https://miro.medium.com/max/1024/1*qUUyneTZLwlQPzU0giYw6g.jpeg" alt=""/></figure> <h1 class="wp-block-heading" id="d081">Transaction</h1> <p id="8406">Securing transaction data is the most important aspect of mobile security. Any vulnerabilities here can lead to the application user losing money and cause irrevocable setbacks to your application.</p> <ul class="wp-block-list"><li>Non-repudiable transactions.</li><li>Private keys protected using Secure Module on Device or Password+Scrypt.</li><li>Non-verifiable random key material on the device.</li><li>Key rotation after every successful online transaction.</li></ul> <h1 class="wp-block-heading" id="827d">Assume the mobile application code/library is public</h1> <p id="ed0e">This should be the basic assumption an organization makes when building a mobile application. To ensure there are no compromises to an application’s security, organizations need:</p> <ul class="wp-block-list"><li>Ensure their mobile team is kept up to date with and implements the latest security guidelines and practices in the industry.</li><li>Ensure all security checks and protocols are enforced when deploying code.</li><li>Have their mobile application regularly audited by external auditors.</li></ul> <p></p> <p>[su_youtube url=&#8221;https://www.youtube.com/watch?v=VRBPbQYoytY&amp;ab_channel=PhaniMarpaka&#8221;]</p> <p id="55db">At zeta, we believe in building and nurturing a strong team that understands security and follows the importance of:</p> <ul class="wp-block-list"><li>Code peer reviews.</li><li>Static application security testing.</li><li>Regular security testing team by Zeta’s internal security team.</li><li>Regular application security testing by 3rd party vendors such as SISA.</li></ul> <h1 class="wp-block-heading" id="cd8b">Conclusion</h1> <p id="d61d">There cannot be any compromise in terms of security when building mobile applications. Apart from setting up security protocols, organizations should ensure their employees are kept up to date with the latest trends in security. Organizations can use tools to enforce security protocol and ensure their applications are secure.</p> <p id="5269">It is also important to educate end-users about best practices around mobile applications. Users should only download applications from trusted application hosts. Downloading applications directly from a website or elsewhere could lead to security breaches.</p> <p id="02ff"><a href="https://www.linkedin.com/company/zetasuite/">Zeta Suite</a>&nbsp;is rethinking payments from core to the edge, algorithms to form factors, applications to solutions. Having built a modern stack that Financial Institutions (FIs) can use for debit, credit, and prepaid cards, loans, authentication, and Fraud and Risk Management (FRM), Zeta invites you to join their journey in democratizing payments. Check out the openings on &lt;&nbsp;<a href="http://careers.zeta.tech/">careers.zeta.tech</a>&nbsp;&gt;</p> <p id="7165">Thanks</p> </div><!-- .entry-content --> <footer class="entry-footer"> <span class="cat-links">Posted in <a href="https://engineering.zeta.tech/category/security/" rel="category tag">Security</a></span><span class="tags-links">Tagged <a href="https://engineering.zeta.tech/tag/fintech/" rel="tag">FinTech</a>, <a href="https://engineering.zeta.tech/tag/mobile-applications/" rel="tag">Mobile applications</a>, <a href="https://engineering.zeta.tech/tag/mobileinfra/" rel="tag">MobileInfra</a>, <a href="https://engineering.zeta.tech/tag/payments/" rel="tag">Payments</a>, <a href="https://engineering.zeta.tech/tag/security/" rel="tag">security</a></span><span class="comments-link"><a href="https://engineering.zeta.tech/security-principles-for-mobile-applications/#respond">Leave a Comment<span class="screen-reader-text"> on Security Principles for Mobile Applications</span></a></span> </footer><!-- .entry-footer --> </article><!-- #post-268 --> <article id="post-260" class="post-260 post type-post status-publish format-standard has-post-thumbnail hentry category-uncategorized tag-data-deletion tag-data-privacy tag-data-protection tag-pii"> <header class="entry-header"> <h2 class="entry-title"><a href="https://engineering.zeta.tech/data-deletion-right-to-be-forgotten/" rel="bookmark">Data deletion &#038; right to be forgotten</a></h2> <div class="entry-meta"> <span class="posted-on">Posted on <a href="https://engineering.zeta.tech/data-deletion-right-to-be-forgotten/" rel="bookmark"><time class="entry-date published updated" datetime="2021-05-18T18:21:59+00:00">May 18, 2021</time></a></span><span class="byline"> by <span class="author vcard"><a class="url fn n" href="https://engineering.zeta.tech/author/phani_marpaka/">Phani</a></span></span> </div><!-- .entry-meta --> </header><!-- .entry-header --> <a class="post-thumbnail" href="https://engineering.zeta.tech/data-deletion-right-to-be-forgotten/" aria-hidden="true" tabindex="-1"> <img width="1000" height="600" src="https://engineering.zeta.tech/wp-content/uploads/2021/05/Data-deletion.jpeg" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="Data deletion &#038; right to be forgotten" decoding="async" loading="lazy" srcset="https://engineering.zeta.tech/wp-content/uploads/2021/05/Data-deletion.jpeg 1000w, https://engineering.zeta.tech/wp-content/uploads/2021/05/Data-deletion-300x180.jpeg 300w, https://engineering.zeta.tech/wp-content/uploads/2021/05/Data-deletion-768x461.jpeg 768w" sizes="(max-width: 1000px) 100vw, 1000px" /> </a> <div class="entry-content"> <p id="6c13">Shaik Idris, Director of Data Platforms at&nbsp;<a href="http://www.zeta.tech/">Zeta</a>, was part of a roundtable discussion at Rootconf’s Data Privacy Conference held in April 2021. The roundtable was moderated by Venkata Pingali from Scribble Data and included Sreenath Kamath from Hotstar.</p> <p id="1eec">The roundtable focused on handling data deletion practices in engineering and product.</p> <h1 class="wp-block-heading" id="f6f0">Why is data deletion important?</h1> <p id="f001">In today’s data-driven world, user data is very valuable. We have a number of cases where user data has been misused or leaked. Maintaining customer satisfaction and trust is critical for any company. Data deletion ensures a customer’s data cannot be used for anything else apart from the intended purpose.</p> <h1 class="wp-block-heading" id="d3de">What are the legal obligations of a company when it comes to data deletion?</h1> <p id="5097">The law requires companies to inform customers why they are collecting data from them and where it will be used. It also requires companies to provide customers with the:</p> <ul class="wp-block-list"><li>Right to know what information the company has about them.</li><li>Right to ask the company to delete any personal information they have.</li></ul> <p id="ce88">Retrospectively making a company General Data Protection Regulation (GDPR) compliant is impossible. This is because a lot of existing companies ignore the first principle of GDPR, privacy by design. New companies have the flexibility to model data from the onset to ensure they are compliant with the regulations.</p> <p><a href="https://youtu.be/DlpDEdExPFA">Data Deletion: A Company&#8217;s Legal Obligation</a></p> <h1 class="wp-block-heading" id="bb93">What is realistically possible in a complex, evolving organization?</h1> <p id="caee">Steps companies can take are:</p> <ul class="wp-block-list"><li>Identifying data sources. This problem is especially big in startups.</li><li>Streamlining the data model. Customer data should be treated and managed as master data. A lot of companies do not do this.</li><li>Don’t use personally identifiable information (PII) such as phone number or email address as your primary key.</li><li>Ensure you always use structured data sets.</li><li>Use proper naming conventions for columns and variables.</li><li>Have processes to avoid internal data leaks.</li></ul> <p><a href="https://youtu.be/ngOoy2T9Ch0" target="_blank" rel="noreferrer noopener">Data Deletion: Realistic Possibilities</a></p> <h1 class="wp-block-heading" id="a513">Can we use tools to help implement the above suggestions?</h1> <p id="326c">Tooling helps. We can use tools to scan data sources to identify and flag inappropriately named columns or even auto tag all instances where customer data was stored. However, for tools to be effective, companies should have dedicated data stewards for each data domain.</p> <p><a href="https://youtu.be/HjVksYgUNQA" data-type="URL" data-id="https://youtu.be/HjVksYgUNQA" target="_blank" rel="noreferrer noopener">Data Deletion: What tool can we use</a></p> <h1 class="wp-block-heading" id="7275">How can you say that you have realistically implemented delete?</h1> <p id="fc04">First, we must differentiate between what data a company should retain for audit purposes and what data can be deleted. For example, financial institutions are required to retain information for 7 years for audit purposes. Information collected for marketing purposes, on the other hand, can be deleted.</p> <p id="5768">Few things companies can do are:</p> <ul class="wp-block-list"><li>Collect the data you need. Keep this as minimal as possible.</li><li>Unless required by compliance, do not retain data. Any data you retain is a liability.</li><li>Anonymize PII in data sources.</li><li>Guard your communication channels and maintain a list of users who want to be forgotten.</li></ul> <p><a href="https://youtu.be/EmAXwY3rb80" target="_blank" rel="noreferrer noopener">Data Deletion: Realistic Implementation</a></p> <h1 class="wp-block-heading" id="8b8b">Conclusion</h1> <p id="062f">The law allows users to discover what a company knows about them and ask companies to delete their personal information. There is ambiguity about what it means to delete information. The law requires companies to demonstrate that they have tried to delete a user’s personal data. This is not possible if companies have an uncontrolled, undisciplined data environment.</p> <p id="f521">Companies can use tools to ensure the proper handling of customer data. But, as the saying goes, prevention is better than a cure. By collecting only the required data and deleting data that you are not required to retain, companies can avoid the hassle of data deletion and data leaks.</p> <h1 class="wp-block-heading" id="094e">About Shaik Idris</h1> <p id="974f">Shaik Idris is an experienced architect and proven leader in the field of BigData and Cloud. He has worked in top startups, product companies, and with open-source codes for over a decade. He has helped companies build high-performance teams and data organizations from scratch.</p> <p id="7f8e">Zeta — is rethinking payments from core to the edge, algorithms to form factors, applications to solutions. Having built a modern stack that Financial Institutions (FIs) can use for debit, credit, and prepaid cards, loans, authentication, and Fraud and Risk Management (FRM), Zeta invites you to join their journey in democratizing payments. Check out the openings on Zeta’s career page:&nbsp;<a href="https://www.zeta.tech/in/careers">https://www.zeta.tech/in/careers</a></p> <p id="d052">Thank You</p> <p id="512f">Speaker:&nbsp;<a href="https://medium.com/u/66663b64e720?source=post_page-----5a811bd7d4b4--------------------------------" target="_blank" rel="noreferrer noopener">Idris Ali</a></p> <p id="5f79">Blogged by:&nbsp;<a rel="noreferrer noopener" href="https://medium.com/u/3b073f67da3a?source=post_page-----5a811bd7d4b4--------------------------------" target="_blank">Hemchander Gunashekar</a></p> </div><!-- .entry-content --> <footer class="entry-footer"> <span class="cat-links">Posted in <a href="https://engineering.zeta.tech/category/uncategorized/" rel="category tag">Uncategorized</a></span><span class="tags-links">Tagged <a href="https://engineering.zeta.tech/tag/data-deletion/" rel="tag">Data Deletion</a>, <a href="https://engineering.zeta.tech/tag/data-privacy/" rel="tag">Data Privacy</a>, <a href="https://engineering.zeta.tech/tag/data-protection/" rel="tag">Data Protection</a>, <a href="https://engineering.zeta.tech/tag/pii/" rel="tag">PII</a></span><span class="comments-link"><a href="https://engineering.zeta.tech/data-deletion-right-to-be-forgotten/#respond">Leave a Comment<span class="screen-reader-text"> on Data deletion &#038; right to be forgotten</span></a></span> </footer><!-- .entry-footer --> </article><!-- #post-260 --> <article id="post-256" class="post-256 post type-post status-publish format-standard has-post-thumbnail hentry category-uncategorized tag-fintech tag-pm tag-programmanagement tag-technology tag-zeta tag-zetasuite"> <header class="entry-header"> <h2 class="entry-title"><a href="https://engineering.zeta.tech/program-management-a-beginners-guide/" rel="bookmark">Program Management: A Beginner’s Guide</a></h2> <div class="entry-meta"> <span class="posted-on">Posted on <a href="https://engineering.zeta.tech/program-management-a-beginners-guide/" rel="bookmark"><time class="entry-date published updated" datetime="2021-05-07T13:44:04+00:00">May 7, 2021</time></a></span><span class="byline"> by <span class="author vcard"><a class="url fn n" href="https://engineering.zeta.tech/author/phani_marpaka/">Phani</a></span></span> </div><!-- .entry-meta --> </header><!-- .entry-header --> <a class="post-thumbnail" href="https://engineering.zeta.tech/program-management-a-beginners-guide/" aria-hidden="true" tabindex="-1"> <img width="1920" height="1080" src="https://engineering.zeta.tech/wp-content/uploads/2021/05/Program-Management.jpeg" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="Program Management: A Beginner’s Guide" decoding="async" loading="lazy" srcset="https://engineering.zeta.tech/wp-content/uploads/2021/05/Program-Management.jpeg 1920w, https://engineering.zeta.tech/wp-content/uploads/2021/05/Program-Management-300x169.jpeg 300w, https://engineering.zeta.tech/wp-content/uploads/2021/05/Program-Management-1024x576.jpeg 1024w, https://engineering.zeta.tech/wp-content/uploads/2021/05/Program-Management-768x432.jpeg 768w, https://engineering.zeta.tech/wp-content/uploads/2021/05/Program-Management-1536x864.jpeg 1536w" sizes="(max-width: 1920px) 100vw, 1920px" /> </a> <div class="entry-content"> <p id="3338">Rohit Kamat, Program Manager at <a href="http://www.zeta.in">Zeta</a>, talks about his experience as a program manager and key learnings from his time at Zeta. He talks about topics such as stakeholder management, defect management, and key learning from sprint and scrum planning.</p> <h1 class="wp-block-heading" id="533a">Stakeholder Management</h1> <p id="4548">When working on a project, managing your stakeholders is just as important as managing your deliverables. Unless you identify, analyze, plan, and review your stakeholders, you would not know who these people are, what they are responsible for, and what their expectations are from the project and you.</p> <p id="590f">Similar to how you do not want to over-assign tasks to people working on your projects, it is also important to not burn yourself out talking to a lot of people. As a program manager, you must know how to prioritize stakeholders and derive the most value from interactions with them.</p> <p id="c7c4">There are multiple approaches to identify and prioritize stakeholders, let us take a look at 2 of these.</p> <ul class="wp-block-list"><li>Power Interest Grid</li><li>Stakeholder Salience Model</li></ul> <h1 class="wp-block-heading" id="85a4">Power Interest Grid</h1> <p id="50b0">This chart maps the authority or power of stakeholders against how much interest they take in the project. Based on the X and Y axis, we can decide what type of information a stakeholder would need and what type of engagement we would want to have with them.</p> <figure class="wp-block-image"><img decoding="async" src="https://miro.medium.com/max/1972/0*uYGL74QAjJ8KOTzK" alt=""/></figure> <h1 class="wp-block-heading" id="dd9b">Stakeholder Salience Model</h1> <p id="a698">This chart maps the types of stakeholders against power, legitimacy, and urgency.</p> <figure class="wp-block-image"><img decoding="async" src="https://miro.medium.com/max/1276/0*NB9zBD9HKuOoS9Ot" alt=""/></figure> <p id="1647">Explainer video-&nbsp;<a href="https://zeta.ap.panopto.com/Panopto/Pages/Embed.aspx?id=de7b601b-1906-45e3-8481-ad21007ef87f">https://zeta.ap.panopto.com/Panopto/Pages/Embed.aspx?id=de7b601b-1906-45e3-8481-ad21007ef87f</a></p> <h1 class="wp-block-heading" id="9613">Key Learnings from Sprint and Scrum Planning</h1> <p id="3d4e">We know how important sprint and scrum planning is in any organization. What we don’t talk about is its implementation. Poorly planned and executed sprints could hamper progress, rather than streamline it. For example, having someone who is not part of the team plan a sprint could be a recipe for disaster.</p> <p id="aa57">Explainer video —&nbsp;<a href="https://zeta.ap.panopto.com/Panopto/Pages/Embed.aspx?id=d114e9e9-c3b1-4f95-8c22-ad21007f4b01">https://zeta.ap.panopto.com/Panopto/Pages/Embed.aspx?id=d114e9e9-c3b1-4f95-8c22-ad21007f4b01</a></p> <p id="0ce0">Below are some key learnings from sprint planning:</p> <ul class="wp-block-list"><li>To change the system you have to be part of the system.</li><li>Reflect → Tune → Adject. Revisit your scrum practices often and make changes as needed. If something works well, figure out why it has worked well and how it can help other aspects of the scrum. If something is not working well, fix it.</li><li>The key to early and continuous delivery is communication and transparency.</li><li>Your scrum or sprints do not have to align with those of your clients. Do not force this.</li><li>Do not divide scrum teams into smaller teams.</li><li>Achieving a velocity target should not be the objective of a scrum. It should be to find new/different ways to achieve it.</li><li>Rituals do not make you agile.</li></ul> <h1 class="wp-block-heading" id="fe73">Defect Management</h1> <p id="035a">How well you manage defects defines your last-mile delivery success. Listed below are some ways you can track defects.</p> <ul class="wp-block-list"><li>JIRA Dashboards help you list and track defects.</li><li>Triages help you understand the priority of defects.</li></ul> <p id="641d">Explainer video —&nbsp;<a href="https://zeta.ap.panopto.com/Panopto/Pages/Embed.aspx?id=a0b1ac42-a7df-40e3-8b14-ad21007f4f9d">https://zeta.ap.panopto.com/Panopto/Pages/Embed.aspx?id=a0b1ac42-a7df-40e3-8b14-ad21007f4f9d</a></p> <h1 class="wp-block-heading" id="62d7">Conclusion</h1> <p id="fd73">Program management is a critical role in any organization that requires you to interact with various stakeholders across multiple disciplines. Your ability to obtain the required information from these stakeholders while keeping them informed about progress is essential to the smooth functioning of a team and ensuring deadlines are met.</p> <p id="abf5">Speaker: Rohit Kamat</p> <p id="68fa">Blogged by:&nbsp;<a href="/cdn-cgi/l/email-protection#345c5159575c555a50514653744e5140551a4051575c">Hemchander Gunashekar</a></p> </div><!-- .entry-content --> <footer class="entry-footer"> <span class="cat-links">Posted in <a href="https://engineering.zeta.tech/category/uncategorized/" rel="category tag">Uncategorized</a></span><span class="tags-links">Tagged <a href="https://engineering.zeta.tech/tag/fintech/" rel="tag">FinTech</a>, <a href="https://engineering.zeta.tech/tag/pm/" rel="tag">PM</a>, <a href="https://engineering.zeta.tech/tag/programmanagement/" rel="tag">ProgramManagement</a>, <a href="https://engineering.zeta.tech/tag/technology/" rel="tag">Technology</a>, <a href="https://engineering.zeta.tech/tag/zeta/" rel="tag">Zeta</a>, <a href="https://engineering.zeta.tech/tag/zetasuite/" rel="tag">ZetaSuite</a></span><span class="comments-link"><a href="https://engineering.zeta.tech/program-management-a-beginners-guide/#respond">Leave a Comment<span class="screen-reader-text"> on Program Management: A Beginner’s Guide</span></a></span> </footer><!-- .entry-footer --> </article><!-- #post-256 --> <article id="post-247" class="post-247 post type-post status-publish format-standard has-post-thumbnail hentry category-uncategorized tag-apollo tag-developers tag-sdk"> <header class="entry-header"> <h2 class="entry-title"><a href="https://engineering.zeta.tech/multi-tenant-sdk-authentication/" rel="bookmark">Multi-tenant SDK Authentication</a></h2> <div class="entry-meta"> <span class="posted-on">Posted on <a href="https://engineering.zeta.tech/multi-tenant-sdk-authentication/" rel="bookmark"><time class="entry-date published updated" datetime="2021-04-14T09:49:13+00:00">April 14, 2021</time></a></span><span class="byline"> by <span class="author vcard"><a class="url fn n" href="https://engineering.zeta.tech/author/phani_marpaka/">Phani</a></span></span> </div><!-- .entry-meta --> </header><!-- .entry-header --> <a class="post-thumbnail" href="https://engineering.zeta.tech/multi-tenant-sdk-authentication/" aria-hidden="true" tabindex="-1"> <img width="960" height="540" src="https://engineering.zeta.tech/wp-content/uploads/2021/04/SDK-To-App.png" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="Multi-tenant SDK Authentication" decoding="async" loading="lazy" srcset="https://engineering.zeta.tech/wp-content/uploads/2021/04/SDK-To-App.png 960w, https://engineering.zeta.tech/wp-content/uploads/2021/04/SDK-To-App-300x169.png 300w, https://engineering.zeta.tech/wp-content/uploads/2021/04/SDK-To-App-768x432.png 768w" sizes="(max-width: 960px) 100vw, 960px" /> </a> <div class="entry-content"> <p id="4ee6">Apollo App Center is a marketplace for SDKs. Each SDK can be published by different publishers. Each publisher has its own identifiers for its users.</p> <p id="4b24">A few examples:</p> <ul class="wp-block-list"><li>Google Pay app may have SDK from ICICI Bank, HDFC Bank, and SBI Bank.</li><li>Ola app may have SDK from Google Maps, Weather Channel, and ICICI Bank.</li><li><a href="http://www.zeta.tech/in">Zeta Benefits Wallet</a>&nbsp;app may have RBL Cards SDK, CCAvenue Payment Gateway SDK, Razorpay Payment Gateway SDK, Stripe SDK, etc.</li></ul> <p id="456b">In all of the above cases, the app hosting the SDKs wants to integrate&nbsp;various services from third parties using the SDKs provided by those parties to provide increased functionality to its users. But each of those SDKs represents isolated services from that of the parent app and the user of the app could be using those services from various other interfaces outside the purview of the parent app or parent app provider.</p> <figure class="wp-block-image"><img decoding="async" src="https://miro.medium.com/max/3160/0*Nc3CdPRtN3h-uNwr" alt=""/></figure> <p id="6cf9">Thus, the identity domains and thereby the authentication domains of the app and the included SDKs are different. Unless there is some federation of identity and authentication, the user of the app has to establish their identity using potentially different authentication mechanisms of each SDK. For example, a Zeta Benefits Wallet user may have to log in several times within the app to access services provided by different SDKs. An Ola app user would have a similar experience.</p> <p id="e923">The objective of the authentication federation approach is to avoid the need for each SDK publisher to authenticate the user separately.</p> <h1 class="wp-block-heading" id="10e4">Why not conventional mechanisms?</h1> <p id="c078">In the conventional OAuth flows the App Provider is treated as a client of the User of each publisher and authorization is provided to the App Provider to access resources corresponding to the User.</p> <p id="662a">In sensitive domains such as banking and payments, the user resources cannot be accessed by any third-party service provider. The Publisher ensures only the end-user is accessing the resources using the SDKs provided by the publisher.</p> <p id="21c9">Therefore, although the SDKs are embedded by the app provider, the app provider themselves are not acting as a client of the user. Thus, a conventional OAuth approach to federate identities from publisher to app provider is not possible.</p> <p id="6005">The solution implemented federates the identity provided by the App Provider and the Publisher is made the relying party. The publisher may rely on the identity and credentials provided by the app provider as is, depending on the reliability of the app provider’s authentication, or may offer additional challenges to the user before granting access to the service.</p> <p id="cf05">Shown below is the Authentication Flow.</p> <ol class="wp-block-list"><li>Establish identity with App Providers.</li><li>Forward that identity established in step 1 to Publisher1 in a reliable way.</li><li>Publisher1 verifies the forwarded identity and grants access to the user as Identity@Publisher1</li><li>Forward that identity established in step 1 to the Publisher2 in a reliable way.</li><li>Publisher2 verifies the forwarded identity and grants access to the user as Identity@Publisher2.</li></ol> <figure class="wp-block-image"><img decoding="async" src="https://miro.medium.com/max/2684/0*-dhXgk1-ypuBFuLT" alt=""/></figure> <h1 class="wp-block-heading" id="1436">Setup an Authentication mechanism for the SDK</h1> <p id="a07f">Zeta’s entire SDK range uses the above authentication mechanism through the Apollo App Center. Different teams when working on their respective mobile SDKs use the Apollo App Center to publish and distribute their SDKs. The consumers of these SDKs, for example. Fintechs, Neobanks, and VBOs can sign-up for the SDKs through the Apollo App Center. We are continuously working towards extending support for different banks and financial institutions to publish their own SDKs on the Apollo App Center.</p> <ul class="wp-block-list"><li>Memory optimization</li><li>Multi-modality</li></ul> <h1 class="wp-block-heading" id="5b20">Resource crunch</h1> <p id="8348">As mentioned above, we might have a situation where we want to integrate multiple SDKs hosted on the Apollo App Center. Since we already have the authentication module built, the first thought that comes to our mind is to create multiple instances of authentication objects, one per SDK. This is resource taxing and non-scalable. Zeta is continuously building newer SDKs to cater to client requirements. With each new SDK, we instantiate new objects that could be highly unoptimized for resource-constrained mobile devices.</p> <figure class="wp-block-image"><img decoding="async" src="https://miro.medium.com/max/1920/0*WT6Sx1r3dEOwXf-O" alt=""/></figure> <h1 class="wp-block-heading" id="2b8c">Enter REST mobile modules!</h1> <p id="0bf4">We want all modules we build to start acting as small microservices following the REST principle of&nbsp;<strong>statelessness</strong>. The idea is to pass the information needed by the module as parameters, in the context of an API call, instead of passing them as initialization parameters. This helps us in avoiding the creation of multiple instances for the same class.</p> <p id="ac24">In the above diagram, you can see that there is a single instance of the authentication module object in memory. The consumer of the authentication module passes the authentication context as part of the API call.</p> <figure class="wp-block-image"><img decoding="async" src="https://miro.medium.com/max/2548/1*p6sJDDY2i7VQQki73vCvOw.png" alt=""/></figure> <h1 class="wp-block-heading" id="b006">Multi-modality of authentication modules</h1> <p id="5091">Different SDKs need different authentication mechanisms to make authenticated API calls. Let’s say that the Cards SDK is making a simple REST API call to generate authentication tokens. On the other hand, the Payment SDK uses an authenticated socket connection to make the API call. With this requirement in mind, the authentication module now supports different types of authentication clients.</p> <p id="0cb1">All the SDKs can now tell the authentication module the type of authentication clients they want to use. In the diagram below, you can see that Cards SDK makes a request to initialize its auth context by generating an auth token with an HTTP API call; whereas the Payment SDK needs a separate socket connection, which in itself would be authenticated.</p> <figure class="wp-block-image"><img decoding="async" src="https://miro.medium.com/max/2724/1*OqdulErHS9B1b_d19JXEzg.png" alt=""/></figure> <p id="23eb">Here is a short code snippet showing how simple it is to specify the authentication client inside the SDK.</p> <p id="b8a4">if(useWebSocket) { ApolloUserauthmanagerCompFactory.init(ApollouseWebSocketAuthSessionComponentFactory.getInstance().authSessionClient())<br>} else { ApolloUserauthmanagerCompFactory.init(ApolloRestAuthSessionClientFactory.getInstance().authSessionClient())<br>}</p> <p id="8452">Any requests generated from the Payment SDK can then be directly made through this channel. The WebSocket channel gives additional capabilities to listen to the push messages from the server and helps in building a true reactive behavior on the client-side.</p> <h1 class="wp-block-heading" id="a180">Conclusion</h1> <p id="8bfd">In this article,</p> <ol class="wp-block-list"><li>We have discussed the challenges in authenticating different SDKs in the banking domain.</li><li>We discussed the Apollo App Center as a marketplace for the SDK publishers and consumers.</li><li>We also discussed the solution for authenticating SDKs and the client implementation for the same for the mobile platforms.</li></ol> <figure class="wp-block-image"><img decoding="async" src="https://miro.medium.com/max/1920/0*zctTxqFUNJobwXsP" alt=""/></figure> <p id="b593"><strong>Thank You</strong></p> <p id="1156"><strong>Written by:&nbsp;</strong><a href="https://medium.com/u/8c69e0e397a9?source=post_page-----78f06f28687d--------------------------------" target="_blank" rel="noreferrer noopener"><strong>Swapnil Gupta</strong></a><strong>&nbsp;,&nbsp;</strong><a href="https://medium.com/u/d510d552a926?source=post_page-----78f06f28687d--------------------------------" target="_blank" rel="noreferrer noopener"><strong>Apurva Jaiswal</strong></a></p> </div><!-- .entry-content --> <footer class="entry-footer"> <span class="cat-links">Posted in <a href="https://engineering.zeta.tech/category/uncategorized/" rel="category tag">Uncategorized</a></span><span class="tags-links">Tagged <a href="https://engineering.zeta.tech/tag/apollo/" rel="tag">Apollo</a>, <a href="https://engineering.zeta.tech/tag/developers/" rel="tag">Developers</a>, <a href="https://engineering.zeta.tech/tag/sdk/" rel="tag">SDK</a></span><span class="comments-link"><a href="https://engineering.zeta.tech/multi-tenant-sdk-authentication/#respond">Leave a Comment<span class="screen-reader-text"> on Multi-tenant SDK Authentication</span></a></span> </footer><!-- .entry-footer --> </article><!-- #post-247 --> <nav class="navigation posts-navigation" aria-label="Posts"> <h2 class="screen-reader-text">Posts navigation</h2> <div class="nav-links"><div class="nav-previous"><a href="https://engineering.zeta.tech/author/phani_marpaka/page/2/" >Older posts</a></div></div> </nav> </main><!-- #main --> <!-- Footer --> <footer class="footer-section custom-footer"> <div class="z-container"> <div class="footer-table"> <div class="footer-table__row"> <div id="footer-sidebar1" class="footer-table__cell1 width__40"> <aside> <h3 class="widget-title">RECENT POSTS</h3> <ul> <li><a href="https://engineering.zeta.tech/prestoprestodb-what-it-offers-and-where-and-how-it-can-be-used/">Presto(PrestoDB)- What it Offers and Where and How it can be used</a> <span class="post-date">January 24, 2023</span></li> <li><a href="https://engineering.zeta.tech/effective-troubleshooting/">Effective Troubleshooting</a> <span class="post-date">September 2, 2022</span></li> <li><a href="https://engineering.zeta.tech/zeta-tech-stack/">Zeta Tech Stack</a> <span class="post-date">September 15, 2021</span></li> <li><a href="https://engineering.zeta.tech/buy-now-pay-later-how-does-it-work/">Buy Now Pay Later: How Does it Work?</a> <span class="post-date">July 26, 2021</span></li> <li><a href="https://engineering.zeta.tech/buy-now-pay-later-the-real-deal-or-just-hype/">Buy Now Pay Later: The Real Deal or Just Hype</a> <span class="post-date">July 26, 2021</span></li> </ul> </aside> </div> <div id="footer-sidebar2" class="footer-table__cell2"> <aside id="nav_menu-4" class="widget widget_nav_menu"><h3 class="widget-title">INTERESTING READS</h3><div class="menu-dummy-container"><ul id="menu-dummy" class="menu"><li id="menu-item-318" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-318"><a href="https://engineering.zeta.tech/bengaluru/">Bengaluru</a></li> <li id="menu-item-319" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-319"><a href="https://engineering.zeta.tech/hot-desking/">Hot Desking</a></li> <li id="menu-item-320" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-320"><a href="https://engineering.zeta.tech/groups/">Groups</a></li> </ul></div></aside></div> <div id="footer-sidebar3" class="footer-table__cell3"> <aside id="nav_menu-3" class="widget widget_nav_menu"><h3 class="widget-title">FOR ZETA EMPLOYEES</h3><div class="menu-general-container"><ul id="menu-general" class="menu"><li id="menu-item-313" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-313"><a href="#">Hotdesk</a> <ul class="sub-menu"> <li id="menu-item-314" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-314"><a href="https://engineering.zeta.tech/bengaluru/">Bengaluru</a></li> <li id="menu-item-315" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-315"><a href="https://engineering.zeta.tech/mumbai/">Mumbai</a></li> </ul> </li> </ul></div></aside></div> </div> </div> </div> </footer> <section class="footer-bar"> <div class="z-container flex"> <p class="footer-bar__left"> © 2022 <a href="#">Engineering @Zeta</a> <span> — © 2021 Better World Technology Pvt. Ltd.</span> </p> <p class="footer-bar__right"> <a class="goto-top" href="javascript:void(0)">Go Up ↑</a> </p> </div> </section> <!-- Footer End --> <script data-cfasync="false" src="/cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js"></script><script src="https://engineering.zeta.tech/wp-content/themes/zetaengnblog/js/navigation.js?ver=1.0.0" id="zetaengnblog-navigation-js"></script> <script src="https://engineering.zeta.tech/wp-content/themes/zetaengnblog/js/main.9247e6bf2f7c0404c8a7.js?ver=1.0.0" id="zetaengnblog-blog-js"></script> <script src="https://engineering.zeta.tech/wp-content/themes/zetaengnblog/js/styles.e772312fa7689f75b2c1.js?ver=1.0.0" id="zetaengnblog-blog1-js"></script> </body> </html>

Pages: 1 2 3 4 5 6 7 8 9 10