NetKernel · NetKernel : XML Processing for the 21st Century Brian Sletten Bosatsu Consulting, Inc....

75
NetKernel : XML Processing for the 21st Century Brian Sletten Bosatsu Consulting, Inc. [email protected]

Transcript of NetKernel · NetKernel : XML Processing for the 21st Century Brian Sletten Bosatsu Consulting, Inc....

Page 1: NetKernel · NetKernel : XML Processing for the 21st Century Brian Sletten Bosatsu Consulting, Inc. brian@bosatsu.net

NetKernel :

XML Processing forthe 21st Century

Brian SlettenBosatsu Consulting, [email protected]

Page 2: NetKernel · NetKernel : XML Processing for the 21st Century Brian Sletten Bosatsu Consulting, Inc. brian@bosatsu.net

Speaker Qualifications

Over 14 years of software development experience

Has own software consulting company for design, mentoring, training and development

Currently working in Semantic Web, AOP, Grid Computing, P2P and security consulting

Pinky Committer

Page 3: NetKernel · NetKernel : XML Processing for the 21st Century Brian Sletten Bosatsu Consulting, Inc. brian@bosatsu.net

Agenda

What the heck is NetKernel?

Why We Care

NetKernel Overview

NetKernel Languages

Advanced Concepts

Pinky

Page 4: NetKernel · NetKernel : XML Processing for the 21st Century Brian Sletten Bosatsu Consulting, Inc. brian@bosatsu.net

What the heck is NetKernel?

A micro-kernel based resource ecosystem built around the principles of REST, Unix Pipes and SOA

Page 5: NetKernel · NetKernel : XML Processing for the 21st Century Brian Sletten Bosatsu Consulting, Inc. brian@bosatsu.net

What the heck is NetKernel?

A subversive, generalized architecture that allows you to prop up what other nonsense you are forced to use

Page 6: NetKernel · NetKernel : XML Processing for the 21st Century Brian Sletten Bosatsu Consulting, Inc. brian@bosatsu.net

What the heck is NetKernel?

A scalable replacement for your client web tier

Page 7: NetKernel · NetKernel : XML Processing for the 21st Century Brian Sletten Bosatsu Consulting, Inc. brian@bosatsu.net

What the heck is NetKernel?

A highly productive replacement for business logic and middleware tiers

Page 8: NetKernel · NetKernel : XML Processing for the 21st Century Brian Sletten Bosatsu Consulting, Inc. brian@bosatsu.net

What the heck is NetKernel?

An efficient replacement for your data layer and persistence tiers (Look, Ma, No Objects!)

Page 9: NetKernel · NetKernel : XML Processing for the 21st Century Brian Sletten Bosatsu Consulting, Inc. brian@bosatsu.net

What the heck is NetKernel?

A powerful orchestration layer for your SOA that allows you to work in your languages of choice

Page 10: NetKernel · NetKernel : XML Processing for the 21st Century Brian Sletten Bosatsu Consulting, Inc. brian@bosatsu.net

Why We Care: The Simple Answer

Most enterprise systems use XML and are built in Java and this is still too much of a pain

Complicated

Different Languages for different technologies

Predicting scalability

Page 11: NetKernel · NetKernel : XML Processing for the 21st Century Brian Sletten Bosatsu Consulting, Inc. brian@bosatsu.net

Why We Care : The Complicated Answer

This is hard because of a general mismatch at the intersection of languages, data model, processing abstractions, architectural tiers, etc.

Page 12: NetKernel · NetKernel : XML Processing for the 21st Century Brian Sletten Bosatsu Consulting, Inc. brian@bosatsu.net

What Do We Want?

We want a high-performance, scalable infrastructure for unifying how we refer to data, documents, services, resources, etc.

XML-processing is just the first use for this kind of an architecture

Page 13: NetKernel · NetKernel : XML Processing for the 21st Century Brian Sletten Bosatsu Consulting, Inc. brian@bosatsu.net

Larger Trends

1970s 1980s 1990s 2000s

Code written

Dataformatted

