33
#PIWorld ©2018 OSIsoft, LLC Writing Highly Performant PI Web API Applications Presented by Jim Bazis & Max Drexel 1 : LIVE CODING :

Writing Highly Performant PI Web API Applications€¦ · DisableWrites Prevents the PI Web API from writing to PI/AF. Increase security for publicly -accessible PI Web API systems

  • Upload
    others

  • View
    3

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Writing Highly Performant PI Web API Applications€¦ · DisableWrites Prevents the PI Web API from writing to PI/AF. Increase security for publicly -accessible PI Web API systems

#PIWorld ©2018 OSIsoft, LLC

Writing Highly Performant PI Web API Applications

Presented by Jim Bazis & Max Drexel

1

: LIVE CODING :

Page 2: Writing Highly Performant PI Web API Applications€¦ · DisableWrites Prevents the PI Web API from writing to PI/AF. Increase security for publicly -accessible PI Web API systems

#PIWorld ©2018 OSIsoft, LLC

2

Introduction

Max Drexel

[email protected]

Software Developer

PI Web API Team

Jim Bazis

[email protected]

Team Lead

PI Web API Team

Page 3: Writing Highly Performant PI Web API Applications€¦ · DisableWrites Prevents the PI Web API from writing to PI/AF. Increase security for publicly -accessible PI Web API systems

#PIWorld ©2018 OSIsoft, LLC

3

Agenda

•Goals

•Streamsets

•Batch Requests

•Advanced Batch

•Channels

•Stream Updates

Page 4: Writing Highly Performant PI Web API Applications€¦ · DisableWrites Prevents the PI Web API from writing to PI/AF. Increase security for publicly -accessible PI Web API systems

#PIWorld ©2018 OSIsoft, LLC

Overview

4

Page 5: Writing Highly Performant PI Web API Applications€¦ · DisableWrites Prevents the PI Web API from writing to PI/AF. Increase security for publicly -accessible PI Web API systems

#PIWorld ©2018 OSIsoft, LLC

5

Goals

•Understand common sources of poor performance

•Recognize them when they occur

•Know your options to mitigate them

Page 6: Writing Highly Performant PI Web API Applications€¦ · DisableWrites Prevents the PI Web API from writing to PI/AF. Increase security for publicly -accessible PI Web API systems

#PIWorld ©2018 OSIsoft, LLC

6

What do we mean by “Poor Performance”?

•Pages load too slowly for end users

•Too many users causes quality of service to degrade

•Can’t acquire data fast enough for application to be useful

•And many more…

Page 7: Writing Highly Performant PI Web API Applications€¦ · DisableWrites Prevents the PI Web API from writing to PI/AF. Increase security for publicly -accessible PI Web API systems

#PIWorld ©2018 OSIsoft, LLC

Example Application

7

: LIVE CODING :

Page 8: Writing Highly Performant PI Web API Applications€¦ · DisableWrites Prevents the PI Web API from writing to PI/AF. Increase security for publicly -accessible PI Web API systems

#PIWorld ©2018 OSIsoft, LLC

PI Web API HTTP request lifecycle

8

Tim

e

PI System (DA, AF)

HTTP Request for data

HTTP Response with data

Data calls

Data calls

Additional work

PI Web API Client Application

Page 9: Writing Highly Performant PI Web API Applications€¦ · DisableWrites Prevents the PI Web API from writing to PI/AF. Increase security for publicly -accessible PI Web API systems

#PIWorld ©2018 OSIsoft, LLC

9

What are the constraints of this lifecycle? • Every request incurs a

performance penalty

• Network latency & bandwidth

• Ethernet, TCP/IP, and TLS: reduces throughput to 87.7% under ideal conditions

• Calls to other services (identity provider, AF server, etc.)

• We don’t control these

Tim

e

HTTP Request for data

HTTP Response with data

PI Web API Client Application

HTTP Request for data

HTTP Response with data

Page 10: Writing Highly Performant PI Web API Applications€¦ · DisableWrites Prevents the PI Web API from writing to PI/AF. Increase security for publicly -accessible PI Web API systems

#PIWorld ©2018 OSIsoft, LLC

10

What do we have control over?

•The resources we interact with

•The way we interact with them • Which endpoints we call

• How frequently we call them

• What communication mechanism we use

