4 ms·
- Database needs to be purchased - Database needs to be distributed to your servers - Database can become out of date easily - Database lookup requires going
by gfodor 9y ago
- Database needs to be purchased
- Database needs to be distributed to your servers
- Database can become out of date easily
- Database lookup requires going to local disk and having a relatively fast access path/cache for lookups
- In general, a local database requires a large amount of effort compared to just running a curl in your PHP code.
If you are actually going to use a database, the proper solution does not look like "put it on your webservers" anyway, it looks like "put it on a separate service with a fast caching layer" etc etc. So in other words, the proper solution to decouple yourself from a 3rd party API is to... build a 1st party API.
In other words, not a 20 minute job. For small shops, a quick curl during the page load is a 20 minute job.
- heipei 9y agoThere are many ways to quickly get and use a GeoIP DB like MaxMind, most requiring way less than 20 minutes. This is just one example of something I started using recently: docker run -p 8080:8080 -d fiorix/freegeoip curl localhost:8080/json/1.2.3.4 (Repo: https://github.com/fiorix/freegeoip https://github.com/fiorix/freegeoip)
- motet_a 9y agoYes, Docker is great but learning it can definitely require more than 20 minutes. A `curl ipinfo.io` is still simpler.
- deno 9y agoThis is the tax you’re paying for that every time: Connected to 35.165.108.15:443 HTTP/1.1 200 OK Server: nginx/1.8.1 Access-Control-Allow-Origin: * Content-Type: application/json; charset=utf-8 Date: Sun, 02 Jul 2017 08:54:40 GMT X-Content-Type-Options: nosniff Connection: keep-alive Body discarded DNS Lookup TCP Connection TLS Handshake Server Processing Content Transfer [ 4ms | 244ms | 518ms | 525ms | 0ms ] | | | | | namelookup:4ms | | | | connect:248ms | | | pretransfer:767ms | | starttransfer:1292ms | total:1292ms
- wittedhaddock 9y agoWhat tool (or arg passed to curl maybe) allowed you to generate that response? The graph is great
- deno 9y agohttps://github.com/reorx/httpstat https://github.com/reorx/httpstat It’s great for checking something quickly, otherwise you have the same thing in browser’s dev tools.
- gfodor 9y agoThe OP was "baffled" why anyone would ever use this API. Clearly, the API's success shows that sometimes this tax you highlight is well worth it. (That was my point as well.) Nobody is claiming the tax doesn't exist, just that it shouldn't be baffling that a rational actor would choose to pay the tax in exchange for the corresponding benefits. (Not to mention with very minimal effort you can usually avoid the majority of the specific tax of latency you mention, by doing things like parallelizing the request with other work or doing it asynchronously to the user's interface.)
- deleted 9y ago[deleted]
- callumjones 9y agoWhere are you going to host it, how will you cycle the container to keep it up to date, and will you need to load balance it? Running a Docker container in production is not a 20 minute job.
- deno 9y agoJust put HAProxy in front of it. It’s not rocket science. https://www.haproxy.com/solutions/microservices.html https://www.haproxy.com/solutions/microservices.html
- callumjones 9y agoSetting up HAProxy in a production environment with discovery for the docker container may not be rocket science but it’s certainly not 20 minutes.
- jhgg 9y agoIt is kinda a 20 minute job. On production, where I work, we just bake the maxmind DB into our app server images (it updates when we redeploy - which is a couple times a week) and use the maxmind client to read from that DB file. Was just an extra step in our build pipeline.
- user5994461 9y agoYou're misinterpreting "database". In this case the geoIP database is like a 1MB CSV file, provided for free to the entire world by maxmind (a major network provider). You can put give that file to many servers like nginx/apache out of the box, they will start adding a header with the country and the city of the client. What this service is doing is effectively looking up the ip block in that csv file and returning the result as JSON.