<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Dec 19, 2017 at 3:20 AM, Rostislav Svoboda <span dir="ltr">&lt;<a href="mailto:rsvoboda@redhat.com" target="_blank">rsvoboda@redhat.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi.<br>
<br>
tl;dr: I&#39;m not sure WF is the right place for GRPC integration<br>
<br>
1) footprint<br>
  io.grpc: grpc-core grpc-protobuf grpc-stub with deps take 6.1 MB (using version 1.5.0)<br></blockquote><div><br></div><div>Not much we can do about that, but it won&#39;t be loaded unless you are using it.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
2) speed of development<br>
  version 1.5.0 in July<br>
  version 1.8.0 in November<br>
  speed itself is not the main problem, point 3) is more concerning<br>
<br>
3) changes in minor releases<br>
I tried mvn clean package -Dgrpc.version=1.8.0 on undertow-grpc and got compilation failure with 18 errors<br></blockquote><div><br></div><div>Yea, that is somewhat annoying. I don&#39;t think it affects the wire protocol though, just the Java SPI (even though they provide an integration SPI I don&#39;t think anyone has really tried to use it before, and provide a transport outside what is already provided in the distribution).</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
Every minor (looked at 1.5.0+) has one of the following mentioned in <a href="https://github.com/grpc/grpc-java/releases" rel="noreferrer" target="_blank">https://github.com/grpc/grpc-j<wbr>ava/releases</a><br>
  API Changes<br>
  Incompatible Changes<br>
  Behavior changes<br>
  Important Changes<br>
