Hi all,

I'd like to try and summarize the discussion so far to make sure that I understand.

As a request comes into GeoServer, it would either be handled by a custom GetMapCallback or by a distributed-render-aware Renderer by GetMap. From there, the distributed GeoTools data/feature store would accept sufficient rendering hints so that it could return artificial SimpleFeatures containing a RenderedImage. On GeoServer, those multiple RenderedImages would be combined into the final image to satisfy the WMS request.

In terms of how the initial request is handled, I am a little unclear on the choices here. I believe we can and should restrict ourselves to SLDs which are 'easy to distribute'. I think trading some style options for fast WMS responses with data sets involving billions of features is reasonable. As we get a better handle on system preformance, I'd be interested in supporting more styling as we zoom into a range which we know we can range render quickly enough.

At the moment, can we ask the Style classes how they can be simplified to be 'distributable'?

In terms of the distribution of work, I do like the idea of pushing tile rendering to the cloud nodes. From the GeoTools side, is there anything we can/should be doing to make the process of passing hints and getting back synthetic SimpleFeatures more clear? GeoMesa does this in a few places to help generate heatmaps and time series. (I mention that since inserting ourselves in the GetMap step will likely let us call out to the database directly and return RenderedImages more cleanly.)

Andrea, I'll support Jody's multi-threaded/parallel rendering ideas. Chris and Rich have shared results from a 5 node cluster. If I am understanding correctly, each of those servers will produce a RenderedImage with part of the final image. In particular, I don't expect the rendered images to overlap all that much. One server would have data for the Americas and another would paint the ranges for Europe. GeoMesa uses a random sharding approach, so when we do this, our tiles may look very similar.

Anyhow, on the GeoServer side, GeoWave and GeoMesa would both be providing at least one RenderedImage per cloud node. If there are exactly 5 images, whatever approach would be fine. If there are hundreds of images to merge, would having a concurrent merging process help? I'd conjecture that a local process which would help uDig use multiple cores may also help our distributed rendering pipeline.

That's my understanding of the distributed rendering architecture so far. I'm excited to see this come together!

Jim

On 02/15/2015 09:24 AM, Andrea Aime wrote:
On Tue, Feb 10, 2015 at 8:23 PM, Rich Fecher <rfec...@gmail.com <mailto:rfec...@gmail.com>> wrote:

    Yeah, so on the GeoWave project we started out with a simple
    sub-sampling approach that used a render transform to pass the
    pixel dimensions of the map request to our data store so that we
    could skip within our tablet servers at the equivalent of a pixel
    resolution on our space filling curve.  This works well for basic
    point data but for polygons and lines - data with more complex
    stylization that does not well map what is actually rendered to
    the gridded representation on our space filling curve, we take
    advantage of actually doing the rendering within the tablet servers.


Hi,
so I've looked a bit into the code you have setup and tried to get a grip on it.

Here is what I've gathered so far.
You have setup a modified renderer that has a "distributed rendering mode". This is not really a different mode of operation of its own, but more of a way to offload the
entire rendering process of a layer to the underlying store.

I see you basically setup a helper object that contains all the information needed to render the layer, styles, all rendering options, and so on, and you put such object into
a query hint that is given to the store.

The store can handle this special hint, and in case it's found, it will take the object in the hint, and distribute it to all the nodes in your cluster, using a typical distributed processing pattern, where you move your processing algorithm towards your data,
which is already suitably split among the various nodes.

Each node computes a RenderedImage using a local StreamingRenderer (which in your case, it's really the object you put in the hint) and sends it back to the store, which in turn generates "fake" features with a special attribute containing one of images we got back from the nodes, the modified renderer will recognize them and basically just paint this fake feature collection as a set of images to blend on top of the current map.

This sort of follows along existing ideas that stores willing to optimize rendering can actively participate in some steps of it, right now we have hints to offload geometry generalization (Hints.GEOMETRY_DISTANCE/GEOMETRY_GENERALIZATION/GEOMETRY_SIMPLIFICATION)
and avoid repeated pixel fill at the store level (Hints.SCREENMAP).

I guess we could add a similar hint to GeoTools, although not the way you've done it: the hint is actually another StreamingRenderer clone that can be serialized and send over to the various nodes, I'd keep it purely descriptive instead, something like (by broad strokes):

LayerRenderingContext {
  ReferencedEnvelope renderingArea;
  Rectangle paintArea;
 RenderingHints java2dHints;
 Map rendererHints;
 List<FeatureTypeStyle> styles;
}

and it would be up to your store to eventually wrap it into a "active" object, distribute it,
and return the images.

So this is one possible approach.... which makes me a bit nervous in that there would be no implementation in GeoTools to handle it, so it could get inadvertedly broken over time,
and we would not notice.

There is another possible one, which is the DirectLayer approach Jody mentioned,
and I believe  this would work with little/no modifications.
Now, I understand you want to associate a normal store with a SLD style, which
might be coming from your WMS client, but that per se is not a problem, in
your GeoServe plugin you could implement a org.geoserver.wms.GetMapCallback, which gets notified of all GetMap request and its allowed to modify the MapContent
before passing it down to the StreamingRenderer.
So, right there, you could build your own DirectLayer implementation that uses your store facilities for distributed rendering, and would have access to the current style,
put it in the same place as the old layer using your store,
and as a result doing the distributed rendering without touching one bit of
StreamingRenderer.
One thing you'd miss would be the StreamingRenderer rendering hints, but I guess we could add those by modifying a bit the DirectLayer interface (not sure if there
is anything significant using it nowadays).

