I have not dug into this yet and figured that a good start is to present my idea here to try and get ideas for a good approach. This is what I have in mind:
I am going to create a cloud service that will allow clients to connect (with proper credentials) and subscribe to updates for PI points (like snapshots). The cloud service will aggregate all client subscriptions and then in turn connect to a PI server via something like a VPN and in turn subscribe to a compiled list of all “active client tags”. When the PI server gets an update to a tag the cloud service is notified. The service then either pulls the data from the server or even better PI pushes the data to the server. From there the cloud service will push out the new data to all clients. My approach is aimed at doing several things:
#1 -clients never directly connect to the PI server (this provides a layer of security).
#2 - the PI server is not required to support loading, so if there are a lot of clients, then the cloud service can be scaled, vs. adding more PI servers or upgrading the server.
#3 – in many cases the clients will be mobile devices where conserving battery life is critical. The service will only ping these devices when new data is available.
#4 – the cloud service can cache data and credentials, allowing for faster response times to client request.
Any ideas on what SDK calls or other data access tools might work best for connecting the cloud service to a PI server? Any suggestions or comments on my idea? This is mostly a proof of concept at this point. I just want to go through the entire process to become better at using this technology and hopefully actually do something with all this down the road.