1"use strict";(self.webpackChunkjavascript_bit=self.webpackChunkjavascript_bit||[]).push([[9565],{259:function(e,t,n){n.d(t,{Zo:function(){return u},ah:function(){return c}});var a=n(9142);function r(e,t,n){return(t=(0,a.Z)(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var l=n(7294);function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function o(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?i(Object(n),!0).forEach((function(t){r(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):i(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}var s=l.createContext({});function c(e){var t=l.useContext(s);return l.useMemo((function(){return"function"==typeof e?e(t):o(o({},t),e)}),[t,e])}var m={};function u(e){var t,n=e.components,a=e.children;return t=e.disableParentContext?"function"==typeof n?n({}):n||m:c(n),l.createElement(s.Provider,{value:t},a)}},9323:function(e,t,n){n.r(t),n.d(t,{Head:function(){return A},default:function(){return h}});var a=n(259),r=n(7294);function l(e){var t=Object.assign({p:"p",span:"span",h2:"h2",ol:"ol",li:"li",strong:"strong",h3:"h3",h4:"h4"},(0,a.ah)(),e.components);return r.createElement(r.Fragment,null,r.createElement(t.p,null,r.createElement(t.span,{dangerouslySetInnerHTML:{__html:'<span\n class="gatsby-resp-image-wrapper"\n style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 630px; "\n >\n <a\n class="gatsby-resp-image-link"\n href="/static/fb87889d9425bebebfa3792d0ed074eb/90ca0/marek-piwnicki-AW8yKKpebys-unsplash.jpg"\n style="display: block"\n target="_blank"\n rel="noopener"\n >\n <span\n class="gatsby-resp-image-background-image"\n style="padding-bottom: 62.65822784810127%; position: relative; bottom: 0; left: 0; background-image: url(\'data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAANABQDASIAAhEBAxEB/8QAFwAAAwEAAAAAAAAAAAAAAAAAAAIDBP/EABUBAQEAAAAAAAAAAAAAAAAAAAID/9oADAMBAAIQAxAAAAFcQkqSKDP/xAAbEAACAwADAAAAAAAAAAAAAAAAAQIDEgQTFP/aAAgBAQABBQKfERKhowz02M7ZM2z/xAAYEQACAwAAAAAAAAAAAAAAAAAAAQIRIf/aAAgBAwEBPwG4Mw//xAAXEQEBAQEAAAAAAAAAAAAAAAABAAIh/9oACAECAQE/AQ2Xb//EABYQAQEBAAAAAAAAAAAAAAAAABAhMf/aAAgBAQAGPwKOv//EABkQAQACAwAAAAAAAAAAAAAAAAEQMQBBgf/aAAgBAQABPyEO52TG5hvMH//aAAwDAQACAAMAAAAQ0w//xAAXEQEAAwAAAAAAAAAAAAAAAAAAARFB/9oACAEDAQE/EJwKf//EABcRAQADAAAAAAAAAAAAAAAAAAABETH/2gAIAQIBAT8Q0JWf/8QAHBABAQEAAQUAAAAAAAAAAAAAAREAIUFxgZGx/9oACAEBAAE/EEGu9WcY0MgyPrN0nnoSYFu+cQ5+7//Z\'); background-size: cover; display: block;"\n ></span>\n <img\n class="gatsby-resp-image-image"\n alt="A sunset landscape"\n title="A sunset landscape"\n src="/static/fb87889d9425bebebfa3792d0ed074eb/828fb/marek-piwnicki-AW8yKKpebys-unsplash.jpg"\n srcset="/static/fb87889d9425bebebfa3792d0ed074eb/ff44c/marek-piwnicki-AW8yKKpebys-unsplash.jpg 158w,\n/static/fb87889d9425bebebfa3792d0ed074eb/a6688/marek-piwnicki-AW8yKKpebys-unsplash.jpg 315w,\n/static/fb87889d9425bebebfa3792d0ed074eb/828fb/marek-piwnicki-AW8yKKpebys-unsplash.jpg 630w,\n/static/fb87889d9425bebebfa3792d0ed074eb/0ede0/marek-piwnicki-AW8yKKpebys-unsplash.jpg 945w,\n/static/fb87889d9425bebebfa3792d0ed074eb/3ac88/marek-piwnicki-AW8yKKpebys-unsplash.jpg 1260w,\n/static/fb87889d9425bebebfa3792d0ed074eb/90ca0/marek-piwnicki-AW8yKKpebys-unsplash.jpg 4683w"\n sizes="(max-width: 630px) 100vw, 630px"\n style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;"\n loading="lazy"\n decoding="async"\n />\n </a>\n </span>'}}),"\n",r.createElement("span",null,"Photo by ",r.createElement("a",{href:"https://unsplash.com/@marekpiwnicki?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText"},"Marek Piwnicki")," on ",r.createElement("a",{href:"https://unsplash.com/?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText"},"Unsplash"))),"\n",r.createElement(t.h2,null,"Problem Statement"),"\n",r.createElement(t.p,null,"Consider that you have to build a checkout system. The microservice should have the following functionalities"),"\n",r.createElement(t.ol,null,"\n",r.createElement(t.li,null,"API to create an empty cart and associate it with a user"),"\n",r.createElement(t.li,null,"API to add items to the cart"),"\n",r.createElement(t.li,null,"API to delete items from the cart"),"\n",r.createElement(t.li,null,"API to empty the cart"),"\n"),"\n",r.createElement(t.p,null,r.createElement(t.strong,null,"Part 1")," - Based on the requirements given, write down functional requirements for the service. Take assumptions and write down non-functional requirements for the service"),"\n",r.createElement(t.p,null,r.createElement(t.strong,null,"Part 2")," - Break down decisions that have to be taken to build this service. Divide them into high cost and low-cost decisions"),"\n",r.createElement(t.p,null,r.createElement(t.strong,null,"Part 3")," - Use domain-driven design and relating to real-world domains to document how would a user interact with the service. Document what additional conditions happen in the real world that is not given as part of the requirements."),"\n",r.createElement(t.p,null,r.createElement(t.strong,null,"Part 4")," - Write down what business metrics and system metrics should be generated by the system"),"\n",r.createElement(t.h2,null,"Solution"),"\n",r.createElement(t.p,null,"The Cart service will be a RESTful service and our consumers should be able to access the service via the following APIs. There are some assumptions that we make while creating the design for this microservice."),"\n",r.createElement(t.h3,null,"Part 1 - Based on the requirements given, write down functional requirements for the service. Take assumptions and write down non-functional requirements for the service"),"\n",r.createElement(t.h4,null,"Assumptions:"),"\n",r.createElement(t.ol,null,"\n",r.createElement(t.li,null,"\n",r.createElement(t.p,null,"There will also be a few entities like a ",r.createElement(t.span,{dangerouslySetInnerHTML:{__html:'<code class="language-text">User</code>'}})," that we will be using during the course of designing this microservice. We are assuming that these entities exist and they will also be available via an API."),"\n"),"\n",r.createElement(t.li,null,"\n",r.createElement(t.p,null,"The Cart microservice should be a part of a bigger Checkout system which will include the Cart microservice communicating in tandem with the Payments microservice. Certain assumptions will be made about the Payments microservice."),"\n"),"\n",r.createElement(t.li,null,"\n",r.createElement(t.p,null,"We are assuming the existence of another service, namely the Coupon microservice which will interact with the Cart microservice to tally and calculate the total price and the discount amount. We assume that the Coupon microservice is functional for the case of this exercise."),"\n"),"\n"),"\n",r.createElement(t.h4,null,"TLDR;"),"\n",r.createElement(t.p,null,r.createElement(t.strong,null,"Assume the existence of the following entities:")),"\n",r.createElement(t.ol,null,"\n",r.createElement(t.li,null,"User - Has a ",r.createElement(t.span,{dangerouslySetInnerHTML:{__html:'<code class="language-text">userId</code>'}})," attribute"),"\n",r.createElement(t.li,null,"Cart - Consists of CartItems and is associated to a user"),"\n"),"\n",r.createElement(t.p,null,r.createElement(t.strong,null,"Assume that the following microservices are functional:")),"\n",r.createElement(t.ol,null,"\n",r.createElement(t.li,null,"Coupons Microservice - To check the validity of coupons"),"\n",r.createElement(t.li,null,"Payments Microservice - To make online payments"),"\n"),"\n",r.createElement(t.h4,null,"Functional requirements for the Cart Service:"),"\n",r.createElement(t.ol,null,"\n",r.createElement(t.li,null,r.createElement(t.strong,null,"API")," - Given a user, create an empty cart and associate it with a user"),"\n",r.createElement(t.li,null,r.createElement(t.strong,null,"API")," - Given a user, add an item to a cart"),"\n",r.createElement(t.li,null,r.createElement(t.strong,null,"API")," - Given a user, delete the item from the cart, if it exists in the cart"),"\n",r.createElement(t.li,null,r.createElement(t.strong,null,"API")," - Empty the cart"),"\n",r.createElement(t.li,null,r.createElement(t.strong,null,"Entity")," - User - We assume the entity exists and there's a unique id ",r.createElement(t.span,{dangerouslySetInnerHTML:{__html:'<code class="language-text">userId</code>'}})," associated with a user"),"\n",r.createElement(t.li,null,r.createElement(t.strong,null,"Entity")," - CartItem - A representation of the item when inside a cart. Will have a unique item id called ",r.createElement(t.span,{dangerouslySetInnerHTML:{__html:'<code class="language-text">itemId</code>'}})," and a ",r.createElement(t.span,{dangerouslySetInnerHTML:{__html:'<code class="language-text">quantity</code>'}}),"."),"\n",r.createElement(t.li,null,r.createElement(t.strong,null,"API")," - Given a cart, fetch the total amount of the items in the cart"),"\n",r.createElement(t.li,null,r.createElement(t.strong,null,"API")," - Given a cart, apply a coupon from the user"),"\n"),"\n",r.createElement(t.h4,null,"Non-Functional requirements"),"\n",r.createElement(t.ol,null,"\n",r.createElement(t.li,null,"Logging"),"\n",r.createElement(t.li,null,"Loa
1d Balancer/Proxy"),"\n",r.createElement(t.li,null,"API Protocol"),"\n",r.createElement(t.li,null,"Tracing library"),"\n"),"\n",r.createElement(t.h3,null,"Part 2 - Break down decisions that have to be taken to build this service. Divide them into high cost and low-cost decisions"),"\n",r.createElement(t.p,null,"The decisions to be taken for the above functional and non-functional requirements are grouped below:"),"\n",r.createElement(t.h4,null,"Low Cost Decisions:"),"\n",r.createElement(t.ol,null,"\n",r.createElement(t.li,null,"Logging Library"),"\n",r.createElement(t.li,null,"Tracing Library"),"\n",r.createElement(t.li,null,"Caching - Perhaps not needed for the given API"),"\n"),"\n",r.createElement(t.h4,null,"High Cost Decisions"),"\n",r.createElement(t.ol,null,"\n",r.createElement(t.li,null,"Load Balancer"),"\n",r.createElement(t.li,null,"API Protocol"),"\n",r.createElement(t.li,null,"Logging Infrastructure"),"\n"),"\n",r.createElement(t.h3,null,"Part 3 - Use domain-driven design and relating to real-world domains to document how would a user interact with the service. Document what additional conditions happen in the real world that is not given as part of the requirements."),"\n",r.createElement(t.p,null,"Real-life physical carts have wheels, but we don't need them here. However, we do need the capability for the cart to hold items, the functionality to add and remove items and reflect the total cost of the items in the cart."),"\n",r.createElement(t.h4,null,"Following are the API interactions that a user would do with this cart:"),"\n",r.createElement(t.ol,null,"\n",r.createElement(t.li,null,"\n",r.createElement(t.p,null,"Get a cart for a particular user\nIf a cart exists, then it's data representation can be fetched for a user.\nIf a cart does not exist for a user, then we can create a cart object and send it off."),"\n"),"\n",r.createElement(t.li,null,"\n",r.createElement(t.p,null,"Add an item\nGiven a cart, the user should be able to add an item and the quantity to the cart."),"\n"),"\n",r.createElement(t.li,null,"\n",r.createElement(t.p,null,"Remove an item\nGiven a cart with some item, the user should be able to remove that item from the cart either completely or by decreasing the quantity of that item. Modelling against the real world, when the user removes the item completely from the cart by decreasing it's quantity to zero, then the item should be removed completely from the object representation of the cart."),"\n"),"\n",r.createElement(t.li,null,"\n",r.createElement(t.p,null,'Empty the cart\nThe user can abandon a full shopping cart in the store in the physical world, similarly we give the user an option to "abandon" the cart by giving them the option to empty the cart. We remove all items from the representation of the cart.'),"\n"),"\n"),"\n",r.createElement(t.h3,null,"Part 4 - Write down what business metrics and system metrics should be generated by the system"),"\n",r.createElement(t.h4,null,"We care about the following system metrics:"),"\n",r.createElement(t.ol,null,"\n",r.createElement(t.li,null,"Performance & Latency of each API"),"\n",r.createElement(t.li,null,"Disk usage and latency caused by logging systems"),"\n",r.createElement(t.li,null,"CPU, Memory, Disk space of the server"),"\n",r.createElement(t.li,null,"Error and success rates of each API"),"\n",r.createElement(t.li,null,"Resource usage"),"\n",r.createElement(t.li,null,"Processes"),"\n"),"\n",r.createElement(t.h4,null,"For business metrics, these are the line items:"),"\n",r.createElement(t.ol,null,"\n",r.createElement(t.li,null,"Analytics of the items, which items are often added to a cart and which are removed."),"\n",r.createElement(t.li,null,"How many times the Empty cart functionality is used."),"\n",r.createElement(t.li,null,"How many times a user goes into the checkout flow from the cart."),"\n"))}var i=function(e){void 0===e&&(e={});var t=Object.assign({},(0,a.ah)(),e.components).wrapper;return t?r.createElement(t,e,r.createElement(l,e)):l(e)},o=n(3688),s=n(2198),c=n(9357),m=n(4992),u=n(6376),d=function(e){var t,n=e.data,a=n.previous,l=n.next,i=n.site,c=n.mdx,d=e.location,A=e.page
1Context,h=e.children,g=(null===(t=i.siteMetadata)||void 0===t?void 0:t.title)||"Title",p=(A||{}).seriesPosts,E=c.fields;return r.createElement(s.Z,{location:d,title:g},r.createElement("article",{className:"blog-post",itemScope:!0,itemType:"http://schema.org/Article"},r.createElement("header",null,r.createElement("h1",{itemProp:"headline"},c.frontmatter.title),r.createElement("p",null,c.frontmatter.category&&r.createElement("span",{className:"category-pill"},c.frontmatter.category),c.frontmatter.date,(null==E?void 0:E.wordCount)>0&&r.createElement("span",{style:{marginLeft:"0.75rem",color:"inherit",opacity:.6}},"· ",Math.max(1,Math.round(E.wordCount/200))," min read"))),c.frontmatter.series&&p&&p.length>0&&r.createElement(u.Z,{seriesSlug:c.frontmatter.series,currentSlug:c.fields.slug,seriesPosts:p}),r.createElement("section",{itemProp:"articleBody"},h),r.createElement(m.Z),r.createElement("hr"),r.createElement("footer")),r.createElement("nav",{className:"blog-post-nav"},r.createElement("ul",{style:{display:"flex",flexWrap:"wrap",justifyContent:"space-between",listStyle:"none",padding:0}},r.createElement("li",null,a&&r.createElement(o.Link,{to:a.fields.slug,rel:"prev"},"â ",a.frontmatter.title)),r.createElement("li",null,l&&r.createElement(o.Link,{to:l.fields.slug,rel:"next"},l.frontmatter.title," â")))))},A=function(e){var t=e.data.mdx;return r.createElement(c.Z,{title:t.frontmatter.title,description:t.frontmatter.description||t.excerpt})};function h(e){return r.createElement(d,e,r.createElement(i,e))}},6376:function(e,t,n){var a=n(2982),r=n(7294),l=n(3688),i={"browser-concurrency":{title:"Browser Concurrency",description:"A practical guide to sharing data and coordinating work across browser threads â tabs, workers, and shared memory."},"frontend-system-design":{title:"Frontend System Design Interview Prep",description:"A complete guide to acing frontend system design interviews â from the RADIO framework to real-world component designs asked at FAANG."}};t.Z=function(e){var t=e.seriesSlug,n=e.currentSlug,o=e.seriesPosts;if(!t||!o||0===o.length)return null;var s=i[t]||{title:t,description:""},c=(0,a.Z)(o).sort((function(e,t){return e.seriesOrder-t.seriesOrder})),m=c.findIndex((function(e){return e.slug===n})),u=m>=0?"Part "+(m+1)+" of "+c.length:c.length+" articles";return r.createElement("nav",{"aria-label":s.title+" series navigation",style:{borderLeft:"4px solid #4f46e5",background:"#f0f4ff",borderRadius:"0 6px 6px 0",padding:"1rem 1.25rem",marginBottom:"2rem",fontFamily:"var(--fontFamily-sans, system-ui, sans-serif)"}},r.createElement("p",{style:{margin:"0 0 0.75rem 0",fontSize:"0.95rem",fontWeight:700,color:"#1e1b4b",letterSpacing:"-0.01em"}},"ð ",s.title," â ",u),r.createElement("ol",{style:{listStyle:"none",padding:0,margin:"0 0 0.75rem 0"}},c.map((function(e,t){var a=e.slug===n,i=t<m,o={marginBottom:"0.35rem",fontSize:"0.9rem",display:"flex",alignItems:"baseline",gap:"0.4rem"},s=a?"â":i?"â":"  ",c={flexShrink:0,width:"1.2em",color:a?"#4f46e5":i?"#6b7280":"#9ca3af",fontWeight:a?700:400};return a?r.createElement("li",{key:e.slug,style:o,"aria-current":"page"},r.createElement("span",{style:c},s),r.createElement("strong",{style:{color:"#1e1b4b"}},t+1,". ",e.title)):r.createElement("li",{key:e.slug,style:o},r.createElement("span",{style:c},s),r.createElement(l.Link,{to:e.slug,style:{color:i?"#6b7280":"#4f46e5",textDecoration:"none"}},t+1,". ",e.title))}))),r.createElement(l.Link,{to:"/series/"+t+"/",style:{fontSize:"0.85rem",color:"#4f46e5",textDecoration:"none",fontWeight:600}},"View all articles in this series â"))}},4992:function(e,t,n){var a=n(7294);t.Z=function(){var e=(0,a.useState)(!1),t=e[0],n=e[1];(0,a.useEffect)((function(){sessionStorage.getItem("hideKofi")&&n(!0)}),[]);return t?null:a.createElement(a.Fragment,null,a.createElement("a",{target:"_blank",rel:"noreferrer",href:"https://ko-fi.com/javascriptbit"},"Donate"),a.createElement("button",{style:{marginLeft:"1em"},onClick:function(e){e.preventDefault(),n(!0),sessionStorage.setItem("hideKofi","true")}},"Hide for now"))}},2198:function(e,t,n){n.d(t,{Z:function(){return s}});var a=n(7294),r=n(3688),l=n(259);var i=function(){var e=a.useState(null),t=e[0],n=e[1];a.useEffect((function(){var e=document.documentElement.getAttribute("data-theme")||"light";n(e)}),[]);return null===t?a.createElement("span",{style:{width:32,display:"inline-block"}}):a.createElement("button",{onClick:function(){var e="dark"===t?"light":"dark";n(e),document.documentElement.setAttribute("data-theme",e);try{localStorage.setItem("jsbit-theme",e)}catch(a){}},"aria-label":"dark"===t?"Switch to light mode":"Switch to dark mode",title:"dark"===t?"Light mode":"Dark mode",style:{background:"none",border:"none",cursor:"pointer",fontSize:"1.2rem",padding:"4px 8px",borderRadius:"6px",lineHeight:1,color:"inherit",opacity:.75,transition:"opacity 0.15s ease"},onMouseEnter:function(e){return e.currentTarget.style.opacity="1"},onMouseLeave:function(e){return e.currentTarget.style.opacity="0.75"}},"dark"===t?"âï¸":"ð")},o={FullscreenContainer:function(e){var t=e.child,n=(0,a.useState)(!1),r=n[0],l=n[1],i=(0,a.useCallback)((function(e){"Enter"===e.key?l(!r):"Escape"===e.key&&l(!1)}),[r]);return a.createElement("div",{className:"fullscreen "+(r?"active":"")},a.createElement("div",{className:"buttons-container"},a.createElement("span",{tabIndex:-1,role:"button",onClick:function(){return l(!r)},onKeyUp:i},a.createElement("img",{src:"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/PjxzdmcgaGVpZ2h0PSIxNHB4IiB2ZXJzaW9uPSIxLjEiIHZpZXdCb3g9IjAgMCAxNCAxNCIgd2lkdGg9IjE0cHgiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6c2tldGNoPSJodHRwOi8vd3d3LmJvaGVtaWFuY29kaW5nLmNvbS9za2V0Y2gvbnMiIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj48dGl0bGUvPjxkZXNjLz48ZGVmcy8+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIiBpZD0iUGFnZS0xIiBzdHJva2U9Im5vbmUiIHN0cm9rZS13aWR0aD0iMSI+PGcgZmlsbD0iIzAw
1MDAwMCIgaWQ9IkNvcmUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0yMTUuMDAwMDAwLCAtMjU3LjAwMDAwMCkiPjxnIGlkPSJmdWxsc2NyZWVuIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyMTUuMDAwMDAwLCAyNTcuMDAwMDAwKSI+PHBhdGggZD0iTTIsOSBMMCw5IEwwLDE0IEw1LDE0IEw1LDEyIEwyLDEyIEwyLDkgTDIsOSBaIE0wLDUgTDIsNSBMMiwyIEw1LDIgTDUsMCBMMCwwIEwwLDUgTDAsNSBaIE0xMiwxMiBMOSwxMiBMOSwxNCBMMTQsMTQgTDE0LDkgTDEyLDkgTDEyLDEyIEwxMiwxMiBaIE05LDAgTDksMiBMMTIsMiBMMTIsNSBMMTQsNSBMMTQsMCBMOSwwIEw5LDAgWiIgaWQ9IlNoYXBlIi8+PC9nPjwvZz48L2c+PC9zdmc+",alt:"Toggle Full Screen",color:"currentColor"}))),t)}},s=function(e){var t,n=e.location,s=e.title,c=e.children,m="/"===n.pathname,u=a.useState(2024),d=u[0],A=u[1];return a.useEffect((function(){A((new Date).getFullYear())}),[]),t=m?a.createElement("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between"}},a.createElement("h1",{className:"main-heading"},a.createElement(r.Link,{to:"/"},s)),a.createElement(i,null)):a.createElement("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between"}},a.createElement(r.Link,{className:"header-link-home",to:"/"},s),a.createElement(i,null)),a.createElement(l.Zo,{components:o},a.createElement("div",{className:"global-wrapper","data-is-root-path":m},a.createElement("header",{className:"global-header"},t),a.createElement("main",null,c),a.createElement("footer",null,"© ",d,", Built with"," ",a.createElement("a",{href:"https://www.gatsbyjs.com"},"Gatsby"))))}},9357:function(e,t,n){var a=n(7294),r=n(3688);t.Z=function(e){var t,n,l,i=e.description,o=e.title,s=e.children,c=(0,r.useStaticQuery)("2841359383").site,m=i||c.siteMetadata.description,u=null===(t=c.siteMetadata)||void 0===t?void 0:t.title;return a.createElement(a.Fragment,null,a.createElement("title",null,u?o+" | "+u:o),a.createElement("meta",{name:"description",content:m}),a.createElement("meta",{property:"og:title",content:o}),a.createElement("meta",{property:"og:description",content:m}),a.createElement("meta",{property:"og:type",content:"website"}),a.createElement("meta",{name:"twitter:card",content:"summary"}),a.createElement("meta",{name:"twitter:creator",content:(null===(n=c.siteMetadata)||void 0===n||null===(l=n.social)||void 0===l?void 0:l.twitter)||""}),a.createElement("meta",{name:"twitter:title",content:o}),a.createElement("meta",{name:"twitter:description",content:m}),s)}}}]); 2//# sourceMappingURL=component---src-templates-blog-post-js-content-file-path-opt-build-repo-content-blog-designing-microservices-where-to-begin-index-md-a156928c1e0110e274a8.js.map
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.