Page 14: NetKernel · NetKernel : XML Processing for the 21st Century Brian Sletten Bosatsu Consulting, Inc. brian@bosatsu.net

NetKernel

A Ground-Up Resource-oriented computing environment

Modern, microkernel architecture

Takes the best of REST, Unix Pipes, SOA

Open Source w/ Dual License for non-open source uses

Page 15: NetKernel · NetKernel : XML Processing for the 21st Century Brian Sletten Bosatsu Consulting, Inc. brian@bosatsu.net

Resource-Oriented Computing

Everything is a Resource

Everything is URI-Addressable (logical reference)

“Computation” is the turning of logical resource references into physical representation

Lossless conversion between representations

Page 16: NetKernel · NetKernel : XML Processing for the 21st Century Brian Sletten Bosatsu Consulting, Inc. brian@bosatsu.net

NetKernel Properties

Fine-grained caching

Self-optimizing based on use

“Aspect-Oriented” architecture

Security, logging, etc. behind URI interception

Tiny Footprint

Can do “real” work in a VM w/ 10-12MB

Takes full advantage of multi-core, multi-CPU boxes

Page 17: NetKernel · NetKernel : XML Processing for the 21st Century Brian Sletten Bosatsu Consulting, Inc. brian@bosatsu.net

REST

Representational State Transfer

Architectural style described in Roy Fielding’s Ph.D. thesis

URLs locate resources in Internet-sized address spaces

Client passes all state in request

Page 18: NetKernel · NetKernel : XML Processing for the 21st Century Brian Sletten Bosatsu Consulting, Inc. brian@bosatsu.net

Conventional Notion of REST

XML Document

http://localhost:8080/workbench/nfjs/hello.bsh

Executable Code

http://localhost:8080/workbench/nfjs/hello.xml

Page 19: NetKernel · NetKernel : XML Processing for the 21st Century Brian Sletten Bosatsu Consulting, Inc. brian@bosatsu.net

URLs ! => Scalability

Addressability of the resources is important, but REST derives its properties from the architectural constraints

Page 20: NetKernel · NetKernel : XML Processing for the 21st Century Brian Sletten Bosatsu Consulting, Inc. brian@bosatsu.net

REST Properties

Page 21: NetKernel · NetKernel : XML Processing for the 21st Century Brian Sletten Bosatsu Consulting, Inc. brian@bosatsu.net

REST Structure

Page 22: NetKernel · NetKernel : XML Processing for the 21st Century Brian Sletten Bosatsu Consulting, Inc. brian@bosatsu.net

Unix Influences

Everything is a file (common interface/resource abstraction)

Small, focused, reusable tools

Tools are scripted

Processes have context from environment

Page 23: NetKernel · NetKernel : XML Processing for the 21st Century Brian Sletten Bosatsu Consulting, Inc. brian@bosatsu.net

SOA Influences

Loosely-coupled

Asynchronous requests

Reusable services composed through orchestration languages

Page 24: NetKernel · NetKernel : XML Processing for the 21st Century Brian Sletten Bosatsu Consulting, Inc. brian@bosatsu.net

Putting the Kernel in NetKernel

Internally, a microkernel manages threading resources

Maps URI requests to managed resources and schedules them

Page 25: NetKernel · NetKernel : XML Processing for the 21st Century Brian Sletten Bosatsu Consulting, Inc. brian@bosatsu.net

General Concept

Page 26: NetKernel · NetKernel : XML Processing for the 21st Century Brian Sletten Bosatsu Consulting, Inc. brian@bosatsu.net

Calling a BeanShell Script

Page 27: NetKernel · NetKernel : XML Processing for the 21st Century Brian Sletten Bosatsu Consulting, Inc. brian@bosatsu.net

XQuery

Page 28: NetKernel · NetKernel : XML Processing for the 21st Century Brian Sletten Bosatsu Consulting, Inc. brian@bosatsu.net

XSLT

Page 29: NetKernel · NetKernel : XML Processing for the 21st Century Brian Sletten Bosatsu Consulting, Inc. brian@bosatsu.net

