> Google let go of our bill as a one-time gesture How many times do they have to do that? Because if it is a high number, they would be operating at a loss.
I'm not using the service anymore,
71–80 of 98 posts
> Google let go of our bill as a one-time gesture How many times do they have to do that? Because if it is a high number, they would be operating at a loss.
I'm not using the service anymore,
In other words, the only way to access the "free trial" is to give a blanket promise to pay unlimited amount of money if something goes wrong.
There is no way I would agree to that, so I just closed the browser tab and forgot about the whole thing. That is, until this debate reminded me of it.
For an online service, implementing the cap should be quite simple, so if it is not available, I am going to assume this is intentional.
Earlier quoted context omitted.
Sure, you know the price with renting one machine, and if what your doing is not a web app. But what about when you get way more network traffic than your app expected (I've seen HN submissions with exactly this)? And what if you built in some kind of scaling, automatically renting extra machines when you get traffic spikes? They have your card, you pay the $$$.
I don’t have any skin in the game here, but what if you don’t build auto-scaling, which keeps this comparison fair. How does pricing differ now?
But to answer your question (about AWS EC2 vs a DO droplet?), about other costs, you still have data transfer costs, which is currently:
AWS (for US East: Ohio):
Inbound: - first GB free - then $0.09/GB after (until 10TB, then you go to the next tier, paying a little less per GB.
Outbound - Well, I couldn't figure it out. The page was too complicated for me! (I think it's $0.01/GB? From this text: "Data transferred “in” to and “out” from public or Elastic IPv4 address is charged at $0.01/GB in each direction")
Source: https://aws.amazon.com/ec2/pricing/on-demand/#Data_Transfer
DO: Inbound - free
Outbound Free tier: depends on which droplet and how long you keep the droplet powered on for, but for the cheapest $5/month powered on all month, you get 1TB free. After free tier: $0.01/GB
Source for Inbound: https://www.digitalocean.com/docs/billing/bandwidth/ Source for outbound calculator: https://www.digitalocean.com/pricing/bandwidth/
Anyone who understands it better than me (especially the AWS pricing), please feel free to comment, I'd genuinely be interested to understand it better; with the way it's documented, I don't really understand it very well.
Earlier quoted context omitted.
that’s a non-argument. you can do the same with an EC2 instance. you know exactly what it’s gonna cost. it’s this fancy services with “elastic” pricing models that usually get you
Sure, you know the price with renting one machine, and if what your doing is not a web app. But what about when you get way more network traffic than your app expected (I've seen HN submissions with exactly this)? And what if you built in some kind of scaling, automatically renting extra machines when you get traffic spikes? They have your card, you pay the $$$.
There is even a default 'task limit' they enforce which we had to increase by sending an email request.
Typically though, as in the article above, it's the database service scaling that causes big shocks.
Rule of thumb would be to always ask if there is an upper bound to every cloud service one uses.
Earlier quoted context omitted.
Tricks like that don’t work with sites that are receiving a lot of traffic. Also, the exact solution you’ve described is a liability—IP addresses leak when people send each other links, and having unique URLs like that can cause issues with caching. Sure, we could store tokens in a database, but then you’ve just moved the bottleneck to the database. We do have various ways to combat these issues; like any website of…
I would think you could obscure whatever marker you use fairly easily, any basic encryption should work. It mostly seems like you could do something that temporarily throttles crawlers to a limit that doesn't affect humans much so you don't have to do something manual in the middle of the night. Statistical outliers that get limited to one page request per second per IP or something like that. The rest of this is arg…
Indeed, you can, and there are situations in which it makes sense. However, it doesn’t really help when it comes to detecting abuse of this sort. For one, CGNAT causes problems. There’s also the issue of people linking to articles from sites like HN and Wayback Machine. Those two alone make it nearly impossible to automatically rate limit based on an ID in the URL.
CGNAT is a big issue that Western companies tend to neglect. However, it’s increasingly common in places like India, and it’s even seen at times in the US, especially in rural areas.
And, of course, public VPNs are growing in popularity.
Unfortunately, all of these factors mean that performing any sort of risk analysis or rate limiting on IP address alone tends to be ineffective or outright harmful for moderately large sites. You can do some fairly basic categorization (this is from a residential ISP, this is from a datacenter), but beyond that, it’s not particularly useful.
Hypothetically, let’s say:
1. We tag every URL with an IP address association in some way.
2. Someone posts a link on HN.
3. We see lots of requests with IP address tags that don’t match the actual requesting IP address, so we block or rate limit them.
4. We’ve just blocked traffic from HN.
Another hypothetical:
1. We design, calibrate, and test a rate limiting system in the US.
2. Some large percentage of real-world traffic comes from India and is behind CGNAT.
3. We’ve just rate-limited most of India.
4. So we exclude India.
5. But now we’ve rate-limited Nigeria, and malicious traffic from India isn’t blocked.
What we actually end up doing is similar but mostly relies cookies instead, and it’s only a single risk factor. It’s not perfect, and it has some caveats that the URL solution avoids, but it has far fewer false positives.
Earlier quoted context omitted.
If I were in AWS/GCP's position, I would prefer to send alerts rather than turn off services. Shutting off services can mean destroying the customer's data with no way for them to recover it. That could be from terminated ephemeral disks, or a terminated database, or cutting off a critical upload stream into their instances. Its a lot easier to reduce/forgive a bill when a customer makes a mistake than to recover the…
Can’t you just stop spinning up new services and suspend running ones including connections and db accesses? Start with bandwidth?
What if the new services that are being suspended are writes to queuing systems that are used for order fulfillment or other business processes, should we drop these orders on the floor?
It's much easier to handle it post facto, and write off the expense on the cloud provider side, which doesn't cost them that much anyway. There are some guard rails that prevent people from doing catastrophic things that they can't write off (eg. taking all of the compute capacity of a region for hours on end, preventing other customers from actually using it) using limits that require manual intervention to be raised.
Earlier quoted context omitted.
I don’t have any skin in the game here, but what if you don’t build auto-scaling, which keeps this comparison fair. How does pricing differ now?
The difference would be that for a prepaid service, you can build it in, knowing that once it eats through enough $, that's it; there is no more credit to take, power off the service. Whereas the billing by credit card, it will keep on going, and you can end up with these huge bills to pay. But to answer your question (about AWS EC2 vs a DO droplet?), about other costs, you still have data transfer costs, which is cu…
The way AWS complicates their pricing to the point where it's hard to tell what you're on the hook for just comes across as so... shady to me. I understand what they offer, and which problems they solve, I just don't personally like doing business with entities like AWS.
No, I'm not building anything that really needs the scale of AWS, and yeah I guess that invalidates my opinion of it to a certain extent. I'm just a stranger throwing their voice into the void for fun and to learn new things :P
Earlier quoted context omitted.
Also - as someone with a ton of experience on the other side of this coin: Puppeteer etc. are nice and all but if you can get away with raw HTTP requests grabbing and parsing the HTML without pulling down stylesheets, JS, etc. do it. It is WAY more efficient than requesting the full overhead for the user experience from these folks and threading out 5-10 workers to gracefully crawl a site this way doesn't typically c…
> Also - on the custom UAS: Unless you're trying to make it easy to get blocked/identified then don't take this advice. I can’t speak for other sites, but we’re pretty good at picking up on crawlers that don’t have a unique UA. The problem is that we’re going to have a hard time differentiating your well-behaved crawler from more malicious crawlers, and you’re going to get caught in the crossfire. > if you can get aw…
I'm not sure that (4) matters for larger sites? Their rate limits are usually a drop in the bucket compared to the background traffic.
Earlier quoted context omitted.
I have solved this kind of attacks with redis + app modification to count requests per ip per minute and auto add iptables rules to ban the offenders ip and deban it after xx minutes. Iptables rules are then synchronized to my fleet of front end servers. I noticed Cloudflare is doing the same but 1 level deeper with XDP drop: https://blog.cloudflare.com/how-to-drop-10-million-packets/
This person used a new IP address for every single request, so that won’t work. And that’s a growing trend.
Earlier quoted context omitted.
Web pages (URLs) is not a DAG and hence it can have loops. Regardless, even if I've never designed a web crawler, I'd think a basic feature would be deduplication; a database (table) of URLs visited with a timestamp (so you can visit again after X days to check for changes, this refresh rate can be also included in the table per URL), so the crawler would check this table before visiting a URL.
Trust me, that's not the first thing you think about when designing your scraper. Typically, one doesn't care whether the same page has been visited before. What one does care about is avoiding storing duplicate data.