github.com/sentienttechnologies/studio-go-runner@v0.0.0-20201118202441-6d21f2ced8ee/docs/slides/index.html (about) 1 <!doctype html> 2 <html> 3 <head> 4 <!-- 5 npm install 6 npm start 7 --> 8 <meta charset="utf-8"> 9 10 <title>Services Platform - AWS → K8s → Istio</title> 11 12 <meta name="description" content="Introduction to Paas for Platform Services"> 13 <meta name="author" content="karl Mutch"> 14 15 <meta name="apple-mobile-web-app-capable" content="yes"> 16 <meta name="apple-mobile-web-app-status-bar-style" content="black-translucent"> 17 18 <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no"> 19 20 <link rel="stylesheet" href="css/reveal.css"> 21 <link rel="stylesheet" href="css/theme/black.css" id="theme"> 22 23 <!-- Theme used for syntax highlighting of code --> 24 <link rel="stylesheet" href="lib/css/zenburn.css"> 25 26 <!-- Printing and PDF exports --> 27 <script> 28 var link = document.createElement( 'link' ); 29 link.rel = 'stylesheet'; 30 link.type = 'text/css'; 31 link.href = window.location.search.match( /print-pdf/gi ) ? 'css/print/pdf.css' : 'css/print/paper.css'; 32 document.getElementsByTagName( 'head' )[0].appendChild( link ); 33 </script> 34 </head> 35 36 <body> 37 <div class="reveal"> 38 <div class="slides"> 39 <section data-transition="convex"> 40 <h3>Platform Services</h3> 41 </section> 42 <section data-transition="convex"> 43 <h4>Objective</h4> 44 <ul style="font-size: 66%"> 45 <li>decide a useful path forward to create, deploy, and operate platform services</li> 46 </ul> 47 <br> 48 <br> 49 <h4>Requirements</h4> 50 <ul style="font-size: 66%"> 51 <li>flexibility to employ multiple styles, languages, and classes of services</li> 52 <li>address needs of multiple Sentient products</li> 53 <li><b>can 1 person implement and operate the resulting solution</b></li> 54 </ul> 55 </section> 56 <section data-transition="convex"> 57 <h4>Services have a common set of things needing addressing</h4> 58 <ul style="font-size: 66%"> 59 <li>unexpected failure modes</li> 60 <li>topology changes</li> 61 <li>system degredation</li> 62 <li>elastic/ephemeral/transient resources</li> 63 </ul> 64 <br> 65 <br> 66 <h4 style="font-size: 66%">so we do things like</h4> 67 <table style="border: none; border-bottom: none; border-collapse: collapse; font-size: 66%"> 68 <tr> 69 <td>circuit breaking</td> 70 <td>timeouts</td> 71 <td>service discovery</td> 72 </tr> 73 <tr> 74 <td>logging</td> 75 <td>secrets management</td> 76 </tr> 77 </table> 78 </section> 79 <section data-transition="convex"> 80 <h4>Horizontal requirements in the past meant</h4> 81 <ul style="font-size: 66%"> 82 <li>Business logic & network functions being mashed together</li> 83 <li>platform/infrastructure changed for every implementation variation</li> 84 <li>service variations need unique discovery, load balancing, rate limiting, circuit breaking ...</li> 85 <li>library hell raised one order of magnitude</li> 86 </ul> 87 <br> 88 <br> 89 <h4 style="font-size: 50%">what if we could reduce these requirements to a network function ...</h4> 90 <br> 91 <h4 style="font-size: 50%">with no impact on the service/application</h4> 92 </section> 93 <section data-transition="convex"> 94 <h3>Motivation</h3> 95 <p style="font-size: 66%"> 96 lessons learned from previous projects 97 </p> 98 <ul style="font-size: 66%"> 99 <li>Thrift generators are weak, json is leaky</li> 100 <li>HTTP 1.x is comparatively expensive</li> 101 <li>lack of infrastructure transparency</li> 102 <li>devops blocker for stats, metrics, logging ...</li> 103 <li>cluster management only addresses deployment ...</li> 104 </ul> 105 <p style="font-size: 66%"> 106 others too have experienced this. See more at <br> 107 <a href="https://www.slideshare.net/datawire/lyfts-envoy-from-monolith-to-service-mesh-matt-klein-lyft/6">Monolith to ServiceMesh - Matt Klien, Lyft</a> 108 </p> 109 </section> 110 <section data-transition="convex"> 111 <h3>What we did</h3> 112 <p style="font-size: 66%"> 113 stand up multiple skeleton services using, 114 github.com/SentientTechnologies/platform-services 115 and evaluate 116 </p> 117 <ul style="font-size: 66%"> 118 <li>lights-out kubernetes, using kops</li> 119 <li>reducing devops overhead, increase transparency, deploy a network function using Istio</li> 120 <li>HTTP/1.x & json <em>vs</em> HTTP/2 & proto</li> 121 <li>multi-language use of gRPC</li> 122 <li>AWS Aurora Postgres egress</li> 123 <li>roadmap to AWS EKS</li> 124 </ul> 125 </section> 126 <section data-transition="convex"> 127 <h3>How does it work</h3> 128 <ul style="font-size: 66%"> 129 <li>kubernetes (kops) is the deployment tool, data plane</li> 130 <li>istio is the service orchestration tool, currently people, control plane</li> 131 <li>Kubernetes is the mechanisim, Istio brings the policy</li> 132 <li>istio isolates entire suites of tools Netflix OSS Hystrix, Zull, Ribbon, Eureka Zipkin, Atlas</li> 133 <li>istio stops mashing together of applications and network functions</li> 134 <li>envoy is the proxy component that does this using sidecars etc</li> 135 </ul> 136 <p style="font-size: 66%">See more at <br> 137 <a href="http://blog.christianposta.com/istio-workshop/slides/#/4">Microservicing like a unicorn</a></p> 138 </section> 139 <section data-transition="convex"> 140 <h3>Now show something(s)</h3> 141 <ul style="font-size: 66%"> 142 <li>kops and AWS</li> 143 <li>IaC and S3 versioning</li> 144 <li>prometheus, zipkin and grafana injection</li> 145 <li>definition, deployment, and ECS</li> 146 <li>behind the scenes with pods and Istio</li> 147 <li>grpc_cli (curl)</li> 148 </ul> 149 </section> 150 <section data-transition="convex"> 151 <h3>Roadmap - actually a code deletion plan</h3> 152 <ul style="font-size: 66%"> 153 <li>delete auth0 code, migrate auth to side-car</li> 154 <li>use ALBs to support HTTP/2 ingress load balancing</li> 155 <li>drop self deployed cluster manager to AWS EWKS when widely available</li> 156 <li>use auto-scaling explicitly</li> 157 </ul> 158 </section> 159 <section data-transition="convex"> 160 <ul style="font-size: 66%"> 161 <li>Go is cheaper than Node. Heroku is cheaper than Lambda. <a href="https://dev.to/rdegges/to-30-billion-and-beyond-3f94">https://dev.to/rdegges/to-30-billion-and-beyond-3f94</a></li> 162 <li>Microservicing like a unicorn. <a href="http://blog.christianposta.com/istio-workshop/slides">http://blog.christianposta.com/istio-workshop/slides</a></li> 163 <li>Service mesh data plane vs. control plane<a href="https://blog.envoyproxy.io/service-mesh-data-plane-vs-control-plane-2774e720f7fc">https://blog.envoyproxy.io/service-mesh-data-plane-vs-control-plane-2774e720f7fc</a></li> 164 <li>Monolith to ServiceMesh - Matt Klien, Lyft <a href="https://www.slideshare.net/datawire/lyfts-envoy-from-monolith-to-service-mesh-matt-klein-lyft">https://www.slideshare.net/datawire/lyfts-envoy-from-monolith-to-service-mesh-matt-klein-lyft</a></li> 165 <li>Istio Workshop - Using GCP <a href="https://github.com/retroryan/istio-workshop">https://github.com/retroryan/istio-workshop</a></li> 166 <li>Microservices Patterns With Envoy Sidecar <a href="http://blog.christianposta.com/microservices/00-microservices-patterns-with-envoy-proxy-series/">http://blog.christianposta.com/microservices/00-microservices-patterns-with-envoy-proxy-series/</a></li> 167 <li>Serverless ServiceMesh with Kubeless and istio <a href="https://engineering.bitnami.com/articles/serverless-service-mesh-with-kubeless-and-istio.html">https://engineering.bitnami.com/articles/serverless-service-mesh-with-kubeless-and-istio.html</a></li> 168 <li>Platform Services PoC <a href="https://github.com/SentientTechnologies/platform-services">https://github.com/SentientTechnologies/platform-services</a></li> 169 </ul> 170 </section> 171 </div> 172 </div> 173 174 <script src="lib/js/head.min.js"></script> 175 <script src="js/reveal.js"></script> 176 177 <script> 178 // More info about config & dependencies: 179 // - https://github.com/hakimel/reveal.js#configuration 180 // - https://github.com/hakimel/reveal.js#dependencies 181 Reveal.initialize({ 182 dependencies: [ 183 { src: 'plugin/markdown/marked.js' }, 184 { src: 'plugin/markdown/markdown.js' }, 185 { src: 'plugin/notes/notes.js', async: true }, 186 { src: 'plugin/highlight/highlight.js', async: true, callback: function() { hljs.initHighlightingOnLoad(); } } 187 ] 188 }); 189 </script> 190 </body> 191 </html>