3 Ways to optimize Cloud Run response times

Serverless containerization has taken the world by storm as it gives developers a way to deploy their stateless microservices without a heavy burden of infrastructure management. Cloud Run abstracts all infrastructure management. You hand over a container image with a web server and stateless logic, and specify a combination of memory/CPU and allowed concurrency. Cloud Run takes care of creating an HTTP endpoint, routing requests to containers, and scaling containers up and down to handle the volume of requests. While Cloud Run offers some native features to reduce response time latency, such as idle instances, much of it can be improved by writing effective services, which I’ll outline below. Idle instancesAs traffic fluctuates, Cloud Run attempts to reduce the chance of cold starts by keeping some idle instances around to handle spikes in traffic. For example, when a container instance has finished handling requests, it might remain idle for a period of time in case another request needs to be handled.But, Cloud Run will terminate unused containers after some time if no requests need to be handled. This means a cold start can still occur. Container instances are scaled as needed, and it will initialize the execution environment completely. While you can keep idle instances permanently available using the min-instance setting, this incurs cost even when the service is not actively serving requests. So, let’s say you want to minimize both cost, and response time latency during a possible cold start. You don’t want to set a minimum number of idle instances, but you also know any additional computation needed upon container startup before it can start listening to requests means longer load times and latency. Cloud Run container startup There are a few tricks you can do to optimize your service for container startup times. The goal here is to minimize the latency that delays a container instance from serving requests. But first, let’s review the Cloud Run container startup routine. At a high level, it consists of:Starting the serviceStarting the containerRunning the entrypoint command to start your serverChecking for the open service portYou want to tune your service in order to minimize the time needed for step 1a. Let’s walk through 3 ways to optimize your service for Cloud Run response times.#1 Create a leaner serviceFor starters, on Cloud Run, the size of your container image does not affect cold start or request processing time. Large container images, however, mean slower build times, and slower deployment times.You want to be extra careful when it comes to applications written in dynamic languages. For example, if you’re using Node.js or Python, module loading that happens on process startup will add latency during a cold start.Also be aware of some modules that run initialization code upon importing.To build a leaner service you can:Minimize the number and size of dependencies if you’re using a dynamic language.Instead of computing things upon startup, compute them lazily. The initialization of global variables always occurs during startup, which increases cold start time. Use lazy initialization for infrequently used objects to defer the time cost and decrease cold start times.Shorten your initializations and speed up time to start your HTTP server.And use code-loading optimizations like PHP’s composer autoloader optimization.#2 Use a smaller base imageYou want to build a minimal container by working off a lean base image like: alpine, distroless. For example, the alpine:3.7 image is 71 MB smaller than the centos:7 image. You can also use, scratch, which is an empty image on which you can build your own runtime environment. If your app is a statically linked binary, it’s easy to use the scratch base image:You should also only install what is strictly needed inside the image. In other words, don’t install extra packages that you don’t need.#3 Use global variablesIn Cloud Run, you can’t assume that service state is preserved between requests. But, Cloud Run does reuse individual container instances to serve ongoing traffic. That means you can declare a global variable. When new containers are spun up, it can reuse its value. You can also cache objects in memory. Moving this from the request logic to global scope means better performance when traffic is ongoing. Now this doesn’t exactly help cold start times, but once the container is initialized, cached objects can help reduce latency during subsequent ongoing requests. For example, if you move per-request logic to global scope, it should make a cold starts last approximately the same amount of time (and if you add extra logic for caching that you wouldn’t have in a warm request, it would increase the cold start time), but any subsequent request served by that warm instance will have a lower latency.One option that can help with cold starts is to offload global state to an in-memory datastore like Memorystore, which provides sub-millisecond data access to application caches. ConclusionA lot of this boils down to creating a leaner service so logic that computes during container initialization is minimized, and it can start serving requests as soon as possible. While these are just a few best practices for designing a Cloud Run service, there are a number of other tips for writing effective services and optimizing performance, which you can read about here. For more cloud content follow me on Twitter @swongful.Related Article3 cool Cloud Run features that developers loveCloud Run developers enjoy pay-per-use pricing, multiple concurrency and secure event processing.Read Article
Quelle: Google Cloud Platform

Compose CLI ACI Integration Now Available

Today we are pleased to announce that we have reached a major milestone, reaching GA and our V1 of both the Compose CLI and the ACI integration.

In May we announced the partnership between Docker and Microsoft to make it easier to deploy containerized applications from the Desktop to the cloud with Azure Container Instances (ACI). We are happy to let you know that all users of Docker Desktop now have the ACI experience available to them by default, allowing them to easily use existing Docker commands to deploy and manage containers running in ACI. 

As part of this I want to also call out a thank you to the MSFT team who have worked with us to make this all happen! That is a big thank you to Mike Morton, Karol Zadora-Przylecki, Brandon Waterloo, MacKenzie Olson, and Paul Yuknewicz.

