CINXE.COM

<!doctype html><html lang="en"><head><title data-rh="true">Tuning Cipher to 1M TPS for ease of scaling of online authentications (Part 2) | by &#x27;Celebration of Engineering&#x27; | Medium</title><meta data-rh="true" charset="utf-8"/><meta data-rh="true" name="viewport" content="width=device-width,minimum-scale=1,initial-scale=1,maximum-scale=1"/><meta data-rh="true" name="theme-color" content="#000000"/><meta data-rh="true" name="twitter:app:name:iphone" content="Medium"/><meta data-rh="true" name="twitter:app:id:iphone" content="828256236"/><meta data-rh="true" property="al:ios:app_name" content="Medium"/><meta data-rh="true" property="al:ios:app_store_id" content="828256236"/><meta data-rh="true" property="al:android:package" content="com.medium.reader"/><meta data-rh="true" property="fb:app_id" content="542599432471018"/><meta data-rh="true" property="og:site_name" content="Medium"/><meta data-rh="true" property="og:type" content="article"/><meta data-rh="true" property="article:published_time" content="2021-04-10T15:07:21.815Z"/><meta data-rh="true" name="title" content="Tuning Cipher to 1M TPS for ease of scaling of online authentications (Part 2) | by &#x27;Celebration of Engineering&#x27; | Medium"/><meta data-rh="true" property="og:title" content="Tuning Cipher to 1M TPS for ease of scaling of online authentications (Part 2)"/><meta data-rh="true" property="al:android:url" content="medium://p/30699cc273dc"/><meta data-rh="true" property="al:ios:url" content="medium://p/30699cc273dc"/><meta data-rh="true" property="al:android:app_name" content="Medium"/><meta data-rh="true" name="description" content="We went through the overall idea behind the demo in Part 1. Part 2 will inform us about how we achieved the feat, highlighting the technologies that we used along the way. Heads up, it is going to be…"/><meta data-rh="true" property="og:description" content="We went through the overall idea behind the demo in Part 1. Part 2 will inform us about how we achieved the feat, highlighting the…"/><meta data-rh="true" property="og:url" content="https://zetablogs.medium.com/tuning-cipher-to-1m-tps-for-ease-of-scaling-of-online-authentications-part-2-30699cc273dc"/><meta data-rh="true" property="al:web:url" content="https://zetablogs.medium.com/tuning-cipher-to-1m-tps-for-ease-of-scaling-of-online-authentications-part-2-30699cc273dc"/><meta data-rh="true" property="og:image" content="https://miro.medium.com/v2/da:true/resize:fit:1200/0*uCzHLS80DwWiVZMq"/><meta data-rh="true" property="article:author" content="https://zetablogs.medium.com"/><meta data-rh="true" name="author" content="&#x27;Celebration of Engineering&#x27;"/><meta data-rh="true" name="robots" content="index,noarchive,follow,max-image-preview:large"/><meta data-rh="true" name="referrer" content="unsafe-url"/><meta data-rh="true" property="twitter:title" content="Tuning Cipher to 1M TPS for ease of scaling of online authentications (Part 2)"/><meta data-rh="true" name="twitter:site" content="@Medium"/><meta data-rh="true" name="twitter:app:url:iphone" content="medium://p/30699cc273dc"/><meta data-rh="true" property="twitter:description" content="We went through the overall idea behind the demo in Part 1. Part 2 will inform us about how we achieved the feat, highlighting the…"/><meta data-rh="true" name="twitter:image:src" content="https://miro.medium.com/v2/da:true/resize:fit:1200/0*uCzHLS80DwWiVZMq"/><meta data-rh="true" name="twitter:card" content="summary_large_image"/><meta data-rh="true" name="twitter:label1" content="Reading time"/><meta data-rh="true" name="twitter:data1" content="5 min read"/><link data-rh="true" rel="icon" href="https://miro.medium.com/v2/5d8de952517e8160e40ef9841c781cdc14a5db313057fa3c3de41c6f5b494b19"/><link data-rh="true" rel="search" type="application/opensearchdescription+xml" title="Medium" href="/osd.xml"/><link data-rh="true" rel="apple-touch-icon" sizes="152x152" href="https://miro.medium.com/v2/resize:fill:304:304/10fd5c419ac61637245384e7099e131627900034828f4f386bdaa47a74eae156"/><link data-rh="true" rel="apple-touch-icon" sizes="120x120" href="https://miro.medium.com/v2/resize:fill:240:240/10fd5c419ac61637245384e7099e131627900034828f4f386bdaa47a74eae156"/><link data-rh="true" rel="apple-touch-icon" sizes="76x76" href="https://miro.medium.com/v2/resize:fill:152:152/10fd5c419ac61637245384e7099e131627900034828f4f386bdaa47a74eae156"/><link data-rh="true" rel="apple-touch-icon" sizes="60x60" href="https://miro.medium.com/v2/resize:fill:120:120/10fd5c419ac61637245384e7099e131627900034828f4f386bdaa47a74eae156"/><link data-rh="true" rel="mask-icon" href="https://miro.medium.com/v2/resize:fill:1000:1000/7*GAOKVe--MXbEJmV9230oOQ.png" color="#171717"/><link data-rh="true" rel="preconnect" href="https://glyph.medium.com" crossOrigin=""/><link data-rh="true" id="glyph_preload_link" rel="preload" as="style" type="text/css" href="https://glyph.medium.com/css/unbound.css"/><link data-rh="true" id="glyph_link" rel="stylesheet" type="text/css" href="https://glyph.medium.com/css/unbound.css"/><link data-rh="true" rel="author" href="https://zetablogs.medium.com"/><link data-rh="true" rel="canonical" href="https://zetablogs.medium.com/tuning-cipher-to-1m-tps-for-ease-of-scaling-of-online-authentications-part-2-30699cc273dc"/><link data-rh="true" rel="alternate" href="android-app://com.medium.reader/https/medium.com/p/30699cc273dc"/><script data-rh="true" type="application/ld+json">{"@context":"http:\u002F\u002Fschema.org","@type":"NewsArticle","image":["https:\u002F\u002Fmiro.medium.com\u002Fv2\u002Fda:true\u002Fresize:fit:1200\u002F0*uCzHLS80DwWiVZMq"],"url":"https:\u002F\u002Fzetablogs.medium.com\u002Ftuning-cipher-to-1m-tps-for-ease-of-scaling-of-online-authentications-part-2-30699cc273dc","dateCreated":"2021-04-01T03:48:54.810Z","datePublished":"2021-04-01T03:48:54.810Z","dateModified":"2022-06-14T12:11:42.586Z","headline":"Tuning Cipher to 1M TPS for ease of scaling of online authentications (Part 2)","name":"Tuning Cipher to 1M TPS for ease of scaling of online authentications (Part 2)","description":"We went through the overall idea behind the demo in Part 1. Part 2 will inform us about how we achieved the feat, highlighting the technologies that we used along the way. Heads up, it is going to be…","identifier":"30699cc273dc","author":{"@type":"Person","name":"'Celebration of Engineering'","url":"https:\u002F\u002Fzetablogs.medium.com"},"creator":["'Celebration of Engineering'"],"publisher":{"@type":"Organization","name":"Medium","url":"https:\u002F\u002Fzetablogs.medium.com\u002F","logo":{"@type":"ImageObject","width":272,"height":60,"url":"https:\u002F\u002Fmiro.medium.com\u002Fv2\u002Fresize:fit:544\u002F7*V1_7XP4snlmqrc_0Njontw.png"}},"mainEntityOfPage":"https:\u002F\u002Fzetablogs.medium.com\u002Ftuning-cipher-to-1m-tps-for-ease-of-scaling-of-online-authentications-part-2-30699cc273dc"}</script><style type="text/css" data-fela-rehydration="519" data-fela-type="STATIC">html{box-sizing:border-box;-webkit-text-size-adjust:100%}*, *:before, *:after{box-sizing:inherit}body{margin:0;padding:0;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;color:rgba(0,0,0,0.8);position:relative;min-height:100vh}h1, h2, h3, h4, h5, h6, dl, dd, ol, ul, menu, figure, blockquote, p, pre, form{margin:0}menu, ol, ul{padding:0;list-style:none;list-style-image:none}main{display:block}a{color:inherit;text-decoration:none}a, button, input{-webkit-tap-highlight-color:transparent}img, svg{vertical-align:middle}button{background:transparent;overflow:visible}button, input, optgroup, select, textarea{margin:0}:root{--reach-tabs:1;--reach-menu-button:1}#speechify-root{font-family:Sohne, sans-serif}div[data-popper-reference-hidden="true"]{visibility:hidden;pointer-events:none}.grecaptcha-badge{visibility:hidden} /*XCode style (c) Angel Garcia <angelgarcia.mail@gmail.com>*/.hljs {background: #fff;color: black; }/* Gray DOCTYPE selectors like WebKit */ .xml .hljs-meta {color: #c0c0c0; }.hljs-comment, .hljs-quote {color: #007400; }.hljs-tag, .hljs-attribute, .hljs-keyword, .hljs-selector-tag, .hljs-literal, .hljs-name {color: #aa0d91; }.hljs-variable, .hljs-template-variable {color: #3F6E74; }.hljs-code, .hljs-string, .hljs-meta .hljs-string {color: #c41a16; }.hljs-regexp, .hljs-link {color: #0E0EFF; }.hljs-title, .hljs-symbol, .hljs-bullet, .hljs-number {color: #1c00cf; }.hljs-section, .hljs-meta {color: #643820; }.hljs-title.class_, .hljs-class .hljs-title, .hljs-type, .hljs-built_in, .hljs-params {color: #5c2699; }.hljs-attr {color: #836C28; }.hljs-subst {color: #000; }.hljs-formula {background-color: #eee;font-style: italic; }.hljs-addition {background-color: #baeeba; }.hljs-deletion {background-color: #ffc8bd; }.hljs-selector-id, .hljs-selector-class {color: #9b703f; }.hljs-doctag, .hljs-strong {font-weight: bold; }.hljs-emphasis {font-style: italic; } </style><style type="text/css" data-fela-rehydration="519" data-fela-type="KEYFRAME">@-webkit-keyframes k1{0%{opacity:0.8}50%{opacity:0.5}100%{opacity:0.8}}@-moz-keyframes k1{0%{opacity:0.8}50%{opacity:0.5}100%{opacity:0.8}}@keyframes k1{0%{opacity:0.8}50%{opacity:0.5}100%{opacity:0.8}}</style><style type="text/css" data-fela-rehydration="519" data-fela-type="RULE">.a{font-family:medium-content-sans-serif-font, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Open Sans", "Helvetica Neue", sans-serif}.b{font-weight:400}.c{background-color:rgba(255, 255, 255, 1)}.l{display:block}.m{position:sticky}.n{top:0}.o{z-index:500}.p{padding:0 24px}.q{align-items:center}.r{border-bottom:solid 1px #F2F2F2}.y{height:41px}.z{line-height:20px}.ab{display:flex}.ac{height:57px}.ae{flex:1 0 auto}.af{color:inherit}.ag{fill:inherit}.ah{font-size:inherit}.ai{border:inherit}.aj{font-family:inherit}.ak{letter-spacing:inherit}.al{font-weight:inherit}.am{padding:0}.an{margin:0}.ao{cursor:pointer}.ap:disabled{cursor:not-allowed}.aq:disabled{color:#6B6B6B}.ar:disabled{fill:#6B6B6B}.au{width:auto}.av path{fill:#242424}.aw{height:25px}.ax{margin-left:16px}.ay{border:none}.az{border-radius:20px}.ba{width:240px}.bb{background:#F9F9F9}.bc path{fill:#6B6B6B}.be{outline:none}.bf{font-family:sohne, "Helvetica Neue", Helvetica, Arial, sans-serif}.bg{font-size:14px}.bh{width:100%}.bi{padding:10px 20px 10px 0}.bj{background-color:transparent}.bk{color:#242424}.bl::placeholder{color:#6B6B6B}.bm{display:inline-block}.bn{margin-left:12px}.bo{margin-right:12px}.bp{border-radius:4px}.bq{margin-left:24px}.br{height:24px}.bx{background-color:#F9F9F9}.by{border-radius:50%}.bz{height:32px}.ca{width:32px}.cb{justify-content:center}.ch{max-width:680px}.ci{min-width:0}.cj{animation:k1 1.2s ease-in-out infinite}.ck{height:100vh}.cl{margin-bottom:16px}.cm{margin-top:48px}.cn{align-items:flex-start}.co{flex-direction:column}.cp{justify-content:space-between}.cq{margin-bottom:24px}.cw{width:80%}.cx{background-color:#F2F2F2}.dd{height:44px}.de{width:44px}.df{margin:auto 0}.dg{margin-bottom:4px}.dh{height:16px}.di{width:120px}.dj{width:80px}.dp{margin-bottom:8px}.dq{width:96%}.dr{width:98%}.ds{width:81%}.dt{margin-left:8px}.du{color:#6B6B6B}.dv{font-size:13px}.dw{height:100%}.ep{color:#FFFFFF}.eq{fill:#FFFFFF}.er{background:#1A8917}.es{border-color:#1A8917}.ew:disabled{cursor:inherit !important}.ex:disabled{opacity:0.3}.ey:disabled:hover{background:#1A8917}.ez:disabled:hover{border-color:#1A8917}.fa{border-radius:99em}.fb{border-width:1px}.fc{border-style:solid}.fd{box-sizing:border-box}.fe{text-decoration:none}.ff{text-align:center}.fi{margin-right:32px}.fj{position:relative}.fk{fill:#6B6B6B}.fn{background:transparent}.fo svg{margin-left:4px}.fp svg{fill:#6B6B6B}.fr{box-shadow:inset 0 0 0 1px rgba(0, 0, 0, 0.05)}.fs{position:absolute}.fz{margin:0 24px}.gd{background:rgba(255, 255, 255, 1)}.ge{border:1px solid #F2F2F2}.gf{box-shadow:0 1px 4px #F2F2F2}.gg{max-height:100vh}.gh{overflow-y:auto}.gi{left:0}.gj{top:calc(100vh + 100px)}.gk{bottom:calc(100vh + 100px)}.gl{width:10px}.gm{pointer-events:none}.gn{word-break:break-word}.go{word-wrap:break-word}.gp:after{display:block}.gq:after{content:""}.gr:after{clear:both}.gs{line-height:1.23}.gt{letter-spacing:0}.gu{font-style:normal}.gv{font-weight:700}.ia{align-items:baseline}.ib{width:48px}.ic{height:48px}.id{border:2px solid rgba(255, 255, 255, 1)}.ie{z-index:0}.if{box-shadow:none}.ig{border:1px solid rgba(0, 0, 0, 0.05)}.ih{margin-bottom:2px}.ii{flex-wrap:nowrap}.ij{font-size:16px}.ik{line-height:24px}.im{margin:0 8px}.in{display:inline}.io{color:#1A8917}.ip{fill:#1A8917}.is{flex:0 0 auto}.iv{flex-wrap:wrap}.iw{padding-left:8px}.ix{padding-right:8px}.jy> *{flex-shrink:0}.jz{overflow-x:scroll}.ka::-webkit-scrollbar{display:none}.kb{scrollbar-width:none}.kc{-ms-overflow-style:none}.kd{width:74px}.ke{flex-direction:row}.kf{z-index:2}.kg{margin-right:4px}.kj{-webkit-user-select:none}.kk{border:0}.kl{fill:rgba(117, 117, 117, 1)}.ko{outline:0}.kp{user-select:none}.kq> svg{pointer-events:none}.kz{cursor:progress}.la{cursor:not-allowed}.lb{opacity:1}.lc{padding:4px 0}.ld{opacity:0.25}.le{width:16px}.lg{display:inline-flex}.lm{max-width:100%}.ln{padding:8px 2px}.lo svg{color:#6B6B6B}.mg{margin-left:auto}.mh{margin-right:auto}.mi{max-width:1222px}.mo{clear:both}.mq{cursor:zoom-in}.mr{z-index:auto}.mt{height:auto}.mu{line-height:1.58}.mv{letter-spacing:-0.004em}.mw{font-family:source-serif-pro, Georgia, Cambria, "Times New Roman", Times, serif}.nr{margin-bottom:-0.46em}.ns{text-decoration:underline}.nt{font-style:italic}.nu{line-height:1.12}.nv{letter-spacing:-0.022em}.nw{font-weight:600}.or{margin-bottom:-0.28em}.ox{list-style-type:decimal}.oy{margin-left:30px}.oz{padding-left:0px}.pa{box-shadow:inset 3px 0 0 0 #242424}.pb{padding-left:23px}.pc{margin-left:-20px}.pd{list-style-type:disc}.pj{max-width:1600px}.pp{background:none}.pq{margin-bottom:26px}.pr{margin-top:6px}.ps{margin-top:8px}.pt{margin-right:8px}.pu{padding:8px 16px}.pv{border-radius:100px}.pw{transition:background 300ms ease}.py{white-space:nowrap}.pz{border-top:none}.qf{height:52px}.qg{max-height:52px}.qh{box-sizing:content-box}.qi{position:static}.qj{z-index:1}.ql{max-width:155px}.qr{margin-right:20px}.rl{height:64px}.rm{width:64px}.rn{align-self:flex-end}.ro{color:rgba(255, 255, 255, 1)}.rp{fill:rgba(255, 255, 255, 1)}.rq{background:rgba(25, 25, 25, 1)}.rr{border-color:rgba(25, 25, 25, 1)}.ru:disabled{opacity:0.1}.rv:disabled:hover{background:rgba(25, 25, 25, 1)}.rw:disabled:hover{border-color:rgba(25, 25, 25, 1)}.rx{flex:1 1 auto}.sd{padding-right:4px}.se{font-weight:500}.sr{white-space:pre-wrap}.ss{margin-top:16px}.st{height:0px}.su{border-bottom:solid 1px #E5E5E5}.sv{margin-top:56px}.sw{margin-top:72px}.sx{padding:24px 0}.sy{margin-bottom:0px}.sz{margin-right:16px}.as:hover:not(:disabled){color:rgba(25, 25, 25, 1)}.at:hover:not(:disabled){fill:rgba(25, 25, 25, 1)}.et:hover{background:#156D12}.eu:hover{border-color:#156D12}.ev:hover{cursor:pointer}.fl:hover{color:#242424}.fm:hover{fill:#242424}.fq:hover svg{fill:#242424}.ft:hover{background-color:rgba(0, 0, 0, 0.1)}.il:hover{text-decoration:underline}.iq:hover:not(:disabled){color:#156D12}.ir:hover:not(:disabled){fill:#156D12}.kn:hover{fill:rgba(8, 8, 8, 1)}.lf:hover{color:#000000}.lp:hover svg{color:#000000}.lq:hover p{color:#000000}.px:hover{background-color:#F2F2F2}.rk:hover{background-color:none}.rs:hover{background:#000000}.rt:hover{border-color:#242424}.bd:focus-within path{fill:#242424}.km:focus{fill:rgba(8, 8, 8, 1)}.lr:focus svg{color:#000000}.ms:focus{transform:scale(1.01)}.kr:active{border-style:none}</style><style type="text/css" data-fela-rehydration="519" data-fela-type="RULE" media="all and (min-width: 1080px)">.d{display:none}.bw{width:64px}.cg{margin:0 64px}.cv{height:48px}.dc{margin-bottom:52px}.do{margin-bottom:48px}.ef{font-size:14px}.eg{line-height:20px}.em{font-size:13px}.eo{padding:5px 12px}.fh{display:flex}.fy{margin-bottom:68px}.gc{max-width:680px}.hq{font-size:42px}.hr{margin-top:1.19em}.hs{margin-bottom:32px}.ht{line-height:52px}.hu{letter-spacing:-0.011em}.hz{align-items:center}.jk{border-top:solid 1px #F2F2F2}.jl{border-bottom:solid 1px #F2F2F2}.jm{margin:32px 0 0}.jn{padding:3px 8px}.jw> *{margin-right:24px}.jx> :last-child{margin-right:0}.ky{margin-top:0px}.ll{margin:0}.mn{margin-top:40px}.nn{font-size:20px}.no{margin-top:2.14em}.np{line-height:32px}.nq{letter-spacing:-0.003em}.on{font-size:24px}.oo{margin-top:1.95em}.op{line-height:30px}.oq{letter-spacing:-0.016em}.ow{margin-top:0.94em}.pi{margin-top:1.14em}.po{margin-top:56px}.qe{margin-bottom:88px}.qq{display:inline-block}.qw{padding-top:72px}.qx{flex-direction:row}.ra{margin-bottom:0}.rb{margin-right:20px}.ry{max-width:500px}.sp{line-height:24px}.sq{letter-spacing:0}</style><style type="text/css" data-fela-rehydration="519" data-fela-type="RULE" media="all and (max-width: 1079.98px)">.e{display:none}.kx{margin-top:0px}.qp{display:inline-block}</style><style type="text/css" data-fela-rehydration="519" data-fela-type="RULE" media="all and (max-width: 903.98px)">.f{display:none}.kw{margin-top:0px}.qo{display:inline-block}</style><style type="text/css" data-fela-rehydration="519" data-fela-type="RULE" media="all and (max-width: 727.98px)">.g{display:none}.ku{margin-top:0px}.kv{margin-right:0px}.qn{display:inline-block}</style><style type="text/css" data-fela-rehydration="519" data-fela-type="RULE" media="all and (max-width: 551.98px)">.h{display:none}.s{display:flex}.t{justify-content:space-between}.bs{width:24px}.cc{margin:0 24px}.cr{height:40px}.cy{margin-bottom:44px}.dk{margin-bottom:32px}.dx{font-size:13px}.dy{line-height:20px}.eh{padding:0px 8px 1px}.fu{margin-bottom:4px}.gw{font-size:32px}.gx{margin-top:1.01em}.gy{margin-bottom:24px}.gz{line-height:38px}.ha{letter-spacing:-0.014em}.hv{align-items:flex-start}.it{flex-direction:column}.iy{margin:24px -24px 0}.iz{padding:0}.jo> *{margin-right:8px}.jp> :last-child{margin-right:24px}.kh{margin-left:0px}.ks{margin-top:0px}.kt{margin-right:0px}.lh{margin:0}.ls{border:1px solid #F2F2F2}.lt{border-radius:99em}.lu{padding:0px 16px 0px 12px}.lv{height:38px}.lw{align-items:center}.ly svg{margin-right:8px}.mj{margin-top:32px}.mx{font-size:18px}.my{margin-top:1.56em}.mz{line-height:28px}.na{letter-spacing:-0.003em}.nx{font-size:20px}.ny{margin-top:1.2em}.nz{line-height:24px}.oa{letter-spacing:0}.os{margin-top:0.67em}.pe{margin-top:1.34em}.pk{margin-top:40px}.qa{margin-bottom:80px}.qm{display:inline-block}.qs{padding-top:48px}.ri{margin-bottom:20px}.rj{margin-right:0}.sc{max-width:100%}.sf{font-size:24px}.sg{line-height:30px}.sh{letter-spacing:-0.016em}.lx:hover{border-color:#E5E5E5}</style><style type="text/css" data-fela-rehydration="519" data-fela-type="RULE" media="all and (min-width: 904px) and (max-width: 1079.98px)">.i{display:none}.bv{width:64px}.cf{margin:0 64px}.cu{height:48px}.db{margin-bottom:52px}.dn{margin-bottom:48px}.ed{font-size:14px}.ee{line-height:20px}.ek{font-size:13px}.el{padding:5px 12px}.fg{display:flex}.fx{margin-bottom:68px}.gb{max-width:680px}.hl{font-size:42px}.hm{margin-top:1.19em}.hn{margin-bottom:32px}.ho{line-height:52px}.hp{letter-spacing:-0.011em}.hy{align-items:center}.jg{border-top:solid 1px #F2F2F2}.jh{border-bottom:solid 1px #F2F2F2}.ji{margin:32px 0 0}.jj{padding:3px 8px}.ju> *{margin-right:24px}.jv> :last-child{margin-right:0}.lk{margin:0}.mm{margin-top:40px}.nj{font-size:20px}.nk{margin-top:2.14em}.nl{line-height:32px}.nm{letter-spacing:-0.003em}.oj{font-size:24px}.ok{margin-top:1.95em}.ol{line-height:30px}.om{letter-spacing:-0.016em}.ov{margin-top:0.94em}.ph{margin-top:1.14em}.pn{margin-top:56px}.qd{margin-bottom:88px}.qv{padding-top:72px}.qy{flex-direction:row}.rc{margin-bottom:0}.rd{margin-right:20px}.rz{max-width:500px}.sn{line-height:24px}.so{letter-spacing:0}</style><style type="text/css" data-fela-rehydration="519" data-fela-type="RULE" media="all and (min-width: 728px) and (max-width: 903.98px)">.j{display:none}.w{display:flex}.x{justify-content:space-between}.bu{width:64px}.ce{margin:0 48px}.ct{height:48px}.da{margin-bottom:52px}.dm{margin-bottom:48px}.eb{font-size:13px}.ec{line-height:20px}.ej{padding:0px 8px 1px}.fw{margin-bottom:68px}.ga{max-width:680px}.hg{font-size:42px}.hh{margin-top:1.19em}.hi{margin-bottom:32px}.hj{line-height:52px}.hk{letter-spacing:-0.011em}.hx{align-items:center}.jc{border-top:solid 1px #F2F2F2}.jd{border-bottom:solid 1px #F2F2F2}.je{margin:32px 0 0}.jf{padding:3px 8px}.js> *{margin-right:24px}.jt> :last-child{margin-right:0}.lj{margin:0}.ml{margin-top:40px}.nf{font-size:20px}.ng{margin-top:2.14em}.nh{line-height:32px}.ni{letter-spacing:-0.003em}.of{font-size:24px}.og{margin-top:1.95em}.oh{line-height:30px}.oi{letter-spacing:-0.016em}.ou{margin-top:0.94em}.pg{margin-top:1.14em}.pm{margin-top:56px}.qc{margin-bottom:88px}.qu{padding-top:72px}.qz{flex-direction:row}.re{margin-bottom:0}.rf{margin-right:20px}.sa{max-width:500px}.sl{line-height:24px}.sm{letter-spacing:0}</style><style type="text/css" data-fela-rehydration="519" data-fela-type="RULE" media="all and (min-width: 552px) and (max-width: 727.98px)">.k{display:none}.u{display:flex}.v{justify-content:space-between}.bt{width:24px}.cd{margin:0 24px}.cs{height:40px}.cz{margin-bottom:44px}.dl{margin-bottom:32px}.dz{font-size:13px}.ea{line-height:20px}.ei{padding:0px 8px 1px}.fv{margin-bottom:4px}.hb{font-size:32px}.hc{margin-top:1.01em}.hd{margin-bottom:24px}.he{line-height:38px}.hf{letter-spacing:-0.014em}.hw{align-items:flex-start}.iu{flex-direction:column}.ja{margin:24px 0 0}.jb{padding:0}.jq> *{margin-right:8px}.jr> :last-child{margin-right:8px}.ki{margin-left:0px}.li{margin:0}.lz{border:1px solid #F2F2F2}.ma{border-radius:99em}.mb{padding:0px 16px 0px 12px}.mc{height:38px}.md{align-items:center}.mf svg{margin-right:8px}.mk{margin-top:32px}.nb{font-size:18px}.nc{margin-top:1.56em}.nd{line-height:28px}.ne{letter-spacing:-0.003em}.ob{font-size:20px}.oc{margin-top:1.2em}.od{line-height:24px}.oe{letter-spacing:0}.ot{margin-top:0.67em}.pf{margin-top:1.34em}.pl{margin-top:40px}.qb{margin-bottom:80px}.qt{padding-top:48px}.rg{margin-bottom:20px}.rh{margin-right:0}.sb{max-width:100%}.si{font-size:24px}.sj{line-height:30px}.sk{letter-spacing:-0.016em}.me:hover{border-color:#E5E5E5}</style><style type="text/css" data-fela-rehydration="519" data-fela-type="RULE" media="print">.qk{display:none}</style><style type="text/css" data-fela-rehydration="519" data-fela-type="RULE" media="(prefers-reduced-motion: no-preference)">.mp{transition:transform 300ms cubic-bezier(0.2, 0, 0.2, 1)}</style></head><body><div id="root"><div class="a b c"><div class="d e f g h i j k"></div><script>document.domain = document.domain;</script><div class="l c"><div class="l m n o c"><div class="p q r s t u v w x i d y z"><a class="du ag dv bf ak b am an ao ap aq ar as at s u w i d q dw z" href="https://rsci.app.link/?%24canonical_url=https%3A%2F%2Fmedium.com%2Fp%2F30699cc273dc&amp;%7Efeature=LoOpenInAppButton&amp;%7Echannel=ShowPostUnderUser&amp;source=---top_nav_layout_nav----------------------------------" rel="noopener follow">Open in app<svg xmlns="http://www.w3.org/2000/svg" width="10" height="10" fill="none" viewBox="0 0 10 10" class="dt"><path fill="currentColor" d="M.985 8.485a.375.375 0 1 0 .53.53zM8.75 1.25h.375A.375.375 0 0 0 8.75.875zM8.375 6.5a.375.375 0 1 0 .75 0zM3.5.875a.375.375 0 1 0 0 .75zm-1.985 8.14 7.5-7.5-.53-.53-7.5 7.5zm6.86-7.765V6.5h.75V1.25zM3.5 1.625h5.25v-.75H3.5z"></path></svg></a><div class="ab q"><p class="bf b dx dy dz ea eb ec ed ee ef eg du"><span><button class="bf b dx dy eh dz ea ei eb ec ej ek ee el em eg eo ep eq er es et eu ev ew ex ey ez fa fb fc fd bm fe ff" data-testid="headerSignUpButton">Sign up</button></span></p><div class="ax l"><p class="bf b dx dy dz ea eb ec ed ee ef eg du"><span><a class="af ag ah ai aj ak al am an ao ap aq ar as at" data-testid="headerSignInButton" href="https://medium.com/m/signin?operation=login&amp;redirect=https%3A%2F%2Fzetablogs.medium.com%2Ftuning-cipher-to-1m-tps-for-ease-of-scaling-of-online-authentications-part-2-30699cc273dc&amp;source=post_page---top_nav_layout_nav-----------------------global_nav-----------" rel="noopener follow">Sign in</a></span></p></div></div></div><div class="p q r ab ac"><div class="ab q ae"><a class="af ag ah ai aj ak al am an ao ap aq ar as at ab" aria-label="Homepage" data-testid="headerMediumLogo" href="https://medium.com/?source=---top_nav_layout_nav----------------------------------" rel="noopener follow"><svg xmlns="http://www.w3.org/2000/svg" width="719" height="160" fill="none" viewBox="0 0 719 160" class="au av aw"><path fill="#242424" d="m174.104 9.734.215-.047V8.02H130.39L89.6 103.89 48.81 8.021H1.472v1.666l.212.047c8.018 1.81 12.09 4.509 12.09 14.242V137.93c0 9.734-4.087 12.433-12.106 14.243l-.212.047v1.671h32.118v-1.665l-.213-.048c-8.018-1.809-12.089-4.509-12.089-14.242V30.586l52.399 123.305h2.972l53.925-126.743V140.75c-.687 7.688-4.721 10.062-11.982 11.701l-.215.05v1.652h55.948v-1.652l-.215-.05c-7.269-1.639-11.4-4.013-12.087-11.701l-.037-116.774h.037c0-9.733 4.071-12.432 12.087-14.242m25.555 75.488c.915-20.474 8.268-35.252 20.606-35.507 3.806.063 6.998 1.312 9.479 3.714 5.272 5.118 7.751 15.812 7.368 31.793zm-.553 5.77h65.573v-.275c-.186-15.656-4.721-27.834-13.466-36.196-7.559-7.227-18.751-11.203-30.507-11.203h-.263c-6.101 0-13.584 1.48-18.909 4.16-6.061 2.807-11.407 7.003-15.855 12.511-7.161 8.874-11.499 20.866-12.554 34.343q-.05.606-.092 1.212a50 50 0 0 0-.065 1.151 85.807 85.807 0 0 0-.094 5.689c.71 30.524 17.198 54.917 46.483 54.917 25.705 0 40.675-18.791 44.407-44.013l-1.886-.664c-6.557 13.556-18.334 21.771-31.738 20.769-18.297-1.369-32.314-19.922-31.042-42.395m139.722 41.359c-2.151 5.101-6.639 7.908-12.653 7.908s-11.513-4.129-15.418-11.63c-4.197-8.053-6.405-19.436-6.405-32.92 0-28.067 8.729-46.22 22.24-46.22 5.657 0 10.111 2.807 12.236 7.704zm43.499 20.008c-8.019-1.897-12.089-4.722-12.089-14.951V1.309l-48.716 14.353v1.757l.299-.024c6.72-.543 11.278.386 13.925 2.83 2.072 1.915 3.082 4.853 3.082 8.987v18.66c-4.803-3.067-10.516-4.56-17.448-4.56-14.059 0-26.909 5.92-36.176 16.672-9.66 11.205-14.767 26.518-14.767 44.278-.003 31.72 15.612 53.039 38.851 53.039 13.595 0 24.533-7.449 29.54-20.013v16.865h43.711v-1.746zM424.1 19.819c0-9.904-7.468-17.374-17.375-17.374-9.859 0-17.573 7.632-17.573 17.374s7.721 17.374 17.573 17.374c9.907 0 17.375-7.47 17.375-17.374m11.499 132.546c-8.019-1.897-12.089-4.722-12.089-14.951h-.035V43.635l-43.714 12.551v1.705l.263.024c9.458.842 12.047 4.1 12.047 15.152v81.086h43.751v-1.746zm112.013 0c-8.018-1.897-12.089-4.722-12.089-14.951V43.635l-41.621 12.137v1.71l.246.026c7.733.813 9.967 4.257 9.967 15.36v59.279c-2.578 5.102-7.415 8.131-13.274 8.336-9.503 0-14.736-6.419-14.736-18.073V43.638l-43.714 12.55v1.703l.262.024c9.459.84 12.05 4.097 12.05 15.152v50.17a56.3 56.3 0 0 0 .91 10.444l.787 3.423c3.701 13.262 13.398 20.197 28.59 20.197 12.868 0 24.147-7.966 29.115-20.43v17.311h43.714v-1.747zm169.818 1.788v-1.749l-.213-.05c-8.7-2.006-12.089-5.789-12.089-13.49v-63.79c0-19.89-11.171-31.761-29.883-31.761-13.64 0-25.141 7.882-29.569 20.16-3.517-13.01-13.639-20.16-28.606-20.16-13.146 0-23.449 6.938-27.869 18.657V43.643L545.487 55.68v1.715l.263.024c9.345.829 12.047 4.181 12.047 14.95v81.784h40.787v-1.746l-.215-.053c-6.941-1.631-9.181-4.606-9.181-12.239V66.998c1.836-4.289 5.537-9.37 12.853-9.37 9.086 0 13.692 6.296 13.692 18.697v77.828h40.797v-1.746l-.215-.053c-6.94-1.631-9.18-4.606-9.18-12.239V75.066a42 42 0 0 0-.578-7.26c1.947-4.661 5.86-10.177 13.475-10.177 9.214 0 13.691 6.114 13.691 18.696v77.828z"></path></svg></a><div class="ax h"><div class="ab ay az ba bb q bc bd"><div class="bm" aria-hidden="false" aria-describedby="searchResults" aria-labelledby="searchResults"></div><div class="bn bo ab"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="none" viewBox="0 0 24 24"><path fill="currentColor" fill-rule="evenodd" d="M4.092 11.06a6.95 6.95 0 1 1 13.9 0 6.95 6.95 0 0 1-13.9 0m6.95-8.05a8.05 8.05 0 1 0 5.13 14.26l3.75 3.75a.56.56 0 1 0 .79-.79l-3.73-3.73A8.05 8.05 0 0 0 11.042 3z" clip-rule="evenodd"></path></svg></div><input role="combobox" aria-controls="searchResults" aria-expanded="false" aria-label="search" data-testid="headerSearchInput" tabindex="0" class="ay be bf bg z bh bi bj bk bl" placeholder="Search" value=""/></div></div></div><div class="h k w fg fh"><div class="fi ab"><span><a class="af ag ah ai aj ak al am an ao ap aq ar as at" data-testid="headerWriteButton" href="https://medium.com/m/signin?operation=register&amp;redirect=https%3A%2F%2Fmedium.com%2Fnew-story&amp;source=---top_nav_layout_nav-----------------------new_post_topnav-----------" rel="noopener follow"><div class="bf b bg z du fj fk ab q fl fm"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="none" viewBox="0 0 24 24" aria-label="Write"><path fill="currentColor" d="M14 4a.5.5 0 0 0 0-1zm7 6a.5.5 0 0 0-1 0zm-7-7H4v1h10zM3 4v16h1V4zm1 17h16v-1H4zm17-1V10h-1v10zm-1 1a1 1 0 0 0 1-1h-1zM3 20a1 1 0 0 0 1 1v-1zM4 3a1 1 0 0 0-1 1h1z"></path><path stroke="currentColor" d="m17.5 4.5-8.458 8.458a.25.25 0 0 0-.06.098l-.824 2.47a.25.25 0 0 0 .316.316l2.47-.823a.25.25 0 0 0 .098-.06L19.5 6.5m-2-2 2.323-2.323a.25.25 0 0 1 .354 0l1.646 1.646a.25.25 0 0 1 0 .354L19.5 6.5m-2-2 2 2"></path></svg><div class="dt l">Write</div></div></a></span></div></div><div class="k j i d"><div class="fi ab"><a class="af ag ah ai aj ak al am an ao ap aq ar as at" data-testid="headerSearchButton" href="https://medium.com/search?source=---top_nav_layout_nav----------------------------------" rel="noopener follow"><div class="bf b bg z du fj fk ab q fl fm"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="none" viewBox="0 0 24 24" aria-label="Search"><path fill="currentColor" fill-rule="evenodd" d="M4.092 11.06a6.95 6.95 0 1 1 13.9 0 6.95 6.95 0 0 1-13.9 0m6.95-8.05a8.05 8.05 0 1 0 5.13 14.26l3.75 3.75a.56.56 0 1 0 .79-.79l-3.73-3.73A8.05 8.05 0 0 0 11.042 3z" clip-rule="evenodd"></path></svg></div></a></div></div><div class="fi h k j"><div class="ab q"><p class="bf b dx dy dz ea eb ec ed ee ef eg du"><span><button class="bf b dx dy eh dz ea ei eb ec ej ek ee el em eg eo ep eq er es et eu ev ew ex ey ez fa fb fc fd bm fe ff" data-testid="headerSignUpButton">Sign up</button></span></p><div class="ax l"><p class="bf b dx dy dz ea eb ec ed ee ef eg du"><span><a class="af ag ah ai aj ak al am an ao ap aq ar as at" data-testid="headerSignInButton" href="https://medium.com/m/signin?operation=login&amp;redirect=https%3A%2F%2Fzetablogs.medium.com%2Ftuning-cipher-to-1m-tps-for-ease-of-scaling-of-online-authentications-part-2-30699cc273dc&amp;source=post_page---top_nav_layout_nav-----------------------global_nav-----------" rel="noopener follow">Sign in</a></span></p></div></div></div><div class="l" aria-hidden="false"><button class="ay fn am ab q ao fo fp fq" aria-label="user options menu" data-testid="headerUserIcon"><div class="l fj"><img alt="" class="l fd by bz ca cx" src="https://miro.medium.com/v2/resize:fill:64:64/1*dmbNkD5D-u45r44go_cf0g.png" width="32" height="32" loading="lazy" role="presentation"/><div class="fr by l bz ca fs n ay ft"></div></div></button></div></div></div><div class="l"><div class="fu fv fw fx fy l"><div class="ab cb"><div class="ci bh fz ga gb gc"></div></div><article><div class="l"><div class="l"><span class="l"></span><section><div><div class="fs gi gj gk gl gm"></div><div class="gn go gp gq gr"><div class="ab cb"><div class="ci bh fz ga gb gc"><div><h1 id="76f8" class="pw-post-title gs gt gu bf gv gw gx gy gz ha hb hc hd he hf hg hh hi hj hk hl hm hn ho hp hq hr hs ht hu bk" data-testid="storyTitle">Tuning Cipher to 1M TPS for ease of scaling of online authentications (Part 2)</h1><div><div class="speechify-ignore ab cp"><div class="speechify-ignore bh l"><div class="hv hw hx hy hz ab"><div><div class="ab ia"><div><div class="bm" aria-hidden="false"><a rel="noopener follow" href="/?source=post_page---byline--30699cc273dc--------------------------------"><div class="l ib ic by id ie"><div class="l fj"><img alt="&#x27;Celebration of Engineering&#x27;" class="l fd by dd de cx" src="https://miro.medium.com/v2/resize:fill:88:88/1*5Ik-j5NwfCPZ9dM2xu6n1Q.png" width="44" height="44" loading="lazy" data-testid="authorPhoto"/><div class="if by l dd de fs n ig ft"></div></div></div></a></div></div></div></div><div class="bn bh l"><div class="ab"><div style="flex:1"><span class="bf b bg z bk"><div class="ih ab q"><div class="ab q ii"><div class="ab q"><div><div class="bm" aria-hidden="false"><p class="bf b ij ik bk"><a class="af ag ah ai aj ak al am an ao ap aq ar il" data-testid="authorName" rel="noopener follow" href="/?source=post_page---byline--30699cc273dc--------------------------------">&#x27;Celebration of Engineering&#x27;</a></p></div></div></div><span class="im in" aria-hidden="true"><span class="bf b bg z du">·</span></span><p class="bf b ij ik du"><span><a class="io ip ah ai aj ak al am an ao ap aq ar ex iq ir" href="https://medium.com/m/signin?actionUrl=https%3A%2F%2Fmedium.com%2F_%2Fsubscribe%2Fuser%2F620b01ce72fe&amp;operation=register&amp;redirect=https%3A%2F%2Fzetablogs.medium.com%2Ftuning-cipher-to-1m-tps-for-ease-of-scaling-of-online-authentications-part-2-30699cc273dc&amp;user=%27Celebration+of+Engineering%27&amp;userId=620b01ce72fe&amp;source=post_page-620b01ce72fe--byline--30699cc273dc---------------------post_header-----------" rel="noopener follow">Follow</a></span></p></div></div></span></div></div><div class="l is"><span class="bf b bg z du"><div class="ab cn it iu iv"><span class="bf b bg z du"><div class="ab ae"><span data-testid="storyReadTime">5 min read</span><div class="iw ix l" aria-hidden="true"><span class="l" aria-hidden="true"><span class="bf b bg z du">·</span></span></div><span data-testid="storyPublishDate">Apr 1, 2021</span></div></span></div></span></div></div></div><div class="ab cp iy iz ja jb jc jd je jf jg jh ji jj jk jl jm jn"><div class="h k w fg fh q"><div class="kd l"><div class="ab q ke kf"><div class="pw-multi-vote-icon fj kg kh ki kj"><span><a class="af ag ah ai aj ak al am an ao ap aq ar as at" data-testid="headerClapButton" href="https://medium.com/m/signin?actionUrl=https%3A%2F%2Fmedium.com%2F_%2Fvote%2Fp%2F30699cc273dc&amp;operation=register&amp;redirect=https%3A%2F%2Fzetablogs.medium.com%2Ftuning-cipher-to-1m-tps-for-ease-of-scaling-of-online-authentications-part-2-30699cc273dc&amp;user=%27Celebration+of+Engineering%27&amp;userId=620b01ce72fe&amp;source=---header_actions--30699cc273dc---------------------clap_footer-----------" rel="noopener follow"><div><div class="bm" aria-hidden="false"><div class="kk ao kl km kn ko am kp kq kr kj"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" aria-label="clap"><path fill-rule="evenodd" d="M11.37.828 12 3.282l.63-2.454zM13.916 3.953l1.523-2.112-1.184-.39zM8.589 1.84l1.522 2.112-.337-2.501zM18.523 18.92c-.86.86-1.75 1.246-2.62 1.33a6 6 0 0 0 .407-.372c2.388-2.389 2.86-4.951 1.399-7.623l-.912-1.603-.79-1.672c-.26-.56-.194-.98.203-1.288a.7.7 0 0 1 .546-.132c.283.046.546.231.728.5l2.363 4.157c.976 1.624 1.141 4.237-1.324 6.702m-10.999-.438L3.37 14.328a.828.828 0 0 1 .585-1.408.83.83 0 0 1 .585.242l2.158 2.157a.365.365 0 0 0 .516-.516l-2.157-2.158-1.449-1.449a.826.826 0 0 1 1.167-1.17l3.438 3.44a.363.363 0 0 0 .516 0 .364.364 0 0 0 0-.516L5.293 9.513l-.97-.97a.826.826 0 0 1 0-1.166.84.84 0 0 1 1.167 0l.97.968 3.437 3.436a.36.36 0 0 0 .517 0 .366.366 0 0 0 0-.516L6.977 7.83a.82.82 0 0 1-.241-.584.82.82 0 0 1 .824-.826c.219 0 .43.087.584.242l5.787 5.787a.366.366 0 0 0 .587-.415l-1.117-2.363c-.26-.56-.194-.98.204-1.289a.7.7 0 0 1 .546-.132c.283.046.545.232.727.501l2.193 3.86c1.302 2.38.883 4.59-1.277 6.75-1.156 1.156-2.602 1.627-4.19 1.367-1.418-.236-2.866-1.033-4.079-2.246M10.75 5.971l2.12 2.12c-.41.502-.465 1.17-.128 1.89l.22.465-3.523-3.523a.8.8 0 0 1-.097-.368c0-.22.086-.428.241-.584a.847.847 0 0 1 1.167 0m7.355 1.705c-.31-.461-.746-.758-1.23-.837a1.44 1.44 0 0 0-1.11.275c-.312.24-.505.543-.59.881a1.74 1.74 0 0 0-.906-.465 1.47 1.47 0 0 0-.82.106l-2.182-2.182a1.56 1.56 0 0 0-2.2 0 1.54 1.54 0 0 0-.396.701 1.56 1.56 0 0 0-2.21-.01 1.55 1.55 0 0 0-.416.753c-.624-.624-1.649-.624-2.237-.037a1.557 1.557 0 0 0 0 2.2c-.239.1-.501.238-.715.453a1.56 1.56 0 0 0 0 2.2l.516.515a1.556 1.556 0 0 0-.753 2.615L7.01 19c1.32 1.319 2.909 2.189 4.475 2.449q.482.08.971.08c.85 0 1.653-.198 2.393-.579.231.033.46.054.686.054 1.266 0 2.457-.52 3.505-1.567 2.763-2.763 2.552-5.734 1.439-7.586z" clip-rule="evenodd"></path></svg></div></div></div></a></span></div><div class="pw-multi-vote-count l ks kt ku kv kw kx ky"><p class="bf b dv z du"><span class="kz">--</span></p></div></div></div><div><div class="bm" aria-hidden="false"><button class="la kk lb lc ab q fk" aria-label="responses" disabled=""><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" class="la fk ld"><path fill-rule="evenodd" d="M18.472 20.272c-1.194 0-2.335-.355-3.39-1.052a8 8 0 0 1-.676-.499 8.7 8.7 0 0 1-2.284.307C7.638 19.028 4 15.668 4 11.54c.001-4.148 3.64-7.508 8.123-7.508 4.475 0 8.118 3.36 8.118 7.49 0 1.977-.816 3.826-2.307 5.231.022.163.058.336.114.528.184.662.515 1.325.985 1.958.144.202.165.461.055.672a.66.66 0 0 1-.588.365h-.029z" clip-rule="evenodd"></path></svg></button></div></div></div><div class="ab q jo jp jq jr js jt ju jv jw jx jy jz ka kb kc"><div class="le k j i d"></div><div class="h k"><div><div class="bm" aria-hidden="false"><span><a class="af ag ah ai aj ak al am an ao ap aq ar as at" data-testid="headerBookmarkButton" href="https://medium.com/m/signin?actionUrl=https%3A%2F%2Fmedium.com%2F_%2Fbookmark%2Fp%2F30699cc273dc&amp;operation=register&amp;redirect=https%3A%2F%2Fzetablogs.medium.com%2Ftuning-cipher-to-1m-tps-for-ease-of-scaling-of-online-authentications-part-2-30699cc273dc&amp;source=---header_actions--30699cc273dc---------------------bookmark_footer-----------" rel="noopener follow"><svg xmlns="http://www.w3.org/2000/svg" width="25" height="25" fill="none" viewBox="0 0 25 25" class="du lf" aria-label="Add to list bookmark button"><path fill="currentColor" d="M18 2.5a.5.5 0 0 1 1 0V5h2.5a.5.5 0 0 1 0 1H19v2.5a.5.5 0 1 1-1 0V6h-2.5a.5.5 0 0 1 0-1H18zM7 7a1 1 0 0 1 1-1h3.5a.5.5 0 0 0 0-1H8a2 2 0 0 0-2 2v14a.5.5 0 0 0 .805.396L12.5 17l5.695 4.396A.5.5 0 0 0 19 21v-8.5a.5.5 0 0 0-1 0v7.485l-5.195-4.012a.5.5 0 0 0-.61 0L7 19.985z"></path></svg></a></span></div></div></div><div class="fd lg cn"><div class="l ae"><div class="ab cb"><div class="lh li lj lk ll lm ci bh"><div class="ab"><div class="bm bh" aria-hidden="false"><div><div class="bm" aria-hidden="false"><button aria-label="Listen" data-testid="audioPlayButton" class="af fk ah ai aj ak al ln an ao ap ex lo lp lq lr ls lt lu lv s lw lx ly lz ma mb mc u md me mf"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="none" viewBox="0 0 24 24"><path fill="currentColor" fill-rule="evenodd" d="M3 12a9 9 0 1 1 18 0 9 9 0 0 1-18 0m9-10C6.477 2 2 6.477 2 12s4.477 10 10 10 10-4.477 10-10S17.523 2 12 2m3.376 10.416-4.599 3.066a.5.5 0 0 1-.777-.416V8.934a.5.5 0 0 1 .777-.416l4.599 3.066a.5.5 0 0 1 0 .832" clip-rule="evenodd"></path></svg><div class="j i d"><p class="bf b bg z du">Listen</p></div></button></div></div></div></div></div></div></div></div><div class="bm" aria-hidden="false" aria-describedby="postFooterSocialMenu" aria-labelledby="postFooterSocialMenu"><div><div class="bm" aria-hidden="false"><button aria-controls="postFooterSocialMenu" aria-expanded="false" aria-label="Share Post" data-testid="headerSocialShareButton" class="af fk ah ai aj ak al ln an ao ap ex lo lp lq lr ls lt lu lv s lw lx ly lz ma mb mc u md me mf"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="none" viewBox="0 0 24 24"><path fill="currentColor" fill-rule="evenodd" d="M15.218 4.931a.4.4 0 0 1-.118.132l.012.006a.45.45 0 0 1-.292.074.5.5 0 0 1-.3-.13l-2.02-2.02v7.07c0 .28-.23.5-.5.5s-.5-.22-.5-.5v-7.04l-2 2a.45.45 0 0 1-.57.04h-.02a.4.4 0 0 1-.16-.3.4.4 0 0 1 .1-.32l2.8-2.8a.5.5 0 0 1 .7 0l2.8 2.79a.42.42 0 0 1 .068.498m-.106.138.008.004v-.01zM16 7.063h1.5a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2h-11c-1.1 0-2-.9-2-2v-10a2 2 0 0 1 2-2H8a.5.5 0 0 1 .35.15.5.5 0 0 1 .15.35.5.5 0 0 1-.15.35.5.5 0 0 1-.35.15H6.4c-.5 0-.9.4-.9.9v10.2a.9.9 0 0 0 .9.9h11.2c.5 0 .9-.4.9-.9v-10.2c0-.5-.4-.9-.9-.9H16a.5.5 0 0 1 0-1" clip-rule="evenodd"></path></svg><div class="j i d"><p class="bf b bg z du">Share</p></div></button></div></div></div></div></div></div></div></div></div><figure class="mj mk ml mm mn mo mg mh paragraph-image"><div role="button" tabindex="0" class="mp mq fj mr bh ms"><div class="mg mh mi"><picture><source srcSet="https://miro.medium.com/v2/resize:fit:640/format:webp/0*uCzHLS80DwWiVZMq 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/0*uCzHLS80DwWiVZMq 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/0*uCzHLS80DwWiVZMq 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/0*uCzHLS80DwWiVZMq 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/0*uCzHLS80DwWiVZMq 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/0*uCzHLS80DwWiVZMq 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/0*uCzHLS80DwWiVZMq 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" type="image/webp"/><source data-testid="og" srcSet="https://miro.medium.com/v2/resize:fit:640/0*uCzHLS80DwWiVZMq 640w, https://miro.medium.com/v2/resize:fit:720/0*uCzHLS80DwWiVZMq 720w, https://miro.medium.com/v2/resize:fit:750/0*uCzHLS80DwWiVZMq 750w, https://miro.medium.com/v2/resize:fit:786/0*uCzHLS80DwWiVZMq 786w, https://miro.medium.com/v2/resize:fit:828/0*uCzHLS80DwWiVZMq 828w, https://miro.medium.com/v2/resize:fit:1100/0*uCzHLS80DwWiVZMq 1100w, https://miro.medium.com/v2/resize:fit:1400/0*uCzHLS80DwWiVZMq 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px"/><img alt="" class="bh lm mt c" width="700" height="459" loading="eager" role="presentation"/></picture></div></div></figure><p id="f2cc" class="pw-post-body-paragraph mu mv gu mw b mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr gn bk">We went through the overall idea behind the demo in <a class="af ns" href="https://engineeringblogs.medium.com/achieving-1-million-tps-with-zetas-cipher-a-new-benchmark-in-the-payments-industry-part-1-9a0dbdb74924" rel="noopener">Part 1.</a> Part 2 will inform us about how we achieved the feat, highlighting the technologies that we used along the way. Heads up, it is going to be engineering focussed.</p><p id="58f5" class="pw-post-body-paragraph mu mv gu mw b mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr gn bk"><em class="nt">Quick recap:</em> Cipher demonstrated the successful handling of a chart-busting 1 Million Transactions Per Second of online authentication requests utilizing a prudent cost of $200/hour of AWS cloud infrastructure. The simulated authentications are 240x higher than the authentication output put together by all of the big players in India during online payment transactions.</p><h1 id="01f6" class="nu nv gu bf nw nx ny nz oa ob oc od oe of og oh oi oj ok ol om on oo op oq or bk">Things we engineereed in a nutshell</h1><ol class=""><li id="1793" class="mu mv gu mw b mx os mz na nb ot nd ne nf ou nh ni nj ov nl nm nn ow np nq nr ox oy oz bk">Optimized systems for a minimum unit for processing a desirable number of online authentications</li></ol><blockquote class="pa pb pc"><p id="ff54" class="mu mv nt mw b mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr gn bk">Built the infrastructure</p><p id="a6b0" class="mu mv nt mw b mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr gn bk">Setup the simulation environment and node distribution mechanisms</p><p id="48ee" class="mu mv nt mw b mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr gn bk">Processed successful authentications for the transactions</p></blockquote><p id="0a89" class="pw-post-body-paragraph mu mv gu mw b mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr gn bk">2. Scaled the minimum unit for the desired load capacity of 1 Million TPS</p><h1 id="8c3e" class="nu nv gu bf nw nx ny nz oa ob oc od oe of og oh oi oj ok ol om on oo op oq or bk">Infrastructure used</h1><ul class=""><li id="43a3" class="mu mv gu mw b mx os mz na nb ot nd ne nf ou nh ni nj ov nl nm nn ow np nq nr pd oy oz bk">Nginx — A web server used as an ingress controller (to accept HTTP requests).</li><li id="eb3e" class="mu mv gu mw b mx pe mz na nb pf nd ne nf pg nh ni nj ph nl nm nn pi np nq nr pd oy oz bk">EKS (Elastic Kubernetes Service) — An AWS-managed service to run Kubernetes.</li><li id="0aea" class="mu mv gu mw b mx pe mz na nb pf nd ne nf pg nh ni nj ph nl nm nn pi np nq nr pd oy oz bk">Prometheus — An open-source monitoring system with a dimensional data model, flexible query language, efficient time-series database, and modern alerting approach.</li><li id="966b" class="mu mv gu mw b mx pe mz na nb pf nd ne nf pg nh ni nj ph nl nm nn pi np nq nr pd oy oz bk">Grafana — An open-source analytics &amp; monitoring solution for databases and microservices.</li><li id="2ca5" class="mu mv gu mw b mx pe mz na nb pf nd ne nf pg nh ni nj ph nl nm nn pi np nq nr pd oy oz bk">Metrics server — A cluster-wide aggregator of resource usage data for auto-scaling horizontal pods.</li><li id="050a" class="mu mv gu mw b mx pe mz na nb pf nd ne nf pg nh ni nj ph nl nm nn pi np nq nr pd oy oz bk">Microservices</li></ul><blockquote class="pa pb pc"><p id="17ae" class="mu mv nt mw b mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr gn bk">Edith</p><p id="26e3" class="mu mv nt mw b mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr gn bk">Cerberus</p><p id="b205" class="mu mv nt mw b mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr gn bk">MasterCard Cipher</p></blockquote><ul class=""><li id="ca40" class="mu mv gu mw b mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr pd oy oz bk">We’ve presented JVM stats, HTTP requests &amp; connection stats from each of these apps via metrics endpoint and made this a scrape target in Prometheus.</li><li id="6af0" class="mu mv gu mw b mx pe mz na nb pf nd ne nf pg nh ni nj ph nl nm nn pi np nq nr pd oy oz bk">We’ve also enabled the JMX port on each of these microservices to monitor them in real-time.</li></ul><h1 id="257e" class="nu nv gu bf nw nx ny nz oa ob oc od oe of og oh oi oj ok ol om on oo op oq or bk">Node distribution</h1><p id="ba5a" class="pw-post-body-paragraph mu mv gu mw b mx os mz na nb ot nd ne nf ou nh ni nj ov nl nm nn ow np nq nr gn bk"><strong class="mw gv">‘Node’</strong> is a container of a single server where multiple microservices can be run and monitored to successfully process a definite amount of authentication requests. We configured each of these nodes at 64GB RAM &amp; 16 GB processor and deployed them on Kubernetes.</p><p id="a5c0" class="pw-post-body-paragraph mu mv gu mw b mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr gn bk">Each node had several <strong class="mw gv">pods</strong> running within it, which hosted the microservices required for authenticating online transactions. Amongst the microservices, there are three notable ones.</p><ol class=""><li id="2b14" class="mu mv gu mw b mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ox oy oz bk"><strong class="mw gv">Mastercard Connector</strong> — To handle the ACS protocol specific nuances and serve as a connector for the Mastercard card scheme</li><li id="52cd" class="mu mv gu mw b mx pe mz na nb pf nd ne nf pg nh ni nj ph nl nm nn pi np nq nr ox oy oz bk"><strong class="mw gv">Edith</strong> — To orchestrate the intricate authentication plans</li><li id="2a27" class="mu mv gu mw b mx pe mz na nb pf nd ne nf pg nh ni nj ph nl nm nn pi np nq nr ox oy oz bk"><strong class="mw gv">Cerberus </strong>— To serve as the Identity Provider and the core authentication engine</li></ol><h1 id="49b0" class="nu nv gu bf nw nx ny nz oa ob oc od oe of og oh oi oj ok ol om on oo op oq or bk">Simulation environment</h1><p id="b335" class="pw-post-body-paragraph mu mv gu mw b mx os mz na nb ot nd ne nf ou nh ni nj ov nl nm nn ow np nq nr gn bk">Although processing 1 Million TPS was the objective, we also had to generate that much amount of transaction load for doing that. So, we used Gatling as the load generator. We let the Gatling Master spread across four zones, spread across in Mumbai and Singapore, for running 50 tasks of individual test scripts to authenticate bank transactions coming in from card networks.</p><p id="0c7c" class="pw-post-body-paragraph mu mv gu mw b mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr gn bk">The Gatling injector simulated the interactions that a card network usually has with its ACS provider while authenticating online transactions. It also reproduced the cardholder interactions required for authentication. The system-level simulations are -</p><ol class=""><li id="e7b6" class="mu mv gu mw b mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ox oy oz bk">VEReqs on behalf of the card network</li><li id="17ee" class="mu mv gu mw b mx pe mz na nb pf nd ne nf pg nh ni nj ph nl nm nn pi np nq nr ox oy oz bk">PAReqs on behalf of the card network</li><li id="9133" class="mu mv gu mw b mx pe mz na nb pf nd ne nf pg nh ni nj ph nl nm nn pi np nq nr ox oy oz bk">Challenge-response submissions as performed by cardholders to prove their authenticity</li></ol><p id="dde3" class="pw-post-body-paragraph mu mv gu mw b mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr gn bk">The simulator routed these requests to auto-scalable clusters of Cipher microservices, which were configured with dummy BINs.</p><h1 id="7539" class="nu nv gu bf nw nx ny nz oa ob oc od oe of og oh oi oj ok ol om on oo op oq or bk">Authentication flow</h1><p id="c087" class="pw-post-body-paragraph mu mv gu mw b mx os mz na nb ot nd ne nf ou nh ni nj ov nl nm nn ow np nq nr gn bk">These are the steps for a successful authentication flow.</p><ol class=""><li id="8ccd" class="mu mv gu mw b mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ox oy oz bk">The simulator verifies (with VEReq) if the card under authentication is enrolled with Cipher. If it is, the simulator initiates the pair authentication request (PAReq) and gets the authentication URL from Cipher.</li><li id="b51c" class="mu mv gu mw b mx pe mz na nb pf nd ne nf pg nh ni nj ph nl nm nn pi np nq nr ox oy oz bk">Gatling simulates the Swipe to Pay (S2P) interaction, generating the necessary credentials required for completing the authentication.</li><li id="3766" class="mu mv gu mw b mx pe mz na nb pf nd ne nf pg nh ni nj ph nl nm nn pi np nq nr ox oy oz bk">Gatling submits the S2P challenge and receives the authentication response.</li><li id="0171" class="mu mv gu mw b mx pe mz na nb pf nd ne nf pg nh ni nj ph nl nm nn pi np nq nr ox oy oz bk">It redirects the control back to the card network module that’s simulated.</li></ol><h1 id="3dbf" class="nu nv gu bf nw nx ny nz oa ob oc od oe of og oh oi oj ok ol om on oo op oq or bk">Minimum unit</h1><p id="91e5" class="pw-post-body-paragraph mu mv gu mw b mx os mz na nb ot nd ne nf ou nh ni nj ov nl nm nn ow np nq nr gn bk">A minimum unit consisted of a specific number of instances of every microservice. The function of this minimum unit was to handle a definite number of transactions.</p><p id="e56e" class="pw-post-body-paragraph mu mv gu mw b mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr gn bk">To come up with this unit, we tested each microservice individually to get a measure of the number of authentication requests it could serve in a given time period with specific resources allocated to it. The minimum unit that we came up with successfully handled 20K authentication requests.</p><p id="649d" class="pw-post-body-paragraph mu mv gu mw b mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr gn bk">1 minimum unit = 3 units of Edith, 2 units of Mastercard Connector, 2 units of Cerberus</p><figure class="pk pl pm pn po mo mg mh paragraph-image"><div role="button" tabindex="0" class="mp mq fj mr bh ms"><div class="mg mh pj"><picture><source srcSet="https://miro.medium.com/v2/resize:fit:640/format:webp/0*RLr8jhh9ATGYY7pD 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/0*RLr8jhh9ATGYY7pD 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/0*RLr8jhh9ATGYY7pD 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/0*RLr8jhh9ATGYY7pD 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/0*RLr8jhh9ATGYY7pD 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/0*RLr8jhh9ATGYY7pD 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/0*RLr8jhh9ATGYY7pD 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" type="image/webp"/><source data-testid="og" srcSet="https://miro.medium.com/v2/resize:fit:640/0*RLr8jhh9ATGYY7pD 640w, https://miro.medium.com/v2/resize:fit:720/0*RLr8jhh9ATGYY7pD 720w, https://miro.medium.com/v2/resize:fit:750/0*RLr8jhh9ATGYY7pD 750w, https://miro.medium.com/v2/resize:fit:786/0*RLr8jhh9ATGYY7pD 786w, https://miro.medium.com/v2/resize:fit:828/0*RLr8jhh9ATGYY7pD 828w, https://miro.medium.com/v2/resize:fit:1100/0*RLr8jhh9ATGYY7pD 1100w, https://miro.medium.com/v2/resize:fit:1400/0*RLr8jhh9ATGYY7pD 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px"/><img alt="" class="bh lm mt c" width="700" height="424" loading="lazy" role="presentation"/></picture></div></div></figure><p id="7b1b" class="pw-post-body-paragraph mu mv gu mw b mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr gn bk">Here is the <em class="nt">resource utilization data</em> when Cipher was comfortably serving 20K authentications.</p><figure class="pk pl pm pn po mo mg mh paragraph-image"><div role="button" tabindex="0" class="mp mq fj mr bh ms"><div class="mg mh pj"><picture><source srcSet="https://miro.medium.com/v2/resize:fit:640/format:webp/0*y6QAPVF6lgSbnk6I 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/0*y6QAPVF6lgSbnk6I 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/0*y6QAPVF6lgSbnk6I 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/0*y6QAPVF6lgSbnk6I 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/0*y6QAPVF6lgSbnk6I 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/0*y6QAPVF6lgSbnk6I 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/0*y6QAPVF6lgSbnk6I 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" type="image/webp"/><source data-testid="og" srcSet="https://miro.medium.com/v2/resize:fit:640/0*y6QAPVF6lgSbnk6I 640w, https://miro.medium.com/v2/resize:fit:720/0*y6QAPVF6lgSbnk6I 720w, https://miro.medium.com/v2/resize:fit:750/0*y6QAPVF6lgSbnk6I 750w, https://miro.medium.com/v2/resize:fit:786/0*y6QAPVF6lgSbnk6I 786w, https://miro.medium.com/v2/resize:fit:828/0*y6QAPVF6lgSbnk6I 828w, https://miro.medium.com/v2/resize:fit:1100/0*y6QAPVF6lgSbnk6I 1100w, https://miro.medium.com/v2/resize:fit:1400/0*y6QAPVF6lgSbnk6I 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px"/><img alt="" class="bh lm mt c" width="700" height="248" loading="lazy" role="presentation"/></picture></div></div></figure><figure class="pk pl pm pn po mo mg mh paragraph-image"><div role="button" tabindex="0" class="mp mq fj mr bh ms"><div class="mg mh pj"><picture><source srcSet="https://miro.medium.com/v2/resize:fit:640/format:webp/0*U_JiprQNkNnu53yW 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/0*U_JiprQNkNnu53yW 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/0*U_JiprQNkNnu53yW 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/0*U_JiprQNkNnu53yW 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/0*U_JiprQNkNnu53yW 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/0*U_JiprQNkNnu53yW 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/0*U_JiprQNkNnu53yW 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" type="image/webp"/><source data-testid="og" srcSet="https://miro.medium.com/v2/resize:fit:640/0*U_JiprQNkNnu53yW 640w, https://miro.medium.com/v2/resize:fit:720/0*U_JiprQNkNnu53yW 720w, https://miro.medium.com/v2/resize:fit:750/0*U_JiprQNkNnu53yW 750w, https://miro.medium.com/v2/resize:fit:786/0*U_JiprQNkNnu53yW 786w, https://miro.medium.com/v2/resize:fit:828/0*U_JiprQNkNnu53yW 828w, https://miro.medium.com/v2/resize:fit:1100/0*U_JiprQNkNnu53yW 1100w, https://miro.medium.com/v2/resize:fit:1400/0*U_JiprQNkNnu53yW 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px"/><img alt="" class="bh lm mt c" width="700" height="233" loading="lazy" role="presentation"/></picture></div></div></figure><h1 id="827c" class="nu nv gu bf nw nx ny nz oa ob oc od oe of og oh oi oj ok ol om on oo op oq or bk">Scaling of the minimum unit</h1><p id="c0c7" class="pw-post-body-paragraph mu mv gu mw b mx os mz na nb ot nd ne nf ou nh ni nj ov nl nm nn ow np nq nr gn bk">Now that we had a stable unit that could serve 20K TPS comfortably, we scaled it to accommodate additional authentication requests. We used this unit as the base reference for serving transaction requests from one issuer.</p><p id="a8b1" class="pw-post-body-paragraph mu mv gu mw b mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr gn bk">With this logic in place, we scaled the minimum unit up to 50 such units, handling 20K TPS each, to serve 50 issuers, leading up to 1 Million TPS. The 4 Gatling servers simulated the load for 500 distinct BINs spread across 50 issuers, each having 1,00,000 cards. The entire setup, consisting of 4 Kubernetes clusters, spanned across 2 AWS regions with two availability zones, respectively.</p><figure class="pk pl pm pn po mo mg mh paragraph-image"><div role="button" tabindex="0" class="mp mq fj mr bh ms"><div class="mg mh pj"><picture><source srcSet="https://miro.medium.com/v2/resize:fit:640/format:webp/0*n3d0Ihz76rAoRtbm 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/0*n3d0Ihz76rAoRtbm 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/0*n3d0Ihz76rAoRtbm 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/0*n3d0Ihz76rAoRtbm 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/0*n3d0Ihz76rAoRtbm 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/0*n3d0Ihz76rAoRtbm 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/0*n3d0Ihz76rAoRtbm 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" type="image/webp"/><source data-testid="og" srcSet="https://miro.medium.com/v2/resize:fit:640/0*n3d0Ihz76rAoRtbm 640w, https://miro.medium.com/v2/resize:fit:720/0*n3d0Ihz76rAoRtbm 720w, https://miro.medium.com/v2/resize:fit:750/0*n3d0Ihz76rAoRtbm 750w, https://miro.medium.com/v2/resize:fit:786/0*n3d0Ihz76rAoRtbm 786w, https://miro.medium.com/v2/resize:fit:828/0*n3d0Ihz76rAoRtbm 828w, https://miro.medium.com/v2/resize:fit:1100/0*n3d0Ihz76rAoRtbm 1100w, https://miro.medium.com/v2/resize:fit:1400/0*n3d0Ihz76rAoRtbm 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px"/><img alt="" class="bh lm mt c" width="700" height="484" loading="lazy" role="presentation"/></picture></div></div></figure><p id="eab3" class="pw-post-body-paragraph mu mv gu mw b mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr gn bk">With AWS, the nodes aren’t scalable within minutes. But since we had to attain that, we warmed up the nodes by scaling up the pods. We used 350 of the pods within 100 nodes to handle the heavy load of 1 Million authentication requests. When the load was less, we scaled down the nodes by cutting down the pods based on the resource utilization factors using Horizontal Pod Autoscaler.</p><p id="eaef" class="pw-post-body-paragraph mu mv gu mw b mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr gn bk"><em class="nt">Footnote:</em></p><ol class=""><li id="b071" class="mu mv gu mw b mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ox oy oz bk">The authentication’s write I/O was done asynchronously considering the purpose of the live demonstration.</li><li id="5a3e" class="mu mv gu mw b mx pe mz na nb pf nd ne nf pg nh ni nj ph nl nm nn pi np nq nr ox oy oz bk">Three requests effectively make one authentication.</li></ol><p id="12b8" class="pw-post-body-paragraph mu mv gu mw b mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr gn bk">If you’d like to check out the test data that we used for simulating authentications, it is available for reference <a class="af ns" href="https://docs.google.com/spreadsheets/d/18vM6sj6wgcfw-X2DIKelwZn-4UHE8c2De1OSeqh0eQo/edit?usp=sharing" rel="noopener ugc nofollow" target="_blank">here</a>.</p><h1 id="517f" class="nu nv gu bf nw nx ny nz oa ob oc od oe of og oh oi oj ok ol om on oo op oq or bk">Conclusion</h1><p id="4ce0" class="pw-post-body-paragraph mu mv gu mw b mx os mz na nb ot nd ne nf ou nh ni nj ov nl nm nn ow np nq nr gn bk">It took our team of 8 people only 9 days to successfully deliver the desired results. We’re glad to have made some key decisions during this process that allowed us to quickly achieve what we wanted — like choosing AWS, Kubernetes, and Gatling Enterprise. We hope to work on several such innovative initiatives that redefine the future of payments in our country and beyond. Thanks for reading and hope you found this helpful!</p><p id="2f44" class="pw-post-body-paragraph mu mv gu mw b mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr gn bk"><strong class="mw gv">Credits</strong></p><p id="61f9" class="pw-post-body-paragraph mu mv gu mw b mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr gn bk"><em class="nt">Developers who made this feat possible</em> — <span class="in"><span class="in" aria-hidden="false"><a class="pp io fe" href="https://medium.com/u/af0ca1e40ca2?source=post_page---user_mention--30699cc273dc--------------------------------" rel="noopener" target="_blank">Mrinal Trivedi</a></span></span>, <span class="in"><span class="in" aria-hidden="false"><a class="pp io fe" href="https://medium.com/u/81a6ab14ba84?source=post_page---user_mention--30699cc273dc--------------------------------" rel="noopener" target="_blank">Amit Raj</a></span></span>, <span class="in"><span class="in" aria-hidden="false"><a class="pp io fe" href="https://medium.com/u/a5de0a2c4fc8?source=post_page---user_mention--30699cc273dc--------------------------------" rel="noopener" target="_blank">Ramki Gaddipati</a></span></span>, <span class="in"><span class="in" aria-hidden="false"><a class="pp io fe" href="https://medium.com/u/70327379897f?source=post_page---user_mention--30699cc273dc--------------------------------" rel="noopener" target="_blank">Dipit Grover</a></span></span>, Amit G, Shubham Jha, <span class="in"><span class="in" aria-hidden="false"><a class="pp io fe" href="https://medium.com/u/a517d95cce54?source=post_page---user_mention--30699cc273dc--------------------------------" rel="noopener" target="_blank">Vivek</a></span></span> G, Mohd. Tanveer, Shaik <span class="in"><span class="in" aria-hidden="false"><a class="pp io fe" href="https://medium.com/u/66663b64e720?source=post_page---user_mention--30699cc273dc--------------------------------" rel="noopener" target="_blank">Idris Ali</a></span></span></p><p id="b0de" class="pw-post-body-paragraph mu mv gu mw b mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr gn bk"><em class="nt">Author</em> — <span class="in"><span class="in" aria-hidden="false"><a class="pp io fe" href="https://medium.com/u/d558dad921b?source=post_page---user_mention--30699cc273dc--------------------------------" rel="noopener" target="_blank">Preethi Shreeya</a></span></span>, <span class="in"><span class="in" aria-hidden="false"><a class="pp io fe" href="https://medium.com/u/fd174b1c67b8?source=post_page---user_mention--30699cc273dc--------------------------------" rel="noopener" target="_blank">Phani Marupaka</a></span></span></p></div></div></div></div></section></div></div></article></div><div class="ab cb"><div class="ci bh fz ga gb gc"><div class="pq pr ab iv"><div class="ps ab"><a class="pt ay am ao" href="https://medium.com/tag/fintech?source=post_page-----30699cc273dc--------------------------------" rel="noopener follow"><div class="pu fj cx pv ge pw px bf b bg z bk py">Fintech</div></a></div><div class="ps ab"><a class="pt ay am ao" href="https://medium.com/tag/technology?source=post_page-----30699cc273dc--------------------------------" rel="noopener follow"><div class="pu fj cx pv ge pw px bf b bg z bk py">Technology</div></a></div><div class="ps ab"><a class="pt ay am ao" href="https://medium.com/tag/payments?source=post_page-----30699cc273dc--------------------------------" rel="noopener follow"><div class="pu fj cx pv ge pw px bf b bg z bk py">Payments</div></a></div><div class="ps ab"><a class="pt ay am ao" href="https://medium.com/tag/security?source=post_page-----30699cc273dc--------------------------------" rel="noopener follow"><div class="pu fj cx pv ge pw px bf b bg z bk py">Security</div></a></div><div class="ps ab"><a class="pt ay am ao" href="https://medium.com/tag/aws?source=post_page-----30699cc273dc--------------------------------" rel="noopener follow"><div class="pu fj cx pv ge pw px bf b bg z bk py">AWS</div></a></div></div></div></div><div class="l"></div><footer class="pz qa qb qc qd qe qf qg qh ab q qi qj c"><div class="l ae"><div class="ab cb"><div class="ci bh fz ga gb gc"><div class="ab cp qk"><div class="ab q ke"><div class="ql l"><span class="l qm qn qo e d"><div class="ab q ke kf"><div class="pw-multi-vote-icon fj kg kh ki kj"><span><a class="af ag ah ai aj ak al am an ao ap aq ar as at" data-testid="footerClapButton" href="https://medium.com/m/signin?actionUrl=https%3A%2F%2Fmedium.com%2F_%2Fvote%2Fp%2F30699cc273dc&amp;operation=register&amp;redirect=https%3A%2F%2Fzetablogs.medium.com%2Ftuning-cipher-to-1m-tps-for-ease-of-scaling-of-online-authentications-part-2-30699cc273dc&amp;user=%27Celebration+of+Engineering%27&amp;userId=620b01ce72fe&amp;source=---footer_actions--30699cc273dc---------------------clap_footer-----------" rel="noopener follow"><div><div class="bm" aria-hidden="false"><div class="kk ao kl km kn ko am kp kq kr kj"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" aria-label="clap"><path fill-rule="evenodd" d="M11.37.828 12 3.282l.63-2.454zM13.916 3.953l1.523-2.112-1.184-.39zM8.589 1.84l1.522 2.112-.337-2.501zM18.523 18.92c-.86.86-1.75 1.246-2.62 1.33a6 6 0 0 0 .407-.372c2.388-2.389 2.86-4.951 1.399-7.623l-.912-1.603-.79-1.672c-.26-.56-.194-.98.203-1.288a.7.7 0 0 1 .546-.132c.283.046.546.231.728.5l2.363 4.157c.976 1.624 1.141 4.237-1.324 6.702m-10.999-.438L3.37 14.328a.828.828 0 0 1 .585-1.408.83.83 0 0 1 .585.242l2.158 2.157a.365.365 0 0 0 .516-.516l-2.157-2.158-1.449-1.449a.826.826 0 0 1 1.167-1.17l3.438 3.44a.363.363 0 0 0 .516 0 .364.364 0 0 0 0-.516L5.293 9.513l-.97-.97a.826.826 0 0 1 0-1.166.84.84 0 0 1 1.167 0l.97.968 3.437 3.436a.36.36 0 0 0 .517 0 .366.366 0 0 0 0-.516L6.977 7.83a.82.82 0 0 1-.241-.584.82.82 0 0 1 .824-.826c.219 0 .43.087.584.242l5.787 5.787a.366.366 0 0 0 .587-.415l-1.117-2.363c-.26-.56-.194-.98.204-1.289a.7.7 0 0 1 .546-.132c.283.046.545.232.727.501l2.193 3.86c1.302 2.38.883 4.59-1.277 6.75-1.156 1.156-2.602 1.627-4.19 1.367-1.418-.236-2.866-1.033-4.079-2.246M10.75 5.971l2.12 2.12c-.41.502-.465 1.17-.128 1.89l.22.465-3.523-3.523a.8.8 0 0 1-.097-.368c0-.22.086-.428.241-.584a.847.847 0 0 1 1.167 0m7.355 1.705c-.31-.461-.746-.758-1.23-.837a1.44 1.44 0 0 0-1.11.275c-.312.24-.505.543-.59.881a1.74 1.74 0 0 0-.906-.465 1.47 1.47 0 0 0-.82.106l-2.182-2.182a1.56 1.56 0 0 0-2.2 0 1.54 1.54 0 0 0-.396.701 1.56 1.56 0 0 0-2.21-.01 1.55 1.55 0 0 0-.416.753c-.624-.624-1.649-.624-2.237-.037a1.557 1.557 0 0 0 0 2.2c-.239.1-.501.238-.715.453a1.56 1.56 0 0 0 0 2.2l.516.515a1.556 1.556 0 0 0-.753 2.615L7.01 19c1.32 1.319 2.909 2.189 4.475 2.449q.482.08.971.08c.85 0 1.653-.198 2.393-.579.231.033.46.054.686.054 1.266 0 2.457-.52 3.505-1.567 2.763-2.763 2.552-5.734 1.439-7.586z" clip-rule="evenodd"></path></svg></div></div></div></a></span></div><div class="pw-multi-vote-count l ks kt ku kv kw kx ky"><p class="bf b dv z du"><span class="kz">--</span></p></div></div></span><span class="l h g f qp qq"><div class="ab q ke kf"><div class="pw-multi-vote-icon fj kg kh ki kj"><span><a class="af ag ah ai aj ak al am an ao ap aq ar as at" data-testid="footerClapButton" href="https://medium.com/m/signin?actionUrl=https%3A%2F%2Fmedium.com%2F_%2Fvote%2Fp%2F30699cc273dc&amp;operation=register&amp;redirect=https%3A%2F%2Fzetablogs.medium.com%2Ftuning-cipher-to-1m-tps-for-ease-of-scaling-of-online-authentications-part-2-30699cc273dc&amp;user=%27Celebration+of+Engineering%27&amp;userId=620b01ce72fe&amp;source=---footer_actions--30699cc273dc---------------------clap_footer-----------" rel="noopener follow"><div><div class="bm" aria-hidden="false"><div class="kk ao kl km kn ko am kp kq kr kj"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" aria-label="clap"><path fill-rule="evenodd" d="M11.37.828 12 3.282l.63-2.454zM13.916 3.953l1.523-2.112-1.184-.39zM8.589 1.84l1.522 2.112-.337-2.501zM18.523 18.92c-.86.86-1.75 1.246-2.62 1.33a6 6 0 0 0 .407-.372c2.388-2.389 2.86-4.951 1.399-7.623l-.912-1.603-.79-1.672c-.26-.56-.194-.98.203-1.288a.7.7 0 0 1 .546-.132c.283.046.546.231.728.5l2.363 4.157c.976 1.624 1.141 4.237-1.324 6.702m-10.999-.438L3.37 14.328a.828.828 0 0 1 .585-1.408.83.83 0 0 1 .585.242l2.158 2.157a.365.365 0 0 0 .516-.516l-2.157-2.158-1.449-1.449a.826.826 0 0 1 1.167-1.17l3.438 3.44a.363.363 0 0 0 .516 0 .364.364 0 0 0 0-.516L5.293 9.513l-.97-.97a.826.826 0 0 1 0-1.166.84.84 0 0 1 1.167 0l.97.968 3.437 3.436a.36.36 0 0 0 .517 0 .366.366 0 0 0 0-.516L6.977 7.83a.82.82 0 0 1-.241-.584.82.82 0 0 1 .824-.826c.219 0 .43.087.584.242l5.787 5.787a.366.366 0 0 0 .587-.415l-1.117-2.363c-.26-.56-.194-.98.204-1.289a.7.7 0 0 1 .546-.132c.283.046.545.232.727.501l2.193 3.86c1.302 2.38.883 4.59-1.277 6.75-1.156 1.156-2.602 1.627-4.19 1.367-1.418-.236-2.866-1.033-4.079-2.246M10.75 5.971l2.12 2.12c-.41.502-.465 1.17-.128 1.89l.22.465-3.523-3.523a.8.8 0 0 1-.097-.368c0-.22.086-.428.241-.584a.847.847 0 0 1 1.167 0m7.355 1.705c-.31-.461-.746-.758-1.23-.837a1.44 1.44 0 0 0-1.11.275c-.312.24-.505.543-.59.881a1.74 1.74 0 0 0-.906-.465 1.47 1.47 0 0 0-.82.106l-2.182-2.182a1.56 1.56 0 0 0-2.2 0 1.54 1.54 0 0 0-.396.701 1.56 1.56 0 0 0-2.21-.01 1.55 1.55 0 0 0-.416.753c-.624-.624-1.649-.624-2.237-.037a1.557 1.557 0 0 0 0 2.2c-.239.1-.501.238-.715.453a1.56 1.56 0 0 0 0 2.2l.516.515a1.556 1.556 0 0 0-.753 2.615L7.01 19c1.32 1.319 2.909 2.189 4.475 2.449q.482.08.971.08c.85 0 1.653-.198 2.393-.579.231.033.46.054.686.054 1.266 0 2.457-.52 3.505-1.567 2.763-2.763 2.552-5.734 1.439-7.586z" clip-rule="evenodd"></path></svg></div></div></div></a></span></div><div class="pw-multi-vote-count l ks kt ku kv kw kx ky"><p class="bf b dv z du"><span class="kz">--</span></p></div></div></span></div><div class="bq ab"><div><div class="bm" aria-hidden="false"><button class="la kk lb lc ab q fk" aria-label="responses" disabled=""><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" class="la fk ld"><path fill-rule="evenodd" d="M18.472 20.272c-1.194 0-2.335-.355-3.39-1.052a8 8 0 0 1-.676-.499 8.7 8.7 0 0 1-2.284.307C7.638 19.028 4 15.668 4 11.54c.001-4.148 3.64-7.508 8.123-7.508 4.475 0 8.118 3.36 8.118 7.49 0 1.977-.816 3.826-2.307 5.231.022.163.058.336.114.528.184.662.515 1.325.985 1.958.144.202.165.461.055.672a.66.66 0 0 1-.588.365h-.029z" clip-rule="evenodd"></path></svg></button></div></div></div></div><div class="ab q"><div class="qr l is"><div><div class="bm" aria-hidden="false"><span><a class="af ag ah ai aj ak al am an ao ap aq ar as at" data-testid="footerBookmarkButton" href="https://medium.com/m/signin?actionUrl=https%3A%2F%2Fmedium.com%2F_%2Fbookmark%2Fp%2F30699cc273dc&amp;operation=register&amp;redirect=https%3A%2F%2Fzetablogs.medium.com%2Ftuning-cipher-to-1m-tps-for-ease-of-scaling-of-online-authentications-part-2-30699cc273dc&amp;source=---footer_actions--30699cc273dc---------------------bookmark_footer-----------" rel="noopener follow"><svg xmlns="http://www.w3.org/2000/svg" width="25" height="25" fill="none" viewBox="0 0 25 25" class="du lf" aria-label="Add to list bookmark button"><path fill="currentColor" d="M18 2.5a.5.5 0 0 1 1 0V5h2.5a.5.5 0 0 1 0 1H19v2.5a.5.5 0 1 1-1 0V6h-2.5a.5.5 0 0 1 0-1H18zM7 7a1 1 0 0 1 1-1h3.5a.5.5 0 0 0 0-1H8a2 2 0 0 0-2 2v14a.5.5 0 0 0 .805.396L12.5 17l5.695 4.396A.5.5 0 0 0 19 21v-8.5a.5.5 0 0 0-1 0v7.485l-5.195-4.012a.5.5 0 0 0-.61 0L7 19.985z"></path></svg></a></span></div></div></div><div class="qr l is"><div class="bm" aria-hidden="false" aria-describedby="postFooterSocialMenu" aria-labelledby="postFooterSocialMenu"><div><div class="bm" aria-hidden="false"><button aria-controls="postFooterSocialMenu" aria-expanded="false" aria-label="Share Post" data-testid="footerSocialShareButton" class="af fk ah ai aj ak al ln an ao ap ex lo lp lq lr"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="none" viewBox="0 0 24 24"><path fill="currentColor" fill-rule="evenodd" d="M15.218 4.931a.4.4 0 0 1-.118.132l.012.006a.45.45 0 0 1-.292.074.5.5 0 0 1-.3-.13l-2.02-2.02v7.07c0 .28-.23.5-.5.5s-.5-.22-.5-.5v-7.04l-2 2a.45.45 0 0 1-.57.04h-.02a.4.4 0 0 1-.16-.3.4.4 0 0 1 .1-.32l2.8-2.8a.5.5 0 0 1 .7 0l2.8 2.79a.42.42 0 0 1 .068.498m-.106.138.008.004v-.01zM16 7.063h1.5a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2h-11c-1.1 0-2-.9-2-2v-10a2 2 0 0 1 2-2H8a.5.5 0 0 1 .35.15.5.5 0 0 1 .15.35.5.5 0 0 1-.15.35.5.5 0 0 1-.35.15H6.4c-.5 0-.9.4-.9.9v10.2a.9.9 0 0 0 .9.9h11.2c.5 0 .9-.4.9-.9v-10.2c0-.5-.4-.9-.9-.9H16a.5.5 0 0 1 0-1" clip-rule="evenodd"></path></svg></button></div></div></div></div></div></div></div></div></div></footer><div class="qs qt qu qv qw l bx"><div class="ab cb"><div class="ci bh fz ga gb gc"><div class="ab qx qy qz iu it"><div class="ra rb rc rd re rf rg rh ri rj ab cp"><div class="h k"><a tabindex="0" rel="noopener follow" href="/?source=post_page---post_author_info--30699cc273dc--------------------------------"><div class="l fj"><img alt="&#x27;Celebration of Engineering&#x27;" class="l fd by ic ib cx" src="https://miro.medium.com/v2/resize:fill:96:96/1*5Ik-j5NwfCPZ9dM2xu6n1Q.png" width="48" height="48" loading="lazy"/><div class="fr by l ic ib fs n ay rk"></div></div></a></div><div class="j i d"><a tabindex="0" rel="noopener follow" href="/?source=post_page---post_author_info--30699cc273dc--------------------------------"><div class="l fj"><img alt="&#x27;Celebration of Engineering&#x27;" class="l fd by rl rm cx" src="https://miro.medium.com/v2/resize:fill:128:128/1*5Ik-j5NwfCPZ9dM2xu6n1Q.png" width="64" height="64" loading="lazy"/><div class="fr by l rl rm fs n ay rk"></div></div></a></div><div class="j i d rn is"><div class="ab"><span><button class="bf b bg z ro pu rp rq rr rs rt ev ew ru rv rw fa fb fc fd bm fe ff">Follow</button></span></div></div></div><div class="ab co rx"><div class="ry rz sa sb sc l"><a class="af ag ah aj ak al am an ao ap aq ar as at ab q" rel="noopener follow" href="/?source=post_page---post_author_info--30699cc273dc--------------------------------"><h2 class="pw-author-name bf se sf sg sh si sj sk nf sl sm nj sn so nn sp sq bk"><span class="gn sd">Written by <!-- -->&#x27;Celebration of Engineering&#x27;</span></h2></a><div class="ps ab ia"><div class="l is"><span class="pw-follower-count bf b bg z du"><a class="af ag ah ai aj ak al am an ao ap aq ar il" rel="noopener follow" href="/followers?source=post_page---post_author_info--30699cc273dc--------------------------------">125 Followers</a></span></div><div class="bf b bg z du ab sr"><span class="im l" aria-hidden="true"><span class="bf b bg z du">·</span></span><a class="af ag ah ai aj ak al am an ao ap aq ar il" rel="noopener follow" href="/following?source=post_page---post_author_info--30699cc273dc--------------------------------">7 Following</a></div></div><div class="ss l"><p class="bf b bg z bk"><span class="gn">Engineering adventures and the stories from the trenches</span></p></div></div></div><div class="h k"><div class="ab"><span><button class="bf b bg z ro pu rp rq rr rs rt ev ew ru rv rw fa fb fc fd bm fe ff">Follow</button></span></div></div></div><div class="st bh su sv"></div></div></div><div class="h k j"><div class="st bh su sw"></div><div class="ab cb"><div class="ci bh fz ga gb gc"><div class="sx ab ke iv"><div class="sy sz l"><a class="af ag ah ai aj ak al am an ao ap aq ar as at" href="https://help.medium.com/hc/en-us?source=post_page-----30699cc273dc--------------------------------" rel="noopener follow"><p class="bf b dv z du">Help</p></a></div><div class="sy sz l"><a class="af ag ah ai aj ak al am an ao ap aq ar as at" href="https://medium.statuspage.io/?source=post_page-----30699cc273dc--------------------------------" rel="noopener follow"><p class="bf b dv z du">Status</p></a></div><div class="sy sz l"><a class="af ag ah ai aj ak al am an ao ap aq ar as at" href="https://medium.com/about?autoplay=1&amp;source=post_page-----30699cc273dc--------------------------------" rel="noopener follow"><p class="bf b dv z du">About</p></a></div><div class="sy sz l"><a class="af ag ah ai aj ak al am an ao ap aq ar as at" href="https://medium.com/jobs-at-medium/work-at-medium-959d1a85284e?source=post_page-----30699cc273dc--------------------------------" rel="noopener follow"><p class="bf b dv z du">Careers</p></a></div><div class="sy sz l"><a class="af ag ah ai aj ak al am an ao ap aq ar as at" href="pressinquiries@medium.com?source=post_page-----30699cc273dc--------------------------------" rel="noopener follow"><p class="bf b dv z du">Press</p></a></div><div class="sy sz l"><a class="af ag ah ai aj ak al am an ao ap aq ar as at" href="https://blog.medium.com/?source=post_page-----30699cc273dc--------------------------------" rel="noopener follow"><p class="bf b dv z du">Blog</p></a></div><div class="sy sz l"><a class="af ag ah ai aj ak al am an ao ap aq ar as at" href="https://policy.medium.com/medium-privacy-policy-f03bf92035c9?source=post_page-----30699cc273dc--------------------------------" rel="noopener follow"><p class="bf b dv z du">Privacy</p></a></div><div class="sy sz l"><a class="af ag ah ai aj ak al am an ao ap aq ar as at" href="https://policy.medium.com/medium-terms-of-service-9db0094a1e0f?source=post_page-----30699cc273dc--------------------------------" rel="noopener follow"><p class="bf b dv z du">Terms</p></a></div><div class="sy sz l"><a class="af ag ah ai aj ak al am an ao ap aq ar as at" href="https://speechify.com/medium?source=post_page-----30699cc273dc--------------------------------" rel="noopener follow"><p class="bf b dv z du">Text to speech</p></a></div><div class="sy l"><a class="af ag ah ai aj ak al am an ao ap aq ar as at" href="https://medium.com/business?source=post_page-----30699cc273dc--------------------------------" rel="noopener follow"><p class="bf b dv z du">Teams</p></a></div></div></div></div></div></div></div></div></div></div><script>window.__BUILD_ID__="main-20241126-181518-0cb59a020f"</script><script>window.__GRAPHQL_URI__ = "https://zetablogs.medium.com/_/graphql"</script><script>window.__PRELOADED_STATE__ = {"algolia":{"queries":{}},"cache":{"experimentGroupSet":true,"reason":"","group":"enabled","tags":["group-edgeCachePosts","post-30699cc273dc","user-620b01ce72fe"],"serverVariantState":"44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a","middlewareEnabled":true,"cacheStatus":"DYNAMIC","shouldUseCache":true,"vary":[],"lohpSummerUpsellEnabled":false,"publicationHierarchyEnabledWeb":false,"postBottomResponsesEnabled":false},"client":{"hydrated":false,"isUs":false,"isNativeMedium":false,"isSafariMobile":false,"isSafari":false,"isFirefox":false,"routingEntity":{"type":"USER","id":"620b01ce72fe","explicit":true},"viewerIsBot":false},"debug":{"requestId":"968d1bad-3fd5-90d8-a399-51ecfc2ef422","hybridDevServices":[],"originalSpanCarrier":{"traceparent":"00-81cf189e2e3f98b854a175fcf8316342-1fd7b80b82545086-01"}},"multiVote":{"clapsPerPost":{}},"navigation":{"branch":{"show":null,"hasRendered":null,"blockedByCTA":false},"hideGoogleOneTap":false,"hasRenderedAlternateUserBanner":null,"currentLocation":"https:\u002F\u002Fzetablogs.medium.com\u002Ftuning-cipher-to-1m-tps-for-ease-of-scaling-of-online-authentications-part-2-30699cc273dc","host":"zetablogs.medium.com","hostname":"zetablogs.medium.com","referrer":"","hasSetReferrer":false,"susiModal":{"step":null,"operation":"register"},"postRead":false,"partnerProgram":{"selectedCountryCode":null},"queryString":"","currentHash":""},"config":{"nodeEnv":"production","version":"main-20241126-181518-0cb59a020f","target":"production","productName":"Medium","publicUrl":"https:\u002F\u002Fcdn-client.medium.com\u002Flite","authDomain":"medium.com","authGoogleClientId":"216296035834-k1k6qe060s2tp2a2jam4ljdcms00sttg.apps.googleusercontent.com","favicon":"production","glyphUrl":"https:\u002F\u002Fglyph.medium.com","branchKey":"key_live_ofxXr2qTrrU9NqURK8ZwEhknBxiI6KBm","algolia":{"appId":"MQ57UUUQZ2","apiKeySearch":"394474ced050e3911ae2249ecc774921","indexPrefix":"medium_","host":"-dsn.algolia.net"},"recaptchaKey":"6Lfc37IUAAAAAKGGtC6rLS13R1Hrw_BqADfS1LRk","recaptcha3Key":"6Lf8R9wUAAAAABMI_85Wb8melS7Zj6ziuf99Yot5","recaptchaEnterpriseKeyId":"6Le-uGgpAAAAAPprRaokM8AKthQ9KNGdoxaGUvVp","datadog":{"applicationId":"6702d87d-a7e0-42fe-bbcb-95b469547ea0","clientToken":"pub853ea8d17ad6821d9f8f11861d23dfed","rumToken":"pubf9cc52896502b9413b68ba36fc0c7162","context":{"deployment":{"target":"production","tag":"main-20241126-181518-0cb59a020f","commit":"0cb59a020f4453d0900f671f1a6576feecc55e74"}},"datacenter":"us"},"googleAnalyticsCode":"G-7JY7T788PK","googlePay":{"apiVersion":"2","apiVersionMinor":"0","merchantId":"BCR2DN6TV7EMTGBM","merchantName":"Medium","instanceMerchantId":"13685562959212738550"},"applePay":{"version":3},"signInWallCustomDomainCollectionIds":["3a8144eabfe3","336d898217ee","61061eb0c96b","138adf9c44c","819cc2aaeee0"],"mediumMastodonDomainName":"me.dm","mediumOwnedAndOperatedCollectionIds":["8a9336e5bb4","b7e45b22fec3","193b68bd4fba","8d6b8a439e32","54c98c43354d","3f6ecf56618","d944778ce714","92d2092dc598","ae2a65f35510","1285ba81cada","544c7006046e","fc8964313712","40187e704f1c","88d9857e584e","7b6769f2748b","bcc38c8f6edf","cef6983b292","cb8577c9149e","444d13b52878","713d7dbc99b0","ef8e90590e66","191186aaafa0","55760f21cdc5","9dc80918cc93","bdc4052bbdba","8ccfed20cbb2"],"tierOneDomains":["medium.com","thebolditalic.com","arcdigital.media","towardsdatascience.com","uxdesign.cc","codeburst.io","psiloveyou.xyz","writingcooperative.com","entrepreneurshandbook.co","prototypr.io","betterhumans.coach.me","theascent.pub"],"topicsToFollow":["d61cf867d93f","8a146bc21b28","1eca0103fff3","4d562ee63426","aef1078a3ef5","e15e46793f8d","6158eb913466","55f1c20aba7a","3d18b94f6858","4861fee224fd","63c6f1f93ee","1d98b3a9a871","decb52b64abf","ae5d4995e225","830cded25262"],"topicToTagMappings":{"accessibility":"accessibility","addiction":"addiction","android-development":"android-development","art":"art","artificial-intelligence":"artificial-intelligence","astrology":"astrology","basic-income":"basic-income","beauty":"beauty","biotech":"biotech","blockchain":"blockchain","books":"books","business":"business","cannabis":"cannabis","cities":"cities","climate-change":"climate-change","comics":"comics","coronavirus":"coronavirus","creativity":"creativity","cryptocurrency":"cryptocurrency","culture":"culture","cybersecurity":"cybersecurity","data-science":"data-science","design":"design","digital-life":"digital-life","disability":"disability","economy":"economy","education":"education","equality":"equality","family":"family","feminism":"feminism","fiction":"fiction","film":"film","fitness":"fitness","food":"food","freelancing":"freelancing","future":"future","gadgets":"gadgets","gaming":"gaming","gun-control":"gun-control","health":"health","history":"history","humor":"humor","immigration":"immigration","ios-development":"ios-development","javascript":"javascript","justice":"justice","language":"language","leadership":"leadership","lgbtqia":"lgbtqia","lifestyle":"lifestyle","machine-learning":"machine-learning","makers":"makers","marketing":"marketing","math":"math","media":"media","mental-health":"mental-health","mindfulness":"mindfulness","money":"money","music":"music","neuroscience":"neuroscience","nonfiction":"nonfiction","outdoors":"outdoors","parenting":"parenting","pets":"pets","philosophy":"philosophy","photography":"photography","podcasts":"podcast","poetry":"poetry","politics":"politics","privacy":"privacy","product-management":"product-management","productivity":"productivity","programming":"programming","psychedelics":"psychedelics","psychology":"psychology","race":"race","relationships":"relationships","religion":"religion","remote-work":"remote-work","san-francisco":"san-francisco","science":"science","self":"self","self-driving-cars":"self-driving-cars","sexuality":"sexuality","social-media":"social-media","society":"society","software-engineering":"software-engineering","space":"space","spirituality":"spirituality","sports":"sports","startups":"startup","style":"style","technology":"technology","transportation":"transportation","travel":"travel","true-crime":"true-crime","tv":"tv","ux":"ux","venture-capital":"venture-capital","visual-design":"visual-design","work":"work","world":"world","writing":"writing"},"defaultImages":{"avatar":{"imageId":"1*dmbNkD5D-u45r44go_cf0g.png","height":150,"width":150},"orgLogo":{"imageId":"7*V1_7XP4snlmqrc_0Njontw.png","height":110,"width":500},"postLogo":{"imageId":"bd978bb536350a710e8efb012513429cabdc4c28700604261aeda246d0f980b7","height":810,"width":1440},"postPreviewImage":{"imageId":"1*hn4v1tCaJy7cWMyb0bpNpQ.png","height":386,"width":579}},"collectionStructuredData":{"8d6b8a439e32":{"name":"Elemental","data":{"@type":"NewsMediaOrganization","ethicsPolicy":"https:\u002F\u002Fhelp.medium.com\u002Fhc\u002Fen-us\u002Farticles\u002F360043290473","logo":{"@type":"ImageObject","url":"https:\u002F\u002Fcdn-images-1.medium.com\u002Fmax\u002F980\u002F1*9ygdqoKprhwuTVKUM0DLPA@2x.png","width":980,"height":159}}},"3f6ecf56618":{"name":"Forge","data":{"@type":"NewsMediaOrganization","ethicsPolicy":"https:\u002F\u002Fhelp.medium.com\u002Fhc\u002Fen-us\u002Farticles\u002F360043290473","logo":{"@type":"ImageObject","url":"https:\u002F\u002Fcdn-images-1.medium.com\u002Fmax\u002F596\u002F1*uULpIlImcO5TDuBZ6lm7Lg@2x.png","width":596,"height":183}}},"ae2a65f35510":{"name":"GEN","data":{"@type":"NewsMediaOrganization","ethicsPolicy":"https:\u002F\u002Fhelp.medium.com\u002Fhc\u002Fen-us\u002Farticles\u002F360043290473","logo":{"@type":"ImageObject","url":"https:\u002F\u002Fmiro.medium.com\u002Fmax\u002F264\u002F1*RdVZMdvfV3YiZTw6mX7yWA.png","width":264,"height":140}}},"88d9857e584e":{"name":"LEVEL","data":{"@type":"NewsMediaOrganization","ethicsPolicy":"https:\u002F\u002Fhelp.medium.com\u002Fhc\u002Fen-us\u002Farticles\u002F360043290473","logo":{"@type":"ImageObject","url":"https:\u002F\u002Fmiro.medium.com\u002Fmax\u002F540\u002F1*JqYMhNX6KNNb2UlqGqO2WQ.png","width":540,"height":108}}},"7b6769f2748b":{"name":"Marker","data":{"@type":"NewsMediaOrganization","ethicsPolicy":"https:\u002F\u002Fhelp.medium.com\u002Fhc\u002Fen-us\u002Farticles\u002F360043290473","logo":{"@type":"ImageObject","url":"https:\u002F\u002Fcdn-images-1.medium.com\u002Fmax\u002F383\u002F1*haCUs0wF6TgOOvfoY-jEoQ@2x.png","width":383,"height":92}}},"444d13b52878":{"name":"OneZero","data":{"@type":"NewsMediaOrganization","ethicsPolicy":"https:\u002F\u002Fhelp.medium.com\u002Fhc\u002Fen-us\u002Farticles\u002F360043290473","logo":{"@type":"ImageObject","url":"https:\u002F\u002Fmiro.medium.com\u002Fmax\u002F540\u002F1*cw32fIqCbRWzwJaoQw6BUg.png","width":540,"height":123}}},"8ccfed20cbb2":{"name":"Zora","data":{"@type":"NewsMediaOrganization","ethicsPolicy":"https:\u002F\u002Fhelp.medium.com\u002Fhc\u002Fen-us\u002Farticles\u002F360043290473","logo":{"@type":"ImageObject","url":"https:\u002F\u002Fmiro.medium.com\u002Fmax\u002F540\u002F1*tZUQqRcCCZDXjjiZ4bDvgQ.png","width":540,"height":106}}}},"embeddedPostIds":{"coronavirus":"cd3010f9d81f"},"sharedCdcMessaging":{"COVID_APPLICABLE_TAG_SLUGS":[],"COVID_APPLICABLE_TOPIC_NAMES":[],"COVID_APPLICABLE_TOPIC_NAMES_FOR_TOPIC_PAGE":[],"COVID_MESSAGES":{"tierA":{"text":"For more information on the novel coronavirus and Covid-19, visit cdc.gov.","markups":[{"start":66,"end":73,"href":"https:\u002F\u002Fwww.cdc.gov\u002Fcoronavirus\u002F2019-nCoV"}]},"tierB":{"text":"Anyone can publish on Medium per our Policies, but we don’t fact-check every story. For more info about the coronavirus, see cdc.gov.","markups":[{"start":37,"end":45,"href":"https:\u002F\u002Fhelp.medium.com\u002Fhc\u002Fen-us\u002Fcategories\u002F201931128-Policies-Safety"},{"start":125,"end":132,"href":"https:\u002F\u002Fwww.cdc.gov\u002Fcoronavirus\u002F2019-nCoV"}]},"paywall":{"text":"This article has been made free for everyone, thanks to Medium Members. For more information on the novel coronavirus and Covid-19, visit cdc.gov.","markups":[{"start":56,"end":70,"href":"https:\u002F\u002Fmedium.com\u002Fmembership"},{"start":138,"end":145,"href":"https:\u002F\u002Fwww.cdc.gov\u002Fcoronavirus\u002F2019-nCoV"}]},"unbound":{"text":"This article is free for everyone, thanks to Medium Members. For more information on the novel coronavirus and Covid-19, visit cdc.gov.","markups":[{"start":45,"end":59,"href":"https:\u002F\u002Fmedium.com\u002Fmembership"},{"start":127,"end":134,"href":"https:\u002F\u002Fwww.cdc.gov\u002Fcoronavirus\u002F2019-nCoV"}]}},"COVID_BANNER_POST_ID_OVERRIDE_WHITELIST":["3b31a67bff4a"]},"sharedVoteMessaging":{"TAGS":["politics","election-2020","government","us-politics","election","2020-presidential-race","trump","donald-trump","democrats","republicans","congress","republican-party","democratic-party","biden","joe-biden","maga"],"TOPICS":["politics","election"],"MESSAGE":{"text":"Find out more about the U.S. election results here.","markups":[{"start":46,"end":50,"href":"https:\u002F\u002Fcookpolitical.com\u002F2020-national-popular-vote-tracker"}]},"EXCLUDE_POSTS":["397ef29e3ca5"]},"embedPostRules":[],"recircOptions":{"v1":{"limit":3},"v2":{"limit":8}},"braintreeClientKey":"production_zjkj96jm_m56f8fqpf7ngnrd4","braintree":{"enabled":true,"merchantId":"m56f8fqpf7ngnrd4","merchantAccountId":{"usd":"AMediumCorporation_instant","eur":"amediumcorporation_EUR","cad":"amediumcorporation_CAD"},"publicKey":"ds2nn34bg2z7j5gd","braintreeEnvironment":"production","dashboardUrl":"https:\u002F\u002Fwww.braintreegateway.com\u002Fmerchants","gracePeriodDurationInDays":14,"mediumMembershipPlanId":{"monthly":"ce105f8c57a3","monthlyV2":"e8a5e126-792b-4ee6-8fba-d574c1b02fc5","monthlyWithTrial":"d5ee3dbe3db8","monthlyPremium":"fa741a9b47a2","yearly":"a40ad4a43185","yearlyV2":"3815d7d6-b8ca-4224-9b8c-182f9047866e","yearlyStaff":"d74fb811198a","yearlyWithTrial":"b3bc7350e5c7","yearlyPremium":"e21bd2c12166","monthlyOneYearFree":"e6c0637a-2bad-4171-ab4f-3c268633d83c","monthly25PercentOffFirstYear":"235ecc62-0cdb-49ae-9378-726cd21c504b","monthly20PercentOffFirstYear":"ba518864-9c13-4a99-91ca-411bf0cac756","monthly15PercentOffFirstYear":"594c029b-9f89-43d5-88f8-8173af4e070e","monthly10PercentOffFirstYear":"c6c7bc9a-40f2-4b51-8126-e28511d5bdb0","monthlyForStudents":"629ebe51-da7d-41fd-8293-34cd2f2030a8","yearlyOneYearFree":"78ba7be9-0d9f-4ece-aa3e-b54b826f2bf1","yearly25PercentOffFirstYear":"2dbb010d-bb8f-4eeb-ad5c-a08509f42d34","yearly20PercentOffFirstYear":"47565488-435b-47f8-bf93-40d5fbe0ebc8","yearly15PercentOffFirstYear":"8259809b-0881-47d9-acf7-6c001c7f720f","yearly10PercentOffFirstYear":"9dd694fb-96e1-472c-8d9e-3c868d5c1506","yearlyForStudents":"e29345ef-ab1c-4234-95c5-70e50fe6bc23","monthlyCad":"p52orjkaceei","yearlyCad":"h4q9g2up9ktt"},"braintreeDiscountId":{"oneMonthFree":"MONTHS_FREE_01","threeMonthsFree":"MONTHS_FREE_03","sixMonthsFree":"MONTHS_FREE_06","fiftyPercentOffOneYear":"FIFTY_PERCENT_OFF_ONE_YEAR"},"3DSecureVersion":"2","defaultCurrency":"usd","providerPlanIdCurrency":{"4ycw":"usd","rz3b":"usd","3kqm":"usd","jzw6":"usd","c2q2":"usd","nnsw":"usd","q8qw":"usd","d9y6":"usd","fx7w":"cad","nwf2":"cad"}},"paypalClientId":"AXj1G4fotC2GE8KzWX9mSxCH1wmPE3nJglf4Z2ig_amnhvlMVX87otaq58niAg9iuLktVNF_1WCMnN7v","paypal":{"host":"https:\u002F\u002Fapi.paypal.com:443","clientMode":"production","serverMode":"live","webhookId":"4G466076A0294510S","monthlyPlan":{"planId":"P-9WR0658853113943TMU5FDQA","name":"Medium Membership (Monthly) with setup fee","description":"Unlimited access to the best and brightest stories on Medium. Membership billed monthly."},"yearlyPlan":{"planId":"P-7N8963881P8875835MU5JOPQ","name":"Medium Membership (Annual) with setup fee","description":"Unlimited access to the best and brightest stories on Medium. Membership billed annually."},"oneYearGift":{"name":"Medium Membership (1 Year, Digital Gift Code)","description":"Unlimited access to the best and brightest stories on Medium. Gift codes can be redeemed at medium.com\u002Fredeem.","price":"50.00","currency":"USD","sku":"membership-gift-1-yr"},"oldMonthlyPlan":{"planId":"P-96U02458LM656772MJZUVH2Y","name":"Medium Membership (Monthly)","description":"Unlimited access to the best and brightest stories on Medium. Membership billed monthly."},"oldYearlyPlan":{"planId":"P-59P80963JF186412JJZU3SMI","name":"Medium Membership (Annual)","description":"Unlimited access to the best and brightest stories on Medium. Membership billed annually."},"monthlyPlanWithTrial":{"planId":"P-66C21969LR178604GJPVKUKY","name":"Medium Membership (Monthly) with setup fee","description":"Unlimited access to the best and brightest stories on Medium. Membership billed monthly."},"yearlyPlanWithTrial":{"planId":"P-6XW32684EX226940VKCT2MFA","name":"Medium Membership (Annual) with setup fee","description":"Unlimited access to the best and brightest stories on Medium. Membership billed annually."},"oldMonthlyPlanNoSetupFee":{"planId":"P-4N046520HR188054PCJC7LJI","name":"Medium Membership (Monthly)","description":"Unlimited access to the best and brightest stories on Medium. Membership billed monthly."},"oldYearlyPlanNoSetupFee":{"planId":"P-7A4913502Y5181304CJEJMXQ","name":"Medium Membership (Annual)","description":"Unlimited access to the best and brightest stories on Medium. Membership billed annually."},"sdkUrl":"https:\u002F\u002Fwww.paypal.com\u002Fsdk\u002Fjs"},"stripePublishableKey":"pk_live_7FReX44VnNIInZwrIIx6ghjl","log":{"json":true,"level":"info"},"imageUploadMaxSizeMb":25,"staffPicks":{"title":"Staff Picks","catalogId":"c7bc6e1ee00f"}},"session":{"xsrf":""}}</script><script>window.__APOLLO_STATE__ = {"ROOT_QUERY":{"__typename":"Query","viewer":null,"collectionByDomainOrSlug({\"domainOrSlug\":\"zetablogs.medium.com\"})":null,"postResult({\"id\":\"30699cc273dc\"})":{"__ref":"Post:30699cc273dc"}},"LinkedAccounts:620b01ce72fe":{"__typename":"LinkedAccounts","mastodon":null,"id":"620b01ce72fe"},"UserViewerEdge:userId:620b01ce72fe-viewerId:lo_df5bd60206c5":{"__typename":"UserViewerEdge","id":"userId:620b01ce72fe-viewerId:lo_df5bd60206c5","isFollowing":false,"isUser":false,"isMuting":false},"NewsletterV3:1d432a54a39e":{"__typename":"NewsletterV3","id":"1d432a54a39e","type":"NEWSLETTER_TYPE_AUTHOR","slug":"620b01ce72fe","name":"620b01ce72fe","collection":null,"user":{"__ref":"User:620b01ce72fe"}},"User:620b01ce72fe":{"__typename":"User","id":"620b01ce72fe","name":"'Celebration of Engineering'","username":"zetablogs","newsletterV3":{"__ref":"NewsletterV3:1d432a54a39e"},"linkedAccounts":{"__ref":"LinkedAccounts:620b01ce72fe"},"isSuspended":false,"imageId":"1*5Ik-j5NwfCPZ9dM2xu6n1Q.png","mediumMemberAt":0,"verifications":{"__typename":"VerifiedInfo","isBookAuthor":false},"socialStats":{"__typename":"SocialStats","followerCount":125,"followingCount":5,"collectionFollowingCount":2},"customDomainState":{"__typename":"CustomDomainState","live":{"__typename":"CustomDomain","domain":"zetablogs.medium.com"}},"hasSubdomain":true,"bio":"Engineering adventures and the stories from the trenches","isPartnerProgramEnrolled":false,"viewerEdge":{"__ref":"UserViewerEdge:userId:620b01ce72fe-viewerId:lo_df5bd60206c5"},"viewerIsUser":false,"postSubscribeMembershipUpsellShownAt":0,"membership":null,"allowNotes":true,"twitterScreenName":""},"Paragraph:533f4fdc5311_0":{"__typename":"Paragraph","id":"533f4fdc5311_0","name":"76f8","type":"H3","href":null,"layout":null,"metadata":null,"text":"Tuning Cipher to 1M TPS for ease of scaling of online authentications (Part 2)","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"ImageMetadata:0*uCzHLS80DwWiVZMq":{"__typename":"ImageMetadata","id":"0*uCzHLS80DwWiVZMq","originalHeight":800,"originalWidth":1222,"focusPercentX":null,"focusPercentY":null,"alt":null},"Paragraph:533f4fdc5311_1":{"__typename":"Paragraph","id":"533f4fdc5311_1","name":"6de0","type":"IMG","href":null,"layout":"INSET_CENTER","metadata":{"__ref":"ImageMetadata:0*uCzHLS80DwWiVZMq"},"text":"","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:533f4fdc5311_2":{"__typename":"Paragraph","id":"533f4fdc5311_2","name":"f2cc","type":"P","href":null,"layout":null,"metadata":null,"text":"We went through the overall idea behind the demo in Part 1. Part 2 will inform us about how we achieved the feat, highlighting the technologies that we used along the way. Heads up, it is going to be engineering focussed.","hasDropCap":null,"dropCapImage":null,"markups":[{"__typename":"Markup","type":"A","start":52,"end":59,"href":"https:\u002F\u002Fengineeringblogs.medium.com\u002Fachieving-1-million-tps-with-zetas-cipher-a-new-benchmark-in-the-payments-industry-part-1-9a0dbdb74924","anchorType":"LINK","userId":null,"linkMetadata":null}],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:533f4fdc5311_3":{"__typename":"Paragraph","id":"533f4fdc5311_3","name":"58f5","type":"P","href":null,"layout":null,"metadata":null,"text":"Quick recap: Cipher demonstrated the successful handling of a chart-busting 1 Million Transactions Per Second of online authentication requests utilizing a prudent cost of $200\u002Fhour of AWS cloud infrastructure. The simulated authentications are 240x higher than the authentication output put together by all of the big players in India during online payment transactions.","hasDropCap":null,"dropCapImage":null,"markups":[{"__typename":"Markup","type":"EM","start":0,"end":12,"href":null,"anchorType":null,"userId":null,"linkMetadata":null}],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:533f4fdc5311_4":{"__typename":"Paragraph","id":"533f4fdc5311_4","name":"01f6","type":"H3","href":null,"layout":null,"metadata":null,"text":"Things we engineereed in a nutshell","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:533f4fdc5311_5":{"__typename":"Paragraph","id":"533f4fdc5311_5","name":"1793","type":"OLI","href":null,"layout":null,"metadata":null,"text":"Optimized systems for a minimum unit for processing a desirable number of online authentications","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:533f4fdc5311_6":{"__typename":"Paragraph","id":"533f4fdc5311_6","name":"ff54","type":"BQ","href":null,"layout":null,"metadata":null,"text":"Built the infrastructure","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:533f4fdc5311_7":{"__typename":"Paragraph","id":"533f4fdc5311_7","name":"a6b0","type":"BQ","href":null,"layout":null,"metadata":null,"text":"Setup the simulation environment and node distribution mechanisms","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:533f4fdc5311_8":{"__typename":"Paragraph","id":"533f4fdc5311_8","name":"48ee","type":"BQ","href":null,"layout":null,"metadata":null,"text":"Processed successful authentications for the transactions","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:533f4fdc5311_9":{"__typename":"Paragraph","id":"533f4fdc5311_9","name":"0a89","type":"P","href":null,"layout":null,"metadata":null,"text":"2. Scaled the minimum unit for the desired load capacity of 1 Million TPS","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:533f4fdc5311_10":{"__typename":"Paragraph","id":"533f4fdc5311_10","name":"8c3e","type":"H3","href":null,"layout":null,"metadata":null,"text":"Infrastructure used","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:533f4fdc5311_11":{"__typename":"Paragraph","id":"533f4fdc5311_11","name":"43a3","type":"ULI","href":null,"layout":null,"metadata":null,"text":"Nginx — A web server used as an ingress controller (to accept HTTP requests).","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:533f4fdc5311_12":{"__typename":"Paragraph","id":"533f4fdc5311_12","name":"eb3e","type":"ULI","href":null,"layout":null,"metadata":null,"text":"EKS (Elastic Kubernetes Service) — An AWS-managed service to run Kubernetes.","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:533f4fdc5311_13":{"__typename":"Paragraph","id":"533f4fdc5311_13","name":"0aea","type":"ULI","href":null,"layout":null,"metadata":null,"text":"Prometheus — An open-source monitoring system with a dimensional data model, flexible query language, efficient time-series database, and modern alerting approach.","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:533f4fdc5311_14":{"__typename":"Paragraph","id":"533f4fdc5311_14","name":"966b","type":"ULI","href":null,"layout":null,"metadata":null,"text":"Grafana — An open-source analytics & monitoring solution for databases and microservices.","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:533f4fdc5311_15":{"__typename":"Paragraph","id":"533f4fdc5311_15","name":"2ca5","type":"ULI","href":null,"layout":null,"metadata":null,"text":"Metrics server — A cluster-wide aggregator of resource usage data for auto-scaling horizontal pods.","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:533f4fdc5311_16":{"__typename":"Paragraph","id":"533f4fdc5311_16","name":"050a","type":"ULI","href":null,"layout":null,"metadata":null,"text":"Microservices","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:533f4fdc5311_17":{"__typename":"Paragraph","id":"533f4fdc5311_17","name":"17ae","type":"BQ","href":null,"layout":null,"metadata":null,"text":"Edith","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:533f4fdc5311_18":{"__typename":"Paragraph","id":"533f4fdc5311_18","name":"26e3","type":"BQ","href":null,"layout":null,"metadata":null,"text":"Cerberus","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:533f4fdc5311_19":{"__typename":"Paragraph","id":"533f4fdc5311_19","name":"b205","type":"BQ","href":null,"layout":null,"metadata":null,"text":"MasterCard Cipher","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:533f4fdc5311_20":{"__typename":"Paragraph","id":"533f4fdc5311_20","name":"ca40","type":"ULI","href":null,"layout":null,"metadata":null,"text":"We’ve presented JVM stats, HTTP requests & connection stats from each of these apps via metrics endpoint and made this a scrape target in Prometheus.","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:533f4fdc5311_21":{"__typename":"Paragraph","id":"533f4fdc5311_21","name":"6af0","type":"ULI","href":null,"layout":null,"metadata":null,"text":"We’ve also enabled the JMX port on each of these microservices to monitor them in real-time.","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:533f4fdc5311_22":{"__typename":"Paragraph","id":"533f4fdc5311_22","name":"257e","type":"H3","href":null,"layout":null,"metadata":null,"text":"Node distribution","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:533f4fdc5311_23":{"__typename":"Paragraph","id":"533f4fdc5311_23","name":"ba5a","type":"P","href":null,"layout":null,"metadata":null,"text":"‘Node’ is a container of a single server where multiple microservices can be run and monitored to successfully process a definite amount of authentication requests. We configured each of these nodes at 64GB RAM & 16 GB processor and deployed them on Kubernetes.","hasDropCap":null,"dropCapImage":null,"markups":[{"__typename":"Markup","type":"STRONG","start":0,"end":6,"href":null,"anchorType":null,"userId":null,"linkMetadata":null}],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:533f4fdc5311_24":{"__typename":"Paragraph","id":"533f4fdc5311_24","name":"a5c0","type":"P","href":null,"layout":null,"metadata":null,"text":"Each node had several pods running within it, which hosted the microservices required for authenticating online transactions. Amongst the microservices, there are three notable ones.","hasDropCap":null,"dropCapImage":null,"markups":[{"__typename":"Markup","type":"STRONG","start":22,"end":26,"href":null,"anchorType":null,"userId":null,"linkMetadata":null}],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:533f4fdc5311_25":{"__typename":"Paragraph","id":"533f4fdc5311_25","name":"2b14","type":"OLI","href":null,"layout":null,"metadata":null,"text":"Mastercard Connector — To handle the ACS protocol specific nuances and serve as a connector for the Mastercard card scheme","hasDropCap":null,"dropCapImage":null,"markups":[{"__typename":"Markup","type":"STRONG","start":0,"end":20,"href":null,"anchorType":null,"userId":null,"linkMetadata":null}],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:533f4fdc5311_26":{"__typename":"Paragraph","id":"533f4fdc5311_26","name":"52cd","type":"OLI","href":null,"layout":null,"metadata":null,"text":"Edith — To orchestrate the intricate authentication plans","hasDropCap":null,"dropCapImage":null,"markups":[{"__typename":"Markup","type":"STRONG","start":0,"end":5,"href":null,"anchorType":null,"userId":null,"linkMetadata":null}],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:533f4fdc5311_27":{"__typename":"Paragraph","id":"533f4fdc5311_27","name":"2a27","type":"OLI","href":null,"layout":null,"metadata":null,"text":"Cerberus — To serve as the Identity Provider and the core authentication engine","hasDropCap":null,"dropCapImage":null,"markups":[{"__typename":"Markup","type":"STRONG","start":0,"end":9,"href":null,"anchorType":null,"userId":null,"linkMetadata":null}],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:533f4fdc5311_28":{"__typename":"Paragraph","id":"533f4fdc5311_28","name":"49b0","type":"H3","href":null,"layout":null,"metadata":null,"text":"Simulation environment","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:533f4fdc5311_29":{"__typename":"Paragraph","id":"533f4fdc5311_29","name":"b335","type":"P","href":null,"layout":null,"metadata":null,"text":"Although processing 1 Million TPS was the objective, we also had to generate that much amount of transaction load for doing that. So, we used Gatling as the load generator. We let the Gatling Master spread across four zones, spread across in Mumbai and Singapore, for running 50 tasks of individual test scripts to authenticate bank transactions coming in from card networks.","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:533f4fdc5311_30":{"__typename":"Paragraph","id":"533f4fdc5311_30","name":"0c7c","type":"P","href":null,"layout":null,"metadata":null,"text":"The Gatling injector simulated the interactions that a card network usually has with its ACS provider while authenticating online transactions. It also reproduced the cardholder interactions required for authentication. The system-level simulations are -","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:533f4fdc5311_31":{"__typename":"Paragraph","id":"533f4fdc5311_31","name":"e7b6","type":"OLI","href":null,"layout":null,"metadata":null,"text":"VEReqs on behalf of the card network","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:533f4fdc5311_32":{"__typename":"Paragraph","id":"533f4fdc5311_32","name":"17ee","type":"OLI","href":null,"layout":null,"metadata":null,"text":"PAReqs on behalf of the card network","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:533f4fdc5311_33":{"__typename":"Paragraph","id":"533f4fdc5311_33","name":"9133","type":"OLI","href":null,"layout":null,"metadata":null,"text":"Challenge-response submissions as performed by cardholders to prove their authenticity","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:533f4fdc5311_34":{"__typename":"Paragraph","id":"533f4fdc5311_34","name":"dde3","type":"P","href":null,"layout":null,"metadata":null,"text":"The simulator routed these requests to auto-scalable clusters of Cipher microservices, which were configured with dummy BINs.","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:533f4fdc5311_35":{"__typename":"Paragraph","id":"533f4fdc5311_35","name":"7539","type":"H3","href":null,"layout":null,"metadata":null,"text":"Authentication flow","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:533f4fdc5311_36":{"__typename":"Paragraph","id":"533f4fdc5311_36","name":"c087","type":"P","href":null,"layout":null,"metadata":null,"text":"These are the steps for a successful authentication flow.","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:533f4fdc5311_37":{"__typename":"Paragraph","id":"533f4fdc5311_37","name":"8ccd","type":"OLI","href":null,"layout":null,"metadata":null,"text":"The simulator verifies (with VEReq) if the card under authentication is enrolled with Cipher. If it is, the simulator initiates the pair authentication request (PAReq) and gets the authentication URL from Cipher.","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:533f4fdc5311_38":{"__typename":"Paragraph","id":"533f4fdc5311_38","name":"b51c","type":"OLI","href":null,"layout":null,"metadata":null,"text":"Gatling simulates the Swipe to Pay (S2P) interaction, generating the necessary credentials required for completing the authentication.","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:533f4fdc5311_39":{"__typename":"Paragraph","id":"533f4fdc5311_39","name":"3766","type":"OLI","href":null,"layout":null,"metadata":null,"text":"Gatling submits the S2P challenge and receives the authentication response.","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:533f4fdc5311_40":{"__typename":"Paragraph","id":"533f4fdc5311_40","name":"0171","type":"OLI","href":null,"layout":null,"metadata":null,"text":"It redirects the control back to the card network module that’s simulated.","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:533f4fdc5311_41":{"__typename":"Paragraph","id":"533f4fdc5311_41","name":"3dbf","type":"H3","href":null,"layout":null,"metadata":null,"text":"Minimum unit","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:533f4fdc5311_42":{"__typename":"Paragraph","id":"533f4fdc5311_42","name":"91e5","type":"P","href":null,"layout":null,"metadata":null,"text":"A minimum unit consisted of a specific number of instances of every microservice. The function of this minimum unit was to handle a definite number of transactions.","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:533f4fdc5311_43":{"__typename":"Paragraph","id":"533f4fdc5311_43","name":"e56e","type":"P","href":null,"layout":null,"metadata":null,"text":"To come up with this unit, we tested each microservice individually to get a measure of the number of authentication requests it could serve in a given time period with specific resources allocated to it. The minimum unit that we came up with successfully handled 20K authentication requests.","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:533f4fdc5311_44":{"__typename":"Paragraph","id":"533f4fdc5311_44","name":"649d","type":"P","href":null,"layout":null,"metadata":null,"text":"1 minimum unit = 3 units of Edith, 2 units of Mastercard Connector, 2 units of Cerberus","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"ImageMetadata:0*RLr8jhh9ATGYY7pD":{"__typename":"ImageMetadata","id":"0*RLr8jhh9ATGYY7pD","originalHeight":968,"originalWidth":1600,"focusPercentX":null,"focusPercentY":null,"alt":null},"Paragraph:533f4fdc5311_45":{"__typename":"Paragraph","id":"533f4fdc5311_45","name":"d374","type":"IMG","href":null,"layout":"INSET_CENTER","metadata":{"__ref":"ImageMetadata:0*RLr8jhh9ATGYY7pD"},"text":"","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:533f4fdc5311_46":{"__typename":"Paragraph","id":"533f4fdc5311_46","name":"7b1b","type":"P","href":null,"layout":null,"metadata":null,"text":"Here is the resource utilization data when Cipher was comfortably serving 20K authentications.","hasDropCap":null,"dropCapImage":null,"markups":[{"__typename":"Markup","type":"EM","start":12,"end":37,"href":null,"anchorType":null,"userId":null,"linkMetadata":null}],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"ImageMetadata:0*y6QAPVF6lgSbnk6I":{"__typename":"ImageMetadata","id":"0*y6QAPVF6lgSbnk6I","originalHeight":565,"originalWidth":1600,"focusPercentX":null,"focusPercentY":null,"alt":null},"Paragraph:533f4fdc5311_47":{"__typename":"Paragraph","id":"533f4fdc5311_47","name":"14ba","type":"IMG","href":null,"layout":"INSET_CENTER","metadata":{"__ref":"ImageMetadata:0*y6QAPVF6lgSbnk6I"},"text":"","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"ImageMetadata:0*U_JiprQNkNnu53yW":{"__typename":"ImageMetadata","id":"0*U_JiprQNkNnu53yW","originalHeight":531,"originalWidth":1600,"focusPercentX":null,"focusPercentY":null,"alt":null},"Paragraph:533f4fdc5311_48":{"__typename":"Paragraph","id":"533f4fdc5311_48","name":"a695","type":"IMG","href":null,"layout":"INSET_CENTER","metadata":{"__ref":"ImageMetadata:0*U_JiprQNkNnu53yW"},"text":"","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:533f4fdc5311_49":{"__typename":"Paragraph","id":"533f4fdc5311_49","name":"827c","type":"H3","href":null,"layout":null,"metadata":null,"text":"Scaling of the minimum unit","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:533f4fdc5311_50":{"__typename":"Paragraph","id":"533f4fdc5311_50","name":"c0c7","type":"P","href":null,"layout":null,"metadata":null,"text":"Now that we had a stable unit that could serve 20K TPS comfortably, we scaled it to accommodate additional authentication requests. We used this unit as the base reference for serving transaction requests from one issuer.","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:533f4fdc5311_51":{"__typename":"Paragraph","id":"533f4fdc5311_51","name":"a8b1","type":"P","href":null,"layout":null,"metadata":null,"text":"With this logic in place, we scaled the minimum unit up to 50 such units, handling 20K TPS each, to serve 50 issuers, leading up to 1 Million TPS. The 4 Gatling servers simulated the load for 500 distinct BINs spread across 50 issuers, each having 1,00,000 cards. The entire setup, consisting of 4 Kubernetes clusters, spanned across 2 AWS regions with two availability zones, respectively.","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"ImageMetadata:0*n3d0Ihz76rAoRtbm":{"__typename":"ImageMetadata","id":"0*n3d0Ihz76rAoRtbm","originalHeight":1106,"originalWidth":1600,"focusPercentX":null,"focusPercentY":null,"alt":null},"Paragraph:533f4fdc5311_52":{"__typename":"Paragraph","id":"533f4fdc5311_52","name":"1556","type":"IMG","href":null,"layout":"INSET_CENTER","metadata":{"__ref":"ImageMetadata:0*n3d0Ihz76rAoRtbm"},"text":"","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:533f4fdc5311_53":{"__typename":"Paragraph","id":"533f4fdc5311_53","name":"eab3","type":"P","href":null,"layout":null,"metadata":null,"text":"With AWS, the nodes aren’t scalable within minutes. But since we had to attain that, we warmed up the nodes by scaling up the pods. We used 350 of the pods within 100 nodes to handle the heavy load of 1 Million authentication requests. When the load was less, we scaled down the nodes by cutting down the pods based on the resource utilization factors using Horizontal Pod Autoscaler.","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:533f4fdc5311_54":{"__typename":"Paragraph","id":"533f4fdc5311_54","name":"eaef","type":"P","href":null,"layout":null,"metadata":null,"text":"Footnote:","hasDropCap":null,"dropCapImage":null,"markups":[{"__typename":"Markup","type":"EM","start":0,"end":9,"href":null,"anchorType":null,"userId":null,"linkMetadata":null}],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:533f4fdc5311_55":{"__typename":"Paragraph","id":"533f4fdc5311_55","name":"b071","type":"OLI","href":null,"layout":null,"metadata":null,"text":"The authentication’s write I\u002FO was done asynchronously considering the purpose of the live demonstration.","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:533f4fdc5311_56":{"__typename":"Paragraph","id":"533f4fdc5311_56","name":"5a3e","type":"OLI","href":null,"layout":null,"metadata":null,"text":"Three requests effectively make one authentication.","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:533f4fdc5311_57":{"__typename":"Paragraph","id":"533f4fdc5311_57","name":"12b8","type":"P","href":null,"layout":null,"metadata":null,"text":"If you’d like to check out the test data that we used for simulating authentications, it is available for reference here.","hasDropCap":null,"dropCapImage":null,"markups":[{"__typename":"Markup","type":"A","start":116,"end":120,"href":"https:\u002F\u002Fdocs.google.com\u002Fspreadsheets\u002Fd\u002F18vM6sj6wgcfw-X2DIKelwZn-4UHE8c2De1OSeqh0eQo\u002Fedit?usp=sharing","anchorType":"LINK","userId":null,"linkMetadata":null}],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:533f4fdc5311_58":{"__typename":"Paragraph","id":"533f4fdc5311_58","name":"517f","type":"H3","href":null,"layout":null,"metadata":null,"text":"Conclusion","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:533f4fdc5311_59":{"__typename":"Paragraph","id":"533f4fdc5311_59","name":"4ce0","type":"P","href":null,"layout":null,"metadata":null,"text":"It took our team of 8 people only 9 days to successfully deliver the desired results. We’re glad to have made some key decisions during this process that allowed us to quickly achieve what we wanted — like choosing AWS, Kubernetes, and Gatling Enterprise. We hope to work on several such innovative initiatives that redefine the future of payments in our country and beyond. Thanks for reading and hope you found this helpful!","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:533f4fdc5311_60":{"__typename":"Paragraph","id":"533f4fdc5311_60","name":"2f44","type":"P","href":null,"layout":null,"metadata":null,"text":"Credits","hasDropCap":null,"dropCapImage":null,"markups":[{"__typename":"Markup","type":"STRONG","start":0,"end":7,"href":null,"anchorType":null,"userId":null,"linkMetadata":null}],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:533f4fdc5311_61":{"__typename":"Paragraph","id":"533f4fdc5311_61","name":"61f9","type":"P","href":null,"layout":null,"metadata":null,"text":"Developers who made this feat possible — Mrinal Trivedi, Amit Raj, Ramki Gaddipati, Dipit Grover, Amit G, Shubham Jha, Vivek G, Mohd. Tanveer, Shaik Idris Ali","hasDropCap":null,"dropCapImage":null,"markups":[{"__typename":"Markup","type":"A","start":41,"end":55,"href":null,"anchorType":"USER","userId":"af0ca1e40ca2","linkMetadata":null},{"__typename":"Markup","type":"A","start":57,"end":65,"href":null,"anchorType":"USER","userId":"81a6ab14ba84","linkMetadata":null},{"__typename":"Markup","type":"A","start":67,"end":82,"href":null,"anchorType":"USER","userId":"a5de0a2c4fc8","linkMetadata":null},{"__typename":"Markup","type":"A","start":84,"end":96,"href":null,"anchorType":"USER","userId":"70327379897f","linkMetadata":null},{"__typename":"Markup","type":"A","start":119,"end":124,"href":null,"anchorType":"USER","userId":"a517d95cce54","linkMetadata":null},{"__typename":"Markup","type":"A","start":149,"end":158,"href":null,"anchorType":"USER","userId":"66663b64e720","linkMetadata":null},{"__typename":"Markup","type":"EM","start":0,"end":38,"href":null,"anchorType":null,"userId":null,"linkMetadata":null}],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:533f4fdc5311_62":{"__typename":"Paragraph","id":"533f4fdc5311_62","name":"b0de","type":"P","href":null,"layout":null,"metadata":null,"text":"Author — Preethi Shreeya, Phani Marupaka","hasDropCap":null,"dropCapImage":null,"markups":[{"__typename":"Markup","type":"A","start":9,"end":24,"href":null,"anchorType":"USER","userId":"d558dad921b","linkMetadata":null},{"__typename":"Markup","type":"A","start":26,"end":40,"href":null,"anchorType":"USER","userId":"fd174b1c67b8","linkMetadata":null},{"__typename":"Markup","type":"EM","start":0,"end":6,"href":null,"anchorType":null,"userId":null,"linkMetadata":null}],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"PostViewerEdge:postId:30699cc273dc-viewerId:lo_df5bd60206c5":{"__typename":"PostViewerEdge","shouldIndexPostForExternalSearch":true,"id":"postId:30699cc273dc-viewerId:lo_df5bd60206c5"},"Tag:fintech":{"__typename":"Tag","id":"fintech","displayTitle":"Fintech","normalizedTagSlug":"fintech"},"Tag:technology":{"__typename":"Tag","id":"technology","displayTitle":"Technology","normalizedTagSlug":"technology"},"Tag:payments":{"__typename":"Tag","id":"payments","displayTitle":"Payments","normalizedTagSlug":"payments"},"Tag:security":{"__typename":"Tag","id":"security","displayTitle":"Security","normalizedTagSlug":"security"},"Tag:aws":{"__typename":"Tag","id":"aws","displayTitle":"AWS","normalizedTagSlug":"aws"},"Post:30699cc273dc":{"__typename":"Post","id":"30699cc273dc","collection":null,"content({\"postMeteringOptions\":{}})":{"__typename":"PostContent","isLockedPreviewOnly":false,"bodyModel":{"__typename":"RichText","sections":[{"__typename":"Section","name":"7cae","startIndex":0,"textLayout":null,"imageLayout":null,"backgroundImage":null,"videoLayout":null,"backgroundVideo":null}],"paragraphs":[{"__ref":"Paragraph:533f4fdc5311_0"},{"__ref":"Paragraph:533f4fdc5311_1"},{"__ref":"Paragraph:533f4fdc5311_2"},{"__ref":"Paragraph:533f4fdc5311_3"},{"__ref":"Paragraph:533f4fdc5311_4"},{"__ref":"Paragraph:533f4fdc5311_5"},{"__ref":"Paragraph:533f4fdc5311_6"},{"__ref":"Paragraph:533f4fdc5311_7"},{"__ref":"Paragraph:533f4fdc5311_8"},{"__ref":"Paragraph:533f4fdc5311_9"},{"__ref":"Paragraph:533f4fdc5311_10"},{"__ref":"Paragraph:533f4fdc5311_11"},{"__ref":"Paragraph:533f4fdc5311_12"},{"__ref":"Paragraph:533f4fdc5311_13"},{"__ref":"Paragraph:533f4fdc5311_14"},{"__ref":"Paragraph:533f4fdc5311_15"},{"__ref":"Paragraph:533f4fdc5311_16"},{"__ref":"Paragraph:533f4fdc5311_17"},{"__ref":"Paragraph:533f4fdc5311_18"},{"__ref":"Paragraph:533f4fdc5311_19"},{"__ref":"Paragraph:533f4fdc5311_20"},{"__ref":"Paragraph:533f4fdc5311_21"},{"__ref":"Paragraph:533f4fdc5311_22"},{"__ref":"Paragraph:533f4fdc5311_23"},{"__ref":"Paragraph:533f4fdc5311_24"},{"__ref":"Paragraph:533f4fdc5311_25"},{"__ref":"Paragraph:533f4fdc5311_26"},{"__ref":"Paragraph:533f4fdc5311_27"},{"__ref":"Paragraph:533f4fdc5311_28"},{"__ref":"Paragraph:533f4fdc5311_29"},{"__ref":"Paragraph:533f4fdc5311_30"},{"__ref":"Paragraph:533f4fdc5311_31"},{"__ref":"Paragraph:533f4fdc5311_32"},{"__ref":"Paragraph:533f4fdc5311_33"},{"__ref":"Paragraph:533f4fdc5311_34"},{"__ref":"Paragraph:533f4fdc5311_35"},{"__ref":"Paragraph:533f4fdc5311_36"},{"__ref":"Paragraph:533f4fdc5311_37"},{"__ref":"Paragraph:533f4fdc5311_38"},{"__ref":"Paragraph:533f4fdc5311_39"},{"__ref":"Paragraph:533f4fdc5311_40"},{"__ref":"Paragraph:533f4fdc5311_41"},{"__ref":"Paragraph:533f4fdc5311_42"},{"__ref":"Paragraph:533f4fdc5311_43"},{"__ref":"Paragraph:533f4fdc5311_44"},{"__ref":"Paragraph:533f4fdc5311_45"},{"__ref":"Paragraph:533f4fdc5311_46"},{"__ref":"Paragraph:533f4fdc5311_47"},{"__ref":"Paragraph:533f4fdc5311_48"},{"__ref":"Paragraph:533f4fdc5311_49"},{"__ref":"Paragraph:533f4fdc5311_50"},{"__ref":"Paragraph:533f4fdc5311_51"},{"__ref":"Paragraph:533f4fdc5311_52"},{"__ref":"Paragraph:533f4fdc5311_53"},{"__ref":"Paragraph:533f4fdc5311_54"},{"__ref":"Paragraph:533f4fdc5311_55"},{"__ref":"Paragraph:533f4fdc5311_56"},{"__ref":"Paragraph:533f4fdc5311_57"},{"__ref":"Paragraph:533f4fdc5311_58"},{"__ref":"Paragraph:533f4fdc5311_59"},{"__ref":"Paragraph:533f4fdc5311_60"},{"__ref":"Paragraph:533f4fdc5311_61"},{"__ref":"Paragraph:533f4fdc5311_62"}]},"validatedShareKey":"","shareKeyCreator":null},"creator":{"__ref":"User:620b01ce72fe"},"inResponseToEntityType":null,"isLocked":false,"isMarkedPaywallOnly":false,"lockedSource":"LOCKED_POST_SOURCE_NONE","mediumUrl":"https:\u002F\u002Fzetablogs.medium.com\u002Ftuning-cipher-to-1m-tps-for-ease-of-scaling-of-online-authentications-part-2-30699cc273dc","primaryTopic":null,"topics":[{"__typename":"Topic","slug":"cybersecurity"}],"isPublished":true,"latestPublishedVersion":"533f4fdc5311","visibility":"PUBLIC","postResponses":{"__typename":"PostResponses","count":0},"clapCount":61,"allowResponses":false,"isLimitedState":false,"title":"Tuning Cipher to 1M TPS for ease of scaling of online authentications (Part 2)","isSeries":false,"sequence":null,"uniqueSlug":"tuning-cipher-to-1m-tps-for-ease-of-scaling-of-online-authentications-part-2-30699cc273dc","socialTitle":"","socialDek":"","canonicalUrl":"","metaDescription":"","latestPublishedAt":1618067241815,"readingTime":4.806918238993711,"previewContent":{"__typename":"PreviewContent","subtitle":"We went through the overall idea behind the demo in Part 1. Part 2 will inform us about how we achieved the feat, highlighting the…"},"previewImage":{"__ref":"ImageMetadata:0*uCzHLS80DwWiVZMq"},"isShortform":false,"seoTitle":"","firstPublishedAt":1617248934810,"updatedAt":1655208702586,"shortformType":"SHORTFORM_TYPE_LINK","seoDescription":"","viewerEdge":{"__ref":"PostViewerEdge:postId:30699cc273dc-viewerId:lo_df5bd60206c5"},"isSuspended":false,"license":"ALL_RIGHTS_RESERVED","tags":[{"__ref":"Tag:fintech"},{"__ref":"Tag:technology"},{"__ref":"Tag:payments"},{"__ref":"Tag:security"},{"__ref":"Tag:aws"}],"isNewsletter":false,"statusForCollection":null,"pendingCollection":null,"detectedLanguage":"en","wordCount":1053,"layerCake":0,"responsesLocked":false}}</script><script>window.__MIDDLEWARE_STATE__={"session":{"xsrf":""},"cache":{"cacheStatus":"MISS"}}</script><script src="https://cdn-client.medium.com/lite/static/js/manifest.aa9242f7.js"></script><script src="https://cdn-client.medium.com/lite/static/js/9865.1496d74a.js"></script><script src="https://cdn-client.medium.com/lite/static/js/main.e556b4ac.js"></script><script src="https://cdn-client.medium.com/lite/static/js/instrumentation.d9108df7.chunk.js"></script> <script src="https://cdn-client.medium.com/lite/static/js/reporting.ff22a7a5.chunk.js"></script> <script src="https://cdn-client.medium.com/lite/static/js/5049.d1ead72d.chunk.js"></script> <script src="https://cdn-client.medium.com/lite/static/js/4810.6318add7.chunk.js"></script> <script src="https://cdn-client.medium.com/lite/static/js/6618.db187378.chunk.js"></script> <script src="https://cdn-client.medium.com/lite/static/js/2707.b0942613.chunk.js"></script> <script src="https://cdn-client.medium.com/lite/static/js/9977.5b3eb23a.chunk.js"></script> <script src="https://cdn-client.medium.com/lite/static/js/8599.1ab63137.chunk.js"></script> <script src="https://cdn-client.medium.com/lite/static/js/5250.9f9e01d2.chunk.js"></script> <script src="https://cdn-client.medium.com/lite/static/js/5787.e66a3a4d.chunk.js"></script> <script src="https://cdn-client.medium.com/lite/static/js/2648.26563adf.chunk.js"></script> <script src="https://cdn-client.medium.com/lite/static/js/8393.826a25fb.chunk.js"></script> <script src="https://cdn-client.medium.com/lite/static/js/3104.c3413b66.chunk.js"></script> <script src="https://cdn-client.medium.com/lite/static/js/3735.afb7e926.chunk.js"></script> <script src="https://cdn-client.medium.com/lite/static/js/5642.8ad8a900.chunk.js"></script> <script src="https://cdn-client.medium.com/lite/static/js/6546.cd03f950.chunk.js"></script> <script src="https://cdn-client.medium.com/lite/static/js/6834.08de95de.chunk.js"></script> <script src="https://cdn-client.medium.com/lite/static/js/7346.72622eb9.chunk.js"></script> <script src="https://cdn-client.medium.com/lite/static/js/2420.2a5e2d95.chunk.js"></script> <script src="https://cdn-client.medium.com/lite/static/js/839.ca7937c2.chunk.js"></script> <script src="https://cdn-client.medium.com/lite/static/js/7975.d195c6f1.chunk.js"></script> <script src="https://cdn-client.medium.com/lite/static/js/2106.21ff89d3.chunk.js"></script> <script src="https://cdn-client.medium.com/lite/static/js/7394.094844de.chunk.js"></script> <script src="https://cdn-client.medium.com/lite/static/js/2961.00a48598.chunk.js"></script> <script src="https://cdn-client.medium.com/lite/static/js/8204.c4082863.chunk.js"></script> <script src="https://cdn-client.medium.com/lite/static/js/4391.59acaed3.chunk.js"></script> <script src="https://cdn-client.medium.com/lite/static/js/PostPage.MainContent.1387c5dc.chunk.js"></script><script>window.main();</script><script>(function(){function c(){var b=a.contentDocument||a.contentWindow.document;if(b){var d=b.createElement('script');d.innerHTML="window.__CF$cv$params={r:'8e8dee26b9219f71',t:'MTczMjY2NjU5NS4wMDAwMDA='};var a=document.createElement('script');a.nonce='';a.src='/cdn-cgi/challenge-platform/scripts/jsd/main.js';document.getElementsByTagName('head')[0].appendChild(a);";b.getElementsByTagName('head')[0].appendChild(d)}}if(document.body){var a=document.createElement('iframe');a.height=1;a.width=1;a.style.position='absolute';a.style.top=0;a.style.left=0;a.style.border='none';a.style.visibility='hidden';document.body.appendChild(a);if('loading'!==document.readyState)c();else if(window.addEventListener)document.addEventListener('DOMContentLoaded',c);else{var e=document.onreadystatechange||function(){};document.onreadystatechange=function(b){e(b);'loading'!==document.readyState&&(document.onreadystatechange=e,c())}}}})();</script></body></html>

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