We would not be inventing our own marshaling again, we would be using YAML.

On Fri, Aug 17, 2018 at 12:45 PM Leif Hedstrom <zw...@apache.org> wrote:

>
>
> > On Aug 17, 2018, at 06:46, Alan Carroll <solidwallofc...@oath.com.INVALID>
> wrote:
> >
> > 1) Yes. Two counter points - right now we're not reducing anything
> because
> > no one is willing to actually bring in the third party RPC. This proposal
> > would IMHO be definitely better than the current one. Second, bringing in
> > complete third party RPC will require glue logic to adapt to our
>
>
> All other things said, this is not accurate. There are definitely
> suggestions on the table to bring in an existing serialization protocol
> (and willing people). There are plenty well supported libraries, even CBOR
> was one of the suggestions. I’m fine piggy backing such libraries on our
> own transport (say HTTP), but why invent our own marshaling again?
>
> Cheers,
>
> — Leif
> > infrastructure. My opinion is this proposal will be less work and
> > maintenance than that. This is of course speculative because the prior
> > point means we don't have a basis for comparison. The best I can say is
> > that I have spent time looking at what it would take and that lead me to
> > this proposal.
> >
> > 2) RPC communication by YAML or JSON encoded messages is not some brand
> new
> > idea of mine. It's actually a common style, sometimes referred to as a
> > "REST API"[1]. This proposal would make any implementation language that
> > supports YAML easily able to communicate. I suspect YAML support is more
> > widespread than gRPC or Avro support.
> >
> > [1] https://en.wikipedia.org/wiki/Representational_state_transfer
> >
> > On Fri, Aug 17, 2018 at 9:12 AM Aaron Canary <acan...@oath.com.invalid>
> > wrote:
> >
> >> 1. I thought the goal of replacing RPC was to reduce code maintenance.
> Does
> >> writing our own do that? How does that effect the other apps we are
> >> communicating with?
> >>
> >> 2. We are discussing using a 3rd party health monitor app which is
> likely
> >> to have frequent communication with ATS. I.e. ATS pushes request when
> >> traffic is dropped, HealthMon pushes when origin looks healthy again.
> >> (Simplification) this could be RPC or something else.
> >>
> >> On Aug 16, 2018 9:53 PM, "Alan Carroll" <solidwallofc...@oath.com
> .invalid>
> >> wrote:
> >>
> >> The current RPC code is a mess, with bizarre even for TS compiling and
> >> linking. It won't be really bidirectional even if traffic_manager is
> >> removed. It's fragile, it's extremely difficult to extend or modify. You
> >> have to basically write custom serialization and deserialization logic
> for
> >> every message type. On top of that the serialization is very fragile.
> As I
> >> noted above, my view is getting the serialization robust and flexible is
> >> almost all the work in writing an RPC. That's the part we should
> leverage.
> >> Moving bytes in and out of sockets is what we do well, therefore we
> should
> >> do that part. Bringing in something like Avro or grpc is a big step and
> >> will have a lot of issues with integration. I strongly believe this
> >> approach will play to our strengths, give us a nice flexible and
> powerful
> >> RPC, with the minimum amount of work and additional footprint, yielding
> >> something that fits in well with our existing architecture.
> >>
> >>
> >>> On Thu, Aug 16, 2018 at 9:07 PM Leif Hedstrom <zw...@apache.org>
> wrote:
> >>>
> >>> Then what is the motivation to change anything? Let’s just keep the
> >>> serialization the same as what we have, Peach cleaned that up
> noticeably.
> >>>
> >>> The issue with bidirectional communication gets solved as part of the
> >>> elimination of traffic_manager.
> >>>
> >>> — Leif
> >>>
> >>>> On Aug 16, 2018, at 17:40, Alan Carroll <solidwallofc...@oath.com
> >> .INVALID>
> >>> wrote:
> >>>>
> >>>> Yeah, it's not like we have any expertise in asynchronous I/O on IPC
> >>>> sockets, that would let us leverage someone else's YAML based
> >>> serialization
> >>>> / deserialization library. We should definitely go with something that
> >>> has
> >>>> its own I/O mechanisms (which are sure to be compatible!) and quite
> >>>> possibly its own threading model too. That'll be *easy*! And I can't
> >> wait
> >>>> to play with all the super cool features and adjustable knobs such a
> >>> thing
> >>>> will have.
> >>>>
> >>>>> On Thu, Aug 16, 2018 at 6:17 PM Leif Hedstrom <zw...@apache.org>
> >> wrote:
> >>>>>
> >>>>> I think rolling our own defeats the purpose of replacing what we
> have.
> >>> We
> >>>>> should pick something where there is a large sets of client libraries
> >>>>> already. As you say, performance is not critical, so pick one that is
> >>>>> popular. I think gRPC would be fine too.
> >>>>>
> >>>>> — Leif
> >>>>>
> >>>>>> On Aug 16, 2018, at 11:59, Derek Dagit <der...@oath.com.INVALID>
> >>> wrote:
> >>>>>>
> >>>>>> I was not at Cork, so I am probably missing a lot of the details.
> >>>>>>
> >>>>>> It seems having true RPC here would greatly expand the possibilities
> >>> for
> >>>>>> management and monitoring.
> >>>>>>
> >>>>>>
> >>>>>> - What are the current and planned use cases for this RPC?
> >>>>>>
> >>>>>> - What if we want to add authentication/authorization for
> >> multi-tenant
> >>>>>> management and isolation?
> >>>>>>
> >>>>>> - What about security issues and the ongoing cost of maintaining a
> >>> unique
> >>>>>> RPC solution, versus using something already battle-tested?
> >>>>>>
> >>>>>> - Didn't we try this once already? [0]
> >>>>>>
> >>>>>>
> >>>>>> (I figure there are good answers to all of these questions, and so I
> >> am
> >>>>>> mostly asking for the benefit of those of us not familiar with the
> >> past
> >>>>>> discussions.)
> >>>>>>
> >>>>>> [0]
> >>>>>
> >>>
> https://github.com/apache/trafficserver/pull/3504#issuecomment-389927441
> >>>>>>
> >>>>>>
> >>>>>>
> >>>>>> What are the current and planned use cases for this RPC?
> >>>>>>
> >>>>>> On Thu, Aug 16, 2018 at 2:39 PM, Alan M. Carroll <
> >>>>>> a...@network-geographics.com> wrote:
> >>>>>>
> >>>>>>> I've been looking at how to do the RPC replacement that was agreed
> >> on
> >>> at
> >>>>>>> Cork. After looking at grpc, Avro, and Thrift, I don't like any of
> >>> them
> >>>>> for
> >>>>>>> our use case. I've moved to the camp that says we should build our
> >> own
> >>>>> thin
> >>>>>>> wrapper around YAML messages, very similar to a REST style API. We
> >> do
> >>>>> not
> >>>>>>> need high performance for this case, the message rate is generally
> >>> less
> >>>>>>> than one per second and the messages are not large. Previously
> going
> >>>>> YAML
> >>>>>>> would have been a major effort but since we've already paid that
> >> price
> >>>>> in
> >>>>>>> the ongoing configuration conversion, building an RPC on top of
> >>> YAMLCPP
> >>>>>>> seems quite easy. In this scheme the data is sent via YAML map
> >>>>> instances.
> >>>>>>> In each map, the top level keys are the messages, each key being a
> >> tag
> >>>>> that
> >>>>>>> identifies the message handler. The handler is given the map entry,
> >>> key
> >>>>> and
> >>>>>>> value, and processes it. If parallelism is needed, the handlers can
> >>>>> attach
> >>>>>>> an "sequence" field inside the map value to match requests to
> >>> responses.
> >>>>>>>
> >>>>>>> The RPC driver is simple. It has a hash of tags to
> >>>>> handlers/continuations.
> >>>>>>> It accumulates data from the socket until it gets a successful YAML
> >>>>> parse.
> >>>>>>> Then it walks the top level keys, dispatching an event for each one
> >> to
> >>>>> the
> >>>>>>> handler associated with the tag. Sending is done handing a YAML map
> >>>>> object
> >>>>>>> to the RPC, which puts it in a queue to be written by a blocking
> >> write
> >>>>>>> thread. My view is this would be less work than integrating a full
> >>>>> featured
> >>>>>>> RPC with many features we don't need.
> >>>>>>>
> >>>>>>>
> >>>>>>
> >>>>>>
> >>>>>> --
> >>>>>> Derek
> >>>>>
> >>>>>
> >>>>
> >>>> --
> >>>> *Beware the fisherman who's casting out his line in to a dried up
> >>> riverbed.*
> >>>> *Oh don't try to tell him 'cause he won't believe. Throw some bread to
> >>> the
> >>>> ducks instead.*
> >>>> *It's easier that way. *- Genesis : Duke : VI 25-28
> >>>
> >>>
> >>
> >> --
> >> *Beware the fisherman who's casting out his line in to a dried up
> >> riverbed.*
> >> *Oh don't try to tell him 'cause he won't believe. Throw some bread to
> the
> >> ducks instead.*
> >> *It's easier that way. *- Genesis : Duke : VI 25-28
> >>
> >
> >
> > --
> > *Beware the fisherman who's casting out his line in to a dried up
> riverbed.*
> > *Oh don't try to tell him 'cause he won't believe. Throw some bread to
> the
> > ducks instead.*
> > *It's easier that way. *- Genesis : Duke : VI 25-28
>
>

-- 
*Beware the fisherman who's casting out his line in to a dried up riverbed.*
*Oh don't try to tell him 'cause he won't believe. Throw some bread to the
ducks instead.*
*It's easier that way. *- Genesis : Duke : VI 25-28

Reply via email to