As far as I can tell, JSON schemas work for YAML as well, since the parsed
forms are identical.

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

>
>
> > On Aug 17, 2018, at 09:51, Alan Carroll <solidwallofc...@oath.com.INVALID>
> wrote:
> >
> > We would not be inventing our own marshaling again, we would be using
> YAML.
>
>
> Is there schema definitions for yaml? I think that should be a minimum
> requirement at least.
>
> — Leif
> >
> >> 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
>
>

-- 
*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