<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>microservices &#8211; Noise</title>
	<atom:link href="https://noise.getoto.net/tag/microservices/feed/" rel="self" type="application/rss+xml" />
	<link>https://noise.getoto.net</link>
	<description>The collective thoughts of the interwebz</description>
	<lastBuildDate>Fri, 08 Aug 2025 16:03:10 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.8.2</generator>
	<item>
		<title>Blue/Green Deployments with Amazon Elastic Container Service</title>
		<link>https://noise.getoto.net/2025/08/08/blue-green-deployments-with-amazon-elastic-container-service/</link>
		
		<dc:creator><![CDATA[Nathan Taber]]></dc:creator>
		<pubDate>Fri, 08 Aug 2025 16:03:10 +0000</pubDate>
				<category><![CDATA[Amazon ECS]]></category>
		<category><![CDATA[deployment]]></category>
		<category><![CDATA[ECS]]></category>
		<category><![CDATA[microservices]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<guid isPermaLink="false">http://noise.getoto.net/?guid=53b64ec2e146501260c612c474762f0d</guid>

					<description><![CDATA[This post and accompanying code was generously contributed by: Jeremy Cowan Solutions Architect Anuj Sharma DevOps Cloud Architect Peter Dalbhanjan Solutions Architect Deploying software updates in traditional non-containerized environments is hard and fraught with risk. When you write your deployment package or script, you have to assume that the target machine is in a particular […]]]></description>
		
		
		<enclosure url="" length="0" type="" />

			</item>
		<item>
		<title>AV1 @ Scale: Film Grain Synthesis, The Awakening</title>
		<link>https://noise.getoto.net/2025/07/02/av1-scale-film-grain-synthesis-the-awakening/</link>
		
		<dc:creator><![CDATA[Netflix Technology Blog]]></dc:creator>
		<pubDate>Wed, 02 Jul 2025 14:21:44 +0000</pubDate>
				<category><![CDATA[microservices]]></category>
		<category><![CDATA[streaming]]></category>
		<category><![CDATA[video-encoding]]></category>
		<category><![CDATA[videos]]></category>
		<guid isPermaLink="false">https://medium.com/p/ee09cfdff40b</guid>

					<description><![CDATA[Unleashing Film Grain Synthesis on Netflix and Enhancing Visuals for MillionsLi-Heng Chen, Andrey Norkin, Liwei Guo, Zhi Li, Agata Opalach and Anush MoorthyPicture this: you’re watching a classic film, and the subtle dance of film grain adds a layer of...]]></description>
		
		
		<enclosure url="" length="0" type="" />

			</item>
		<item>
		<title>Hybrid Cloud Journey using Amazon Outposts and AWS Local Zones</title>
		<link>https://noise.getoto.net/2024/09/18/hybrid-cloud-journey-using-amazon-outposts-and-aws-local-zones/</link>
		
		<dc:creator><![CDATA[Arun Chellappa Ganesan]]></dc:creator>
		<pubDate>Wed, 18 Sep 2024 16:21:51 +0000</pubDate>
				<category><![CDATA[Amazon Elastic Kubernetes Service]]></category>
		<category><![CDATA[Amazon Simple Storage Service (S3)]]></category>
		<category><![CDATA[AWS Outposts]]></category>
		<category><![CDATA[Hybrid Cloud]]></category>
		<category><![CDATA[Hybrid Cloud Management]]></category>
		<category><![CDATA[microservices]]></category>
		<category><![CDATA[Migration]]></category>
		<category><![CDATA[modernization]]></category>
		<category><![CDATA[Regions]]></category>
		<guid isPermaLink="false">http://noise.getoto.net/?guid=69e708df311e0130f867f97e2e09b090</guid>

					<description><![CDATA[This post was co-written with Amy Flanagan, Vice President of Architecture and leader of the Virtual Architecture Team (VAT) at athenahealth, and Anusha Dharmalingam, Executive Director and Senior Architect at athenahealth. athenahealth has embarked on an ambitious journey to modernize its technology stack by leveraging AWS’s hybrid cloud solutions. This transformation aims to enhance scalability, […]]]></description>
		
		
		<enclosure url="" length="0" type="" />

			</item>
		<item>
		<title>The Making of VES: the Cosmos Microservice for Netflix Video Encoding</title>
		<link>https://noise.getoto.net/2024/04/10/the-making-of-ves-the-cosmos-microservice-for-netflix-video-encoding/</link>
		
		<dc:creator><![CDATA[Netflix Technology Blog]]></dc:creator>
		<pubDate>Tue, 09 Apr 2024 22:12:32 +0000</pubDate>
				<category><![CDATA[microservices]]></category>
		<category><![CDATA[Netflix]]></category>
		<category><![CDATA[streaming]]></category>
		<category><![CDATA[video-encoding]]></category>
		<guid isPermaLink="false">https://medium.com/p/946b9b3cd300</guid>

					<description><![CDATA[Liwei Guo, Vinicius Carvalho, Anush Moorthy, Aditya Mavlankar, Lishan ZhuThis is the second post in a multi-part series from Netflix. See here for Part 1 which provides an overview of our efforts in rebuilding the Netflix video processing pipeline with...]]></description>
		
		
		<enclosure url="" length="0" type="" />

			</item>
		<item>
		<title>Top Architecture Blog Posts of 2023</title>
		<link>https://noise.getoto.net/2024/02/29/top-architecture-blog-posts-of-2023/</link>
		
		<dc:creator><![CDATA[Andrea Courtright]]></dc:creator>
		<pubDate>Wed, 28 Feb 2024 23:47:51 +0000</pubDate>
				<category><![CDATA[Amazon API Gateway]]></category>
		<category><![CDATA[Amazon CloudFront]]></category>
		<category><![CDATA[Amazon CloudWatch]]></category>
		<category><![CDATA[Amazon Comprehend]]></category>
		<category><![CDATA[Amazon Elastic Container Service]]></category>
		<category><![CDATA[Amazon Elastic Kubernetes Service]]></category>
		<category><![CDATA[Amazon EventBridge]]></category>
		<category><![CDATA[Amazon Machine Learning]]></category>
		<category><![CDATA[Amazon Managed Workflows for Apache Airflow (Amazon MWAA)]]></category>
		<category><![CDATA[Amazon OpenSearch Service]]></category>
		<category><![CDATA[Amazon Redshift]]></category>
		<category><![CDATA[Amazon Route 53]]></category>
		<category><![CDATA[Amazon Sagemaker]]></category>
		<category><![CDATA[Amazon Simple Queue Service (SQS)]]></category>
		<category><![CDATA[Amazon Textract]]></category>
		<category><![CDATA[announcements]]></category>
		<category><![CDATA[Architecture]]></category>
		<category><![CDATA[artificial intelligence]]></category>
		<category><![CDATA[AWS Glue]]></category>
		<category><![CDATA[AWS Lambda]]></category>
		<category><![CDATA[AWS Managed Services]]></category>
		<category><![CDATA[AWS Step Functions]]></category>
		<category><![CDATA[AWS Well-Architected Framework]]></category>
		<category><![CDATA[AWS Well-Architected Tool]]></category>
		<category><![CDATA[communication]]></category>
		<category><![CDATA[container]]></category>
		<category><![CDATA[data architecture]]></category>
		<category><![CDATA[Disaster Recovery]]></category>
		<category><![CDATA[Disaster Recovery with AWS Managed Services series]]></category>
		<category><![CDATA[event driven architecture]]></category>
		<category><![CDATA[fault injection]]></category>
		<category><![CDATA[Let's Architect]]></category>
		<category><![CDATA[microservices]]></category>
		<category><![CDATA[NLP]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[RDS for PostgreSQL]]></category>
		<category><![CDATA[Regions]]></category>
		<category><![CDATA[Resiliency]]></category>
		<category><![CDATA[SaaS]]></category>
		<category><![CDATA[serverless]]></category>
		<category><![CDATA[Solutions Architecture]]></category>
		<category><![CDATA[Top 10]]></category>
		<guid isPermaLink="false">http://noise.getoto.net/?guid=ef51f99168ffdac5341350134f7083e4</guid>

					<description><![CDATA[2023 was a rollercoaster year in tech, and we at the AWS Architecture Blog feel so fortunate to have shared in the excitement. As we move into 2024 and all of the new technologies we could see, we want to take a moment to highlight the brightest stars from 2023. As always, thanks to our […]]]></description>
		
		
		<enclosure url="" length="0" type="" />

			</item>
		<item>
		<title>Rebuilding Netflix Video Processing Pipeline with Microservices</title>
		<link>https://noise.getoto.net/2024/01/11/rebuilding-netflix-video-processing-pipeline-with-microservices/</link>
		
		<dc:creator><![CDATA[Netflix Technology Blog]]></dc:creator>
		<pubDate>Wed, 10 Jan 2024 23:20:40 +0000</pubDate>
				<category><![CDATA[microservices]]></category>
		<category><![CDATA[Netflix]]></category>
		<category><![CDATA[streaming]]></category>
		<category><![CDATA[video-encoding]]></category>
		<guid isPermaLink="false">https://medium.com/p/4e5e6310e359</guid>

					<description><![CDATA[Liwei Guo, Anush Moorthy, Li-Heng Chen, Vinicius Carvalho, Aditya Mavlankar, Agata Opalach, Adithya Prakash, Kyle Swanson, Jessica Tweneboah, Subbu Venkatrav, Lishan ZhuThis is the first blog in a multi-part series on how Netflix rebuilt its video proc...]]></description>
		
		
		<enclosure url="" length="0" type="" />

			</item>
		<item>
		<title>Zero Configuration Service Mesh with On-Demand Cluster Discovery</title>
		<link>https://noise.getoto.net/2023/08/30/zero-configuration-service-mesh-with-on-demand-cluster-discovery/</link>
		
		<dc:creator><![CDATA[Netflix Technology Blog]]></dc:creator>
		<pubDate>Tue, 29 Aug 2023 23:08:45 +0000</pubDate>
				<category><![CDATA[cloud]]></category>
		<category><![CDATA[envoy]]></category>
		<category><![CDATA[ipc]]></category>
		<category><![CDATA[microservices]]></category>
		<category><![CDATA[service-mesh]]></category>
		<guid isPermaLink="false">https://medium.com/p/ac6483b52a51</guid>

					<description><![CDATA[by David Vroom, James Mulcahy, Ling Yuan, Rob GulewichIn this post we discuss Netflix’s adoption of service mesh: some history, motivations, and how we worked with Kinvolk and the Envoy community on a feature that streamlines service mesh adoption in c...]]></description>
		
		
		<enclosure url="" length="0" type="" />

			</item>
		<item>
		<title>Let’s Architect! DevOps Best Practices on AWS</title>
		<link>https://noise.getoto.net/2023/07/19/lets-architect-devops-best-practices-on-aws/</link>
		
		<dc:creator><![CDATA[Luca Mezzalira]]></dc:creator>
		<pubDate>Wed, 19 Jul 2023 13:13:39 +0000</pubDate>
				<category><![CDATA[Architecture]]></category>
		<category><![CDATA[AWS CodeCommit]]></category>
		<category><![CDATA[AWS CodePipeline]]></category>
		<category><![CDATA[devops]]></category>
		<category><![CDATA[Let's Architect]]></category>
		<category><![CDATA[microservices]]></category>
		<category><![CDATA[serverless]]></category>
		<category><![CDATA[Thought Leadership]]></category>
		<guid isPermaLink="false">http://noise.getoto.net/?guid=8905a04ef6d73813cddb5df98db1e209</guid>

					<description><![CDATA[DevOps has revolutionized software development and operations by fostering collaboration, automation, and continuous improvement. By bringing together development and operations teams, organizations can accelerate software delivery, enhance reliability, and achieve faster time-to-market. In this blog post, we will explore the best practices and architectural considerations for implementing DevOps with Amazon Web Services (AWS), enabling you […]]]></description>
		
		
		<enclosure url="" length="0" type="" />

			</item>
		<item>
		<title>Let’s Architect! Multi-tenant SaaS architectures</title>
		<link>https://noise.getoto.net/2023/06/07/lets-architect-multi-tenant-saas-architectures/</link>
		
		<dc:creator><![CDATA[Luca Mezzalira]]></dc:creator>
		<pubDate>Wed, 07 Jun 2023 15:01:43 +0000</pubDate>
				<category><![CDATA[Amazon Elastic Container Service]]></category>
		<category><![CDATA[Amazon Elastic Kubernetes Service]]></category>
		<category><![CDATA[Architecture]]></category>
		<category><![CDATA[AWS Lambda]]></category>
		<category><![CDATA[communication]]></category>
		<category><![CDATA[Containers]]></category>
		<category><![CDATA[event driven architecture]]></category>
		<category><![CDATA[Let's Architect]]></category>
		<category><![CDATA[microservices]]></category>
		<category><![CDATA[reInvent]]></category>
		<category><![CDATA[Thought Leadership]]></category>
		<guid isPermaLink="false">http://noise.getoto.net/?guid=f109dc386bdf67e6cb80356ab0fa786b</guid>

					<description><![CDATA[In a multi-tenant architecture multiple instances of an application run on a shared infrastructure. With this type of approach, each tenant is isolated from others, typically through logical separation, while utilizing a shared infrastructure. This allows multiple tenants to use the same application and maintain their data security, privacy, and customization requirements. Understanding architectural patterns […]]]></description>
		
		
		<enclosure url="" length="0" type="" />

			</item>
		<item>
		<title>Let’s Architect! Designing microservices architectures</title>
		<link>https://noise.getoto.net/2023/05/24/lets-architect-designing-microservices-architectures/</link>
		
		<dc:creator><![CDATA[Luca Mezzalira]]></dc:creator>
		<pubDate>Wed, 24 May 2023 14:08:56 +0000</pubDate>
				<category><![CDATA[Architecture]]></category>
		<category><![CDATA[event driven architecture]]></category>
		<category><![CDATA[Let's Architect]]></category>
		<category><![CDATA[microservices]]></category>
		<category><![CDATA[reInvent]]></category>
		<category><![CDATA[serverless]]></category>
		<category><![CDATA[Thought Leadership]]></category>
		<guid isPermaLink="false">http://noise.getoto.net/?guid=a4914b873b1760514b5b0ed4f5163d15</guid>

					<description><![CDATA[In 2022, we published Let’s Architect! Architecting microservices with containers. We covered integrations patterns and some approaches for implementing microservices using containers. In this Let’s Architect! post, we want to drill down into microservices only, by focusing on the main challenges that software architects and engineers face while working on large distributed systems structured as […]]]></description>
		
		
		<enclosure url="" length="0" type="" />

			</item>
		<item>
		<title>Let’s Architect! Designing event-driven architectures</title>
		<link>https://noise.getoto.net/2023/01/25/lets-architect-designing-event-driven-architectures/</link>
		
		<dc:creator><![CDATA[Luca Mezzalira]]></dc:creator>
		<pubDate>Wed, 25 Jan 2023 14:18:44 +0000</pubDate>
				<category><![CDATA[Architecture]]></category>
		<category><![CDATA[AWS re:Invent]]></category>
		<category><![CDATA[event driven architecture]]></category>
		<category><![CDATA[Let's Architect]]></category>
		<category><![CDATA[microservices]]></category>
		<category><![CDATA[reInvent]]></category>
		<category><![CDATA[serverless]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[Thought Leadership]]></category>
		<guid isPermaLink="false">http://noise.getoto.net/?guid=793ef63908b7796cba258a1924c5f8d8</guid>

					<description><![CDATA[During the design of distributed systems, we have to identify a communication strategy to exchange information between different services while keeping the evolutionary nature of the architecture in mind. Event-driven architectures are based on events (facts that happened in a system), which are asynchronously exchanged to implement communication across different services while having a high […]]]></description>
		
		
		<enclosure url="" length="0" type="" />

			</item>
		<item>
		<title>Access token security for microservice APIs on Amazon EKS</title>
		<link>https://noise.getoto.net/2021/08/19/access-token-security-for-microservice-apis-on-amazon-eks/</link>
		
		<dc:creator><![CDATA[Timothy James Power]]></dc:creator>
		<pubDate>Thu, 19 Aug 2021 18:35:19 +0000</pubDate>
				<category><![CDATA[Amazon Cognito]]></category>
		<category><![CDATA[Amazon EKS]]></category>
		<category><![CDATA[Amazon Elastic Kubernetes Service]]></category>
		<category><![CDATA[Containers]]></category>
		<category><![CDATA[Developer Tools]]></category>
		<category><![CDATA[Intermediate (200)]]></category>
		<category><![CDATA[microservices]]></category>
		<category><![CDATA[Security, Identity & Compliance]]></category>
		<guid isPermaLink="false">http://noise.getoto.net/?guid=5ee10676d396a306bf5473313b62bbc9</guid>

					<description><![CDATA[In this blog post, I demonstrate how to implement service-to-service authorization using OAuth 2.0 access tokens for microservice APIs hosted on Amazon Elastic Kubernetes Service (Amazon EKS). A common use case for OAuth 2.0 access tokens is to facilitate user authorization to a public facing application. Access tokens can also be used to identify and […]]]></description>
		
		
		<enclosure url="" length="0" type="" />

			</item>
		<item>
		<title>The Netflix Cosmos Platform</title>
		<link>https://noise.getoto.net/2021/03/01/the-netflix-cosmos-platform/</link>
		
		<dc:creator><![CDATA[Netflix Technology Blog]]></dc:creator>
		<pubDate>Mon, 01 Mar 2021 21:10:46 +0000</pubDate>
				<category><![CDATA[distributed-computing]]></category>
		<category><![CDATA[media-processing]]></category>
		<category><![CDATA[microservices]]></category>
		<category><![CDATA[serverless-computing]]></category>
		<category><![CDATA[workflow]]></category>
		<guid isPermaLink="false">https://medium.com/p/35c14d9351ad</guid>

					<description><![CDATA[Orchestrated Functions as a Microserviceby Frank San Miguel on behalf of the Cosmos teamIntroductionCosmos is a computing platform that combines the best aspects of microservices with asynchronous workflows and serverless functions. Its sweet spot is a...]]></description>
		
		
		<enclosure url="" length="0" type="" />

			</item>
		<item>
		<title>Beyond REST</title>
		<link>https://noise.getoto.net/2021/02/25/beyond-rest/</link>
		
		<dc:creator><![CDATA[Netflix Technology Blog]]></dc:creator>
		<pubDate>Thu, 25 Feb 2021 18:30:03 +0000</pubDate>
				<category><![CDATA[GraphQL]]></category>
		<category><![CDATA[graphql-vs-rest]]></category>
		<category><![CDATA[microservices]]></category>
		<category><![CDATA[rapid-prototyping]]></category>
		<category><![CDATA[rest]]></category>
		<guid isPermaLink="false">https://medium.com/p/1b76f7c20ef6</guid>

					<description><![CDATA[<h4>Rapid Development with GraphQL Microservices</h4><p><em>by </em><a href="https://www.linkedin.com/in/daneavilla/"><em>Dane Avilla</em></a></p><p>The entertainment industry has struggled with COVID-19 restrictions impacting productions around the globe. Since early 2020, Netflix has been iteratively developing systems to provide internal stakeholders and business leaders with up-to-date tools and dashboards with the latest information on the pandemic. These software solutions allow executive leadership to make the most informed decisions possible regarding if and when a given physical production can safely begin creating compelling content across the world. One approach that is gaining mind-share within Netflix is the concept of <a href="https://dev.to/mrfrontend/graphql-microservices-architecture-by-apollo-1m75"><em>GraphQL</em> <em>microservices</em></a><em> </em>(GQLMS) as a backend platform facilitating rapid application development.</p><p>Many organizations are embracing GraphQL as a way to unify their enterprise-wide data model and provide a single entry point for navigating a sea of structured data with its network of related entities. Such efforts are laudable but often entail multiple calendar quarters of coordination between internal organizations followed by the development and integration of all relevant entities into a single monolithic graph.</p><p>In contrast to this “One Graph to Rule Them All” approach, GQLMS leverage GraphQL simply as an enriched API specification for building <a href="https://en.wikipedia.org/wiki/Create,_read,_update_and_delete">CRUD</a> applications. Our experience using GQLMS for rapid proof-of-concept applications confirmed two theories regarding the advertised benefits of GraphQL:</p><ul><li>The <a href="https://github.com/graphql/graphiql">GraphiQL</a> IDE displays any available GraphQL documentation right alongside the schema, dramatically improving developer ergonomics for API consumers (in contrast to the best-in-class <a href="https://swagger.io/tools/swagger-ui/">Swagger UI</a>).</li><li>GraphQL’s strong type system and polyglot client support mean API providers do not need to concern themselves with generating, versioning, and maintaining language-specific API clients (such as those generated with the excellent <a href="https://swagger.io/tools/swagger-codegen/">Swagger Codegen</a>). Consumers of GraphQL APIs can simply leverage the open-source GraphQL client of their preference.</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*QupchUd58_jK8ObO"><figcaption><strong>Graph<em>i</em>QL: Auto-generated test GUI for the </strong><a href="https://swapi.dev/"><strong>Star Wars API</strong></a></figcaption></figure><p>Our experience has led to an architecture with a number of best-practices for teams interested in GQLMS as a platform for rapid development.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/511/0*N1kLX-1u7LI-9f9_"></figure><h4>Graphile</h4><p>During early GraphQL exploration efforts, Netflix engineers became aware of the <a href="https://graphile.org/">Graphile</a> library for presenting PostgreSQL database objects (tables, views, and functions) as a GraphQL API. Graphile supports <a href="https://www.graphile.org/postgraphile/smart-comments/#gatsby-focus-wrapper">smart comments</a> allowing control of various features by tagging database tables, views, columns, and types with specifically formatted PostgreSQL comments. Documentation can even be embedded in the database comments such that it displays in the GraphQL schema generated by Graphile.</p><p>We hypothesized that a <a href="https://www.docker.com/why-docker">Docker</a> container running a very simple NodeJS web server with the Graphile library (and some additional Netflix internal components for security, logging, metrics, and monitoring) could provide a “better REST than REST” or “REST++” platform for rapid development efforts. Using Docker we defined a lightweight, stand-alone container that allowed us to package the Graphile library and its supporting code into a self-contained bundle that any team can use at Netflix with no additional coding required. Simply pull down the defined Docker base image and run it with the appropriate database connection string. This approach proved to be very successful and yielded several insights into the use of Graphile.</p><p>Specifically:</p><ul><li>Use database views as an “API layer” to preserve flexibility in order to allow modifying tables without changing an existing GraphQL schema (built on the database views).</li><li>Use PostgreSQL <a href="https://www.postgresql.org/docs/11/rowtypes.html">Composite Types</a> when taking advantage of PostgreSQL <a href="https://www.postgresql.org/docs/9.5/functions-aggregate.html">Aggregate Functions</a>.</li><li>Increase flexibility by allowing GraphQL clients to have “full access” to the auto-generated GraphQL queries and mutations generated by Graphile (exposing CRUD operations on <em>all</em> tables &#38; views); then later in the development process, remove schema elements that did not end up being used by the UI before the app goes into production.</li></ul><h4>Database views as API</h4><p>We decided to put the data tables in one PostgreSQL schema and then define views on those tables in another schema, with the Graphile web app connecting to the database using a dedicated PostgreSQL user role. This ended up achieving several different goals:</p><ul><li>Underlying tables could be changed independently of the views exposed in the GraphQL schema.</li><li>Views could do basic formatting (like rendering TIMESTAMP fields as ISO8601 strings).</li><li>All permissions on the underlying table had to be explicitly granted for the web application’s PostgreSQL user, avoiding unexpected write access.</li><li>Tables and views could be modified within a single transaction such that the changes to the exposed GraphQL schema happened atomically.</li></ul><p>On this last point: changing a table column’s type would break the associated view, but by wrapping the change in a transaction, the view could be dropped, the column could be updated, and then the view could be re-created before committing the transaction. We run Graphile with <a href="https://www.graphile.org/postgraphile/usage-library/#api-postgraphilepgconfig-schemaname-options">pgWatch</a> enabled, so as soon as any updates were made to the database, the GraphQL schema immediately updated to reflect the change.</p><h4>PostgreSQL composite types</h4><p>Graphile does an excellent job reading the PostgreSQL <em>database</em> schema and transforming tables and basic views into a <em>GraphQL</em> schema, but our experience revealed limitations in how Graphile describes nested types when PostgreSQL <a href="https://www.postgresql.org/docs/9.5/functions-aggregate.html">Aggregate Functions</a> or <a href="https://www.postgresql.org/docs/9.5/functions-json.html">JSON Functions</a> exist within a view. Native PostgreSQL functions such as json_build_object will be translated into a GraphQL JSON type, which is simply a String, devoid of any internal structure. For example, take this simplistic view returning a JSON object:</p><pre>postgres_test_db=# create view postgraphile.json_object_example as<br>  select json_build_object(‘hello world’::text, 1, ‘2’::text, 3)<br>  as json;<br>postgres_test_db=# select * from postgraphile.json_object_example;<br>          json<br>— — — — — — — — — — — — -<br>{“hello world”: 1, “2”: 3}<br>(1 row)</pre><p>In the generated schema, the data type is JSON:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/550/0*XK9xj1dvJMYp0Oe9"></figure><p>The internal structure of the json field (the hello world and 2 sub-fields) is opaque in the generated GraphQL schema.</p><p>To further describe the internal structure of the json field — exposing it within the generated schema — define a composite type, and create the view such that it returns that type:</p><pre>postgres_test_db=# CREATE TYPE postgraphile.custom_type AS (<br>  "hello world" integer,<br>  "2" integer<br>);</pre><p>Next, create a function that returns that type:</p><pre>postgres_test_db=# CREATE FUNCTION postgraphile.custom_type(<br>  "hello world" integer,<br>  "2" integer<br>)<br>RETURNS postgraphile.custom_type<br>AS 'select $1, $2'<br>LANGUAGE SQL;</pre><p>Finally, create a view that returns that type:</p><pre>postgres_test_db=# create view postgraphile.json_object_example2 as<br>  select postgraphile.custom_type(1, 3)<br>  as json;<br>postgres_test_db=# select * from postgraphile.json_object_example2;<br> json<br>— — — -<br>(1,3)<br>(1 row)</pre><p>At first glance, that does not look very useful, but hold that thought: before viewing the generated schema, define comments on the view, custom type, and fields of the custom type to take advantage of Graphile’s smart comments:</p><pre>postgres_test_db=# comment on<br>  type postgraphile.custom_type<br>  is E’A description for the custom type’;<br>postgres_test_db=# comment on<br>  view postgraphile.json_object_example2<br>  is E’A description for the view’;<br>postgres_test_db=# comment on<br>  column postgraphile.custom_type.”hello world”<br>  is E’A description for hello world’;<br>postgres_test_db=# comment on<br>  column postgraphile.custom_type.field_2<br>  is E’@name field_two\nA description for the second field’;</pre><p>Now, when the schema is viewed, the json field no longer shows up with opaque type JSON, but with CustomType:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/623/0*BIBL5LiGYIoHQZXo"></figure><p>(also note that the comment made on the view — A description for the view — shows up in the documentation for the query field).</p><p>Clicking CustomType displays the fields of the custom type, along with their comments:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/564/0*h3EtRbTmVAoDDMO8"></figure><p>Notice that in the custom type, the second field was named field_2, but the Graphile smart comment renames the field to field_two and subsequently gets camel-cased by Graphile to fieldTwo. Also, the descriptions for both fields display in the generated GraphQL schema.</p><h4>Allow “full access” to the Graphile-generated schema (during development)</h4><p>Initially, the proposal to use Graphile was met with vigorous <a href="https://jobs.netflix.com/culture">dissent</a> when discussed as an option in a “one schema to rule them all” architecture. Legitimate concerns about security (how does this integrate with our <a href="https://en.wikipedia.org/wiki/Identity_management">IAM</a> infrastructure to enforce row-level access controls within the database?) and performance (how do you limit queries to avoid DDoSing the database by selecting all rows at once?) were raised about providing open access to database tables with a SQL-like query interface. However, in the context of GQLMS for rapid development of internal apps by small teams, having the default Graphile behavior of making all columns available for filtering allowed the UI team to rapidly iterate through a number of new features without needing to involve the backend team. This is in contrast to other development models where the UI and backend teams first agree on an initial API contract, the backend team implements the API, the UI team consumes the API and then the API contract evolves as the needs of the UI change during the development life cycle.</p><p>Initially, the overall app’s performance was poor as the UI often needed multiple queries to fetch the desired data. However, once the app’s behavior had been fleshed out, we quickly created new views satisfying each UI interaction’s needs such that each interaction only required a single call. Because these requests run on the database in native code, we could perform sophisticated queries and achieve high performance through the appropriate use of indexes, denormalization, clustering, etc.</p><p>Once the “public API” between the UI and backend solidified, we “hardened” the GraphQL schema, removing all unnecessary queries (created by Graphile’s default settings) by marking tables and views with the smart comment @omit. Also, the default behavior is for Graphile to generate mutations for tables and views, but the smart comment @omit create,update,delete will remove the mutations from the schema.</p><h4>Conclusion</h4><p>For those taking a <a href="https://blog.mirumee.com/schema-first-graphql-the-road-less-travelled-cf0e50d5ccff">schema-first</a> approach to their GraphQL API development, the automatic GraphQL schema generation capabilities of Graphile will likely unacceptably restrict schema designers. Graphile may be difficult to integrate into an existing enterprise IAM infrastructure if fine-grained access controls are required. And adding custom queries and mutations to a Graphile-generated schema (i.e. to expose a gRPC service call needed by the UI) is something we currently do not support in our Docker image. However, we recently became aware of Graphile’s <a href="https://www.graphile.org/postgraphile/make-extend-schema-plugin/">makeExtendSchemaPlugin</a>, which allows custom types, queries, and mutations to be merged into the schema generated by Graphile.</p><p>That said, the successful implementation of an internal app over 4–6 weeks with limited initial requirements and an <em>ad hoc </em>distributed team (with no previous history of collaboration) raised a large amount of interest throughout the Netflix Studio. Other teams within Netflix are finding the GQLMS approach of:</p><p>1) using standard GraphQL constructs and utilities to expose the database-as-API</p><p>2) leveraging custom PostgreSQL types to craft a GraphQL schema</p><p>3) increasing flexibility by auto-generating a large API from a database</p><p>4) and exposing additional custom business logic and data types alongside those generated by Graphile</p><p>to be a viable solution for internal CRUD tools that would historically have used REST. Having a standardized Docker container hosting Graphile provides teams the necessary infrastructure by which they can quickly iterate on the prototyping and rapid application development of new tools to solve the ever-changing needs of a global media studio during these challenging times.</p><img src="https://medium.com/_/stat?event=post.clientViewed&#38;referrerSource=full_rss&#38;postId=1b76f7c20ef6" width="1" height="1" alt=""><hr><p><a href="https://netflixtechblog.com/beyond-rest-1b76f7c20ef6">Beyond REST</a> was originally published in <a href="https://netflixtechblog.com/">Netflix TechBlog</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></description>
		
		
		<enclosure url="" length="0" type="" />

			</item>
		<item>
		<title>Building Netflix’s Distributed Tracing Infrastructure</title>
		<link>https://noise.getoto.net/2020/10/19/building-netflixs-distributed-tracing-infrastructure/</link>
		
		<dc:creator><![CDATA[Netflix Technology Blog]]></dc:creator>
		<pubDate>Mon, 19 Oct 2020 20:38:08 +0000</pubDate>
				<category><![CDATA[distributed-tracing]]></category>
		<category><![CDATA[microservices]]></category>
		<category><![CDATA[Netflix]]></category>
		<category><![CDATA[observability]]></category>
		<category><![CDATA[operational-insight]]></category>
		<guid isPermaLink="false">https://medium.com/p/bb856c319304</guid>

					<description><![CDATA[by Maulik PandeyOur Team — Kevin Lew, Narayanan Arunachalam, Elizabeth Carretto, Dustin Haffner, Andrei Ushakov, Seth Katz, Greg Burrell, Ram Vaithilingam, Mike Smith and Maulik Pandey“@Netflixhelps Why doesn’t Tiger King play on my phone?” — a Netflix...]]></description>
		
		
		<enclosure url="" length="0" type="" />

			</item>
		<item>
		<title>Seamlessly Swapping the API backend of the Netflix Android app</title>
		<link>https://noise.getoto.net/2020/09/08/seamlessly-swapping-the-api-backend-of-the-netflix-android-app/</link>
		
		<dc:creator><![CDATA[Netflix Technology Blog]]></dc:creator>
		<pubDate>Tue, 08 Sep 2020 15:36:53 +0000</pubDate>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[Backend]]></category>
		<category><![CDATA[backends-for-frontends]]></category>
		<category><![CDATA[microservices]]></category>
		<category><![CDATA[mobile]]></category>
		<guid isPermaLink="false">https://medium.com/p/3d4317155187</guid>

					<description><![CDATA[How we migrated our Android endpoints out of a monolith into a new microserviceby Rohan Dhruva, Ed BallotAs Android developers, we usually have the luxury of treating our backends as magic boxes running in the cloud, faithfully returning us JSON. At Ne...]]></description>
		
		
		<enclosure url="" length="0" type="" />

			</item>
		<item>
		<title>Edgar: Solving Mysteries Faster with Observability</title>
		<link>https://noise.getoto.net/2020/09/03/edgar-solving-mysteries-faster-with-observability/</link>
		
		<dc:creator><![CDATA[Netflix Technology Blog]]></dc:creator>
		<pubDate>Wed, 02 Sep 2020 21:02:30 +0000</pubDate>
				<category><![CDATA[distributed-tracing]]></category>
		<category><![CDATA[microservices]]></category>
		<category><![CDATA[Netflix]]></category>
		<category><![CDATA[observability]]></category>
		<category><![CDATA[operational-insight]]></category>
		<guid isPermaLink="false">https://medium.com/p/e1a76302c71f</guid>

					<description><![CDATA[Edgar helps Netflix teams troubleshoot distributed systems efficiently with the help of a summarized presentation of request tracing, logs, analysis, and metadata.by Elizabeth CarrettoEveryone loves Unsolved Mysteries. There’s always someone who seems ...]]></description>
		
		
		<enclosure url="" length="0" type="" />

			</item>
	</channel>
</rss>

<!--
Performance optimized by W3 Total Cache. Learn more: https://www.boldgrid.com/w3-total-cache/

Object Caching 74/371 objects using Memcached
Page Caching using Disk: Enhanced 
Lazy Loading (feed)
Database Caching using Memcached

Served from: noise.getoto.net @ 2025-12-05 20:14:04 by W3 Total Cache
-->