Active URIs

Internally, NetKernel uses a special URI naming scheme

A proposed IETF standard by HP and 1060 Research to encode complex URIs into standard forms

General formactive:<processURI>*(+<inputName>@<inputURI>)

http://ietf.mirror.netmonic.com/draft-butterfield-active-uri-01.txt

Page 31: NetKernel · NetKernel : XML Processing for the 21st Century Brian Sletten Bosatsu Consulting, Inc. brian@bosatsu.net

NetKernel Benefits

“Deep” REST environment

Appropriate abstractionsFocus on information, not code!

Layered approach to building applications

Logical connections/requests get resolved at runtime (late-binding)

Page 32: NetKernel · NetKernel : XML Processing for the 21st Century Brian Sletten Bosatsu Consulting, Inc. brian@bosatsu.net

Basic NetKernel Tour

Page 33: NetKernel · NetKernel : XML Processing for the 21st Century Brian Sletten Bosatsu Consulting, Inc. brian@bosatsu.net

NetKernel Concepts(aka Really Cool Terms)

Accessors

Transports

Representations

Aspects

Transreptors

Page 34: NetKernel · NetKernel : XML Processing for the 21st Century Brian Sletten Bosatsu Consulting, Inc. brian@bosatsu.net

Accessors

URI-addressable component that provides access to NetKernel resources and services

Page 35: NetKernel · NetKernel : XML Processing for the 21st Century Brian Sletten Bosatsu Consulting, Inc. brian@bosatsu.net

Transport

A component that funnels requests from external sources into NetKernel URI requests (and ultimately Accessors)

ExamplesHTTP

SMTP

JMS

Page 36: NetKernel · NetKernel : XML Processing for the 21st Century Brian Sletten Bosatsu Consulting, Inc. brian@bosatsu.net

Representations

The ‘R’ in REST

In NetKernel, an object representing the resource

Exposed via immutable, cacheable “views”

Page 37: NetKernel · NetKernel : XML Processing for the 21st Century Brian Sletten Bosatsu Consulting, Inc. brian@bosatsu.net

Aspects

Not AOP “Aspects”

Immutable views of the underlying representation in a given form

ExamplesJDOM, DOM, String, BinaryStream

Page 38: NetKernel · NetKernel : XML Processing for the 21st Century Brian Sletten Bosatsu Consulting, Inc. brian@bosatsu.net

Transreptors

Fancy term for “transforming representations”

Transreptors return a resource in a specified form if conversion is possible

Useful for converting between Aspects

Page 39: NetKernel · NetKernel : XML Processing for the 21st Century Brian Sletten Bosatsu Consulting, Inc. brian@bosatsu.net

NetKernelLanguages

Page 40: NetKernel · NetKernel : XML Processing for the 21st Century Brian Sletten Bosatsu Consulting, Inc. brian@bosatsu.net

DPML

A simple NetKernel scripting language for specifying URI requests

Supports conditionals, loops, subroutines, etc.

Page 41: NetKernel · NetKernel : XML Processing for the 21st Century Brian Sletten Bosatsu Consulting, Inc. brian@bosatsu.net

DPML Sample

<idoc><seq><instr><type>copy</type><operand>ffcpl:/usr/local/NetKernel/modules/workbench/nfjs/hello.xml</operand><target>this:response</target>

</instr></seq>

</idoc>

Page 42: NetKernel · NetKernel : XML Processing for the 21st Century Brian Sletten Bosatsu Consulting, Inc. brian@bosatsu.net

BasicExamples

Page 43: NetKernel · NetKernel : XML Processing for the 21st Century Brian Sletten Bosatsu Consulting, Inc. brian@bosatsu.net

XQuery

XML Query Language

W3C Candidate Recommendation

Functional language

FLWOR (For Let Where Order By Return)

Page 44: NetKernel · NetKernel : XML Processing for the 21st Century Brian Sletten Bosatsu Consulting, Inc. brian@bosatsu.net

XQuery Sample