Page 11: Writing Highly Performant PI Web API Applications€¦ · DisableWrites Prevents the PI Web API from writing to PI/AF. Increase security for publicly -accessible PI Web API systems

#PIWorld ©2018 OSIsoft, LLC

11

Optimize!

•Requests can’t escape latency; make fewer requests

•Bandwidth is limited; use less of it

•Server has finite resources; use them more efficiently

Page 12: Writing Highly Performant PI Web API Applications€¦ · DisableWrites Prevents the PI Web API from writing to PI/AF. Increase security for publicly -accessible PI Web API systems

#PIWorld ©2018 OSIsoft, LLC

Areas of Improvement

12

Endpoints & Resources

Page 13: Writing Highly Performant PI Web API Applications€¦ · DisableWrites Prevents the PI Web API from writing to PI/AF. Increase security for publicly -accessible PI Web API systems

#PIWorld ©2018 OSIsoft, LLC

13

PI Web API Endpoints

•Some endpoints are designed to improve performance

• What are they?

• How do I use them?

• Which one is appropriate for my use case?

Page 14: Writing Highly Performant PI Web API Applications€¦ · DisableWrites Prevents the PI Web API from writing to PI/AF. Increase security for publicly -accessible PI Web API systems

#PIWorld ©2018 OSIsoft, LLC

Plot Values

14

Page 15: Writing Highly Performant PI Web API Applications€¦ · DisableWrites Prevents the PI Web API from writing to PI/AF. Increase security for publicly -accessible PI Web API systems

#PIWorld ©2018 OSIsoft, LLC

0

50

100

150

200

250

300

350

400

12/31/2017 4/10/2018 7/19/2018 10/27/2018 2/4/2019 5/15/2019

Active W

idgets

What is plot data?

15

315

320

325

330

335

340

1 6 11 16 21 26 31 A

ctive W

idgets

Page 16: Writing Highly Performant PI Web API Applications€¦ · DisableWrites Prevents the PI Web API from writing to PI/AF. Increase security for publicly -accessible PI Web API systems

#PIWorld ©2018 OSIsoft, LLC

Plot Values

16

: LIVE CODING :

INTRODUCTORY

(Continued)

Page 17: Writing Highly Performant PI Web API Applications€¦ · DisableWrites Prevents the PI Web API from writing to PI/AF. Increase security for publicly -accessible PI Web API systems

#PIWorld ©2018 OSIsoft, LLC

Example application’s current behavior

17

Tim

e

Client Application Operator PI Web API

Operator selects attributes Request first attribute’s plot data

Response of first attribute’s plot data

Request second attribute’s plot data

Response of first attribute’s plot data

Request last attribute’s plot data

Response of last attribute’s plot data

Display updates

Page 18: Writing Highly Performant PI Web API Applications€¦ · DisableWrites Prevents the PI Web API from writing to PI/AF. Increase security for publicly -accessible PI Web API systems

#PIWorld ©2018 OSIsoft, LLC

18

PI Web API features: Stream Sets • Use a “Stream Set”

request

• Reduced to a single HTTP request

• Many round-trips removed

• PI Web API can optimize backend calls for even better performance

Tim

e

PI Web API Client Application

Request plot data for

the set of streams

Response of plot data

for the set of streams

Page 19: Writing Highly Performant PI Web API Applications€¦ · DisableWrites Prevents the PI Web API from writing to PI/AF. Increase security for publicly -accessible PI Web API systems

#PIWorld ©2018 OSIsoft, LLC

Stream Sets

19

: LIVE CODING :

INTRODUCTORY

Page 20: Writing Highly Performant PI Web API Applications€¦ · DisableWrites Prevents the PI Web API from writing to PI/AF. Increase security for publicly -accessible PI Web API systems

#PIWorld ©2018 OSIsoft, LLC

20

Same problem, different example • Problem statement:

“Given an data point on a car, get the same data point on the other cars”

• Formalized as: “Given an attribute, get all attributes using the same attribute template”

• Robust implementation ends up taking 6 requests

Tim

e

PI Web API Client Application

“Get the attribute”

Attribute

“Get the attribute’s template”

Attribute template

“Get the attribute’s parent element”

Element

“Get the parent element’s template”

Element template

“Get the parent element’s database”

Database

“Get attributes matching these criteria”

Attributes returned by search

Page 21: Writing Highly Performant PI Web API Applications€¦ · DisableWrites Prevents the PI Web API from writing to PI/AF. Increase security for publicly -accessible PI Web API systems

