aleph

2016-10-06T07:58:48.000232Z

I’ve done some catching up with reading. I think i understand the idea behind bulkheads now 🙂

2016-10-06T07:59:09.000233Z

i think both core.async and manifold are suitable as they both allow you to run things on dedicated threadpools

2016-10-06T08:00:09.000234Z

I don’t think erlang is supporting the bulkheads out of the box. As the actors itself might restart, but with erlang you can also have actors in a distributed deadlock if you are not careful

dm3 2016-10-06T08:04:23.000235Z

I guess I don't see how you can implement the "generic" bulkheads - don't find the definition that useful

2016-10-06T08:05:46.000236Z

if by generic you mean can never fail, I agree I don’t see how you can implement that either

dm3 2016-10-06T08:06:02.000237Z

in Hystrix a bulkhead just limits the amount of concurrent calls to the component

2016-10-06T08:07:18.000238Z

i thought in Hystrix you had a thread (pool) per component ?

dm3 2016-10-06T08:07:52.000239Z

that's one way to limit the amount of calls

dm3 2016-10-06T08:07:57.000240Z

the other is using semaphores

dm3 2016-10-06T08:08:47.000241Z

anyway, I don't see it as an implementable pattern, but rather an implementation approach in a more general sense

dm3 2016-10-06T08:09:03.000242Z

but this obviously depends on what you take as the definition

2016-10-06T08:09:32.000243Z

this book, preview, original probably better, has some useful context too https://www.nginx.com/wp-content/uploads/2015/01/Building_Microservices_Nginx.pdf

2016-10-06T08:10:35.000244Z

But we don’t really do microservice or SOA so most of the things do not apply to my application. Though general principles, especially in the Nygard book are useful as a rule of thumb to prevent cascading failures

2016-10-06T08:11:50.000245Z

What I find appealing at Hystrix at the moment is it’s out of the box monitoring and latency control. And because I don’t want to be trapped in a Java like architecture and I want some custom controls I’m trying to build my own version

2016-10-06T08:13:41.000246Z

I’m planning to use this for latency control too (if I get a patch in): https://github.com/ztellman/aleph/issues/273

2016-10-06T08:13:55.000248Z

We had some queueing issues 🙂

dm3 2016-10-06T08:15:43.000249Z

did you try using executor stats?

2016-10-06T08:16:16.000250Z

no I didn’t know about those before. However, i think those are aggregates? I need to know on a per request level

dm3 2016-10-06T08:16:49.000251Z

yeah, those will be aggregate

dm3 2016-10-06T08:17:12.000252Z

hm

2016-10-06T08:17:14.000253Z

Since we have only 100ms or so, if you are already waiting for 75ms it might not be worth it to continue to take the offering into account

dm3 2016-10-06T08:18:23.000256Z

public enum Metric {
        QUEUE_LENGTH,
        QUEUE_LATENCY,
        TASK_LATENCY,
        TASK_ARRIVAL_RATE,
        TASK_COMPLETION_RATE,
        TASK_REJECTION_RATE,
        UTILIZATION
    }
what executor gives you

2016-10-06T08:18:57.000257Z

Thanks, looks useful to add to our monitoring as well

2016-10-06T10:15:45.000258Z

How do you handle errors in a websocket/sse stream? I have an error somewhere and cannot find it easily. I would like to wrap the stream with some error logging. manifold.deferred/catch doesn’t seem to work in this case

dm3 2016-10-06T10:16:36.000259Z

hehe

dm3 2016-10-06T10:16:55.000260Z

https://github.com/ztellman/manifold/issues/95

2016-10-06T10:19:30.000262Z

ah thanks

2016-10-06T10:19:40.000263Z

thought already i misunderstood the examples

2016-10-06T10:24:12.000264Z

from some manually testing it seams you have to wrap the put! call with error handling. Hmm will test a bit more

dm3 2016-10-06T10:28:53.000265Z

there's a bunch of cases where an error can happen inside some callback and the stream gets closed + the error gets logged

dm3 2016-10-06T10:29:03.000266Z

you can't get the error in any way

dm3 2016-10-06T10:29:32.000267Z

like the consume example

dm3 2016-10-06T10:29:41.000268Z