Now, in another mail you also said that the nodes have a ScreenMap like approach, and that you stop reading the data once the current tile is full. ScreenMap at the moment can only tell you if a certain pixel is full, but we could easily modify it to add a full pixel counter and thus tell you if the target image is already full, thus
getting the same optimization.

Jody, looking at this, I don't however see much of anything that could be useful for
multithreaded/parallel rendering though.

Cheers
Andrea

PS: in any case we might have a problems with labelling, if the style has any label the distributed rendering thing cannot be applied... I guess your GetMapCallback could split the style in two parts and create two layers, a traditional one
for layers, and a distributed one for everything else.

--
==
GeoServer Professional Services from the experts! Visit
http://goo.gl/NWWaa2 for more information.
==

Ing. Andrea Aime
@geowolf
Technical Lead

GeoSolutions S.A.S.
Via Poggio alle Viti 1187
55054  Massarosa (LU)
Italy
phone: +39 0584 962313
fax: +39 0584 1660272
mob: +39  339 8844549

http://www.geo-solutions.it
http://twitter.com/geosolutions_it

*AVVERTENZE AI SENSI DEL D.Lgs. 196/2003*

Le informazioni contenute in questo messaggio di posta elettronica e/o nel/i file/s allegato/i sono da considerarsi strettamente riservate. Il loro utilizzo è consentito esclusivamente al destinatario del messaggio, per le finalità indicate nel messaggio stesso. Qualora riceviate questo messaggio senza esserne il destinatario, Vi preghiamo cortesemente di darcene notizia via e-mail e di procedere alla distruzione del messaggio stesso, cancellandolo dal Vostro sistema. Conservare il messaggio stesso, divulgarlo anche in parte, distribuirlo ad altri soggetti, copiarlo, od utilizzarlo per finalità diverse, costituisce comportamento contrario ai principi dettati dal D.Lgs. 196/2003.

The information in this message and/or attachments, is intended solely for the attention and use of the named addressee(s) and may be confidential or proprietary in nature or covered by the provisions of privacy act (Legislative Decree June, 30 2003, no.196 - Italy's New Data Protection Code).Any use not in accord with its purpose, any disclosure, reproduction, copying, distribution, or either dissemination, either whole or partial, is strictly forbidden except previous formal approval of the named addressee(s). If you are not the intended recipient, please contact immediately the sender by telephone, fax or e-mail and delete the information in this message that has been received in error. The sender does not give any warranty or accept liability as the content, accuracy or completeness of sent messages and accepts no responsibility for changes made after they were sent or for other risks which arise as a result of e-mail transmission, viruses, etc.


-------------------------------------------------------


------------------------------------------------------------------------------
Dive into the World of Parallel Programming. The Go Parallel Website,
sponsored by Intel and developed in partnership with Slashdot Media, is your
hub for all things parallel software development, from weekly thought
leadership blogs to news, videos, case studies, tutorials and more. Take a
look and join the conversation now. http://goparallel.sourceforge.net/


_______________________________________________
GeoTools-Devel mailing list
GeoTools-Devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/geotools-devel

------------------------------------------------------------------------------
Download BIRT iHub F-Type - The Free Enterprise-Grade BIRT Server
from Actuate! Instantly Supercharge Your Business Reports and Dashboards
with Interactivity, Sharing, Native Excel Exports, App Integration & more
Get technology previously reserved for billion-dollar corporations, FREE
http://pubads.g.doubleclick.net/gampad/clk?id=190641631&iu=/4140/ostg.clktrk
_______________________________________________
GeoTools-Devel mailing list
GeoTools-Devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/geotools-devel

Reply via email to