This document proposes an approach called Jigsaw for composing microservice user interfaces that balances team autonomy and page performance. Jigsaw defines pages as publicly accessible endpoints that include fragments from other services using server-side includes. The fragments adhere to contracts and can be cached. An Nginx proxy handles routing to services and uses modules like ngx_pagespeed to optimize and combine assets for improved page load performance when composing the user interface from multiple autonomous microservices.
MongoDB Days Silicon Valley: Building Applications with the MEAN Stack
Presented by Jason Zucchetto, Curriculum Engineer, MongoDB
Experience level: Introductory
Walk through building a sample application with the MEAN stack (MongoDB-Express-Angular-Node.js). We'll start from the beginning, walking through every component of the MEAN stack, in building a modern web application. The presentation focuses on building MongoMart, a simple application for searching and viewing MongoDB merchandise. You'll walk away with a basic knowledge of MEAN stack components and how to leverage them in building applications.
Vered Flis: Because performance matters! Architecture Next 20
“If your website takes longer than 3 seconds to load, you could already be losing nearly half of your visitors”
Performance is one of the most critical aspects of any web project and plays a major role in the success of any online venture. Your site may have the best services, products, and content found on the web, but if your site performance is off, you’re hurting your brand and driving users to the competition.
How can we make sure that performance is not going to hold us back from success?
Join me in this session as we tackle these big questions head-on and unravel different approaches and practices that will assist you in writing highly performant web apps as is expected today.
This document discusses cloud computing and Microsoft Azure. It provides an overview of what a cloud is and statistics on the growth of cloud adoption over time. It then discusses Microsoft Azure's global presence and growth metrics. Examples are given of companies using Azure, including their objectives, tactics and results. Key features of Azure Websites are outlined. Traffic Manager and its use for load balancing and disaster recovery are explained. Finally, some tasks for a hackathon on Azure are proposed.
Best Practices for couchDB developers on Microsoft Azure
This presentation covers best practices for collecting, storing, analyzing and distributing data across a scalable data layer on Windows Azure using CouchDB, JSON, and MapReduce. Highlights include best practices for Windows Azure security, performance, accessibility and reliability.
You know what iMEAN? Using MEAN stack for application dev on Informix
You know what iMEAN? Using MEAN stack for application dev on Informix. MongoDB, ExpressJS, AngularJS, NodeJS combine to form a MEAN stack for quick appdev. iMEAN is using the same stack to develop applications on Informix.
Adobe AEM overview for Business Heads. How to build a team, What are the phases of development, Tools and technologies, Team composition, Estimations, Deployment and Migration, Sizing - Presented at Adobe Bangalore
The document provides release notes for ASP.NET Core 2.0 and discusses features for building single page applications (SPAs) with .NET Core. Key points include:
- New SPA templates for React, Angular, and other frameworks that set up projects with bundling and other build tools.
- JavaScriptServices allow running Node.js code from .NET and facilitate building SPAs with .NET backends.
- SpaServices provide features like server-side prerendering, routing helpers, and Webpack middleware to improve the SPA development experience.
- While SPA templates provide a starting point, separate client and server projects with specialized tooling may provide a better development workflow
The document provides best practices and recommendations for securing resources in AWS. It advises that users should:
1) Grant least privilege to IAM roles and policies, use private subnets, and avoid public buckets or open security groups.
2) Rely on managed AWS services instead of maintaining resources like databases on EC2 instances directly.
3) Implement infrastructure as code and immutable infrastructure to ensure consistency and reliability of deployments.
4) Keep application state in services like ElastiCache instead of on individual instances to ensure high availability.
5) Leverage AWS services, documentation, and community resources to continuously improve security practices.
There is currently significant effort going on in the Apache CloudStack community to develop a new, modern, UI (user interface) for CloudStack: Project Primate. In this talk Paul discusses why this new UI is required, the history of this project and how it will be included in future CloudStack releases.
This document introduces React for .NET developers. It provides a brief history of web development in .NET and discusses how React addresses the needs of modern users and developers. The core concepts of React like components, JSX, top-down data flow, and the virtual DOM are explained. ReactJS.NET is introduced as a way to use React with ASP.NET MVC. In summary, React provides fast load times, rich client functionality, and testable code while having a short learning curve and enabling reusability.
This document discusses the seven deadly sins of microservices and how to avoid them. The sins include lusting after new technology without consideration for operations, gluttony by not implementing circuit breakers, greed in creating too many small services, sloth by not properly separating services, wrath from ignoring issues in distributed systems, envy of other teams' deployment processes, and pride in thinking tests are not needed. The document provides recommendations to help address each sin such as starting small, service ownership, automated testing, monitoring, and continuous delivery practices.
This document discusses Node.js applications in Windows Azure. It covers provisioning virtual machines, installing and configuring MongoDB, creating websites, and publishing Node.js applications to Windows Azure. The presenter is Bryan Phillips, a Microsoft Certified Trainer and MVP awardee with experience in SharePoint and application development. The agenda includes demonstrations of creating a Linux VM, installing MongoDB, creating a website, and publishing a Node.js app to Windows Azure.
The presentation from our online webinar "Design patterns for microservice architecture".
Full video from webinar available here: https://www.youtube.com/watch?v=826aAmG06KM
If you’re a CTO or a Lead Developer and you’re planning to design service-oriented architecture, it’s definitely a webinar tailored to your needs. Adrian Zmenda, our Lead Dev, will explain:
- when microservice architecture is a safe bet and what are some good alternatives
- what are the pros and cons of the most popular design patterns (API Gateway, Backend for Frontend and more)
- how to ensure that the communication between services is done right and what to do in case of connection issues
- why we’ve decided to use a monorepo (monolithic repository)
- what we’ve learned from using the remote procedure call framework gRPC
- how to monitor the efficiency of individual services and whole SOA-based systems.
In this session we'll see everything interesting is hidden in the SSISDB database, where you can gain a lot of insight on the outcome, the performance and the status of your SSIS Packages. I'll share everything I've learned building the SSIS Dashboard we're actually using in production and that you can test here http://ssis-dashboard.azurewebsites.net/. We’ll see the internals of SSISDB database, how we can add custom logging information and how we can use all these data in order to know exactly what happened on a specific point in time.
Die Welt rund um das Frontend befindet sich im ständigen Wandel. Die Leistung der Computer der Konsumentinnen und Konsumenten und auch deren Erwartungen an Software steigen. Während die Server von Webdiensten früher lediglich ein wenig HTML erzeugen mussten, liegt die Logik heutzutage deshalb immer mehr auf dem Client, um eine optimale User Experience sicherzustellen – und das bringt Herausforderungen mit.
Im Talk schauten wir uns einige Trends der Webentwicklung an und analysierten die Probleme, die durch das Aufrüsten der Browser durch Google und Co. gelöst werden.
This document provides an overview and history of HTML5, summarizing some of the key new features in 3 sentences or less:
HTML5 aims to simplify HTML markup and make it more semantic with new elements like <section> and <nav>. It also introduces new JavaScript APIs, richer media like <audio> and <video>, and the <canvas> element for drawing. The development of HTML5 was a collaborative effort between browser vendors to create a common standard that is backwards compatible and supports modern web applications.
The document provides an overview of various topics related to Microsoft's Windows Azure cloud computing platform including creating SQL databases, connecting to HDInsight clusters, uploading images to storage, cloud design patterns, Traffic Manager configuration, Big Data with HDInsight, managing data, infrastructure services, mobile services, web sites, virtual machines, media services, labs and samples, cloud services, SQL databases, and storage. It also includes various tutorials, guides, and resources for learning about and developing on the Windows Azure platform targeted at both newcomers and experienced users.
An Unexpected Solution to Microservices UI Composition
This document describes a company's transition from a monolithic .NET application to a microservices architecture hosted on AWS. It details their use of a UI composition pattern using Nginx, ESI, and Jigsaw to compose fragments from different services into complete pages. This allows independent deployment of features while maintaining performance. Key aspects include caching of assets and responses, combining stylesheets and scripts, and isolation of services through separate CSS and JS packages.
Spring cloud for microservices architectureIgor Khotin
I'm covering a new trend in distributed enterprise architecture – microservices. How the leading technology companies like Netflix and Amazon come to use that approach. How does it help them to scale their infrastructure. And how the newest set of tools in the Spring family would help you to apply those design principles in practice.
Spring has always been about patterns and Spring Cloud brings you implementation of several widespread ones for distributed apps.
And we'll try to show why DevOps should come in front of Microservices approach
This document discusses data storage approaches for AngularJS applications from basic to advanced. It introduces a data storage maturity model that progresses from 0) data dump to 1) structured storage, 2) CQRS (Command Query Responsibility Segregation), and finally 3) event sourcing as the most advanced approach. Event sourcing stores all changes to data as a sequence of events and uses these events to maintain and query projections of current data states. The document encourages providing feedback on the session through a QR code and promotes joining the Microsoft Virtual Academy for free online IT training.
MongoDB Days Silicon Valley: Building Applications with the MEAN StackMongoDB
Presented by Jason Zucchetto, Curriculum Engineer, MongoDB
Experience level: Introductory
Walk through building a sample application with the MEAN stack (MongoDB-Express-Angular-Node.js). We'll start from the beginning, walking through every component of the MEAN stack, in building a modern web application. The presentation focuses on building MongoMart, a simple application for searching and viewing MongoDB merchandise. You'll walk away with a basic knowledge of MEAN stack components and how to leverage them in building applications.
Vered Flis: Because performance matters! Architecture Next 20CodeValue
“If your website takes longer than 3 seconds to load, you could already be losing nearly half of your visitors”
Performance is one of the most critical aspects of any web project and plays a major role in the success of any online venture. Your site may have the best services, products, and content found on the web, but if your site performance is off, you’re hurting your brand and driving users to the competition.
How can we make sure that performance is not going to hold us back from success?
Join me in this session as we tackle these big questions head-on and unravel different approaches and practices that will assist you in writing highly performant web apps as is expected today.
This document discusses cloud computing and Microsoft Azure. It provides an overview of what a cloud is and statistics on the growth of cloud adoption over time. It then discusses Microsoft Azure's global presence and growth metrics. Examples are given of companies using Azure, including their objectives, tactics and results. Key features of Azure Websites are outlined. Traffic Manager and its use for load balancing and disaster recovery are explained. Finally, some tasks for a hackathon on Azure are proposed.
Best Practices for couchDB developers on Microsoft AzureBrian Benz
This presentation covers best practices for collecting, storing, analyzing and distributing data across a scalable data layer on Windows Azure using CouchDB, JSON, and MapReduce. Highlights include best practices for Windows Azure security, performance, accessibility and reliability.
You know what iMEAN? Using MEAN stack for application dev on InformixKeshav Murthy
You know what iMEAN? Using MEAN stack for application dev on Informix. MongoDB, ExpressJS, AngularJS, NodeJS combine to form a MEAN stack for quick appdev. iMEAN is using the same stack to develop applications on Informix.
Adobe AEM overview for Business Heads. How to build a team, What are the phases of development, Tools and technologies, Team composition, Estimations, Deployment and Migration, Sizing - Presented at Adobe Bangalore
The document provides release notes for ASP.NET Core 2.0 and discusses features for building single page applications (SPAs) with .NET Core. Key points include:
- New SPA templates for React, Angular, and other frameworks that set up projects with bundling and other build tools.
- JavaScriptServices allow running Node.js code from .NET and facilitate building SPAs with .NET backends.
- SpaServices provide features like server-side prerendering, routing helpers, and Webpack middleware to improve the SPA development experience.
- While SPA templates provide a starting point, separate client and server projects with specialized tooling may provide a better development workflow
The document provides best practices and recommendations for securing resources in AWS. It advises that users should:
1) Grant least privilege to IAM roles and policies, use private subnets, and avoid public buckets or open security groups.
2) Rely on managed AWS services instead of maintaining resources like databases on EC2 instances directly.
3) Implement infrastructure as code and immutable infrastructure to ensure consistency and reliability of deployments.
4) Keep application state in services like ElastiCache instead of on individual instances to ensure high availability.
5) Leverage AWS services, documentation, and community resources to continuously improve security practices.
There is currently significant effort going on in the Apache CloudStack community to develop a new, modern, UI (user interface) for CloudStack: Project Primate. In this talk Paul discusses why this new UI is required, the history of this project and how it will be included in future CloudStack releases.
This document introduces React for .NET developers. It provides a brief history of web development in .NET and discusses how React addresses the needs of modern users and developers. The core concepts of React like components, JSX, top-down data flow, and the virtual DOM are explained. ReactJS.NET is introduced as a way to use React with ASP.NET MVC. In summary, React provides fast load times, rich client functionality, and testable code while having a short learning curve and enabling reusability.
This document discusses the seven deadly sins of microservices and how to avoid them. The sins include lusting after new technology without consideration for operations, gluttony by not implementing circuit breakers, greed in creating too many small services, sloth by not properly separating services, wrath from ignoring issues in distributed systems, envy of other teams' deployment processes, and pride in thinking tests are not needed. The document provides recommendations to help address each sin such as starting small, service ownership, automated testing, monitoring, and continuous delivery practices.
This document discusses Node.js applications in Windows Azure. It covers provisioning virtual machines, installing and configuring MongoDB, creating websites, and publishing Node.js applications to Windows Azure. The presenter is Bryan Phillips, a Microsoft Certified Trainer and MVP awardee with experience in SharePoint and application development. The agenda includes demonstrations of creating a Linux VM, installing MongoDB, creating a website, and publishing a Node.js app to Windows Azure.
The presentation from our online webinar "Design patterns for microservice architecture".
Full video from webinar available here: https://www.youtube.com/watch?v=826aAmG06KM
If you’re a CTO or a Lead Developer and you’re planning to design service-oriented architecture, it’s definitely a webinar tailored to your needs. Adrian Zmenda, our Lead Dev, will explain:
- when microservice architecture is a safe bet and what are some good alternatives
- what are the pros and cons of the most popular design patterns (API Gateway, Backend for Frontend and more)
- how to ensure that the communication between services is done right and what to do in case of connection issues
- why we’ve decided to use a monorepo (monolithic repository)
- what we’ve learned from using the remote procedure call framework gRPC
- how to monitor the efficiency of individual services and whole SOA-based systems.
In this session we'll see everything interesting is hidden in the SSISDB database, where you can gain a lot of insight on the outcome, the performance and the status of your SSIS Packages. I'll share everything I've learned building the SSIS Dashboard we're actually using in production and that you can test here http://ssis-dashboard.azurewebsites.net/. We’ll see the internals of SSISDB database, how we can add custom logging information and how we can use all these data in order to know exactly what happened on a specific point in time.
Die Welt rund um das Frontend befindet sich im ständigen Wandel. Die Leistung der Computer der Konsumentinnen und Konsumenten und auch deren Erwartungen an Software steigen. Während die Server von Webdiensten früher lediglich ein wenig HTML erzeugen mussten, liegt die Logik heutzutage deshalb immer mehr auf dem Client, um eine optimale User Experience sicherzustellen – und das bringt Herausforderungen mit.
Im Talk schauten wir uns einige Trends der Webentwicklung an und analysierten die Probleme, die durch das Aufrüsten der Browser durch Google und Co. gelöst werden.
This document provides an overview and history of HTML5, summarizing some of the key new features in 3 sentences or less:
HTML5 aims to simplify HTML markup and make it more semantic with new elements like <section> and <nav>. It also introduces new JavaScript APIs, richer media like <audio> and <video>, and the <canvas> element for drawing. The development of HTML5 was a collaborative effort between browser vendors to create a common standard that is backwards compatible and supports modern web applications.
The document provides an overview of various topics related to Microsoft's Windows Azure cloud computing platform including creating SQL databases, connecting to HDInsight clusters, uploading images to storage, cloud design patterns, Traffic Manager configuration, Big Data with HDInsight, managing data, infrastructure services, mobile services, web sites, virtual machines, media services, labs and samples, cloud services, SQL databases, and storage. It also includes various tutorials, guides, and resources for learning about and developing on the Windows Azure platform targeted at both newcomers and experienced users.
An Unexpected Solution to Microservices UI CompositionDr. Arif Wider
This document describes a company's transition from a monolithic .NET application to a microservices architecture hosted on AWS. It details their use of a UI composition pattern using Nginx, ESI, and Jigsaw to compose fragments from different services into complete pages. This allows independent deployment of features while maintaining performance. Key aspects include caching of assets and responses, combining stylesheets and scripts, and isolation of services through separate CSS and JS packages.
Building Performance - ein Frontend-Build-Prozess für Java mit MavenOliver Ochs
Jan Weinschenker und Oliver Ochs (Holisticon AG)
In diesem Vortrag geht es um eine konkrete Website. Im ersten Teil des Vortrags stellen wir die wichtigsten Optimierungsmaßnahmen vor, die außerhalb eines Builds durchgeführt wurden. Für eine dauerhafte, nachhaltige Performance-Optimierung müssen die Maßnahmen automatisiert bzw. in den Build-Prozess integriert werden. Im zweiten Teil des Vortrags zeigen wir einen beispielhaften Build-Prozess für Java-Webanwendungen, der Teile der Optimierungsmaßnahmen durchführt. Andere Teile müssen durch eine geeignete Architektur sichergestellt werden, wofür wir ebenfalls Ideen liefern.
1) Rachel Andrew discusses considerations when choosing tools and frameworks for front-end development projects, emphasizing progressive enhancement and ensuring the core experience works for all.
2) She argues against over-reliance on frameworks, which can mask issues and prevent learning core skills. Frameworks should be used lightly and evaluated on a case-by-case basis.
3) Andrew talks about the importance of standards-based development and contributing to emerging specifications like CSS Grid Layout, rather than depending entirely on pre-processors. Her goal is to encourage continued progress of the open web.
This is a talk on how to create tooling and other management tips for your Microsoft Azure Subscriptions. It starts off with the Azure Service Management API, going over to the Microsoft Azure Maanagement Libraries aka MAML and then passing over to stuff that's build on MAML, things like the POwerShell cmdlets. Finally i talk about Azure Automation to create some automated tooling.
A brave new web - A talk about Web ComponentsMichiel De Mey
The document discusses emerging web component technologies including templates, shadow DOM, custom elements, and HTML imports. It provides examples of how each technology addresses limitations of past approaches like jQuery plugins and Angular directives by allowing developers to build reusable, encapsulated widgets and components using standard web technologies like HTML, CSS, and JavaScript. These new standards enable building complex web UIs in a modular, component-based way.
Web Components + Backbone: a Game-Changing CombinationAndrew Rota
Web Components promise to change how we think about modularity on the web, and when combined with the structure and organization of Backbone.js we can create portable, dynamic, encapsulated UI modules that fit into any web application.
This document provides an overview of a minimalist framework called Nuxt.js for creating universal server-side rendered (SSR) applications using Vue.js. Some key points covered include:
- Nuxt.js allows developers to write Vue components and pages while abstracting away concerns of client-server code splitting and routing.
- Features include automatic code splitting, SSR, routing, static file serving, bundling/minifying, and error handling.
- The framework uses a pages/ directory to define routes and components and includes Vuex and Vue-Router functionality out of the box.
- Async data loading, custom layouts, global meta tags, and asset handling are also
The Complementarity of React and Web ComponentsAndrew Rota
On Github: http://andrewrota.github.io/complementarity-of-react-and-web-components-presentation/index.html
The component driven, performance focused approach of React is a perfect complement to the modularity and portability of native HTML Web Components. At first glance, React and Web Components might seem like two radically different solutions to the same problem. But when combined properly they complement each other to create an extremely powerful, expressive framework for developing complex web applications.
This document provides an introduction to MVC 3 and the Microsoft web platform. It discusses the Model-View-Controller pattern that MVC uses and how it works. The document highlights benefits of MVC like separation of concerns, testability, performance and accessibility. It demonstrates Razor syntax, layouts, sections and rendering pages to organize markup. The document provides resources for additional documentation, SDKs, trials and downloads.
An introduction to Web Components describes why we should use web components for Web App development and how Polymer Javascript library from Google can help build web components faster.
After consulting with several companies on performance related issues, it became clear that one of the biggest performance issues facing websites today is the sheer amount of JavaScript needed to power the page. The demand for more interactive and responsive applications has driven JavaScript usage through the roof. It’s quite common for large sites to end up with over 1 MB of JavaScript code on their page even after minification. But do today’s web applications really need that much JavaScript?
Enough with the javas cript already! de Nicholas ZakasKubide
The document discusses the growing prevalence and performance issues of JavaScript-heavy websites. It argues that much of the client-side logic in JavaScript libraries can be moved to the server by sharing code between server and client. Several companies that have done this, like Twitter and Airbnb, are cited as seeing significant improvements to initial page load times and a better user experience. The document also advocates for a progressive enhancement approach to JavaScript, loading scripts intelligently based on user needs and minimizing unused code.
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...tdc-globalcode
The document discusses the history and evolution of JavaScript packaging and module bundling from 2000 to the present. It covers early approaches using individual script tags to load JS files, the introduction of minification tools like JSMin in 2003, concatenating files together in the late 2000s, module loaders like RequireJS in 2009, the rise of Node.js and package managers in 2010, and the modern dominance of bundlers like Webpack since 2014 which use loaders to bundle dependencies and assets into single files or chunks.
Video at http://www.youtube.com/watch?v=HaJnhYPLvx0
Large Drupal projects will generally have a themer or five working alongside the developers, site builders and designers. Themers are the magicians who transform what Drupal wants to do into what the designer wants it to do.
Smaller projects also usually need someone on the team who can make sense of Drupal's output, knows more CSS and JS than anyone else and can configure Views with their eyes closed.
The thing is — and whisper this, if possible redundancy concerns you — we can bypass the themer entirely.
With some simple configuration, a site builder can get Drupal to output exactly the semantic, lightweight markup that any modern front-end designer would be proud of. The designer can be left alone to write the most appropriate HTML, CSS and JS, while the site builder need only choose a couple of options when putting together content types, views and panels to make Drupal behave.
A friendly developer may have to lend a hand every now and then, but that’s it. You can get rid of the themer altogether.
http://2013.drupalcamplondon.co.uk/session/death-themer
HTML5 introduces several new features including new semantic elements, support for embedded video and audio, canvas element for 2D/3D graphics, offline web applications, and drag and drop. It also removes some older HTML elements. HTML5 is still a work in progress but is supported by all major browsers. It aims to make web pages more compatible with new technologies and reduce the need for browser plug-ins.
The document provides an overview of HTML5, CSS3, and LESS CSS. It describes new HTML5 elements like <canvas>, <audio>, <video>, and attributes for existing tags. CSS3 features covered include rounded corners, animations, and media queries. LESS CSS allows snippets to be reused through mixins and nested rules. The document recommends tools like Modernizr, polyfills, and Crunch to compile LESS into CSS.
“Good design is obvious. Great design is transparent.” — How we use Bootstrap...Roni Banerjee
The document discusses the Bootstrap framework for responsive web design. It explains that Bootstrap allows developers to create responsive websites without relying on graphic designers. It provides instructions for including Bootstrap's CSS and JavaScript files. The document also includes an example of how to use Bootstrap features like navbars and dropdown menus in an MVC application.
Slides from Node.js and Twitter Bootstrap crash course given to Penn Graduate Computing Club. Covers creating basic node app, using the bootstrap grid, and deploying to an EC2 machine.
Similar to A High-Performance Solution to Microservice UI Composition @ XConf Hamburg (20)
Data Mesh in Practice - How Europe's Leading Online Platform for Fashion Goes...Dr. Arif Wider
A talk presented by Max Schultze from Zalando and Arif Wider from ThoughtWorks at NDC Oslo 2020.
Abstract:
The Data Lake paradigm is often considered the scalable successor of the more curated Data Warehouse approach when it comes to democratization of data. However, many who went out to build a centralized Data Lake came out with a data swamp of unclear responsibilities, a lack of data ownership, and sub-par data availability.
At Zalando - europe’s biggest online fashion retailer - we realised that accessibility and availability at scale can only be guaranteed when moving more responsibilities to those who pick up the data and have the respective domain knowledge - the data owners - while keeping only data governance and metadata information central. Such a decentralized and domain focused approach has recently been coined a Data Mesh.
The Data Mesh paradigm promotes the concept of Data Products which go beyond sharing of files and towards guarantees of quality and acknowledgement of data ownership.
This talk will take you on a journey of how we went from a centralized Data Lake to embrace a distributed Data Mesh architecture and will outline the ongoing efforts to make creation of data products as simple as applying a template.
Continuous Intelligence: Keeping your AI Application in ProductionDr. Arif Wider
A talk by Arif Wider & Emily Gorcenski presented at NDC Porto '20
Abstract:
It is already challenging to transition a machine learning model or AI system from the research space to production, and maintaining that system alongside ever-changing data is an even greater challenge. In software engineering, Continuous Delivery practices have been developed to ensure that developers can adapt, maintain, and update software and systems cheaply and quickly, enabling release cycles on the scale of hours or days instead of weeks or months. Nevertheless, in the data science world Continuous Delivery is rarely been applied holistically.
This is partly due to different workflows: data scientists regularly work on whole sets of hypotheses, whereas software engineers work more linearly even when evaluating multiple implementation alternatives. Therefore, existing software engineering practices cannot be applied as-is to machine learning projects. Learn how we used our expertise in both fields to adapt practices and tools to allow for Continuous Intelligence–the practice of delivering AI applications continuously.
Continuous Intelligence: Keeping Your AI Application in Production (NDC Sydne...Dr. Arif Wider
A talk about applying Continuous Delivery to Machine Learning (CD4ML) presented by Arif Wider from ThoughtWorks at NDC Sydney Conference 2019.
Abstract:
It is already challenging to transition a machine learning model or AI system from the research space to production, and maintaining that system alongside ever-changing data is an even greater challenge. In software engineering, Continuous Delivery practices have been developed to ensure that developers can adapt, maintain, and update software and systems cheaply and quickly, enabling release cycles on the scale of hours or days instead of weeks or months. Nevertheless, in the data science world Continuous Delivery is rarely been applied holistically.
This is partly due to different workflows: data scientists regularly work on whole sets of hypotheses, whereas software engineers work more linearly even when evaluating multiple implementation alternatives. Therefore, existing software engineering practices cannot be applied as-is to machine learning projects. Learn how we used our expertise in both fields to adapt practices and tools to allow for Continuous Intelligence–the practice of delivering AI applications continuously.
Continuous Intelligence: Moving Machine Learning into Production ReliablyDr. Arif Wider
A workshop by Danilo Sato, Christoph Windheuser, Emily Gorcenski, and Arif Wider, given at Strata Data Conference 2019 in London.
Abstract:
So you want to include a machine learning component in your IT systems? The process is a little more involved than clicking through an AI tutorial on your laptop. It’s not just the first working model you run that you need to consider; you also need to think about things like integration, scaling, and testing. What’s more, postlaunch, you’ll want to continuously adapt your model to respond to the changing environment.
ThoughtWorks pioneered continuous delivery—a set of tools and processes that ensure that software under development can be reliably released to production at any time and with high frequency.
Danilo Sato and Christoph Windheuser demonstrate how to apply continuous delivery to machine learning—what’s known as continuous intelligence. In a live scenario, you’ll change a machine learning model in a development environment, test its new performance, and, depending on the outcome, automatically deploy the new model into a production environment. The tech stack for this scenario will be Python, DVC (Data Science Version Control), and GoCD.
Continuous Intelligence: Keeping your AI Application in ProductionDr. Arif Wider
A talk by Emily Gorcenski and Arif Wider presented a Strata Data Conference 2019 in London.
Abstract:
It’s already challenging to transition a machine learning model or AI system from the research space to production, and maintaining that system alongside ever-changing data is an even greater challenge. In software engineering, continuous delivery practices have been developed to ensure that developers can adapt, maintain, and update software and systems cheaply and quickly, enabling release cycles on the scale of hours or days instead of weeks or months.
Nevertheless, in the data science world, continuous delivery is rarely applied holistically—due in part to different workflows: data scientists regularly work on whole sets of hypotheses, whereas software engineers work more linearly even when evaluating multiple implementation alternatives. Therefore, existing software engineering practices cannot be applied as is to machine learning projects.
Arif Wider and Emily Gorcenski explore continuous delivery (CD) for AI/ML along with case studies for applying CD principles to data science workflows. Join in to learn how they drew on their expertise to adapt practices and tools to allow for continuous intelligence—the practice of delivering AI applications continuously.
DataDevOps: A Manifesto for a DevOps-like Culture Shift in Data & AnalyticsDr. Arif Wider
A talk by Sebastian Herold & Dr. Arif Wider at TDWI 2018 Munich.
Abstract:
More and more companies migrate their monolithic applications to a microservices architecture. However, maintaining a consistent and usable data landscape has only become more challenging by this: huge amounts of structured and unstructured data, and hundreds of data sources.
Furthermore, data-driven product development multiplies the analytics requirements: every product team needs constantly updated and specially tailored metrics which often combine product specific data with company wide data.
Having a centralized data team does not scale in this setting as it becomes the bottleneck between data producers and data consumers.
We created a Manifesto based on five general themes which break with traditional separation of roles and show a path how to deal with distributed data in a federal and scalable fashion. This leads to DataDev: a culture shift similar to DevOps in which application developers own their data and take over responsibilities for data & analytics.
Learn about our experiences and best practices with facilitating this cultural transformation at Zalando, one of Europe's largest online fashion platforms.
DataDevOps: A Manifesto for a DevOps-like Culture Shift in Data & AnalyticsDr. Arif Wider
A talk given by Dr. Arif Wider (ThoughtWorks) and Sebastian Herold (Zalando) at OOP 2018 in Munich.
Abstract:
More and more companies migrate their monolithic applications to a microservices architecture. However, maintaining a consistent and usable data landscape has only become more challenging by this: huge amounts of structured and unstructured data, and hundreds of data sources.
Furthermore, data-driven product development multiplies the analytics requirements: every product team needs constantly updated and specially tailored metrics which often combine product specific data with company wide data.
Having a centralized data team does not scale in this setting as it becomes the bottleneck between data producers and data consumers.
We created a Manifesto of seven principles which break with traditional separation of roles and show a path how to deal with distributed data in a federal and scalable fashion. This leads to DataDev: a culture shift similar to DevOps in which application developers own their data and take over responsibilities for data & analytics.
Learn about our experiences and best practices with facilitating this cultural transformation at Scout24, the provider of Europe’s largest online markets for cars and real estate.
DataDevOps - A Manifesto on Shared Data Responsibility in Times of MicroservicesDr. Arif Wider
A talk by Sebastian Herold (Scout24) and Arif Wider (ThoughtWorks)
Abstract:
More and more companies successfully migrate their monolithic applications to a Microservices architecture. However, maintaining a consistent and usable data landscape has only become more challenging by this: unstructured data, huge amounts of data, and hundreds of data sources. Having a centralized data team does not scale in this setting as it becomes the bottleneck between application developers and business analysts.
We created a Data Manifesto of seven principles which break with traditional role separations and show a path how to deal with distributed data in a federal and scalable fashion. This leads to DataDevOps: a culture where application developers also own their data. Learn about the experiences we made with facilitating this cultural transformation at Scout24, the provider of Europe’s largest online markets for cars and real estate.
Predictive Analytics for Vehicle Price Prediction - Delivered Continuously at...Dr. Arif Wider
This document discusses predictive analytics for vehicle price prediction delivered continuously at AutoScout24. It describes AutoScout24's use of a random forest model for price prediction and their approach to automatically generating Java code from the R-based model to deploy it as a high-performance web application via a continuous delivery pipeline. Key lessons learned include forming cross-functional data science and engineering teams, setting up early usage reporting to improve the product, and addressing challenges of generating large amounts of Java code like optimizing garbage collection.
Understanding Insider Security Threats: Types, Examples, Effects, and Mitigat...Bert Blevins
Today’s digitally connected world presents a wide range of security challenges for enterprises. Insider security threats are particularly noteworthy because they have the potential to cause significant harm. Unlike external threats, insider risks originate from within the company, making them more subtle and challenging to identify. This blog aims to provide a comprehensive understanding of insider security threats, including their types, examples, effects, and mitigation techniques.
Fluttercon 2024: Showing that you care about security - OpenSSF Scorecards fo...Chris Swan
Have you noticed the OpenSSF Scorecard badges on the official Dart and Flutter repos? It's Google's way of showing that they care about security. Practices such as pinning dependencies, branch protection, required reviews, continuous integration tests etc. are measured to provide a score and accompanying badge.
You can do the same for your projects, and this presentation will show you how, with an emphasis on the unique challenges that come up when working with Dart and Flutter.
The session will provide a walkthrough of the steps involved in securing a first repository, and then what it takes to repeat that process across an organization with multiple repos. It will also look at the ongoing maintenance involved once scorecards have been implemented, and how aspects of that maintenance can be better automated to minimize toil.
Quality Patents: Patents That Stand the Test of TimeAurora Consulting
Is your patent a vanity piece of paper for your office wall? Or is it a reliable, defendable, assertable, property right? The difference is often quality.
Is your patent simply a transactional cost and a large pile of legal bills for your startup? Or is it a leverageable asset worthy of attracting precious investment dollars, worth its cost in multiples of valuation? The difference is often quality.
Is your patent application only good enough to get through the examination process? Or has it been crafted to stand the tests of time and varied audiences if you later need to assert that document against an infringer, find yourself litigating with it in an Article 3 Court at the hands of a judge and jury, God forbid, end up having to defend its validity at the PTAB, or even needing to use it to block pirated imports at the International Trade Commission? The difference is often quality.
Quality will be our focus for a good chunk of the remainder of this season. What goes into a quality patent, and where possible, how do you get it without breaking the bank?
** Episode Overview **
In this first episode of our quality series, Kristen Hansen and the panel discuss:
⦿ What do we mean when we say patent quality?
⦿ Why is patent quality important?
⦿ How to balance quality and budget
⦿ The importance of searching, continuations, and draftsperson domain expertise
⦿ Very practical tips, tricks, examples, and Kristen’s Musts for drafting quality applications
https://www.aurorapatents.com/patently-strategic-podcast.html
Comparison Table of DiskWarrior Alternatives.pdfAndrey Yasko
To help you choose the best DiskWarrior alternative, we've compiled a comparison table summarizing the features, pros, cons, and pricing of six alternatives.
Scaling Connections in PostgreSQL Postgres Bangalore(PGBLR) Meetup-2 - MydbopsMydbops
This presentation, delivered at the Postgres Bangalore (PGBLR) Meetup-2 on June 29th, 2024, dives deep into connection pooling for PostgreSQL databases. Aakash M, a PostgreSQL Tech Lead at Mydbops, explores the challenges of managing numerous connections and explains how connection pooling optimizes performance and resource utilization.
Key Takeaways:
* Understand why connection pooling is essential for high-traffic applications
* Explore various connection poolers available for PostgreSQL, including pgbouncer
* Learn the configuration options and functionalities of pgbouncer
* Discover best practices for monitoring and troubleshooting connection pooling setups
* Gain insights into real-world use cases and considerations for production environments
This presentation is ideal for:
* Database administrators (DBAs)
* Developers working with PostgreSQL
* DevOps engineers
* Anyone interested in optimizing PostgreSQL performance
Contact info@mydbops.com for PostgreSQL Managed, Consulting and Remote DBA Services
Best Practices for Effectively Running dbt in Airflow.pdfTatiana Al-Chueyr
As a popular open-source library for analytics engineering, dbt is often used in combination with Airflow. Orchestrating and executing dbt models as DAGs ensures an additional layer of control over tasks, observability, and provides a reliable, scalable environment to run dbt models.
This webinar will cover a step-by-step guide to Cosmos, an open source package from Astronomer that helps you easily run your dbt Core projects as Airflow DAGs and Task Groups, all with just a few lines of code. We’ll walk through:
- Standard ways of running dbt (and when to utilize other methods)
- How Cosmos can be used to run and visualize your dbt projects in Airflow
- Common challenges and how to address them, including performance, dependency conflicts, and more
- How running dbt projects in Airflow helps with cost optimization
Webinar given on 9 July 2024
How RPA Help in the Transportation and Logistics Industry.pptxSynapseIndia
Revolutionize your transportation processes with our cutting-edge RPA software. Automate repetitive tasks, reduce costs, and enhance efficiency in the logistics sector with our advanced solutions.
YOUR RELIABLE WEB DESIGN & DEVELOPMENT TEAM — FOR LASTING SUCCESS
WPRiders is a web development company specialized in WordPress and WooCommerce websites and plugins for customers around the world. The company is headquartered in Bucharest, Romania, but our team members are located all over the world. Our customers are primarily from the US and Western Europe, but we have clients from Australia, Canada and other areas as well.
Some facts about WPRiders and why we are one of the best firms around:
More than 700 five-star reviews! You can check them here.
1500 WordPress projects delivered.
We respond 80% faster than other firms! Data provided by Freshdesk.
We’ve been in business since 2015.
We are located in 7 countries and have 22 team members.
With so many projects delivered, our team knows what works and what doesn’t when it comes to WordPress and WooCommerce.
Our team members are:
- highly experienced developers (employees & contractors with 5 -10+ years of experience),
- great designers with an eye for UX/UI with 10+ years of experience
- project managers with development background who speak both tech and non-tech
- QA specialists
- Conversion Rate Optimisation - CRO experts
They are all working together to provide you with the best possible service. We are passionate about WordPress, and we love creating custom solutions that help our clients achieve their goals.
At WPRiders, we are committed to building long-term relationships with our clients. We believe in accountability, in doing the right thing, as well as in transparency and open communication. You can read more about WPRiders on the About us page.
Transcript: Details of description part II: Describing images in practice - T...BookNet Canada
This presentation explores the practical application of image description techniques. Familiar guidelines will be demonstrated in practice, and descriptions will be developed “live”! If you have learned a lot about the theory of image description techniques but want to feel more confident putting them into practice, this is the presentation for you. There will be useful, actionable information for everyone, whether you are working with authors, colleagues, alone, or leveraging AI as a collaborator.
Link to presentation recording and slides: https://bnctechforum.ca/sessions/details-of-description-part-ii-describing-images-in-practice/
Presented by BookNet Canada on June 25, 2024, with support from the Department of Canadian Heritage.
INDIAN AIR FORCE FIGHTER PLANES LIST.pdfjackson110191
These fighter aircraft have uses outside of traditional combat situations. They are essential in defending India's territorial integrity, averting dangers, and delivering aid to those in need during natural calamities. Additionally, the IAF improves its interoperability and fortifies international military alliances by working together and conducting joint exercises with other air forces.
Kief Morris rethinks the infrastructure code delivery lifecycle, advocating for a shift towards composable infrastructure systems. We should shift to designing around deployable components rather than code modules, use more useful levels of abstraction, and drive design and deployment from applications rather than bottom-up, monolithic architecture and delivery.
Quantum Communications Q&A with Gemini LLM. These are based on Shannon's Noisy channel Theorem and offers how the classical theory applies to the quantum world.
Choose our Linux Web Hosting for a seamless and successful online presencerajancomputerfbd
Our Linux Web Hosting plans offer unbeatable performance, security, and scalability, ensuring your website runs smoothly and efficiently.
Visit- https://onliveserver.com/linux-web-hosting/
4. “[The web] is enabling us to rediscover what we've always
known about being human: we are connected creatures
in a connected world about which we care passionately.”
David Weinberger - “Small Pieces Loosely Joined” via Wikipedia: https://en.wikipedia.org/wiki/Small_Pieces_Loosely_Joined
6. PROJECT TATSU @ AUTOSCOUT24
- Breaking apart the monolith using Microservices
- Moving out of the datacenter and to the AWS cloud
- Focus on the JVM and Scala in favor of .NET/C#
- Run it all on Linux instead of Windows
https://github.com/AutoScout24/scout24-it-principles
7. “[...]composition is the placement or arrangement of [...]
elements or ingredients in a work of art, as distinct from
the subject of a work.”
Wikipedia: https://en.wikipedia.org/wiki/Composition_(visual_arts)
8. I can do stuff!
Me too!
I can do
two things
at once!
I wish I
could do
stuff!
I love
lamp!
Woo! I’m here!
I’m really
boring but
important
What am I
supposed
to do?
I can do
other stuff!
18. Pages
are publicly accessible
get called from the client
include fragments
could be cacheable
define contracts
are parts of a page
get called from nginx SSI
could include fragments
should be cacheable
adhere to contracts
Fragments
19. SSI Include
<html>
<head>
<title>AutoScout24</title>
<!-- Minified and combined css used by this page (not by the fragments) -->
<link rel="stylesheet" href="/assets/home/ebacb8194-main.min.css" />
</head>
<body>
<!--#include virtual="/headerservice/fragment/header_de_DE" -->
Lorem ipsum....
<!-- Minified and combined javascript used by this page -->
<script type="text/javascript" src="/assets/home/66ee72f9-main.min.js"></script>
</body>
</html>
20. SSI Include Resolved
20
<html>
<head>
<title>AutoScout24</title>
<!-- Minified and combined css used by this page (not by the fragments) -->
<link rel="stylesheet" href="/assets/home/ebacb8194-main.min.css" />
</head>
<body>
<head>
<!-- Minified and combined css used by this fragment -->
<link rel="stylesheet" href="/assets/headerservice/08ffaf28-main.min.css" />
</head>
<ul><li>Home</li><li>Search</li><li>Sell</li></ul>
<script type="text/javascript" src="/assets/headerservice/26ed612f-main.js"></script>
Lorem ipsum....
<!-- Minified and combined javascript used by this page -->
<script type="text/javascript" src="/assets/home/66ee72f9-main.min.js"></script>
</body>
</html>
21. ngx_pagespeed: combine heads
<html>
<head>
<title>AutoScout24</title>
<!-- Minified and combined css used by this page (not by the fragments) -->
<link rel="stylesheet" href="/assets/home/ebacb8194-main.min.css" />
<link rel="stylesheet" href="/assets/headerservice/08ffaf28-main.min.css" />
</head>
<body>
<ul><li>Home</li><li>Search</li><li>Sell</li></ul>
<script type="text/javascript" src="/assets/headerservice/26ed612f-main.js"></script>
Lorem ipsum....
<!-- Minified and combined javascript used by this page -->
<script type="text/javascript" src="/assets/home/66ee72f9-main.min.js"></script>
</body>
</html>
27. THANK YOU
For questions or suggestions:
Arif Wider - awider@thoughtworks.com
Moritz Heiber - mheiber@thoughtworks.com
Editor's Notes
THIS IS FOR HAMBURG ONLY
THIS IS FOR HAMBURG ONLY
Besides being a developer at ThoughtWorks, Arif is a serious coffee geek
Between (and while) drinking coffee he thinks about Microservices, writes preferably Scala code, and likes the challenge of generating insights out of large amounts of data
- This is Moritz’ official business card .. he’s calling himself a DevOps Birth Assistant, the male version of a midwife
- That’s because he’s helping his customers deliver babies .. software babies, with all their quirks, differences, and joyful moments
- and he does all this using the methodologies behind DevOps
This is a quote from the book “Small pieces loosely joined - a unified theory of the web” by David Weinberger, I’ll give you a moment to read it
Essentially, it is describing us as human beings in an interconnected world, and there are very true parallels if you want to explain the concept behind UI composition, “Small pieces loosely joined” describes it pretty well
The book is about the Internet, and how we use it, how we interact with it and through it, and the Internet as such is a composition!
A couple of million servers, in a network, at worldwide scale, presenting content of an incredible large variety
It is highly composed, while still performing at absolutely acceptable rates, with individual companies and teams in charge of the responsible layers
But what’s happening if things aren’t so well connected, or worse, even centralized and monolithic?
We are able to present this today because one of our clients, AutoScout24, embarked on an ambitious mission almost 2 years ago
They are still on it, and with a lot of success!
They had the same problem as any larger organization: Large, monolithic applications, very hard to maintain, carrying a lot interest and business logic in one huge blob
Inflexible and resistant to change
Intersecting responsibilities across teams
Architecture is dictated by requirements in existence aeons ago
Delivering updates, bugfixes and new features is bound to a single, manual process
The advantages though: It’s a single point of entry for consumers! Browsers don’t need to do anything special in order to use it
For them the monolith is an easy, one-stop solution, because it carries all the logic and feeds it to browsers
But, AutoScout24 wanted change
They wanted to be able to release faster, with teams working autonomously, carrying responsibilities towards business goals and values
They chose to not only achieve these goals with a single set of changes, but four separate ones
They are breaking apart their monolithic .NET application, moving towards Microservices
They are abandoning their own two datacenters for the AWS cloud
They are switching away from .NET and C# towards the JVM and Scala in particular
And on top of it all they are going to run all of it on Linux
Additionally:
Continuous Delivery and DevOps
Innovation and development in autonomous teams
Reduce time to market of features and bugfixes
Attract talent
Read more about it in their extraordinary IT principles, published on GitHub
If you want to start your own transformation it’s an excellent document to start with
They also chose the pattern of UI composition for bundling their applications together
But what is that exactly?
This is the Wikipedia definition of “Composition”, as you might realize it’s the description for “visual composition”, but it’s very much applicable to compositions of any sort
It a way it’s like a symphony, an arrangements of many different strains of instruments in perfect harmony
How do we map this to our software composition example, though?
If you want to shift that picture towards Microservices you can see a very easy pattern emerge
At first you have a single Microservice, which can do stuff
And then maybe there comes another one, and either of them can do stuff, and maybe they can do even more stuff when combined
However, as you might have guessed, this space gets crowded pretty easily, especially when you have different business goals driving you forward
And it gets even more complicated once each of the components has to talk to one another, has dependencies and expectations etc.
In a sense it’s like an orchestra: They all know the end result they’re supposed to provide, the symphony
or in the case of Microservices, their business focus
Any individual member of the orchestra might be excellent at what they are doing, and they are probably are going to be able to play beautiful music without any further help by just listening to one another or reading from the same sheet of music
Like our Microservices could do
But this gets more and more complicated the more interests (i.e. instruments) and intersecting responsibilities (i.e. different melodies) you are accumulating; they need somebody who is able to put it all together, make sense of the chaos.
They need a conductor
THIS IS FOR HAMBURG ONLY
If you haven’t recognized him from the first slide, this is Thomas Hengelbrock, he’s the current principal conductor of the NDR Elbphilharmonie Orchestra in Hamburg
He is the single point within the orchestra that makes the symphony possible with a reasonable amount of coordination and understanding
He doesn’t do much physically (waving a baton erratically, essentially), but he has the bigger picture in his head and is keeping track of the pace
All the different parts of the orchestra are coming together, they are providing value (music), and the conductor just tells them if they’re on the right track or not
And that’s what we need for our Microservices as well! We need a conductor ..
> Arif
- Thank you, Moritz
- Now let’s move to the actual UI Composition solution that we built at AutoScout and which we called Jigsaw
- And of course, we called it Jigsaw because it helps us to cut the AutoScout page into smaller pieces which fit together perfectly
- At the same time, we do not want to compromise page performance by any means
- We know that especially on mobile devices the responsiveness of a page dramatically determines how much users enjoy using the page
- For measuring page performance, we rely mainly on Google’s PageSpeed Insights. Who knows what PageSpeed Insights is?
- Imagine this is the AutoScout homepage and it consists of several UI components such as
- Now with the interpretation of Microservices that we implemented at AutoScout, each service delivers its own UI component, e.g., purple home page, later composed to a single web page
- We often speak of vertical slices here, because there is no layered architecture anymore and each service can contain a backend, a UI, and everything in between
- This way, each team can change their backend and their UI independently → Great for team autonomy
- Now, to allow for real autonomy, services also need to deliver their own assets, such as stylesheets and JavaScript
- However, if you naively combine this into one single page, the page performance will be terrible because you have CSS and JS scattered all over the page and render blocking content at various places
- You can then, for instance, try to make each service deliver their assets separately in order to optimize the page structures
- For instance by grouping the CSS loading up here
- And in fact, that was an approach that went for first
- However, things get really messy now when caching comes into play
- because a piece of HTML and a corresponding piece of CSS could be invalidated at different times so that you get version mismatches when releasing updates to the page
… of course there are alternatives to this UI composition approach, and a popular one is API Gateway Pattern combined with a Unified UI frontend
- However, there are some drawbacks of applying this pattern from which, for us, the most severe is that independent feature releases are no longer possible (as long as they contain UI changes)
- Instead, in the worst case three teams are involved and need to be coordinated when changing a feature: the backend service team, the API gateway layer team, and the web app team
- One could say that the API Gateway pattern one goes only half way to split the monolith, namely only in the backend
- but because team autonomy is one of the main reasons we went for Microservices in the first place, this issue made the API Gateway pattern no option for us
Here’s a diagram of how Jigsaw, our UI composition conductor, works under the hood:
Initially, there is always an entity requesting some resources, for our purposes that’s a browser requesting the content of a website to display to its consumer/user. Let’s say for this request the user wants to see the homepage of AutoScout24
The request, after navigating through Amazon’s CloudFront (not pictured) will hit our composer, Jigsaw, specifically its proxy module. Nginx, internally, knows which services it should serve under a certain Slash URL. For our homepage, which is a special case since it doesn’t usually care any prefix, that is /home. The re-routing is done by CloudFront.
Nginx fires off a sub-request to the service registered within its proxy registry, in this case the application responsible for serving the homepage. The homepage app is returning a proper Index page, written in HTML, with a slight trick up its sleeve.
It also includes so called Server Side Includes, instructing nginx to do further round-trips to gather other resources the Index needs in order to serve the request it has gotten initially for its Index. Nginx contains a module which is capable of resolving these resources we call fragments from other services via its proxy module, the SSI module. In the diagram the Index needs a fragments for the header and the footer, since those aren’t specific to the homepage, but rather for the whole web presence.
There will be sub-sequent request to the service able to resolve the required fragments the other service formulated in its Index. In our case that’s the Contentservice, who’s able to resolve the HTML for the header fragment and the footer fragment
It send these HTML fragments back to the SSI module, which is then putting it back together, to represent the Index of the service that was serving the original request, our homepage service. The resulting HTML is then passed on to the truly magical component in all of this: The ngx_pagespeed module. It’s a third party module developed by Google, to apply web development best practices to HTML code on the fly. With it we are able to satisfy the second important requirement we initially formulated: To be as fast as possible. Google, in this case, is our reference.
Now, we couldn’t do all of this with every request, especially since about 95-99% of the content doesn’t really change all that frequently. That’s why both, the proxy module and the ngx_pagespeed module are able to cache content dynamically, based on URL keys, parameters, certain headers and content types. Javascript and CSS for example, is cached indefinitely, since all of it is strong cached, by the individual service but also by the ngx_pagespeed module. However, all the other cache handling is at the discretion of the individual services. If they want a certain part cached they will need to use the right Cache-Control headers. This enables all of them to use Jigsaw’s caching facilities autonomously, without any limitations or superimposed guidelines.
7. After ngx_pagespeed is done with its optimizations the results are served back to the browser, strong cached and optimized for the relevant browser at hand, without any specific optimizations having to be done by the individual services.
Both, SSI and ngx_pagespeed are solving two very specific problems, and by combining them both we are unleashing their true power, enabling our teams to work without boundaries.
> Arif
- So before showing an example how this actually looks in code
- I have to explain that we conceptually distinguish between what we call a page and what we call a fragment
- ...and does not know the original request
- ...and this team is responsible for the performance and the stability of the page
- So when this page includes fragments, this team has to define a contract with the providers of this fragment
- The fragment on the other hand needs to obey this contract and behave well
Now let's look at a simple example page
Page, therefore HTML tag+ head and body
styles already minified by service
SSI include syntax
SSI resolved = include replaced with fragment (by Nginx)
fragment has its own head, with its own minified styles in there
also its own script section at its bottom
very bad page speed as of now
now comes mod pagespeed
combine heads
combine css
combine js, defer its loading
> Moritz
Obviously, one of the challenges of coming up with this interconnected system, with distributed responsibilities was that the result, the product, still needed to provide the highest value to our customer, i.e. a page that worked
We enabled all of our teams to test their composed services with a Jigsaw instance broad to your very machine using Docker and interchangeable services
You can, if you want to, run a certain services somewhere else, in a separate environment, on your laptop, on your toaster (as long as it has web access), and emulate the Jigsaw behaviour through the right set of headers
A test would use your version of Service A, but the production versions of Services B, C, D, etc.
That way you have a high level of assurance when it comes to testing, and you’re more confident when composing your pages
This is so easy, you can hand this out to your product management team and they would be able to test new revisions of your software, through Docker deployments, or even separate feature toggles, without any impact on production systems!
All the facilities you usually have for testing a monolithic applications are still viable and very much possible
This way of composing web services provides a maximum amount of flexibility for otherwise highly dependent teams; none can work without the other, but they all can work together efficiently and effectively
Due to the nature of the dynamic pipeline and the caching mechanism page owners have full control over how fast their pages are served to their customers, none of it is actively impairing performance
All the best practices web developers usually have to dance around with we are entrusting to a source of truth (hint: Google) not only responsible for serving a large portion of the traffic websites receives these days, but also an entity who’s at the forefront of best practice web development. The phrase “if it works for Google it should work for us” is truly alive with this concept.
This is Jigsaw, our UI composition conductor.