or zip

dm3 2016-10-06T10:30:00.000269Z

hm, maybe not zip exactly, as it can't really fail

dm3 2016-10-06T10:30:15.000270Z

if your xform throws

2016-10-06T11:04:57.000271Z

in this case I would be happy with a log, but haven't seen that either

2016-10-06T11:05:20.000272Z

i’m actually not sure what happens

2016-10-06T11:12:02.000273Z

ah yes configuring logging correctly helps 🙂

2016-10-06T11:20:32.000274Z

Would be nice though to have some way to control where the exception goes when the unexpected happens

dm3 2016-10-06T11:22:35.000275Z

you can upvote the issue 🙂

dm3 2016-10-06T11:22:58.000276Z

even better, write your experiences

2016-10-06T12:42:34.000279Z

exception management and async is always a gnarly issue. i think in manifold’s case, simply modularizing an error handler would be good enough indeed

2016-10-06T12:46:26.000280Z

@jeroenvandijk i found out yesterday that next week’s meetup is going to be about onyx, so that’s gonna be interesting!

2016-10-06T12:47:39.000281Z

Yes indeed 🙂

2016-10-06T12:47:53.000282Z

We are using it pre-production. What about you?

2016-10-06T12:58:31.000283Z

i haven’t been able to find a good enough reason to use it 😕

2016-10-06T12:59:02.000284Z

we’re mostly focused on AWS, and as such use Redshift for our data warehouse, and for the more complex processing we use Spark

2016-10-06T12:59:06.000285Z

both hosted by AWS

2016-10-06T13:03:37.000286Z

How do you get the data to S3/Redshift?

2016-10-06T13:04:26.000287Z

We use it to move data from our bidder cluster via kafka to s3 and other services

2016-10-06T13:05:01.000288Z

But it’s quite complicated and i wouldn’t recommend it if you have something simple working

2016-10-06T13:05:11.000289Z

we use Kinesis Firehose

2016-10-06T13:05:14.000290Z

which is like kafka

2016-10-06T13:05:32.000291Z

ah i see, so they manage the connection to Redshift i guess

2016-10-06T13:05:35.000292Z

sounds good

2016-10-06T13:05:44.000293Z

we need to send data to other services too

2016-10-06T13:06:15.000294Z

yes, basically it caches on S3 until it reaches a certain threshold (every 900 seconds or 64MB is what we use) and then imports it into redshift

2016-10-06T13:07:24.000295Z

I would like to try Redshift too on our data

2016-10-06T13:07:31.000296Z

we then use AWS DataPipeline to query redshift

2016-10-06T13:07:40.000297Z

in fact, i don’t think anyone ever directly connects to redshift 🙂

2016-10-06T13:07:45.000298Z

(over here in our org)

2016-10-06T13:07:55.000299Z

no? not through a jdbc connection?

2016-10-06T13:08:09.000300Z

nop

2016-10-06T13:08:33.000301Z

i hope to be able to have a SQL interface on our data via either redshift, drill or bigquery sometime

2016-10-06T13:09:19.000303Z

that was an article i wrote 6 months ago about our architecture

2016-10-06T13:09:40.000304Z

it’s pretty interesting how much you can do with the cloud nowadays

2016-10-06T13:12:45.000305Z

nice featured post 😎

dm3 2016-10-06T13:13:43.000306Z

that's interesting

2016-10-06T13:15:51.000307Z

i wouldn’t mind getting rid of kafka if something with similar performance would be offered on AWS, but i think kinesis is still a bit different. But it is amazing how well it all scales

2016-10-06T13:16:27.000308Z

it’s fascinating indeed

2016-10-06T13:17:01.000309Z

AWS is good for the start when your do not (yet) need very complex configurations, and you’re not into high volume yet

2016-10-06T13:17:29.000310Z

you do have to take into account that “eventual consistency” is very real

2016-10-06T13:17:44.000311Z

especially with things like S3

2016-10-06T13:23:01.000312Z

yeah and different in some regions too 🙂

2016-10-06T13:23:07.000313Z

but i think now they have fixed that

2016-10-06T16:23:49.000315Z

@jeroenvandijk: looks very sweet!