iSCSI is great and underated, I've been running iSCSI volumes for OrangePI boards which had only SD card support for years. Performance was much better on Gigabit Ethernet vs the SD card.
HN user
ersoft
It was for Rails.
The project that has a feature which allows admins to SSH to any computer in the VPN ? [1]
They have a feature called remote SSH access where the agent running on the node allows other VPN users to SSH to another machine on the network without having SSH enabled / public keys set up. I've tested the project at the beginning of the year and it was a big NO for me. They seemed to fix this issue but it appeared again.
I've been playing in my homelab in the past year with Illumos (OpenSolaris). After decades of using linux, everything is much simpler, all the linux constant changes are inexistent. Everything which was working in Solaris 10 (15-20y ago), still applies with small modifications today.
Has support for zones, which in my opinion are 10 steps above docker containers, has builtin ZFS support for root/zones/etc and so on.
Services are managed using SMF which has the only downside that services are configured using XML but usually if using only the builtin services it is not a problem. SmartOS also has a script to automatically configure the XML file.
I'm running OmniOS on a couple servers having a few zones each and I also run a SmartOS server for VMs. Launching a VM is a lot easier than on Linux. I can switch between Bhyve and KVM and use a single JSON file to configure all the VM properties and then launch the VM using a single command: vmadm create -f file.json.
All the networking is done using simple commands such as dladm and ipadm which are using the standard UNIX way.
I've installed Solaris 11.4 on a spare ssd for fun this month. It worked right away.
I'm using a Slimbook executive 14 for about 1 month. It's the same chassis as the Tuxedo as far as I know. I bought it especially for running linux on bare metal (docker, kvm, linux tools).
Coming from Macbook I'm pretty happy with it. I got used very fast with KDE (I used it on desktop computer in the recent years from time to time). Touchpad it's great, keyboard is the same as on Macbook. Battery lasts about 5h now when programming (some Node.JS, compiling some Rust or Go services).
I had a 2016 Macbook Pro 15 with I7 and 16gbRAM, now it compiles a Rust service I'm working on in 1 minute compared to 6 minutes on the old laptop.
The laptop specs I'm having is the same as the Tuxedo and the same chassis: i7-12700H, 16gb Ram(updated it to 40gb myself), 512gb NvMe, 99wh Battery.
Also, the romanian Mig-21 are converted to NATO specs, the ukrainean are not able to use them without training. Maybe it is the same issue with the Polish/Bulgarian Mig-29.
I can confirm as a romanian, it was news almost each year of a Mig21 crash. They are 50s technology, they are at their EOL.
Romania had about 400 Mig-21 bought during the cold war when it was an ally of USSR. In the begining of 2000s, they modernized about 70 Mig to NATO standards [1]. There were frequent issues with them with about 20 fallen in 30 years. The aircraft were modernized but it only included the avionics and elecronic+weapons to NATO standard, I think the engines remained original. After Romania left the Warsaw pact, the Russian didn't provide engines or parts anymore.
[1] https://www.hotnews.ro/stiri-defense-25405860-cate-avioane-v...
I'm using azk[0] for my development workflow with 30+ services defined in one Azkfile.js. It automatically setups http load balancers and dns services for you, no need for container linking.
Location: Bucharest, Romania
Remote: Yes
Willing to relocate: Maybe. Also, short term on-site possible
Technologies: Go, Elixir, Rails, Mesos, Kubernetes, DevOps
Email: teodor.pripoae@[google email service]
They are offering it as a service on Google Cloud Platform.
It's nice that google are using snake case for library filenames and facebook are using camelcase. :)
Example:
#include <proxygen/httpserver/HTTPServer.h>
#include <grpc++/server_context.h>
I'm using slugrunner from flynn [0] for deploying my apps. This way I can share a base image, and each compiled slug is about 40mb for ruby apps and 10mb for golang apps. This is similar to how heroku works.
When I deploy, I generate the slug using slugbuilder, push it to a local storage on the same network, and each docker task is instructed to pull the "latest" slug from the slug storage. Containers start after a code update in a couple of seconds.
Continuous deployment can be easy achieved by copying slug from staging to production, similar to how pull docker image each time is currently done.
[0] https://github.com/flynn/flynn/tree/master/slugrunner [1] https://github.com/flynn/flynn/tree/master/slugbuilder
Did you check out Google Cloud ? I moved all my company's instances to them and I ended up cheaper than on Vultr (similar pricing with DO), while also benefiting to more features (storage, mysql, etc) and better uptime.
For 28$/month you can get a similar instances as on amazon (1CPU and 3.75GB RAM) and 60GB SSD is another 10$. 60GB standard storage is 2.40$.
I'm impressed that Google Cloud is adding a couple of new features every month and I can see them a strong AWS competitor soon.
I've implemented a similar service in our company inspired from this project. There are few of differences though:
- we are using redis instead of leveldb. This way we can scale the service to multiple instances
- created an API to get all feature flags for an user which is also rendered to the client, so there are no unnecessary requsts to APIs not available
- next on the list there will be caching on the service side and syncronization using redis pub/sub
- currenty we are keeping the user ids explicitly enabled for a feature inside the feature array, but we are going to store them in a more efficient way. For example, if we are going to launch the v2 dashboard view, users should be able to opt-in for beta access. Storing half of your user ids in a leveldb/redis array and iterating each time over it is not efficient.
- Changed user ids from integer to strings. We are using uuids, but everybody should be able to hash the integer user id to an efficient string randomized represantation (hmac, sha1, md5).
- Using a hashing function to represent user ids on a scale between 1 and 100 is not efficient. What happens if you allow 5% traffic and only users with hash > 10 are using your site ? Hashing user id to a 1..100 key always yields the same result. Users having hash key 1 will always see the new features and bugs. Not a nice thing. We are going to implement a more efficient way: first time a user is checked for a feature we put him in a bucket (there are 100 buckets). First user in bucket 1, second in bucket 2, etc. This way, usage gets randomized for each user on each feature, and inactive users will not have the feature enabled by default
Did you look at vitess [0] ? It handles sharding/replication of MySQL up to PBs of storage and 10s of thousands of connections. Also, it implements caching at the proxy level so you don't need to use memcached. If multiple requests for the same resource are sent to a vttablet (shard proxy) at the same time, only one is forwarded to the database and all of them receive the same result.
Good luck scaling vultr beyond 30 servers. My company is using vultr for over 1 year and we were running about 40-50 servers during peak load. Here problems start to appear very often:
- We nearly failed our launch due to failure to increase server capacity during peak traffic, Vultr didn't have any more instances in that datacenter. This happened a lot of times and support always answered "We don't know when we will add more capacity".
- Periodic network partitions. In the last two months we experienced a lot of network partitions both on public and private network, some of them lasting for about 2-3 days, our fleet beeing totally partitioned in 2-3 distinct blocks. Even new instances started had private network down (100% packet loss).
- Technical support. We opened a few support tickets asking when private network will be fixed. Usually they respond that everything is fine and I have a configuration issue. I reply with ping/mtr logs and finally they agree there is a problem (which can be easy tested by themselves anyway). Then, they fix the issue after 1-2 days. Good luck fixing this yourself when your external load balancers have no public network connection, and new provisioned instances don't have it, too :)
- They changed instance types. The instances started months ago have a powerful CPU at 3.6Ghz which is shown in all their advertised benchmarks against DO/AWS/etc. Now they are offering 2.4Ghz CPU which is about 60% slower. When I told them about this I received an predefined template response like: "Thanks for your inquiry, we are constantly revising our hardware to meet customer needs".
- They increased pricing. First, the instance pricing was 20% lower than on DO. Then, they changed the price as beeing the same as DO and added a 20% discount. Then, they removed this discount, just telling everybody that they ended the discount period, nothing about the price increase :).
So, we are in the process of migrating everything to Google Cloud. We've been testing it on a staging cluster of 10 nodes and everything works smoothly, so we are in the process of moving the production cluster too. Be aware of small instance types (f1-micro and g1-small), they have very small CPU capacity for production load.
Also, Google offers us a lot of hosted stuff we don't need to manage anymore: DNS, Mysql, Datastore, Object store, etc. We were using Amazon S3 before, but peering from other datacenters (eg Vultr Datacenter, DO) sucks, constantly getting network timeouts, increased latency, etc.
Well, when your build takes 1min on ARM and 3 seconds on your laptop, it makes sense.
Well, it depends. My solution is opinionated, using only one vulcand cluster for load balancing, multiple vulcand servers listening on one etcd namespace.
For a small number of nodes (< 100) and requests (< 8000 req/s on each vulcand server) this vulcand approach is ok. For large scale, HAProxy/Nginx supports a lot more req/s than vulcand, and I think it can also be configured using confd [0] using a similar aproach: listen for marathon events, update etcd keys, then confd will listen for changes and reload HAProxy/Nginx
[0] http://ox86.tumblr.com/post/90554410668/easy-scaling-with-do...
I managed to achieve load balancing for a fleet of microservices using vulcand [0] and marathon callbacks [1].
It listens for marathon callbacks (for app create/update/scale), or when a task is killed/lost and updates the backends in etcd, propagating to all vulcand load balancers.
The tool is available on github [2]
[0] https://vulcand.io/proxy.html#backends-and-servers
[1] https://mesosphere.github.io/marathon/docs/event-bus.html
Please check crystal [0]. It has syntax inspired from ruby, types are automatically infered, and it supports method overloading and metaprogramming using compile time macros.
Simple Crystal programs are valid Ruby scripts. I recently implemented a protobuf library in Crystal[1], and while the code for benchmark[2] is 100% valid code (no explicit typing), it runs 10 times faster due to Crystal beeing compiled instead of interpreted.
[1] https://github.com/teodor-pripoae/protokol
[2] https://gist.github.com/teodor-pripoae/da785e3985a69555040e
I remember that streaming from Youtube on your own website/app is not prohibited by Terms of Service as long as the website/app developer adds the youtube video as embed. If this app shows the embed video in bottom corner (I don't know if it does, it fails to run on my Mac), I don't see it breaking the ToS.
Well, there are countries (for example Romania), where Spotify/Rdio/Pandora/Netflix/Hulu, etc are not available at all due to copyright licences.
There is no other option to stream music/videos legally, even with a paid service.
You can do it locally with dnsmasq or using xip.io, without an extra server.
I had tried lattice but I don't think it is ready for production usage. When I reported a few security issues on their issue tracker, I've been told that lattice is just a stripped down version of Cloud Foundry designed for development usage.
I think it's obvious that k8s is designed for staging/production usage and I can't see where lattice fits there.
Also, lattice is not running docker containers, but garden containers. There are a lot of issues on their issue tracker about people not being able to run images from docker registry.
I have a running server at online.net (small personal tier, 8 core, 8gb RAM, 120gb ssd) [1] for 20euros/m running a CI server. I've spinned up a scaleway server and ping from online.net to scaleway or reverse is under 1ms (0.5-0.8ms)
Also, they are offering VPC by default, the nodes seem to have only one network interface which defaults to private network, and external traffic is routed to private network with specific firewall rules. Also, they are offering ip failover, I think you can attach or move external ips at runtime between servers without configuring anything on the nodes (just from API).
For online.net I know they are offering DDOS protection for higher priced servers, I'm now sure if they are supporting this for scaleway, but you can always reverse proxy from online.net server to scaleway to achieve horizontal scalability if this is an issue.
Maybe they are talking about 200 vs 304 caches.
A browser can use be told to revalidate files, telling the server to return the content using the "If-Modified-Since" and "If-None-Match" headers. This way, the server will return 304 and empty content if the file has not changed or 200 and the file if it is new or it changed
vulcan is not for api management and beside that quality > quantity
What do you mean ? With vulcand you can implement your own middleware similar to kong. Also, it is written in go and you can use all existing go libraries.Also, how can you gracefully reload kong if you need to add/remove/change a plugin ? With vulcand you just replace the binary, and send an USR2 signal to the running process. It will fork, wait for all connections to drain, and remove the old process
For deployment, again, you need to sync all lua files, with vulcand you just ship a compiled binary.
Kong doesn't have a notion of servers for each API, you need to forward requests to a haproxy or another load balancer for this. Also, I can see that backends are added by their DNS hostname. In order to achieve HA (backend redundancy) is there any way you can do it, assuming that nginx is caching the upstream dns values ?
About performance, I can see you are advertising about 1000 r/s using kong, and you need 3 machines for this (kong, cassandra, haproxy). I benchmarked vulcand and obtained about 12000 r/s on a more modest hardware.