HNHacker News
TopNewBestAskShowJobs

wora

91 karma · joined December 16, 2014

submissionscomments
wora··on Why Is Storage on Kubernetes So Hard?
A large data center has 20-30k machines. Amazon disclosed that back in 2014. Most likely you want to partition the machine into some chunks, so each application or each database only use some of them. So you don't need to talk to many machines at once.

In general, a distributed database can be really fast. DynamoDB claim to be 3ms (AWS reinvent 2014). The current technology can probably achieve close to 1ms, which is equivalent to memcache. With such performance, you don't really need local storage.

You can get much faster IO if you use many local SSDs. The downside is utilization. It is very rare a single machine has a workload that fully utilize local disk. You end up over provision greatly fleet-wise to get high performance. A managed database over a network is more likely to utilize disk/SSD throughput.

wora··on Why Is Storage on Kubernetes So Hard?
Write to disk has no practical latency because of write buffer, either local file system or remote database. Flush to disk would be slow unless you use SSD.

On the other hand, a single machine has limited reliability. If one wants to have high availability, they needs to dual write to another machine, which also has network latency.

wora··on Why Is Storage on Kubernetes So Hard?
I saw many comments about stateful workloads. I am not sure it is a necessary issue for cloud environment.

Within a zone or a cluster, the latency is about 1ms, which is faster than most hard disks. The network bandwidth is on par with disk throughput. What we really need is a faster database and a faster object storage that can match the network performance (1ms and 10Gbps), then all workloads can be stateless.

If one uses a VM on GCP, the VM has no local storage besides the small local SSDs. Practically even the VM is stateless besides some cache.

wora··on Developments around Microservices, API Gateways, Kubernetes and Service Mesh
The short answer is layering. For example, to support mutual TLS, you need a system that distributes and rotates TLS certs to different nodes. If we don't want to add to many features to Kubernetes, then we need another layer. That becomes Istio or something like Istio. That is roughly how Istio came to exist in the first place, as it models after several Google internal systems that are on top of Borg instead of being part of Borg.
wora··on Google Exposed User Data, Feared Repercussions of Disclosing to Public
Such policy existed since the very beginning of Google APIs, and is well documented within the company. Anyone who worked at Google should be aware of it.
wora··on Transparent SLIs: See Google Cloud the way your application experiences it
People often consider to use this information for reliability and performance, but you can do much more with the data. For example, if a method has low latency, you can use short deadline with fast retry to improve reliability. If you see a sudden jump of certain usage, you can consider to use batching and caching to reduce your cost. If you see an unexpected usage of a service, you know someone introduce a new dependency in your system. Google teams often use the same data to understand how large services work and how they are correlated.

Disclosure: I worked on this feature at Google.

wora··on Google has been letting app developers read users’ Gmail
The app can post your data to anywhere it has access to. This is commonly known as data exfiltration. The common way to prevent that is to run the app in a secure sandbox. Most OS don't provide such capability in a usable way.
wora··on There are very few suitable use cases for DynamoDB
If a node goes down, another node will replace it quickly. The node (aka tablet server) doesn't own any data. The data is stored on lower level storage layer.
wora··on U.S. Air Force Requires Airmen to Praise F-35
Besides agility, speed and radar performance are also critical in missile attack and defense. F-22 can super cruise for that reason. The size of F-35 radar is a concern for performance. Given the past experience of F-15 vs Su-27, it is very hard to believe F-35 will be competitive 10 years from now besides the numbers.
wora··on GRPC.io is interestingly different from CORBA
That is right. gRPC and Google APIs share one simple error model, as defined by https://github.com/google/googleapis/blob/master/google/rpc/.... The goal is to make it easier for developers to handle errors.

PS: I was the co-author of it.

wora··on OnHub
There is one here: https://support.google.com/onhub/answer/6279845
wora··on China Trade Halts Locks Up $2.2 Trillion of Shares, Freezing Market
The buying power of Chinese consumers already pushed up price for many things, from commodity to luxury goods to real estates. It is unavoidable nature of society growth. This has very little to do with Chinese investors. Very few people got rich through stock market in China (probably the same everywhere).
wora··on From Asm.js to WebAssembly
I originally designed the name-based public/private methods for Go. I didn't know Oberon had the same design.
wora··on From Asm.js to WebAssembly
Oberon language had a similar system called Juice back in 1997. It does exactly the same thing, e.g. using binary format to store a compressed abstract syntax tree as intermediate format which can be compiled efficiently and quickly. I think it even has a browser plugin much as Java applet. Life has interesting cycles. I don't have the best link to the Juice.

[1] https://github.com/berkus/Juice/blob/master/intro.htm [2] ftp://ftp.cis.upenn.edu/pub/cis700/public_html/papers/Franz97b.pdf

wora··on Using Protobuf instead of JSON to communicate with a front end
Co-author of proto3 here. Proto3 was specifically designed to make proto more friendly in variety of environments, which includes native JSON support. New Google REST APIs are defined in proto3, which are open sourced[1].

[1] https://github.com/google/googleapis

wora··on Using Protobuf instead of JSON to communicate with a front end
Co-author of proto3 here. The reasons we chose lowerCamelCase are compatibility with Google's REST APIs (like Gmail API) and readability for users who work with JSON output directly without client library. API designers should not define confusing data schemas, let alone allow collisions. Most proto messages have small number of fields, avoiding name collision is a trivial for an API designer.
wora··on Making Python 3 more attractive
Nowadays, most of text data are stored in UTF-8 format. If the language uses UTF-8 as native string format, it is much easier for text processing, which is why Go chose it. There are a lot of subtle technical details you will only realize after working with many text processing components.
wora··on Making Python 3 more attractive
Migration is a critical issue for python 3 adoption. I think python 3 should have done something similar to Protocol Buffers v3 (proto3) by introducing syntax = "python3" statement and let runtime support both v2 and v3. This allows people migrate one file at a time. In any large scale production environment, this is pretty much the only practical way for migration.

Another critical mistake python 3 made was unicode support. For people who work deeply in i18n support, UTF-8 encoding is the only practical solution. Python 3 string should use UTF-8 much like Go. Just for reference, Google stores almost all data as protobuf, which only support UTF-8. That proves the story.

wora··on Google APIs Repository on GitHub
@ffn, have you looked at the Gmail API? It is pretty close to what you just said.

1. https://developers.google.com/gmail/api/

wora··on Google APIs Repository on GitHub
As more Google APIs support gRPC, their API definitions will be published.