#PIWorld ©2018 OSIsoft, LLC

21

Modified to use advanced PI Web API features • Logic can be bundled

into a single Batch request

• PI Web API can parallelize non-dependent requests

Tim

e

PI Web API Client Application

Execute batch request

Results of subrequests

1

2 3

Get attribute

Get attribute template

Get parent element

4 5

Get element template

Get database

6

Execute the search

1 2 3 4 5 6

1 2 3 4 5 6

• Batch subrequests are executed without needing to traverse the network

• Results of the subrequests are sent as a single response

• Now we only need one round-trip: five removed! Free performance!

Page 22: Writing Highly Performant PI Web API Applications€¦ · DisableWrites Prevents the PI Web API from writing to PI/AF. Increase security for publicly -accessible PI Web API systems

#PIWorld ©2018 OSIsoft, LLC

Batch

22

: LIVE CODING :

INTERMEDIATE

Page 23: Writing Highly Performant PI Web API Applications€¦ · DisableWrites Prevents the PI Web API from writing to PI/AF. Increase security for publicly -accessible PI Web API systems

#PIWorld ©2018 OSIsoft, LLC

Areas of Improvement

23

Communication Mechanisms

Page 24: Writing Highly Performant PI Web API Applications€¦ · DisableWrites Prevents the PI Web API from writing to PI/AF. Increase security for publicly -accessible PI Web API systems

#PIWorld ©2018 OSIsoft, LLC

24

Communication mechanisms

•What are the options?

•Which one should I use?

•How do they impact my application?

Page 25: Writing Highly Performant PI Web API Applications€¦ · DisableWrites Prevents the PI Web API from writing to PI/AF. Increase security for publicly -accessible PI Web API systems

#PIWorld ©2018 OSIsoft, LLC

25

HTTP Requests • Pros:

• Easy to use

• Widely supported

• Can make use of existing infrastructure (load balancers, analytics, caching, etc.)

• Low hardware overhead

• Low software overhead

• Cons: • Need to continually

issue requests to find out about changes (polling)

Tim

e

HTTP Request for data

HTTP Response with data

PI Web API Client Application

HTTP Request for data

HTTP Response with data

Possible PI System

data changes

Page 26: Writing Highly Performant PI Web API Applications€¦ · DisableWrites Prevents the PI Web API from writing to PI/AF. Increase security for publicly -accessible PI Web API systems

#PIWorld ©2018 OSIsoft, LLC

HTTP Response: switch protocols

HTTP Request: upgrade to WebSocket • Pros:

• Get informed of changes as they occur: no polling needed

• Lower latency • Less protocol overhead:

never need more than 14 bytes per frame (vs. HTTP headers – still suffer from TCP/TLS/etc.)

• Asynchronous model – not wasting hardware or network resources

• Cons: • Need client support • Underlying TCP connection

still has network traffic • PI Web API specific: Does

not support Claims Based Authentication

26

WebSockets (using the Channels feature) T

ime

PI Web API Client Application

Message: close WebSocket

Message: open WebSocket

Message: information about changes

Message: information about changes

Nothing happening when no message traffic

Nothing happening when no message traffic

Nothing happening when no message traffic

Resource changes

Resource changes

Page 27: Writing Highly Performant PI Web API Applications€¦ · DisableWrites Prevents the PI Web API from writing to PI/AF. Increase security for publicly -accessible PI Web API systems

#PIWorld ©2018 OSIsoft, LLC

Channels

27

: LIVE CODING :

ADVANCED

Page 28: Writing Highly Performant PI Web API Applications€¦ · DisableWrites Prevents the PI Web API from writing to PI/AF. Increase security for publicly -accessible PI Web API systems

#PIWorld ©2018 OSIsoft, LLC

Marker (bookmark in time for the resource)

Register for updates on resource(s)

28

Stream Updates (CTP) • Registers the stream or

streamset to be monitored for changes

• Every time you request the updates, you get the changes since the time you registered and a new link to use next time

• Pros: • Operates over HTTP – get all the

benefits of normal HTTP requests (infrastructure, library support, etc.)

• Response sizes are much smaller than polling (only getting changes)

• Uses less server & network resources than polling

• Works with Claims Based Authentication

• Cons: • Client application needs to

