Open mnapoli opened 5 years ago
Https://www.suamusica.com.br (website built with phalcon uses alb to lambda) Suamusica private APIs to our apps (cacheable and world-wide deployed with Cloudfront caching the public responses close to the user)
https://kittyquotes.net (someday there'll be a PHP / serverless tutorial on github to accompany this site)
@atrope that's really interesting. Did you build a PHP layer yourself or are you using the Bref layers? If you have any numbers to share (either here or via a blog post) I'm sure many people would be interested to learn more :)
@mnapoli first we built ourselves our layer, and then we migrated to bref. With bref we changed the PHP dockerfile so we could build some custom extensions with custom support (redis with igbinary, phalcon, imagick etc) and change some code (ALB Support and other issues).
The Performance with bref is 30% better than it was with our runtime(also was FPM based).
I Will write a blog post sometime but just for now here are some numbers:
Roughly 40M requests daily In Peak, we have 2.5k concurrent lambdas In API our average duration is 90ms In Portal(Website) is 130ms
This of course when it goes to lambda and is not cached in CF.
Some changes(challenges) we had to do coming from nginx is for example when a route is not found, it must check in lambda's public directory and do a file_get_contents of it and set appropriate headers(ads.txt, manifest.json examples).
Most of our work was facilitated because we were already in containers thus we had(almost, just the ones cited above) no local assets files(a must in lambda).
We created an integrated Slack bot that deploys our lambdas (minifying js/css and uploading to s3) in less than 30s using a BASH Layer - https://github.com/gkrizek/bash-lambda-layer - we deploy any branch to a new lambda and we have a complete new development env in some seconds each time we want to test any branch. When we deploy branch master, it updates our prod code. That's also great when something is not good we can revert our code for any commit we want in seconds.
Setting the right alarms are also a must for this kind of scale, because some extra miliseconds could cost us double the money, so alarms must be finely tuned.
Changing from ECS to Lambda gave us a roughly 25% economy in EC2 not even taking into account TCO and worldwide Infinitely scale/descale lambda+CF gives us, and not even needing to think of EC2 Reservations and hidden costs(storage, data transfer..).
I do plan to write a detailed blog post as soon as i have some free time but if anyone want to know something specific can shoot me a message :)
@atrope this is amazing! Thanks for sharing.
BTW ALB is definitely on my TODO list, I'm working on a project to try it out and document it (it just takes some time to go through everything).
@mnapoli first we built ourselves our layer, and then we migrated to bref. With bref we changed the PHP dockerfile so we could build some custom extensions with custom support (redis with igbinary, phalcon, imagick etc) and change some code (ALB Support and other issues).
I do plan to write a detailed blog post as soon as i have some free time but if anyone want to know something specific can shoot me a message :)
@atrope That is fantastic work!! I have been trying to get Imagemagick & Imagick installed using the same method but my PHP Dockerfile is not right and although I have installed the delegates for decoding I always get an error 'no decode delegate for this image format `PNG'. If you could publish yours (or the sections for adding these) it would be amazing!
@yousafs Of course i can send you :)
In php.Dockerfile:
RUN LD_LIBRARY_PATH= yum install -y ImageMagick-devel
RUN pecl install imagick
and then rebuild, Simple as that.
@atrope Thank you! That is much simpler than my version - clearly I am not worthy :) I will give it a try ...
Here is a new website shared in the Slack channel:
We launched a Project with bref on Lambda last week.
Setup is
- Domain DNS is at Route53
- All Requests go through Cloudfront /static -> S3 everything else through API Gateway to Lambda (No caching there currently)
- Lambda is in a VPC with a Aurora and an Elasticache (tbh. I think I'm going to cut the Elasticache and move the sessions stuff to Auroa)
- It's an Laravel App with Nova and some Jobs
- Assets are synced while deloying via a Gitlabrunner + Cloudfront Cache is invalidated at that point
- Entire Cloudfront Setup is in Cloudformation
Pain Points:
- I needed the Requested Hostname at my Lambda Function to determine the Language (Tenant) of the Page so a Lambda@Edge Function is running on every request that maps my Host to (yeah that's not really nice I know but I havn't found an alternative with Cloudfront)
- Setting Up VPC with Cloudformation is a pain so i did it manually
Url: https://radiome.de/ https://radiome.at/ https://radiome.fr/
at https://mybuilder.com we're using Bref to generate reports in PDF format.
Using the fpm
layer we have a single api endpoint which accepts a request payload containing an HTML string and a destination of where to upload the generated report. The endpoint does auth and validation, then pushes a notification through SNS.
A 2nd lambda function defined in the same template.yml
using the base php
layer (along with our own wkhtmltopdf
layer which we created) converts the HTML string into PDF, before uploading it to the destination specified in the original payload.
We chose to launch this on lambda because we expect there to be spikes of usage throughout the day, and probably zero instantiations overnight, so fast scaling up-and-down was a key consideration.
We created our own wkhtmltopdf
layer because:
wkhtmltopdf
FAQ)wkhtmltopdf
so we wanted to carry on with what they'd already tried / learnedwkhtmltopdf
would be better than running headless Chrome in Lambda using puppeteerhttps://phpstan.org - running PHPStan inside a Bref project 😊
and a new one https://www.chouchouhotel.com/ 😊
Nice!
The static map image service for https://wyrimaps.net/ is now powered by Bref. Even though it isn't a full website, and only outputs images like https://st0.cf.wyrimaps.wyri.haxim.us/wow_battle_for_azeroth/4/512/256/frinCobny@.png using bref was a no-brainer. Creating those images is CPU heavy so my VPS' CPU got saturated quickly. With bref it will scale to infinity 🎉.
https://pornhub-meme-generator.com
The deploy process:
Considering all the key points listed by @RikudouSage, the funny thing is not that the site is a pornhub meme generator. The funny thing is that a blog post explaining all steps to deploy a pornhub meme generator using Bref would be absolutely valuable.
@crisdiehard Well, I could create such post using less controversial meme generator. Don't know where I would post it, though.
Not a public site but I build a demo symfony mulipage application as reference: https://github.com/Nemo64/serverless-symfony
Documentation on how to test and deploy it is in the readme.
The main highlight is probably the database handling. I uses custom CloudFormation resources to create users and databases (within a shared database server) and even do schema migrations. But it is also a working example of hosting assets and the app under the same domain behind CloudFront. And it has working caching and logging.
Not all features are tested in production environments yet.
Hi there, we're currently building a new Hotel Brand. I can't communicate a lot on it at the moment as the launch is in more than a year. We've never experienced λ in php before.
We've switched from ECS to Lambda about 10 days ago to give it a try. It's not so bad, our λ (workers & REST API) are in a VPC (with a NAT GW) and they connect to:
This app is based on Symfony framework with Api Platform. Both ar pretty big but with the ad-hoc process we're able to generate a less than 5M zip artifact to deploy. We've tried opcache.preload and some bref layer's optimizations too. We've found nothing big.
Everything works pretty well. The api is consumed by a customer frontend app (react nextjs) and with SWR (Stale While Revalidate) trick on frontend side we forget that sometimes API request can be a bit slow.
This was some work to make the migration but as we manage AWS with IaaC (thanks to terraform) the process was under control. What we appreciate:
About cold starts, this is mostly OK, we will wait 2020 re:Invent announcements, we expect following things:
I just built a demo Laravel page on AWS Lambda with Docker container image using Bref. I'd like to introduce my README here because I couldn't find a document about this type of deployment yet.
Hi https://www.alana.jobs/ not the landing that is made with Webflow, the actual web and mobile app api is build from the ground up with bref, we start with bref v0.5 , so we went early.
Is a employee management tool with everything you need from user panel, to realtime dashboards to see if your employees are late to work or on a break, is also a time checking app with face recognition, and has a buildin checklist feature to manage inspections, also has a pre calculate monthly payment system in Mexico and Colombia, also has a module that lets you plan employees schedules and leaves for childbirth, sick and other types of leaves.
Was a lot of fun, we integrate https://sentry.io/ for logs and debugging at the time that was a real trouble, been a contributer of @mnapoli since then, this year I am going for my aws solutions architect associate, this proyect and reactPHP made me passionate about php.
Hey, backend of https://neural.love works with bref too.
Our fastest handler is only 40ms in average.
Hello! https://coingoback.com/ is built with Bref and Laravel. Coingoback is a cryptocurrency wallet with benefits, e-commerce cash backs, crypto-games play-to-earn, crypto subscription with credit-card etc.
Here is my list:
Uptime Rocket: server uptime monitoring service
My Top Servers: minecraft server list
@atrope it's been years now, but I wonder if you have any updates for us 😛
Is the website still running with Bref? Still the same traffic?
Integration between Slack and OpenAI / ChatGPT: https://github.com/RikudouSage/SlackChatGPT
It does support deploying via docker everywhere, but it's made with bref / serverless in mind and is the default (and also the way I use it).
Edit: I also finally got to try Symfony messenger using bref.
Hey @mnapoli long time :)
We are still running our API and Website with a Modified version of Bref.
Now with the end of support of Amazon Linux 1 i am working to migrate to the newer bref layers (fpm 8.2)
The website I Already managed to migrate and the API i should finnish by the end of next week and then we can check performance (4 years without changing the bref version).
Hey @mnapoli we finished the migration and now we are fully using php-fpm from bref 8.2 version layer 31 (#1528).
Before the migration we were running on avg ~100ms After migrating we are running at ~70ms that is awesome and that means 30% cheaper. This is Powering our API with more than 1B requests/mo
@mnapoli , may want to remove prettyci.com, looks like domain is expired and now for sale.
I would like to create a page that references applications or websites built with Bref.
In the meantime let's collect here links and descriptions of those applications. Feel free to post a comment, your application doesn't have to be a public website, it can also be anything not visible on the internet.
Here is my (public) list for now:
prettyci.com, workers