<br>
4) <a href="http://cncf.io" rel="noreferrer" target="_blank">cncf.io</a><br>
Looking at <a href="https://www.cncf.io/" rel="noreferrer" target="_blank">https://www.cncf.io/</a> my impression is that direct support in OpenShift or SWARM-627 would make sense.<br></blockquote><div><br></div><div>I think that once we have a provisioning solution there is no reason why we can&#39;t provide things like this to work in both swarm and WildFly. </div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
5) yet another integration/rpc solution<br>
We have Corba / EJB, JAX-WS, JAX-RS, JMS.<br>
Do we want / need it grpc in WF? What would be the advantage of this integration?<br></blockquote><div><br></div><div>The main advantage is that it is a binary cross platform solution that provides strong typing (JAX-RS/REST is also cross platform, but generally you don&#39;t get the same strong typing guarantees and it is more verbose on the wire).</div><div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
<br>
I know I sound to pessimistic, feel free to turn me into grpc-optimist ;)<br></blockquote><div><br></div><div>Fair enough. I posted this to try and gauge interest to see if this is worth pursuing, we can&#39;t do everything so unless there is interest it probably won&#39;t go past the proof of concept stage.</div><div><br></div><div>Stuart</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<span class="m_3765919743040719492m_8240561077756974834HOEnZb"><font color="#888888"><br>
Rostislav<br>
</font></span><div class="m_3765919743040719492m_8240561077756974834HOEnZb"><div class="m_3765919743040719492m_8240561077756974834h5"><br>
----- Original Message -----<br>
&gt; On 12 December 2017 at 22:24, Stuart Douglas &lt;<a href="mailto:stuart.w.douglas@gmail.com" target="_blank">stuart.w.douglas@gmail.com</a>&gt;<br>
&gt; wrote:<br>
&gt; &gt; Not without writing a new protobuf compiler, the compiler does not provide<br>
&gt; &gt; any places to hook into the registration process, the only way I could<br>
&gt; &gt; manage to do it was to subclass the generated class with a proxy. Protobuf<br>
&gt; &gt; generates a fair bit of code for each class anyway, so I don&#39;t think the<br>
&gt; &gt; proxy will add much percentage wise.<br>
&gt;<br>
&gt; The Google tooling for ProtoBuf expect you to use code generation<br>
&gt; depending on the schema, but it&#39;s not the only toolset available.<br>
&gt;<br>
&gt; Infinispan also uses ProtoBuf for encoding of client/server data yet<br>
&gt; forcing people to use code generation seemed too annoying, so they use<br>
&gt; ProtoStream:<br>
&gt;  - <a href="https://github.com/infinispan/protostream" rel="noreferrer" target="_blank">https://github.com/infinispan/<wbr>protostream</a><br>
&gt;<br>
&gt; In turn this is based on Square&#39;s Protoparser. I have no idea if it&#39;s<br>
&gt; more efficient, but it&#39;s possible as the alternative feels less<br>
&gt; verbose than the codegeneration approach; it&#39;s certainly more<br>
&gt; convenient.<br>
&gt;<br>
&gt; Hibernate OGM has a &quot;dialect&quot; able to encode JPA storage operations<br>
&gt; into Infinispan Remote calls using a combination of the above<br>
&gt; libraries; in terms of usage people just deploy JPA annotated pojos on<br>
&gt; WildFly and the necessary infrastructure is generated via an internal<br>
&gt; metamodel and a chain of method references: no proxies nor code<br>
&gt; generation.<br>
&gt;<br>
&gt; Sanne<br>
&gt;<br>
&gt; &gt;<br>
&gt; &gt; Stuart<br>
&gt; &gt;<br>
&gt; &gt; On Wed, Dec 13, 2017 at 1:30 AM, Andrig Miller &lt;<a href="mailto:anmiller@redhat.com" target="_blank">anmiller@redhat.com</a>&gt; wrote:<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt; Stuart,<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt;       Because I have memory footprint on the brain, pretty much all the<br>
&gt; &gt;&gt; time now, I wonder if you can change your approach in a way that would<br>
&gt; &gt;&gt; lessen MetaSpace usage.  MetaSpace usage is usually the second largest<br>
&gt; &gt;&gt; memory hog in Wildfly/EAP, and under certain circumstances it can be<br>
&gt; &gt;&gt; larger<br>
&gt; &gt;&gt; than heap, when the right JVM settings are used to control heap usage<br>
&gt; &gt;&gt; (part<br>
&gt; &gt;&gt; of my presentation in 30 minutes).<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt; Andy<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt; On Tue, Dec 12, 2017 at 3:48 AM, Darran Lofthouse<br>
&gt; &gt;&gt; &lt;<a href="mailto:darran.lofthouse@jboss.com" target="_blank">darran.lofthouse@jboss.com</a>&gt; wrote:<br>
&gt; &gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt; On the security question, if we are interested in pursuing this we will<br>
&gt; &gt;&gt;&gt; get an analysis document started to look at the options we have for<br>
&gt; &gt;&gt;&gt; integration with our security implementation.<br>
&gt; &gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt; Regards,<br>
&gt; &gt;&gt;&gt; Darran Lofthouse.<br>
&gt; &gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt; On Mon, 11 Dec 2017 at 05:17 Stuart Douglas &lt;<a href="mailto:stuart.w.douglas@gmail.com" target="_blank">stuart.w.douglas@gmail.com</a>&gt;<br>
&gt; &gt;&gt;&gt; wrote:<br>
&gt; &gt;&gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt;&gt; Hi everyone,<br>
&gt; &gt;&gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt;&gt; I have done up a proof of concept of GRPC support in Wildfly, which can<br>
&gt; &gt;&gt;&gt;&gt; be found at [1]. GRPC is an RPC protocol designed by Google, that allows<br>
&gt; &gt;&gt;&gt;&gt; for<br>
&gt; &gt;&gt;&gt;&gt; easy cross platform invocations.<br>
&gt; &gt;&gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt;&gt; My proof of concept uses an Undertow based port of GRPC [2] and<br>
&gt; &gt;&gt;&gt;&gt; basically works as follows:<br>
&gt; &gt;&gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt;&gt; - At deployment time Jandex is used to find all non-abstract classes<br>
&gt; &gt;&gt;&gt;&gt; that implement io.grpc.BindableService<br>
&gt; &gt;&gt;&gt;&gt; - I scan the class hierarchy of these classes to find the protobuf<br>
&gt; &gt;&gt;&gt;&gt; generated base class, and create a subclass of this class using<br>
&gt; &gt;&gt;&gt;&gt; ProxyFactory, overriding every method except bindService().<br>
&gt; &gt;&gt;&gt;&gt; - An instance/proxy is created using the ComponentRegistry to do the<br>
&gt; &gt;&gt;&gt;&gt; creation, and the generated proxy delegates all incoming calls to this<br>
&gt; &gt;&gt;&gt;&gt; instance<br>
&gt; &gt;&gt;&gt;&gt; - At runtime any incoming HTTP/2 requests with a type of<br>
&gt; &gt;&gt;&gt;&gt; application/grpc are intercepted, and passed through this newly created<br>
&gt; &gt;&gt;&gt;&gt; proxy.<br>
&gt; &gt;&gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt;&gt; Basically this means that all you need to do as an application developer<br>
&gt; &gt;&gt;&gt;&gt; is define your GRPC endpoints using protobuf, implement the classes<br>
&gt; &gt;&gt;&gt;&gt; generated by the protobuf compiler and then include them in your<br>
&gt; &gt;&gt;&gt;&gt; application, and Wildfly will do the rest. CDI and EJB annotations on<br>
&gt; &gt;&gt;&gt;&gt; your<br>
&gt; &gt;&gt;&gt;&gt; GRPC services should work as normal, for example if you put @Stateless<br>
&gt; &gt;&gt;&gt;&gt; on an<br>
&gt; &gt;&gt;&gt;&gt; endpoint it should work as expected with a SFSB handling all<br>
&gt; &gt;&gt;&gt;&gt; invocations.<br>
&gt; &gt;&gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt;&gt; Note that this is a very early stage POC, and lots of stuff is missing<br>
&gt; &gt;&gt;&gt;&gt; (most notably security).<br>
&gt; &gt;&gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt;&gt; Before I go to much further though I though that I should get some<br>
&gt; &gt;&gt;&gt;&gt; feedback, e.g.<br>
&gt; &gt;&gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt;&gt; - Do we actually want this? I am not sure how much interest there is,<br>
&gt; &gt;&gt;&gt;&gt; but it seems like GRPC could be very useful in a polyglot microservice<br>
&gt; &gt;&gt;&gt;&gt; environment.<br>
&gt; &gt;&gt;&gt;&gt; - Is the current implementation the best way of actually registering<br>
&gt; &gt;&gt;&gt;&gt; GRPC services, or should we require some kind of defining annotation<br>
&gt; &gt;&gt;&gt;&gt; - What security mechanisms should we support? Out of the box standard<br>
&gt; &gt;&gt;&gt;&gt; GRPC is fairly limited<br>
&gt; &gt;&gt;&gt;&gt; - What do we do about transactions? I am leaning towards not supporting<br>
&gt; &gt;&gt;&gt;&gt; them over GRPC, as we already have solutions for Java invocation in the<br>
&gt; &gt;&gt;&gt;&gt; form<br>
&gt; &gt;&gt;&gt;&gt; of our EJB protocol, and I think non-Java clients are unlikely to want<br>
&gt; &gt;&gt;&gt;&gt; to<br>
&gt; &gt;&gt;&gt;&gt; use this.<br>
&gt; &gt;&gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt;&gt; Stuart<br>
&gt; &gt;&gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt;&gt; [1] <a href="https://github.com/stuartwdouglas/wildfly/tree/grpc" rel="noreferrer" target="_blank">https://github.com/stuartwdoug<wbr>las/wildfly/tree/grpc</a><br>
&gt; &gt;&gt;&gt;&gt; [2] <a href="https://github.com/stuartwdouglas/undertow-grpc" rel="noreferrer" target="_blank">https://github.com/stuartwdoug<wbr>las/undertow-grpc</a><br>
&gt; &gt;&gt;&gt;&gt; ______________________________<wbr>_________________<br>
&gt; &gt;&gt;&gt;&gt; wildfly-dev mailing list<br>
&gt; &gt;&gt;&gt;&gt; <a href="mailto:wildfly-dev@lists.jboss.org" target="_blank">wildfly-dev@lists.jboss.org</a><br>
&gt; &gt;&gt;&gt;&gt; <a href="https://lists.jboss.org/mailman/listinfo/wildfly-dev" rel="noreferrer" target="_blank">https://lists.jboss.org/mailma<wbr>n/listinfo/wildfly-dev</a><br>
&gt; &gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt; ______________________________<wbr>_________________<br>
&gt; &gt;&gt;&gt; wildfly-dev mailing list<br>
&gt; &gt;&gt;&gt; <a href="mailto:wildfly-dev@lists.jboss.org" target="_blank">wildfly-dev@lists.jboss.org</a><br>
&gt; &gt;&gt;&gt; <a href="https://lists.jboss.org/mailman/listinfo/wildfly-dev" rel="noreferrer" target="_blank">https://lists.jboss.org/mailma<wbr>n/listinfo/wildfly-dev</a><br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt; --<br>
&gt; &gt;&gt; Andrig (Andy) T. Miller<br>
&gt; &gt;&gt; Global Platform Director, Middleware<br>
&gt; &gt;&gt; Red Hat, Inc.<br>
&gt; &gt;<br>
&gt; &gt;<br>
&gt; &gt;<br>
&gt; &gt; ______________________________<wbr>_________________<br>
&gt; &gt; wildfly-dev mailing list<br>
&gt; &gt; <a href="mailto:wildfly-dev@lists.jboss.org" target="_blank">wildfly-dev@lists.jboss.org</a><br>
&gt; &gt; <a href="https://lists.jboss.org/mailman/listinfo/wildfly-dev" rel="noreferrer" target="_blank">https://lists.jboss.org/mailma<wbr>n/listinfo/wildfly-dev</a><br>
&gt; ______________________________<wbr>_________________<br>
&gt; wildfly-dev mailing list<br>
&gt; <a href="mailto:wildfly-dev@lists.jboss.org" target="_blank">wildfly-dev@lists.jboss.org</a><br>
&gt; <a href="https://lists.jboss.org/mailman/listinfo/wildfly-dev" rel="noreferrer" target="_blank">https://lists.jboss.org/mailma<wbr>n/listinfo/wildfly-dev</a><br>
&gt;<br>
</div></div></blockquote></div><br></div></div>