<abbeysayings>{ for $author in doc("active:xquery+operator@file:/usr/local/ NetKernel/modules/workbench/nfjs/quotations/ authors.xq")//* where $author/name/last = 'Abbey' return $author/quotation}</abbeysayings>

Page 45: NetKernel · NetKernel : XML Processing for the 21st Century Brian Sletten Bosatsu Consulting, Inc. brian@bosatsu.net

BeanShell

Supports embedded BSH interpreter

Java source interpreter

Interacts with other scripts, Java, etc.

Makes for very fast scripting

Page 46: NetKernel · NetKernel : XML Processing for the 21st Century Brian Sletten Bosatsu Consulting, Inc. brian@bosatsu.net

BeanShell Sample

void main(){ // Extract all speeches with lines // containing the parameter argument req=context.createSubRequest(); req.setURI("active:xquery"); req.addArgument("operator","abbey.xq"); output=context.issueSubRequest(req);

//Finally return response response=context.createResponseFrom(output); context.setResponse(response);}

Page 47: NetKernel · NetKernel : XML Processing for the 21st Century Brian Sletten Bosatsu Consulting, Inc. brian@bosatsu.net

“Real World”Examples

Page 48: NetKernel · NetKernel : XML Processing for the 21st Century Brian Sletten Bosatsu Consulting, Inc. brian@bosatsu.net

XSLT Input Data

Page 49: NetKernel · NetKernel : XML Processing for the 21st Century Brian Sletten Bosatsu Consulting, Inc. brian@bosatsu.net

XSLT Example

if( context.exists("this:param:param") ) { param=context.sourceAspect("this:param:param", IAspectNVP.class); mbid = param.getValue("mbid");} req=context.createSubRequest();req.setURI("active:httpGet");

url="http://musicbrainz.org/ws/1/artist/" +mbid+ "?type=xml&inc=sa-Album";req.addArgument("url", url);output=context.issueSubRequest(req);

sa= new StringAspect("<albums>" + mbid + "</albums>");req=context.createSubRequest();req.setURI("active:xslt");req.addArgument("operand", output); req.addArgument("operator", "albums.xsl");req.addArgument("band", sa);output=context.issueSubRequest(req);

Page 50: NetKernel · NetKernel : XML Processing for the 21st Century Brian Sletten Bosatsu Consulting, Inc. brian@bosatsu.net

XSLT Stylesheet

<xsl:param name="band"/> <xsl:template match="mo:metadata/mo:artist/mo:release-list"> <html> <body> <h1>Results for <xsl:value-of select="../mo:name"/></h1> <table border="1"> <xsl:apply-templates/> </table> </body> </html></xsl:template> <xsl:template match="mo:release"> <tr><xsl:apply-templates/></tr></xsl:template> <xsl:template match="mo:title"> <xsl:variable name="id" select="../@id"/> <xsl:variable name="url" select="concat('http://musicbrainz.org/ws/1/release/',$id)"/> <td><a href="{$url}?type=xml&amp;inc=tracks"><xsl:value-of select="."/></a></td></xsl:template>

Page 51: NetKernel · NetKernel : XML Processing for the 21st Century Brian Sletten Bosatsu Consulting, Inc. brian@bosatsu.net

XSLTExamples

Page 52: NetKernel · NetKernel : XML Processing for the 21st Century Brian Sletten Bosatsu Consulting, Inc. brian@bosatsu.net

Simple Tree Manipulation

Kind of a DSL for XML

XML is tree-oriented, let’s use it that way

STM

Page 53: NetKernel · NetKernel : XML Processing for the 21st Century Brian Sletten Bosatsu Consulting, Inc. brian@bosatsu.net

Sets element values to the specified value

stm:set

<stm:set select=”/x/y” xpath=”/a/b[1]/c”><x><y>zebra</y>

</x></stm:set>

<a> <b> <c food="hay">horse</c> </b> <b> <c food="hay">donkey</c> </b></a>

<a> <b> <c food="hay">zebra</c> </b> <b> <c food="hay">donkey</c> </b></a>

Page 54: NetKernel · NetKernel : XML Processing for the 21st Century Brian Sletten Bosatsu Consulting, Inc. brian@bosatsu.net

Inserts specified value after the selected element

stm:insert-after

<stm:insert-after xpath=”/a/b[1]”><x><y>zebra</y>

</x></stm:insert-after>

<a> <b> <c food="hay">horse</c> </b> <b> <c food="hay">donkey</c> </b></a>

<a> <b> <c food="hay">horse</c> </b><x><y>zebra</y>

</x> <b>

<c food="hay">donkey</c> </b></a>

Page 55: NetKernel · NetKernel : XML Processing for the 21st Century Brian Sletten Bosatsu Consulting, Inc. brian@bosatsu.net

Applies the specified namespace to the selected elements

stm:apply-ns

<stm:apply-ns prefix=”ns” uri=”http://www.bosatsu.net/ns”xpath=”/a/b[2]”/>

<a> <b> <c food="hay">zebra</c> </b> <ns:b xmlns=”http://www.bosatsu.net/ns”> <ns:c food="hay">donkey</ns:c> </ns:b></a>

Page 56: NetKernel · NetKernel : XML Processing for the 21st Century Brian Sletten Bosatsu Consulting, Inc. brian@bosatsu.net

AdvancedConcepts

Page 57: NetKernel · NetKernel : XML Processing for the 21st Century Brian Sletten Bosatsu Consulting, Inc. brian@bosatsu.net

Asynchronous requests are easy in NetKernel

Asynchronous Requests

// Set up request 1req1=context.createSubRequest();req1.setURI("active:beanshell");req1.addArgument("operator", “script1.bsh” );req1.addArgument("param", param );handle1 = context.issueAsyncSubRequest(req1);

// Set up request 2req2=context.createSubRequest();req2.setURI("active:beanshell");req2.addArgument("operator", “script2.bsh” );req2.addArgument("param", param );handle2 = context.issueAsyncSubRequest(req2);

// Block until both calls finishretValue1 = handle1.join();retValue2 = handle2.join();

Page 58: NetKernel · NetKernel : XML Processing for the 21st Century Brian Sletten Bosatsu Consulting, Inc. brian@bosatsu.net

Throttling requests is also easy

Throttling Requests

// attempt to issue 100 concurrent requests to script1.bshfor (int i=0; i<100; i++) { req=context.createSubRequest("active:throttle"); req.addArgument("id","throttle:my_throttle"); req.addArgument("uri","active:beanshell"); req.addArgument(“operator”,”myscript.bsh”); context.issueAsyncSubRequest(req);}

<throttle>  <concurrency>4</concurrency>  <queue>50</queue></throttle>

Expects to find a configuration file in ffcpl:/etc/ConfigThrottle.xml

Page 59: NetKernel · NetKernel : XML Processing for the 21st Century Brian Sletten Bosatsu Consulting, Inc. brian@bosatsu.net

Golden Thread Pattern

Virtual Dependency Management

Powerful technique for invalidating arbitrary collections of resources

Easier to see than hear about!

Page 60: NetKernel · NetKernel : XML Processing for the 21st Century Brian Sletten Bosatsu Consulting, Inc. brian@bosatsu.net

Long Computation wrapped in an Accessor called from a DPML script

Scalability - Scenario 1

Page 61: NetKernel · NetKernel : XML Processing for the 21st Century Brian Sletten Bosatsu Consulting, Inc. brian@bosatsu.net

Shorter Computation called multiple times from DPML script

Scalability - Scenario 2

Page 62: NetKernel · NetKernel : XML Processing for the 21st Century Brian Sletten Bosatsu Consulting, Inc. brian@bosatsu.net

Random document chosen from DPML script

Scalability - Scenario 3

Page 63: NetKernel · NetKernel : XML Processing for the 21st Century Brian Sletten Bosatsu Consulting, Inc. brian@bosatsu.net

Real NetKernel Infrastructure is built around modules

Modules

Page 64: NetKernel · NetKernel : XML Processing for the 21st Century Brian Sletten Bosatsu Consulting, Inc. brian@bosatsu.net

Ways of segmenting Address Space and functionality

Modules export public URIs and class packages

Separately Versioned units of deployment

Modules (cont)

Page 65: NetKernel · NetKernel : XML Processing for the 21st Century Brian Sletten Bosatsu Consulting, Inc. brian@bosatsu.net

Modules (cont)

Can hold static resources, Java code, scripts, accessors, aspects, transreptors, transports, fragmentors and caches

Import module definitions to access another namespace

If you create a new module, you will need to at it to the deployedModules.xml

Page 66: NetKernel · NetKernel : XML Processing for the 21st Century Brian Sletten Bosatsu Consulting, Inc. brian@bosatsu.net

Sample Modules

Module Functionality

ext-xml-core-1.4.2.jar DOM, JDom, SAX, XDA, XMLBean

ext-dpml-1.2.2.jar DPML Language runtime

ext-kernel-1.0.6.jar System component accessors

doc-netkernel-4.0.0.jar NetKernel Core Documentation

mod-fulcrum-frontend HTTP Server FrontEnd Fulcrum

mod-fulcrum-backend HTTP Server Backend Fulcrum

tpt-http-2.1.8.jar HTTP Transport

tpt-jms-1.0.2.jar JMS Transport

app-address-book-1.1.4.jar Address Book application

Page 67: NetKernel · NetKernel : XML Processing for the 21st Century Brian Sletten Bosatsu Consulting, Inc. brian@bosatsu.net

Module Example

Page 68: NetKernel · NetKernel : XML Processing for the 21st Century Brian Sletten Bosatsu Consulting, Inc. brian@bosatsu.net

Pipes in NK (Yahoo)Module for implementing Yahoo Pipes-like functionality

Runs in your computational space

No ads

Full control

Pinky

http://sourceforge.net/projects/pinky

Page 69: NetKernel · NetKernel : XML Processing for the 21st Century Brian Sletten Bosatsu Consulting, Inc. brian@bosatsu.net

Union - combine one or more feeds

Truncate - keep things manageable

Unique - remove duplicate stories

Count - how many elements per feed

Filter - restrict feed elements to filter criteria

Pinky Accessors

Page 70: NetKernel · NetKernel : XML Processing for the 21st Century Brian Sletten Bosatsu Consulting, Inc. brian@bosatsu.net

Pinky Example

Page 71: NetKernel · NetKernel : XML Processing for the 21st Century Brian Sletten Bosatsu Consulting, Inc. brian@bosatsu.net

Sophisticated management consoleSystem Healthcheck

Manipulate Modules

Monitor Memory, Throttle Settings, Workload

Edit Kernel Parameters

NetKernel Administration

http://localhost:1060/ep+name@app_ext_introspect_controlpanel

Page 72: NetKernel · NetKernel : XML Processing for the 21st Century Brian Sletten Bosatsu Consulting, Inc. brian@bosatsu.net

Non-XML Examples

Page 73: NetKernel · NetKernel : XML Processing for the 21st Century Brian Sletten Bosatsu Consulting, Inc. brian@bosatsu.net

NetKernel Links

Open Source Site http://www.1060.org

Commercial Site http://www.1060research.com

Article http://tinyurl.com/ghxg3

Front-End Fulcrum http://localhost:8080

Back-End Fulcrum http://localhost:1060

Slides http://www.bosatsu.net/talks/NetKernel.pdf

Tutorial http://www.bosatsu.net/talks/examples/netkernel.txt

Page 74: NetKernel · NetKernel : XML Processing for the 21st Century Brian Sletten Bosatsu Consulting, Inc. brian@bosatsu.net

Talk Links

Slides http://www.bosatsu.net/talks/NetKernel.pdf

Examples http://www.bosatsu.net/talks/examples/NetKernel-Examples.zip

Page 75: NetKernel · NetKernel : XML Processing for the 21st Century Brian Sletten Bosatsu Consulting, Inc. brian@bosatsu.net

Please WriteReviews

Feedback/Questions:[email protected]