actively check for changes (not as easy as Channels)

• Registrations are per Web API instance (need sticky sessions)

Tim

e

PI Web API Client Application

Monitor

resource(s)

Resource changes

Updates since marker was generated,

and a new marker

Look for updates using the marker

New updates, and a new marker

Look for updates using the marker

Automatically stop monitoring

Resource changes

Page 29: Writing Highly Performant PI Web API Applications€¦ · DisableWrites Prevents the PI Web API from writing to PI/AF. Increase security for publicly -accessible PI Web API systems

#PIWorld ©2018 OSIsoft, LLC

Stream Updates

29

: LIVE CODING :

ADVANCED

Page 31: Writing Highly Performant PI Web API Applications€¦ · DisableWrites Prevents the PI Web API from writing to PI/AF. Increase security for publicly -accessible PI Web API systems

#PIWorld ©2018 OSIsoft, LLC

PI Web API AFSearch Functionality

• Introduced as part of PI Web API 2017 R2

• Uses AF Search syntax

• As of PI Web API 2018, the following search types are supported: • Analyses • Analysis Templates • Attributes • Elements • Event Frames • Notification Rules • Notification Rule Templates

• Much better performance, especially for use cases where users frequently re-execute searches

• Uses fewer resources across the PI System

Page 32: Writing Highly Performant PI Web API Applications€¦ · DisableWrites Prevents the PI Web API from writing to PI/AF. Increase security for publicly -accessible PI Web API systems

#PIWorld ©2018 OSIsoft, LLC

32

Name Description Use Case

AFCacheRefreshHoldoffTime

How long (in milliseconds) the PI Web API should defer

checking PI/AF for changes when a request requires fresh (non-

cached) data.

When a very high volume of PI System data read requests are expected (ex. multiple Recorded, Plot, or

interpolated calls are outstanding at any given time), higher values give better performance.

Note: this feature can result in returned data being stale by at most the specified value.

AFSearchCacheInterval The amount of time (in seconds) between refreshes of cached

search results. When the same search occurs frequently, but the results are not expected to change often, higher

values give better performance.

AFSearchCacheTimeout The amount of time (in seconds) to wait before clearing a

cached search result. When the same same search occurs frequently, higher values give better performance.

AFSearchPageSize The page size used to retrieve results from the AF server.

If your application typically returns very few results for searches, then a small page size gives better

performance.

If your application typically returns many results for searches, then a large page size gives better

performance.

ChannelPollingInterval How often (in milliseconds) each Channel will notify listeners of

PI/AF changes. Reduce network traffic when changes to a monitored resource occur in rapid succession.

DisableWrites Prevents the PI Web API from writing to PI/AF. Increase security for publicly-accessible PI Web API systems.

PreflightMaxAge How long (in seconds) a CORS preflight request can be cached

by clients.

When CORS is enabled, increasing this value will give better performance on high-latency connections

for well-behaved clients.

Note: if CORS settings change, this setting can reduce security until applications refresh their cached

configurations.

RateLimitDuration A period of time (in seconds) that a client is bound by the

RateLimitMaxRequests. Reduce network traffic and PI System load due to poorly behaved or malicious clients.

RateLimitMaxRequests A maximum number of requests per client (IP address) over a

period of time. Reduce network traffic and PI System load due to poorly behaved or malicious clients.

WebIDType Changes the default Web ID type that PI Web API will respond

with. Setting this value to IDOnly will give better performance, at the cost of reduced AF hierarchy flexibility.

WebIDVersion (2018 R2) Changes the default Web ID version that PI Web API will

respond with.

While migrating systems to newer versions of the PI Web API, changing this value will prevent legacy

applications from encountering unexpected types of Web IDs.

Note: many newer features (ex. Notifications) require Web ID 2.0. These features will stop working if

this value is changed.

PI Web API Configuration Tweaks

Page 33: Writing Highly Performant PI Web API Applications€¦ · DisableWrites Prevents the PI Web API from writing to PI/AF. Increase security for publicly -accessible PI Web API systems

#PIWorld ©2018 OSIsoft, LLC

33

Suspect Endpoints

•Highly suspect: • AnalysisRules/{webId}/AnalysisRules

• Attributes/{webId}/Attributes

• Elements/{webId}/Attributes

• EventFrames/{webId}/Attributes

•Sometimes suspect: • Non-adhoc StreamSet calls