Getting started with Docker and ACI 

As a new starter, to get going all you will need to do is upgrade your existing Docker Desktop to the latest stable version (2.5.0.0 or later), store your image on Docker Hub so you can deploy it (you can get started with Hub here) and then lastly you will need to create an ACI context to deploy it to. 

We have done a few blog posts now on the different types of things you can achieve with the ACI integration. 

Getting started locally using Docker & ACI Paul’s blog over at MSFT on getting started with Docker & ACIDeploying a Minecraft server & using volumes with ACI Deploying to ACI as part of Github actions for CD Docker & ACI integration into VSCodeDockers docs on the integration 

If you have other questions on the experience or would like some other guides then drop us a message in the Compose CLI repo so we can update our docs. 

What’s new in V1.0 

Since the last release of the CLI we have added a few new commands to make it easier to manage your working environment and also make it simpler for you to understand what you can clear up to save you money on resources you are not using.

To start we have add a volume inspect command alongside the volume create to allow you better management of your volumes: 

We are also very excited by our new top level prune command to allow you to better clear up your ACI working environment and manage your costs. 

docker prune –help

We have also added in a couple of interesting flags in here, we have the —dry-run flag to let you see what would be cleared up:

(OK I am not running a great deal here!) 

As you can see, this also lets you know the amount of compute resources you will be reclamining as well. At the end of a development session being able to do a force prune allows you to remove ‘all the things you have run’, giving you the confidence you won’t have left something running and get an unexpected bill. 

Lastly we have started to add a few more flags in based on your feedback, a couple of examples of these are the addition of the –format json and –quiet in commands ps, context ls, compose ls, compose ps, volume ls to output json or single IDs.

We are really excited about the new experience we have built with ACI, if you have any feedback on the experience or have ideas for other backends for the Compose CLI please let us know via our Public Roadmap
The post Compose CLI ACI Integration Now Available appeared first on Docker Blog.
Quelle: https://blog.docker.com/feed/

AWS Client VPN kündigt Self-Service-Portal zum Herunterladen von VPN-Profilen und Desktop-Anwendungen an

Das Client VPN Self-Service-Portal ist ein schreibgeschütztes Webportal, das Endbenutzern von Client VPN hilft, das VPN-Profil und aktualisierte Versionen der AWS Client VPN Desktop-Anwendung herunterzuladen. Endbenutzer können das VPN-Profil und die Desktop-Anwendung direkt auf ihre Computer herunterladen. Wir werden auch weiterhin die Möglichkeit für Endbenutzer unterstützen, die Desktop-Anwendung direkt herunterzuladen, ohne dass sie irgendwelche Anmeldedaten eingeben müssen.  
Quelle: aws.amazon.com

Amazon Transcribe unterstützt jetzt Deutsch, Italienisch und 2 weitere AWS-Regionen für Audio-Streaming

Amazon Transcribe ist ein automatischer Spracherkennungsservice (ASR), mit dem Sie Ihre Anwendungen ganz einfach mit Sprache-zu-Text-Funktionen erweitern können. Wir freuen uns, heute die Unterstützung der deutschen und italienischen Sprache für Audio-Streaming ankündigen zu können. Wir kündigen auch die Verfügbarkeit von Amazon Transcribe Streaming in den Regionen EU (London) und EU (Frankfurt) an. Diese neuen Sprachen und Regionen erweitern die Märkte, die durch das Streaming von Amazon Transcribe bedient werden, und ermöglichen es den Kunden, ein breiteres globales Publikum zu erreichen.
Quelle: aws.amazon.com

Einführung in die Lösung zum Verständnis von Dokumenten

Document Understanding Solution ist eine neue AWS-Lösungsimplementierung, die eine einfach zu bedienende Webanwendung bietet, die Text aus Dokumenten extrahiert, Strukturdaten (Tabellen, Schlüssel-Wert-Paare) identifiziert, kritische Informationen (Entitäten) extrahiert und intelligente Suchindizes aus den Daten erstellt. Zusätzlich können Dateien direkt in Ihr AWS-Konto hochgeladen und analysierte Dateien über Ihr AWS-Konto aufgerufen werden. Diese Lösung ist Teil der von AWS angebotenen Intelligent Document Processing Services und nutzt AWS-Services der künstlichen Intelligenz (KI), um Geschäftsprobleme zu lösen, die sich auf verschiedene Industriezweige beziehen:

Suche und Entdeckung: Suche nach Informationen in mehreren gescannten Dokumenten, PDFs und Bildern
Einhaltung: Informationen aus Dokumenten redigieren
Automatisierung von Arbeitsabläufen: Einfaches Einbinden in Ihre bestehenden vor- und nachgelagerten Anwendungen

Quelle: aws.amazon.com