HN user

starptech

31 karma

Fullstack Engineer specialized in Web and Distributed Systems. Cloud-Native Applications | DevOps | CI-CD | Test Automation. Currently GraphQL at scale!

Posts11
Comments33
View on HN

Competition is good, but Fly.io has proven problematic based on my two years of production experience. Anyone requiring reliability, professional support should avoid using services with significantly less experience than their competitors, such as S3, Cloud Buckets, and R2. Personally, I do not trust any service that relies on Fly.io. This perspective may change, but so far, they have proven to be an unreliable partner.

The chapters reads like the Apollo documentation. Does the book contains real world experience of topics like caching, CDN's, REST integration, deduplication of requests? Thanks for sharing this with the community!

I think you have to explain the purpose of the "shared" team. From my understanding, they should ensure quality and stability. In that case, you have to hire more people to speed up this process or when possible try to automate such tests.

In the other case, you could remove the "public API routes/contracts shared project" and replace it with a proxy like https://konghq.com/kong-community-edition/ which provides better integration options. Imagine each team could deploy multiple microservices without to integrate all endpoints on a shared repository because at deploy time you only have to send the service configuration to Kong and it will route every incoming request with the specified public DNS to the associated target URL.

You could maintain a config file per service (like travis.yml) and use it to configure Kong once when your project is deployed. https://github.com/mybuilder/kongfig

Kong is very interesting because you can centralize Authentication, Logging, Metrics, Traffic for all your services.

From a technical perspective, a tracing system like opentracing is essential. Jaeger is a very user-friendly and great standard to do it. I prefer it over Zipkin.

If you want to maintain an "index" you can use a service-discovery service like https://www.consul.io/ and build tools on it.

Here you can see an example how to manage it with hemera in the node.js world https://github.com/hemerajs/aither. We use a production-grade messaging system called https://nats.io as service-discovery and transport layer and have a very transparent and maintainable landscape of our services.

That's correct but I'm looking it from a completely different angle. Many projects starting with a responsive web app to support desktop and mobile users at once. When the integration isn't great they will use a shell like Electron or PhoneGap so far from a web-based background. The reasons for this are clear:

- Same technology - Reuse all or many code - Frontend people are easier to hire and cheaper

To have a win-win situation. Most projects are starting with a web project and are expanded to desktop and mobile. If you can reuse your code, technology without any big impacts in performance or UX you will win in any aspect.

I came with the expectation that you have experience with SenecaJS. If you read my comment you would see that HemeraJS rely on a messaging bus called NATS. We focus on clean error handling that implicit error-first-callbacks. Logging is consistent. One of the most complex parts of a software which provide building a microservice architecture will be handled by the messaging bus NATS - Service discovery, client pruning and load balancing. Hemera has a very small core but it is also very modular. You can create plugins, middlewares and more. We already provide lots of plugins for different categorys e.g data-serialization (JSON, Msgpack, Avro), Database adapter( Elasticsearch, Couchbase, SQL or Arangodb) Payload validators (Joi, Parambulator) We also provide a plugin for monitoring your system with Zipkin. I hope you have now a better picture. Otherwise you could visit the github project. I invest a lot of time in the documentation. Thanks!

Hi we want to create a toolkit which is responsible for everything expect the transport. We don't need overall transport independence. We trust in a well tested system called NATS. The wrong path in error-handling, logging and tracing are one of the reasons why we couldn't use existing solutions like SenecaJS. The API is very similiar to Seneca this is intentional.

Yes, but you can also pass the payload to the filter function and allow injecting custom conditions.

r.table('users').filter(<here>).run(conn, callback);

of course if you use the chainable syntax

r.table('users').filter(r.row("age").eq(30)).run(conn, callback);

you can prevent it but that's not the point. It has nothing to do with Mongodb.