68
Architecting Web and Mobile Solutions to Meet Modern Customer Expectations A Case Study @ Cigna Brian Mitchell, Ph.D. Enterprise Architecture @DrBrianMitchell

Architecting Web and Mobile Solutions to Meet Modern Customer Expectations A Case Study @ Cigna Brian Mitchell, Ph.D. Enterprise Architecture @DrBrianMitchell

Embed Size (px)

Citation preview

Page 1: Architecting Web and Mobile Solutions to Meet Modern Customer Expectations A Case Study @ Cigna Brian Mitchell, Ph.D. Enterprise Architecture @DrBrianMitchell

Architecting Web and Mobile Solutions to Meet Modern Customer ExpectationsA Case Study @ Cigna

Brian Mitchell, Ph.D.Enterprise Architecture

@DrBrianMitchell

Page 2: Architecting Web and Mobile Solutions to Meet Modern Customer Expectations A Case Study @ Cigna Brian Mitchell, Ph.D. Enterprise Architecture @DrBrianMitchell

1 2

Who Am I?

Architecture Leader@ Cigna

Research Professor@ Drexel University

Page 3: Architecting Web and Mobile Solutions to Meet Modern Customer Expectations A Case Study @ Cigna Brian Mitchell, Ph.D. Enterprise Architecture @DrBrianMitchell

1 3

object Part2{ def main(args : Array[String]) { println("""

| Somewhat technical content | on what we are doing and | what we are exploring for | the future.""")

} }

Talk Outline

Part 1

Where we were,Where we are,

Where we are going

A “somewhat technical”overview on how we are

getting there…

Page 4: Architecting Web and Mobile Solutions to Meet Modern Customer Expectations A Case Study @ Cigna Brian Mitchell, Ph.D. Enterprise Architecture @DrBrianMitchell

41

Recognizing #CignaThoughtLeaders

Clinical ITRTDE

Page 5: Architecting Web and Mobile Solutions to Meet Modern Customer Expectations A Case Study @ Cigna Brian Mitchell, Ph.D. Enterprise Architecture @DrBrianMitchell

1 5

Let’s get started byreviewing some vintage

slides

Page 6: Architecting Web and Mobile Solutions to Meet Modern Customer Expectations A Case Study @ Cigna Brian Mitchell, Ph.D. Enterprise Architecture @DrBrianMitchell

Our Starting Point (circa 2008)

Integration Server Reporting

Application Server Web Content ManagementPortal Server

Search

Security

Data

Network Enrollment

Op. Financials

Case Installation

DentalMedical

IndividualHealthcare

ProfessionalEmployeeEmployer

myCIGNA

MSS DSS Pharmacy

CIGNAAccessCIGNAforHCP

ESSPSSCIGNA

VoluntaryMyCareAllies

CIGNABehavioral

OneView

YourCIGNA

Life

Choicelinx

Data MHS Data Data

Data

Data

Bluecard

PowerstepData Data DataData Data

Data

Data

Data

Data Data

Data

Print Data

ECMDocGen / Collateral Member

mycignaplans

VieLife

Medical Management

Data

TelDrug

Data Data Data

Database Database Database

Data

Content Management

Security

Integration IntegrationIntegration Integration

Security Security

Reporting

Security

Search

Security

Reporting

Security Security Security

Content Management

Security

Reporting

Integration

EMT

CWR

CCF

HSA/ FSA

CIGNA.comHealthAdvisorItstimetofeelbetterFUSE, NAIC, RRD, CarealliesCIGNAMedicareCIGNASharedAdminMGM, CMG, + 80 other Content sites

VendorACES Vendor

Vendor Vendor

GreatWest

CARS

Search

Search Content Management

EmployeeIndividual

Content Management

Content Management

Content Management

Reporting

Integration

Hosting

Cigna Datacenter

External Data Center

SaaS Provider 1

SaaS Provider 2

SaaS Provider 3

Web/HTTP

Web/HTTP2

LDAP

Portal 1

Portal 2

Portal 3

WCM

Custom

Contribute

Vendor

Open Source

Database SearchTool 1 Tool 2

Java/J2EE

.NET

Vendor App

GreatWest

IS1

IS3

IS2

IS4

Integration

Custom

Data Data

Data Data

Data Data

IndividualHCP

Employer

SSO

61

Page 7: Architecting Web and Mobile Solutions to Meet Modern Customer Expectations A Case Study @ Cigna Brian Mitchell, Ph.D. Enterprise Architecture @DrBrianMitchell

1 7

So how does this happen?

Page 8: Architecting Web and Mobile Solutions to Meet Modern Customer Expectations A Case Study @ Cigna Brian Mitchell, Ph.D. Enterprise Architecture @DrBrianMitchell

1 8

Meet our Lead Web Architect

Page 9: Architecting Web and Mobile Solutions to Meet Modern Customer Expectations A Case Study @ Cigna Brian Mitchell, Ph.D. Enterprise Architecture @DrBrianMitchell

91

Time to Modernize !

Remember when you couldn’t play with the cool kids unless you separated concerns

Page 10: Architecting Web and Mobile Solutions to Meet Modern Customer Expectations A Case Study @ Cigna Brian Mitchell, Ph.D. Enterprise Architecture @DrBrianMitchell

1 10

Cigna moved to a layered “Portal” based architecture…[note the only word changed on the slide was “responsive” – the term did not exist then - it was “personalization” prior]

Presentation Services

Internal Applications

Internal Applications

Platform Services

CustomerHealthcare

ProfessionalClient

CignaEmployees Broker

Enterprise ServicesCustomer

IntelligenceSelf-Service Transactions Integrated Constituent Data

Search

Personalization & Customization SyndicationContent Delivery

Social Networking

Constituent Services Constituent Content Workbench

Self ServiceHealth

Coaching

Enrollment Finance

Reporting

Risk Assessment

Call

Claims

Analytics

….

Information

Education

Marketing

Training

Trusted Partners and Client Sites

Trusted Partners and Client Sites

Constituent Interactions

ResponsivePortal Server Web Content Management[JSR Standard Portlets] [Custom CSS for Web/Mobile] [Authoring & Publication]

SecurityServices

Availability &Performance

Services

Cache

Distributed DataGrid

VirtualizationHypervisors

SOA EndpointVirtualization

Discover, Govern

App Server ClustersJ2EE

Authentication,Authorization &

SSO

HTTP Proxy

Federation

SAML

Fine-Grained Externalized

Access Control

Runtime Policy Enforcement

XML Gateway

Web Services

Technology Interactions

blog, wiki, forums.

Collaboration

SSO: Registration &

Delegation

Enterprise DataEnterprise DataPortal Data

Books of Record Info FactoryTransaction

StoresPortal

RepositoriesMDM Hubs &

Indexes (Cache)LDAP Security Stores

(Internal/External)Data Grid

Cache

ETL

IntegrationService Bus Customer Data Integration

Event Processing

Process Orchestration

ChannelsWeb Mobile Call B2B

ECM

MonitoringCloud Solution

Web Services

App2AppApp2App

Portals in the cloud,Specialty Vendors, Practice Management Solutions, Consumer enrichment services

Page 11: Architecting Web and Mobile Solutions to Meet Modern Customer Expectations A Case Study @ Cigna Brian Mitchell, Ph.D. Enterprise Architecture @DrBrianMitchell

1 11

…Success will be definedas achieving a

user experience that is

“Scary – 1”…

Page 12: Architecting Web and Mobile Solutions to Meet Modern Customer Expectations A Case Study @ Cigna Brian Mitchell, Ph.D. Enterprise Architecture @DrBrianMitchell

1 12

2010 2011 2012Q1 Q2 Q3 Q4

2009

Project Management Office

2013Q1 Q2 Q3 Q4Q1 Q2 Q3 Q4Q1 Q2 Q3 Q4Q3 Q4Q2

Plan

ning

Content Management

Document Management

Single Sign-On

Welcome to CIGNA & Portal Promotion

Constituent Unified View

Future State Platform Definition

Interactive Guidance

Multi-Lingual / Multi-Cultural Portals

Scenario Planning

3rd Party Data Integration

Mobile Assessment

Usability Design

Foun

datio

n

Test & LearnOnline Analytics Channel Metrics

Info

rmat

ion

Adva

ntag

e

Broker Portal

Communications & Alerts

Reporting

Interactive Demo

Feedback, Comments,&

Ratings

User Profile & Preferences

Self

-Ser

vice

Enric

hed

Expe

rienc

e

Social Networking & Forums

Delivery Planning

Program Management

& Governance

Constituent Segmentation & Strategy Refinement

Change Management & Communication Planning

Launch Quick Hits

Health FinancePlatform Strategy

3rd Party Content Delivery

Boulder Data Center Migration

Access Mgmt

Search – Phase 1 & 2 Search – Phase 3

Usability and Consolidation Usability & Consolidation Usability & Consolidation

Personalized search

Enriched Messaging

Provider Directory Improvements

Consolidate Great-West for Individual

Portal

Usability & Consolidation

Consolidate Voluntary, CBH for Individual Portal

Consolidate Great-West. Voluntary, CBH for HCP

Portal

Consolidate Great-West. Voluntary, CBH for

Employer Portal

Mobile Enablement

Access Mgmt

Access Mgmt

Access Mgmt

Access Mgmt

Quick Usability Enhancements

Constituent Transactions

Mobile Enablement

“OH NO…THAT IPHONE IS COOL

WE NEED TOACCELERATE MOBILE!”

Page 13: Architecting Web and Mobile Solutions to Meet Modern Customer Expectations A Case Study @ Cigna Brian Mitchell, Ph.D. Enterprise Architecture @DrBrianMitchell

1 13

Approaching 1,000,000 Downloads

Page 14: Architecting Web and Mobile Solutions to Meet Modern Customer Expectations A Case Study @ Cigna Brian Mitchell, Ph.D. Enterprise Architecture @DrBrianMitchell

1

Web Services

Customer

Mobile Endpoint (MSP Layer)

Web AssetsMobile Specific Assets EnterpriseServices

Platform Data

Online-SpecificRepositories

Legacy DataSources

Data GridCache

IntegrationFabric

EAIFramework

Service Framework

APIFramework

MessagingFramework

Mobile Network

Mobile APIs Mobile Enrichment Services(Push, Cache)

ProfileData

TargetingRules

ContentRepository

DigitalAssets

IdentityData

Mobile App

iOS ApplicationAndroid Application

14

Our High Level Mobile Architecture

Page 15: Architecting Web and Mobile Solutions to Meet Modern Customer Expectations A Case Study @ Cigna Brian Mitchell, Ph.D. Enterprise Architecture @DrBrianMitchell

1 15

We also have APIs for locatinga doctor, medical cost estimation, and pharmacy cost estimation

Publicly accessible at:http://developer.cigna.com

We also love our APIs

Page 16: Architecting Web and Mobile Solutions to Meet Modern Customer Expectations A Case Study @ Cigna Brian Mitchell, Ph.D. Enterprise Architecture @DrBrianMitchell

16

Creating our web, mobile and API platforms over time has created a few architecture reuse challenges that we are addressing

1

Shar

edW

eb &

Mob

ileAr

chite

ctur

eWeb & Mobile WebArchitecture

MobileArchitecture

API

Arch

itect

ure

Page 17: Architecting Web and Mobile Solutions to Meet Modern Customer Expectations A Case Study @ Cigna Brian Mitchell, Ph.D. Enterprise Architecture @DrBrianMitchell

171

Thank goodness, write-once, deploy-everywhere.

Is this the solution?

Page 18: Architecting Web and Mobile Solutions to Meet Modern Customer Expectations A Case Study @ Cigna Brian Mitchell, Ph.D. Enterprise Architecture @DrBrianMitchell

181

<HTML5/>

HTML5 is probably part of the solution, but its not

a silver bullet…

Figuring out the right balance whilepreserving a great user experience

0% < HTML5 < 100%

Page 19: Architecting Web and Mobile Solutions to Meet Modern Customer Expectations A Case Study @ Cigna Brian Mitchell, Ph.D. Enterprise Architecture @DrBrianMitchell

19

A more sensible mix probably looks more like this:

1

SharedWeb & MobileArchitecture

Web

&

Mob

ile W

ebAr

chite

ctur

e

Mobile

Architecture

API

Arch

itect

ure

Page 20: Architecting Web and Mobile Solutions to Meet Modern Customer Expectations A Case Study @ Cigna Brian Mitchell, Ph.D. Enterprise Architecture @DrBrianMitchell

1

Our Revisited Reference Architecture

APIs

Platform Services

CustomerHealthcare

ProfessionalClient

CignaEmployees Broker

Entitlement RecommendationTargeting

App Framework (Common Business Logic)

Personalization Services

Customization &Content

Notification & Eventing

Identity

Platform Data

Online-SpecificRepositories

Legacy DataSources

Data GridCache

IntegrationFabric

EAIFramework

Service Framework

APIFramework

MessagingFramework

ChannelsWeb Mobile Call B2BWeb Services

StaticContent

UX Framework Mobile Framework

Other Cigna APIs and Services

Other Cigna Apps

App Data

Security &Registration

SecurityMobile

EnrichmentSearchCaching DynamicContent

ProfileData

TargetingRules

ContentRepository

DigitalAssets

IdentityData

Network (Internet & Mobile)

Web & Responsive Web App Native / Hybrid Mobile Apps

Business Objects

API Gateway

3rd Party Apps

Business Objects Business Objects

EnterpriseData

Sources

Marts

Warehouse

ET

L t

o P

urp

ose

b

uilt

RD

S a

nd

W

eb O

DS

20

Page 21: Architecting Web and Mobile Solutions to Meet Modern Customer Expectations A Case Study @ Cigna Brian Mitchell, Ph.D. Enterprise Architecture @DrBrianMitchell

211

Looks like our Web Architect Picked Up Some New Skills

2007 2015

Page 22: Architecting Web and Mobile Solutions to Meet Modern Customer Expectations A Case Study @ Cigna Brian Mitchell, Ph.D. Enterprise Architecture @DrBrianMitchell

1

How are we doing this?Warning: Some Technical

Content Ahead

22

Page 23: Architecting Web and Mobile Solutions to Meet Modern Customer Expectations A Case Study @ Cigna Brian Mitchell, Ph.D. Enterprise Architecture @DrBrianMitchell

1 23

The nature of applications is changing, this is driving the refactoring of modern enterprise architectures

On the Front End: On the Back End:

New Application Architectures

3rd Party Integration Requirements

Refactoring our SOA Approach to…

…Move from Course Grained “Big” SOAP services to Composable RESTful Services

Mobile

Page 24: Architecting Web and Mobile Solutions to Meet Modern Customer Expectations A Case Study @ Cigna Brian Mitchell, Ph.D. Enterprise Architecture @DrBrianMitchell

1 24

Supporting diverse customer experience needs becomes a primary objective of our underlying solution architecture

Web & Mobile Web

Native & Hybrid

Customer-Initiated

Cigna-Initiated

“Apps” – Task Oriented

Cigna initiates outreach to customer. Goal is awareness, and to get the customer to “take action now”

We need the customer to complete a task – it has a beginning, a middle and an end.

Customer comes to Cigna to “do something”. Goal is to make it easy and fast for them to find what they want

Typ

e o

f E

xper

ien

ce

Exam

ples

Solutio

n Sta

ck

I need to

find a doctor!

What is th

is bill about?

I need a new ID

card!

Am I elig

ible for th

is?

You can save money

Take advantage of incentiv

e

Enroll in th

is program

Take the HRA

Order Rx Refill

s Online

Product Enrollm

ent

The goal is to have the customer experience drive the technical architecture, and not the other way around

Page 25: Architecting Web and Mobile Solutions to Meet Modern Customer Expectations A Case Study @ Cigna Brian Mitchell, Ph.D. Enterprise Architecture @DrBrianMitchell

1

At the same time Front-end Architecture Changes are Driving Back-End Architecture Changes

Moving from a traditional Web architecture…

Browser

Server

APIs Services

Server

View

Controller

Model

Browser

App Runs in Browser

App Rendered in Browser

To a modern “Client-Centric” architecture…

Services

25

Native

App Runs in Device

Page 26: Architecting Web and Mobile Solutions to Meet Modern Customer Expectations A Case Study @ Cigna Brian Mitchell, Ph.D. Enterprise Architecture @DrBrianMitchell

1 26

These new apps requirerethinking the integration

layer

Getting it correct isessential for success!

Page 27: Architecting Web and Mobile Solutions to Meet Modern Customer Expectations A Case Study @ Cigna Brian Mitchell, Ph.D. Enterprise Architecture @DrBrianMitchell

1 27

For us, that is here…

Page 28: Architecting Web and Mobile Solutions to Meet Modern Customer Expectations A Case Study @ Cigna Brian Mitchell, Ph.D. Enterprise Architecture @DrBrianMitchell

1 28

We also are interested in concepts inspired by the Reactive Community

http://www.reactivemanifesto.org/

the system responds timelywith consistent responsiveness

component boundaries traversedusing asynchronous messages

responsiveness maintainedunder varied workloads

responsiveness maintainedin the face of failure

Message Driven

Responsive

Elastic Resilient

Page 29: Architecting Web and Mobile Solutions to Meet Modern Customer Expectations A Case Study @ Cigna Brian Mitchell, Ph.D. Enterprise Architecture @DrBrianMitchell

1

Step 1 was to define an overall reference architecture that we could use to ground and educate the organization

object HTML5 and SOA Reference Architecture

HTML5 Enabled Browser or Embeded Viewer

External Internal

HTML5 App

Javascript Libraries

View (HTML,CSS,

Javascript)

Responsive Libraries / CSS (Bootstrap)

Client Side MVC Framework (e.g., Angular)

Module Config

Routes

Controller

Injectable Components

Services Provider Factory Value

Partials

Framework Services

Futures(Async)

SOA(REST)

Security LocalStorage

InboundAPI Gateway

Content Server(Cigna and/or

CDN)

ApplicationDeployment

Service Integrationand Composition

Layer

Cache

Information Layer

Enterprise Data

data

LightweightContainer (Spring

Integration, Camel,etc)

Robust Container(Fuse, ESB, WPS,

BRMS, etc)

Security

Policy

HTML5 App

External Partners

Partner 3

Partner 1

Partner 4

Others...Partner 2

Partner 5

API Layer

Name: HTML5 and SOA Reference ArchitectureAuthor: Brian MitchellVersion: 1.0Created: 3/7/2014 12:22:43 PMUpdated: 10/7/2014 10:52:15 AM

MSP

Mobile Cache

MobileEnrichment

Mobile Push

REST Front-EndServ ices

ContainerTBD(Node, Spray,Spring, etc)

Web ContentManagement

MessagingContainer (MQ,

WMB, AMQ, etc) -Pub/Sub, Async,

Eventing, etc.

ServiceImplementation

Layer

Application/DomainServices

Enterprise Services

data

ASG SpecificData

data

data

Local Data

data

data

Partner API Gateway

Security Policy

1

6

5

6

7

8

Mobile Device

Cigna Native App

Views

Mobile OS / Mobile OS Services

GPS Local StorageContact List

Security Native MVC Assets(non HTML5 Views)

Reusable FrameworkComponents

Overall Cigna App Storyboard (AppNavigation)

Responsive Web App

HTML5 App

Portal-Based Web App

Traditional Portlet

Static Content

HTML5 Enabled Portlet

HTML5 App

2 3

4

12

13

14Note that the green box titled "HTML5 App" to the right represents the detailed view in each of the green boxes in other deployment scenarios to highlight the nature of the hybrid solution driving reuse of common components.

Native ViewsWebView withHTML5 App

HTML5 App Container

Core SOA Component

Legend

Notification,Eventing, andWebSockets

CommonServices

Audit

Logging

1015

API Developer Portal

API Documentation,Registration, API Keys,

Runtime Governance, etc

9

11

16

RE

ST

ON

LY

OB

We

bS

ocke

ts &R

ea

ctive S

trea

ms

RE

ST

ON

LY

RE

ST

or

SO

AP

$sco

pe

OB Only

RE

ST

or S

OA

P

REST or SOAP

RE

ST

or S

OA

PA

sync E

ven

ts

IB / OB OB Only

OB

Eve

nts

29

Page 30: Architecting Web and Mobile Solutions to Meet Modern Customer Expectations A Case Study @ Cigna Brian Mitchell, Ph.D. Enterprise Architecture @DrBrianMitchell

1

This architecture promotes 5 key areas of focus

object HTML5 and SOA Reference Architecture

HTML5 Enabled Browser or Embeded Viewer

External Internal

HTML5 App

Javascript Libraries

View (HTML,CSS,

Javascript)

Responsive Libraries / CSS (Bootstrap)

Client Side MVC Framework (e.g., Angular)

Module Config

Routes

Controller

Injectable Components

Services Provider Factory Value

Partials

Framework Services

Futures(Async)

SOA(REST)

Security LocalStorage

InboundAPI Gateway

Content Server(Cigna and/or

CDN)

ApplicationDeployment

Service Integrationand Composition

Layer

Cache

Information Layer

Enterprise Data

data

LightweightContainer (Spring

Integration, Camel,etc)

Robust Container(Fuse, ESB, WPS,

BRMS, etc)

Security

Policy

HTML5 App

External Partners

Partner 3

Partner 1

Partner 4

Others...Partner 2

Partner 5

API Layer

Name: HTML5 and SOA Reference ArchitectureAuthor: Brian MitchellVersion: 1.0Created: 3/7/2014 12:22:43 PMUpdated: 10/7/2014 10:52:15 AM

MSP

Mobile Cache

MobileEnrichment

Mobile Push

REST Front-EndServ ices

ContainerTBD(Node, Spray,Spring, etc)

Web ContentManagement

MessagingContainer (MQ,

WMB, AMQ, etc) -Pub/Sub, Async,

Eventing, etc.

ServiceImplementation

Layer

Application/DomainServices

Enterprise Services

data

ASG SpecificData

data

data

Local Data

data

data

Partner API Gateway

Security Policy

1

6

5

6

7

8

Mobile Device

Cigna Native App

Views

Mobile OS / Mobile OS Services

GPS Local StorageContact List

Security Native MVC Assets(non HTML5 Views)

Reusable FrameworkComponents

Overall Cigna App Storyboard (AppNavigation)

Responsive Web App

HTML5 App

Portal-Based Web App

Traditional Portlet

Static Content

HTML5 Enabled Portlet

HTML5 App

2 3

4

12

13

14Note that the green box titled "HTML5 App" to the right represents the detailed view in each of the green boxes in other deployment scenarios to highlight the nature of the hybrid solution driving reuse of common components.

Native ViewsWebView withHTML5 App

HTML5 App Container

Core SOA Component

Legend

Notification,Eventing, andWebSockets

CommonServices

Audit

Logging

1015

API Developer Portal

API Documentation,Registration, API Keys,

Runtime Governance, etc

9

11

16

RE

ST

ON

LY

OB

We

bS

ocke

ts &R

ea

ctive S

trea

ms

RE

ST

ON

LY

RE

ST

or

SO

AP

$sco

pe

OB Only

RE

ST

or S

OA

P

REST or SOAP

RE

ST

or S

OA

PA

sync E

ven

ts

IB / OB OB Only

OB

Eve

nts

30

1Create

2Compose

3Enrich

4Manage

& Secure

5Consume

Page 31: Architecting Web and Mobile Solutions to Meet Modern Customer Expectations A Case Study @ Cigna Brian Mitchell, Ph.D. Enterprise Architecture @DrBrianMitchell

1

To get started we needed to clearly define how we wanted our new REST services to be designed

object HTML5 and SOA Reference Architecture

HTML5 Enabled Browser or Embeded Viewer

External Internal

HTML5 App

Javascript Libraries

View (HTML,CSS,

Javascript)

Responsive Libraries / CSS (Bootstrap)

Client Side MVC Framework (e.g., Angular)

Module Config

Routes

Controller

Injectable Components

Services Provider Factory Value

Partials

Framework Services

Futures(Async)

SOA(REST)

Security LocalStorage

InboundAPI Gateway

Content Server(Cigna and/or

CDN)

ApplicationDeployment

Service Integrationand Composition

Layer

Cache

Information Layer

Enterprise Data

data

LightweightContainer (Spring

Integration, Camel,etc)

Robust Container(Fuse, ESB, WPS,

BRMS, etc)

Security

Policy

HTML5 App

External Partners

Partner 3

Partner 1

Partner 4

Others...Partner 2

Partner 5

API Layer

Name: HTML5 and SOA Reference ArchitectureAuthor: Brian MitchellVersion: 1.0Created: 3/7/2014 12:22:43 PMUpdated: 10/7/2014 10:52:15 AM

MSP

Mobile Cache

MobileEnrichment

Mobile Push

REST Front-EndServ ices

ContainerTBD(Node, Spray,Spring, etc)

Web ContentManagement

MessagingContainer (MQ,

WMB, AMQ, etc) -Pub/Sub, Async,

Eventing, etc.

ServiceImplementation

Layer

Application/DomainServices

Enterprise Services

data

ASG SpecificData

data

data

Local Data

data

data

Partner API Gateway

Security Policy

1

6

5

6

7

8

Mobile Device

Cigna Native App

Views

Mobile OS / Mobile OS Services

GPS Local StorageContact List

Security Native MVC Assets(non HTML5 Views)

Reusable FrameworkComponents

Overall Cigna App Storyboard (AppNavigation)

Responsive Web App

HTML5 App

Portal-Based Web App

Traditional Portlet

Static Content

HTML5 Enabled Portlet

HTML5 App

2 3

4

12

13

14Note that the green box titled "HTML5 App" to the right represents the detailed view in each of the green boxes in other deployment scenarios to highlight the nature of the hybrid solution driving reuse of common components.

Native ViewsWebView withHTML5 App

HTML5 App Container

Core SOA Component

Legend

Notification,Eventing, andWebSockets

CommonServices

Audit

Logging

1015

API Developer Portal

API Documentation,Registration, API Keys,

Runtime Governance, etc

9

11

16

RE

ST

ON

LY

OB

We

bS

ocke

ts &R

ea

ctive S

trea

ms

RE

ST

ON

LY

RE

ST

or

SO

AP

$sco

pe

OB Only

RE

ST

or S

OA

P

REST or SOAP

RE

ST

or S

OA

PA

sync E

ven

ts

IB / OB OB Only

OB

Eve

nts

31

1Create

Page 32: Architecting Web and Mobile Solutions to Meet Modern Customer Expectations A Case Study @ Cigna Brian Mitchell, Ph.D. Enterprise Architecture @DrBrianMitchell

1 32

We like others have found SOAP abstractions make reuse difficult.

w/SOAP “Extension is via Addition”

Does this belong here?

Page 33: Architecting Web and Mobile Solutions to Meet Modern Customer Expectations A Case Study @ Cigna Brian Mitchell, Ph.D. Enterprise Architecture @DrBrianMitchell

1 33

REST = Reuse via CompositionBuild higher level abstractions from

granular reusable parts

Page 34: Architecting Web and Mobile Solutions to Meet Modern Customer Expectations A Case Study @ Cigna Brian Mitchell, Ph.D. Enterprise Architecture @DrBrianMitchell

1 34

As typically happens – early adopters who dabbled in REST created services at Level 0 of

the Richardson Maturity Model

Guidance was required to educate our development community on creating services at Level 2 and Level 3

Page 35: Architecting Web and Mobile Solutions to Meet Modern Customer Expectations A Case Study @ Cigna Brian Mitchell, Ph.D. Enterprise Architecture @DrBrianMitchell

1 35

Our focus is on “Pragmatic” REST

Page 36: Architecting Web and Mobile Solutions to Meet Modern Customer Expectations A Case Study @ Cigna Brian Mitchell, Ph.D. Enterprise Architecture @DrBrianMitchell

1

Using Composition == Speedup Required

ClientApplication

Server

Contract-OrientedSOAP Services

ClientApplication

Server

Resource-OrientedREST Services

FROM TO

Performance Increase Target

[Note that we currently execute about 4.5 billion web service calls per year]

GOAL

36

Our new REST services run in 10-100msOur Traditional SOAP Services run about 500ms-3 seconds

Page 37: Architecting Web and Mobile Solutions to Meet Modern Customer Expectations A Case Study @ Cigna Brian Mitchell, Ph.D. Enterprise Architecture @DrBrianMitchell

1

Education Required: “REST in a Box” Workshop

37

Page 38: Architecting Web and Mobile Solutions to Meet Modern Customer Expectations A Case Study @ Cigna Brian Mitchell, Ph.D. Enterprise Architecture @DrBrianMitchell

1 38

class BoundedContext Example

Product Resource

«ContentBasedRouter»ProductResourceRouter

+ ResourceFactory(): Resource

«abstract»Product

«RestService»SupportProduct

«RestService»MarketingProduct

«RestService»AccountingProduct

«RestService»BillingProduct

«instantiate»

Eric Evans

Martin Fowler

We took concepts of Bounded Context from DDD and applied them to REST

Inspiration from Thought Leaders: Business Context + REST

Page 39: Architecting Web and Mobile Solutions to Meet Modern Customer Expectations A Case Study @ Cigna Brian Mitchell, Ph.D. Enterprise Architecture @DrBrianMitchell

1 39

object HTML5 and SOA Reference Architecture

HTML5 Enabled Browser or Embeded Viewer

External Internal

HTML5 App

Javascript Libraries

View (HTML,CSS,

Javascript)

Responsive Libraries / CSS (Bootstrap)

Client Side MVC Framework (e.g., Angular)

Module Config

Routes

Controller

Injectable Components

Services Provider Factory Value

Partials

Framework Services

Futures(Async)

SOA(REST)

Security LocalStorage

InboundAPI Gateway

Content Server(Cigna and/or

CDN)

ApplicationDeployment

Service Integrationand Composition

Layer

Cache

Information Layer

Enterprise Data

data

LightweightContainer (Spring

Integration, Camel,etc)

Robust Container(Fuse, ESB, WPS,

BRMS, etc)

Security

Policy

HTML5 App

External Partners

Partner 3

Partner 1

Partner 4

Others...Partner 2

Partner 5

API Layer

Name: HTML5 and SOA Reference ArchitectureAuthor: Brian MitchellVersion: 1.0Created: 3/7/2014 12:22:43 PMUpdated: 10/7/2014 10:52:15 AM

MSP

Mobile Cache

MobileEnrichment

Mobile Push

REST Front-EndServ ices

ContainerTBD(Node, Spray,Spring, etc)

Web ContentManagement

MessagingContainer (MQ,

WMB, AMQ, etc) -Pub/Sub, Async,

Eventing, etc.

ServiceImplementation

Layer

Application/DomainServices

Enterprise Services

data

ASG SpecificData

data

data

Local Data

data

data

Partner API Gateway

Security Policy

1

6

5

6

7

8

Mobile Device

Cigna Native App

Views

Mobile OS / Mobile OS Services

GPS Local StorageContact List

Security Native MVC Assets(non HTML5 Views)

Reusable FrameworkComponents

Overall Cigna App Storyboard (AppNavigation)

Responsive Web App

HTML5 App

Portal-Based Web App

Traditional Portlet

Static Content

HTML5 Enabled Portlet

HTML5 App

2 3

4

12

13

14Note that the green box titled "HTML5 App" to the right represents the detailed view in each of the green boxes in other deployment scenarios to highlight the nature of the hybrid solution driving reuse of common components.

Native ViewsWebView withHTML5 App

HTML5 App Container

Core SOA Component

Legend

Notification,Eventing, andWebSockets

CommonServices

Audit

Logging

10

15

API Developer Portal

API Documentation,Registration, API Keys,

Runtime Governance, etc

9

11

16

RE

ST

ON

LY

OB

We

bS

ocke

ts &R

ea

ctive S

trea

ms

RE

ST

ON

LY

RE

ST

or

SO

AP

$sco

pe

OB Only

RE

ST

or S

OA

P

REST or SOAP

RE

ST

or S

OA

PA

sync E

ven

ts

IB / OB OB Only

OB

Eve

nts

Use established EAI Frameworks? Use Functional Reactive Methods? Use Both?

Options….

2Compose

The “Composition” Layer

Page 40: Architecting Web and Mobile Solutions to Meet Modern Customer Expectations A Case Study @ Cigna Brian Mitchell, Ph.D. Enterprise Architecture @DrBrianMitchell

1 40

Composition is required because we don’t want to…

ClientApplication Server

SOAP Request

SOAP Response

• SOAP Semantics are too abstract• Extension via contract addition• Large message sizes• Over time services become harder to

call and there is a need to filter out response data based on what is needed

ClientApplication Server

RESTCalls

• REST Services are more granular• Promote composition over reuse• Problematic if the client is

responsible for all of the composition• Need a solution to create higher-

level abstractions from granular REST Services

Replace the problems associated with this (Course-Grained Services)…

With new problems associated with this (Granular Services)…

Page 41: Architecting Web and Mobile Solutions to Meet Modern Customer Expectations A Case Study @ Cigna Brian Mitchell, Ph.D. Enterprise Architecture @DrBrianMitchell

1

SPLIT AGGREGATE

/customers/123?...

/orders/123?...

/bills/123?...

FLOW: CustomerSummary

EAI Server on JVM

DEPLOY

At Cigna we currently are using both Spring Integration, Apache Camel and RxJavain production

41

Example Composition – Getting a customer summary: GET https://api.cigna.com/v1/customers/123/summary

Reactive Streams

Page 42: Architecting Web and Mobile Solutions to Meet Modern Customer Expectations A Case Study @ Cigna Brian Mitchell, Ph.D. Enterprise Architecture @DrBrianMitchell

1

The API layer focuses on convenience, enrichment, and security for our modern apps

object HTML5 and SOA Reference Architecture

HTML5 Enabled Browser or Embeded Viewer

External Internal

HTML5 App

Javascript Libraries

View (HTML,CSS,

Javascript)

Responsive Libraries / CSS (Bootstrap)

Client Side MVC Framework (e.g., Angular)

Module Config

Routes

Controller

Injectable Components

Services Provider Factory Value

Partials

Framework Services

Futures(Async)

SOA(REST)

Security LocalStorage

InboundAPI Gateway

Content Server(Cigna and/or

CDN)

ApplicationDeployment

Service Integrationand Composition

Layer

Cache

Information Layer

Enterprise Data

data

LightweightContainer (Spring

Integration, Camel,etc)

Robust Container(Fuse, ESB, WPS,

BRMS, etc)

Security

Policy

HTML5 App

External Partners

Partner 3

Partner 1

Partner 4

Others...Partner 2

Partner 5

API Layer

Name: HTML5 and SOA Reference ArchitectureAuthor: Brian MitchellVersion: 1.0Created: 3/7/2014 12:22:43 PMUpdated: 10/7/2014 10:52:15 AM

MSP

Mobile Cache

MobileEnrichment

Mobile Push

REST Front-EndServ ices

ContainerTBD(Node, Spray,Spring, etc)

Web ContentManagement

MessagingContainer (MQ,

WMB, AMQ, etc) -Pub/Sub, Async,

Eventing, etc.

ServiceImplementation

Layer

Application/DomainServices

Enterprise Services

data

ASG SpecificData

data

data

Local Data

data

data

Partner API Gateway

Security Policy

1

6

5

6

7

8

Mobile Device

Cigna Native App

Views

Mobile OS / Mobile OS Services

GPS Local StorageContact List

Security Native MVC Assets(non HTML5 Views)

Reusable FrameworkComponents

Overall Cigna App Storyboard (AppNavigation)

Responsive Web App

HTML5 App

Portal-Based Web App

Traditional Portlet

Static Content

HTML5 Enabled Portlet

HTML5 App

2 3

4

12

13

14Note that the green box titled "HTML5 App" to the right represents the detailed view in each of the green boxes in other deployment scenarios to highlight the nature of the hybrid solution driving reuse of common components.

Native ViewsWebView withHTML5 App

HTML5 App Container

Core SOA Component

Legend

Notification,Eventing, andWebSockets

CommonServices

Audit

Logging

1015

API Developer Portal

API Documentation,Registration, API Keys,

Runtime Governance, etc

9

11

16

RE

ST

ON

LY

OB

We

bS

ocke

ts &R

ea

ctive S

trea

ms

RE

ST

ON

LY

RE

ST

or

SO

AP

$sco

pe

OB Only

RE

ST

or S

OA

P

REST or SOAP

RE

ST

or S

OA

PA

sync E

ven

ts

IB / OB OB Only

OB

Eve

nts

42

3Enrich

4Manage

& Secure

Page 43: Architecting Web and Mobile Solutions to Meet Modern Customer Expectations A Case Study @ Cigna Brian Mitchell, Ph.D. Enterprise Architecture @DrBrianMitchell

1 43

Although we are still in the Synchronous-One quadrant, we wanted to position the architecture

for other reactive patterns

One Many

Synchronous Try[T] Iterable[T]

Asynchronous Future[T] Observable[T]

Newer SOA patterns embrace asynchronous processing based on event handling andmessaging. They don’t use store-and-forward queues.

Page 44: Architecting Web and Mobile Solutions to Meet Modern Customer Expectations A Case Study @ Cigna Brian Mitchell, Ph.D. Enterprise Architecture @DrBrianMitchell

1 44

Asynchronous platforms will be critical for keeping up with the Moore’s law curve, we wanted a platform that moves us away from request/response (a.k.a. Servlet Container)

Around 2005 we started to see clock speed and performance of CPUs level off. Performance is now increased by having multiple-cores on a chip, but this causescomplexity that our software needs to deal with…

More Cores = Harder Software

Page 45: Architecting Web and Mobile Solutions to Meet Modern Customer Expectations A Case Study @ Cigna Brian Mitchell, Ph.D. Enterprise Architecture @DrBrianMitchell

1 45

Amdahl’s law also comes into play when trying to determine the maximum speedup that can be achieved

This means to scale we also need to avoid parts of a system that need to be coordinatedacross an async boundary (e.g., shared mutable state)

Page 46: Architecting Web and Mobile Solutions to Meet Modern Customer Expectations A Case Study @ Cigna Brian Mitchell, Ph.D. Enterprise Architecture @DrBrianMitchell

1 46

To enable asynchronous capabilities we wanted to ensure that our API

platform was not layered on a container based on a

pipe-and-filter architecture

Htt

pReq

uest

Htt

pRes

pons

e

Page 47: Architecting Web and Mobile Solutions to Meet Modern Customer Expectations A Case Study @ Cigna Brian Mitchell, Ph.D. Enterprise Architecture @DrBrianMitchell

1 47

Newer asynchronous platforms are inspired by both old and new software

engineering research

ReactorPattern (1995,1999)

ProactorPattern (1997)

LMAX DisruptorPattern (2011)

http://www.cs.wustl.edu/~schmidt/PDF/reactor-siemens.pdf http://www.cs.wustl.edu/~schmidt/PDF/proactor.pdf http://lmax-exchange.github.io/disruptor/files/Disruptor-1.0.pdf

Page 48: Architecting Web and Mobile Solutions to Meet Modern Customer Expectations A Case Study @ Cigna Brian Mitchell, Ph.D. Enterprise Architecture @DrBrianMitchell

1 48

We are still determining the platform(s) for our API layer buthave been using the following…

Page 49: Architecting Web and Mobile Solutions to Meet Modern Customer Expectations A Case Study @ Cigna Brian Mitchell, Ph.D. Enterprise Architecture @DrBrianMitchell

1

We just got started… but Functional Reactive Libraries Take Us to the Next Level

http://reactivex.io/documentation/observable.html

Functional ReactiveLambdasClosures

Pure FunctionsComposable

AsynchronousValuesEventsPush

49

Page 50: Architecting Web and Mobile Solutions to Meet Modern Customer Expectations A Case Study @ Cigna Brian Mitchell, Ph.D. Enterprise Architecture @DrBrianMitchell

1

Warning… I'm a Scala Geek…

50

and the only real way to see the power of functional reactive techniques is to look at code

Page 51: Architecting Web and Mobile Solutions to Meet Modern Customer Expectations A Case Study @ Cigna Brian Mitchell, Ph.D. Enterprise Architecture @DrBrianMitchell

1 51

Example: Getting a Customer Summary using Service Composition with Functional Reactive Techniquesdef customerSummary(custId: Long) :Observable[Map[String,Any]] = { customerService.getCustomer(custId).flatmap( cust => { val orders: Observable[Map[String,List[Order]]] = orderService.

getOrders(cust.account_id).take(10) map (olist => Map( “orders” -> olist)) val bills: Observable[Map[ String,List[Bill]]] = billService.

getBills(cust.account_id).take(12) map (blist => Map( “bills” -> blist)) val theCust = Observable. just(Map(“customer” -> cust)) theCust ++ orders ++ bills } }}

//Run Itdef custSummaryService(name: String) = customerSumary( lookupCustId(name) ).

toBlocking.toList.reduce( _ ++ _)

Note to better show the concept RESTFul services are wrapped in helper functionsGET /v1/customers/{name}/summary custSummaryService(name)

Page 52: Architecting Web and Mobile Solutions to Meet Modern Customer Expectations A Case Study @ Cigna Brian Mitchell, Ph.D. Enterprise Architecture @DrBrianMitchell

1 52

def customerSummary(custId: Long) :Observable[Map[String,Any]] = { customerService.getCustomer(custId).flatmap( cust => { val orders: Observable[Map[String,List[Order]]] = orderService.

getOrders(cust.account_id).take(10) map (olist => Map( “orders” -> olist)) val bills: Observable[Map[ String,List[Bill]]] = billService.

getBills(cust.account_id).take(12) map (blist => Map( “bills” -> blist)) val theCust = Observable. just(Map(“customer” -> cust)) theCust ++ orders ++ bills } }}

//Run Itdef custSummaryService(name: String) = customerSumary( lookupCustId(name) ).

toBlocking.toList.reduce( _ ++ _)

Example: Getting a Customer Summary using Service Composition with Functional Reactive Techniques

Note to better show the concept RESTFul services are wrapped in helper functionsGET /v1/customers/{name}/summary custSummaryService(name)

STEP 1: Setup a Web Service REST Binding to map to a function

Page 53: Architecting Web and Mobile Solutions to Meet Modern Customer Expectations A Case Study @ Cigna Brian Mitchell, Ph.D. Enterprise Architecture @DrBrianMitchell

1 53

def customerSummary(custId: Long) :Observable[Map[String,Any]] = { customerService.getCustomer(custId).flatmap( cust => { val orders: Observable[Map[String,List[Order]]] = orderService.

getOrders(cust.account_id).take(10) map (olist => Map( “orders” -> olist)) val bills: Observable[Map[ String,List[Bill]]] = billService.

getBills(cust.account_id).take(12) map (blist => Map( “bills” -> blist)) val theCust = Observable. just(Map(“customer” -> customer)) theCust ++ orders ++ bills } }}

//Run Itdef custSummaryService(name: String) = customerSumary( lookupCustId(name) ).

toBlocking.toList.reduce( _ ++ _)

Example: Getting a Customer Summary using Service Composition with Functional Reactive Techniques

Note to better show the concept RESTFul services are wrapped in helper functionsGET /v1/customers/{name}/summary custSummaryService(name)

STEP 2: Stage a call to the Customer Web Service

How does it work?Note that the getCustomer() function MUST return an Observable, the actual type is an Observable of a Customer object or Observable[Customer] – nothing happened yet

Page 54: Architecting Web and Mobile Solutions to Meet Modern Customer Expectations A Case Study @ Cigna Brian Mitchell, Ph.D. Enterprise Architecture @DrBrianMitchell

1 54

def customerSummary(custId: Long) :Observable[Map[String,Any]] = { customerService.getCustomer(custId).flatmap( cust => { val orders: Observable[Map[String,List[Order]]] = orderService.

getOrders(cust.account_id).take(10) map (olist => Map( “orders” -> olist)) val bills: Observable[Map[ String,List[Bill]]] = billService.

getBills(cust.account_id).take(12) map (blist => Map( “bills” -> blist)) val theCust = Observable. just(Map(“customer” -> cust)) theCust ++ orders ++ bills } }}

//Run Itdef custSummaryService(name: String) = customerSumary( lookupCustId(name) ).

toBlocking.toList.reduce( _ ++ _)

Example: Getting a Customer Summary using Service Composition with Functional Reactive Techniques

Note to better show the concept RESTFul services are wrapped in helper functionsGET /v1/customers/{name}/summary custSummaryService(name)

STEP 3: Use the “flatmap” operator to indicate that you are going to combine some things asynchronously, but need something to happen first. Specifically data for the last

10 orders, billing information for the past 12 bills, and customer profile data are to be obtained but the account number from the getCustomer service is a pre-requisite.

NOTE: (1), (2) and (3) ALL EXECUTE CONCURRENTLY – why?THEY RETURN OBSERVABLES!

1

2

3

Page 55: Architecting Web and Mobile Solutions to Meet Modern Customer Expectations A Case Study @ Cigna Brian Mitchell, Ph.D. Enterprise Architecture @DrBrianMitchell

1 55

Example: Getting a Customer Summary using Service Composition with Functional Reactive Techniquesdef customerSummary(custId: Long) :Observable[Map[String,Any]] = { customerService.getCustomer(custId).flatmap( cust => { val orders: Observable[Map[String,List[Order]]] = orderService.

getOrders(cust.account_id).take(10) map (olist => Map( “orders” -> olist)) val bills: Observable[Map[ String,List[Bill]]] = billService.

getBills(cust.account_id).take(12) map (blist => Map( “bills” -> blist)) val theCust = Observable. just(Map(“customer” -> cust)) theCust ++ orders ++ bills } }}

//Run Itdef custSummaryService(name: String) = customerSumary( lookupCustId(name) ).

toBlocking.toList.reduce( _ ++ _)

Note to better show the concept RESTFul services are wrapped in helper functionsGET /v1/customers/{name}/summary custSummaryService(name)

STEP 4: At this point we have 3 separate Map objects, we want to combine them to create an Observable of these three Map objects. This operation has the type of

Observable[Map[String,Any]] , which aligns to the return type of the function.

NOTE: In Scala, the last executable statement in a scope is returned, the return keyword is not required

Page 56: Architecting Web and Mobile Solutions to Meet Modern Customer Expectations A Case Study @ Cigna Brian Mitchell, Ph.D. Enterprise Architecture @DrBrianMitchell

1 56

Example: Getting a Customer Summary using Service Composition with Functional Reactive Techniquesdef customerSummary(custId: Long) :Observable[Map[String,Any]] = { customerService.getCustomer(custId).flatmap( cust => { val orders: Observable[Map[String,List[Order]]] = orderService.

getOrders(cust.account_id).take(10) map (olist => Map( “orders” -> olist)) val bills: Observable[Map[ String,List[Bill]]] = billService.

getBills(cust.account_id).take(12) map (blist => Map( “bills” -> blist)) val theCust = Observable. just(Map(“customer” -> cust)) theCust ++ orders ++ bills } }}

//Run Itdef custSummaryService(name: String) = customerSumary( lookupCustId(name) ).

toBlocking.toList.reduce( _ ++ _)

Note to better show the concept RESTFul services are wrapped in helper functionsGET /v1/customers/{name}/summary custSummaryService(name)

STEP 5: The cusomerSummary function is called but it returns an Observable. Nothing has happened yet! To extract the data we need to do a few functional transformations:

Examples: val custData = customerSummary(lookupCustId("Mitchell"))custData(“customer”).phoneNumbercustData(“bills”)(0).outstandingBalancecustData(“orders”)(0).orderDate

1. toBlocking: This function waits for the customerSummary service to execute2. toList: Since the customerSummary service will return a stream of Map

objects, this will create a List( OrderMap, BillMap, CustMap) object3. reduce: This last operation will take a list of 3 Maps , each with a single

key/value, and combine them into a single Map with three key/values.

Page 57: Architecting Web and Mobile Solutions to Meet Modern Customer Expectations A Case Study @ Cigna Brian Mitchell, Ph.D. Enterprise Architecture @DrBrianMitchell

1 57

Example: Getting a Customer Summary using Service Composition with Functional Reactive Techniquesdef customerSummary(custId: Long) :Observable[Map[String,Any]] = { customerService.getCustomer(custId).flatmap( cust => { val orders: Observable[Map[String,List[Order]]] = orderService.

getOrders(cust.account_id).take(10) map (olist => Map( “orders” -> olist)) val bills: Observable[Map[ String,List[Bill]]] = billService.

getBills(cust.account_id).take(12) map (blist => Map( “bills” -> blist)) val theCust = Observable. just(Map(“customer” -> cust)) theCust ++ orders ++ bills } }}

//Run Itdef custSummaryService(name: String) = customerSumary( lookupCustId(name) ).

subscribe( theObj => send(theObj))

Note to better show the concept RESTFul services are wrapped in helper functionsGET /v1/customers/{name}/summary custSummaryService(name)

STEP 5a: We can also do this fully asynchronously by calling subscribe() and then sending the individual Map's as they get resolved using Observables

Page 58: Architecting Web and Mobile Solutions to Meet Modern Customer Expectations A Case Study @ Cigna Brian Mitchell, Ph.D. Enterprise Architecture @DrBrianMitchell

1

Now how do we consume these APIs from a modern client?

object HTML5 and SOA Reference Architecture

HTML5 Enabled Browser or Embeded Viewer

External Internal

HTML5 App

Javascript Libraries

View (HTML,CSS,

Javascript)

Responsive Libraries / CSS (Bootstrap)

Client Side MVC Framework (e.g., Angular)

Module Config

Routes

Controller

Injectable Components

Services Provider Factory Value

Partials

Framework Services

Futures(Async)

SOA(REST)

Security LocalStorage

InboundAPI Gateway

Content Server(Cigna and/or

CDN)

ApplicationDeployment

Service Integrationand Composition

Layer

Cache

Information Layer

Enterprise Data

data

LightweightContainer (Spring

Integration, Camel,etc)

Robust Container(Fuse, ESB, WPS,

BRMS, etc)

Security

Policy

HTML5 App

External Partners

Partner 3

Partner 1

Partner 4

Others...Partner 2

Partner 5

API Layer

Name: HTML5 and SOA Reference ArchitectureAuthor: Brian MitchellVersion: 1.0Created: 3/7/2014 12:22:43 PMUpdated: 10/7/2014 10:52:15 AM

MSP

Mobile Cache

MobileEnrichment

Mobile Push

REST Front-EndServ ices

ContainerTBD(Node, Spray,Spring, etc)

Web ContentManagement

MessagingContainer (MQ,

WMB, AMQ, etc) -Pub/Sub, Async,

Eventing, etc.

ServiceImplementation

Layer

Application/DomainServices

Enterprise Services

data

ASG SpecificData

data

data

Local Data

data

data

Partner API Gateway

Security Policy

1

6

5

6

7

8

Mobile Device

Cigna Native App

Views

Mobile OS / Mobile OS Services

GPS Local StorageContact List

Security Native MVC Assets(non HTML5 Views)

Reusable FrameworkComponents

Overall Cigna App Storyboard (AppNavigation)

Responsive Web App

HTML5 App

Portal-Based Web App

Traditional Portlet

Static Content

HTML5 Enabled Portlet

HTML5 App

2 3

4

12

13

14Note that the green box titled "HTML5 App" to the right represents the detailed view in each of the green boxes in other deployment scenarios to highlight the nature of the hybrid solution driving reuse of common components.

Native ViewsWebView withHTML5 App

HTML5 App Container

Core SOA Component

Legend

Notification,Eventing, andWebSockets

CommonServices

Audit

Logging

1015

API Developer Portal

API Documentation,Registration, API Keys,

Runtime Governance, etc

9

11

16

RE

ST

ON

LY

OB

We

bS

ocke

ts &R

ea

ctive S

trea

ms

RE

ST

ON

LY

RE

ST

or

SO

AP

$sco

pe

OB Only

RE

ST

or S

OA

P

REST or SOAP

RE

ST

or S

OA

PA

sync E

ven

ts

IB / OB OB Only

OB

Eve

nts

58

5Consume

Page 59: Architecting Web and Mobile Solutions to Meet Modern Customer Expectations A Case Study @ Cigna Brian Mitchell, Ph.D. Enterprise Architecture @DrBrianMitchell

1

Example: From an internal code-a-thon – Consuming services from a client asynchronously

59

1. Authenticate2. Get User Information3. Query Surveys4. Pick a Survey5. Take the Survey6. Update the Survey7. Complete Survey8. Get Confirmation

Code9. Ensure that

everything worked or handle failure condition

12

3456

7

8

9

This solution is declarative versus imperative, while being fully non-blocking and immutable.

Page 60: Architecting Web and Mobile Solutions to Meet Modern Customer Expectations A Case Study @ Cigna Brian Mitchell, Ph.D. Enterprise Architecture @DrBrianMitchell

1

From a modern client perspective this architecture works very well on platforms that are optimized to integrate over REST

60

Browser

Server

APIs ServicesApp Runs in Browser

Native

App Runs in Device

Gat

eway

REST Services Secured by oAuth and OpenID Connect

Page 61: Architecting Web and Mobile Solutions to Meet Modern Customer Expectations A Case Study @ Cigna Brian Mitchell, Ph.D. Enterprise Architecture @DrBrianMitchell

1

Supporting modern clients, especially SPAs, requires looking at the end-to-end lifecycle

61

Vendor Tool

Vendor Tool

Vendor Tool

Vendor Tool

Note that the client side development lifecycle heavily uses open source tooling. Due to Cigna policies I have redacted places where we are using commercial tools

Vendor Tool

Vendor Tool

Page 62: Architecting Web and Mobile Solutions to Meet Modern Customer Expectations A Case Study @ Cigna Brian Mitchell, Ph.D. Enterprise Architecture @DrBrianMitchell

1 62

Wrapping Up! We have been working on many efforts to modernize our web and mobile solutions to scale using modern architecture approaches described in this talk.

+ +

PolyglotDevelopment

PolyglotPersistence

Reactive:Async, Eventing &

Notification

DevOps &MicroServices

NextGen Web &Mobile Architecture

Improving theCustomer Experience

SOA RefreshProject

SOA Strategy

+=

Page 63: Architecting Web and Mobile Solutions to Meet Modern Customer Expectations A Case Study @ Cigna Brian Mitchell, Ph.D. Enterprise Architecture @DrBrianMitchell

1 63

Example: Cigna Compass

Page 64: Architecting Web and Mobile Solutions to Meet Modern Customer Expectations A Case Study @ Cigna Brian Mitchell, Ph.D. Enterprise Architecture @DrBrianMitchell

1 64

Example: Health Risk Assessment App

Page 65: Architecting Web and Mobile Solutions to Meet Modern Customer Expectations A Case Study @ Cigna Brian Mitchell, Ph.D. Enterprise Architecture @DrBrianMitchell

1 65

Example: Healthcare Professional Directory Tool

Page 66: Architecting Web and Mobile Solutions to Meet Modern Customer Expectations A Case Study @ Cigna Brian Mitchell, Ph.D. Enterprise Architecture @DrBrianMitchell

1 66

Example: Cost & Quality

Jeffrey, Elsa, MD

Page 67: Architecting Web and Mobile Solutions to Meet Modern Customer Expectations A Case Study @ Cigna Brian Mitchell, Ph.D. Enterprise Architecture @DrBrianMitchell

1 67

Lessons Learned(mainly organizational challenges – debunking myths – managing change)

• Time to get everybody aligned with the fact that SOA 1.0 is over (ESB as the center of the universe is so 2005)

• Can't we just add another layer?• Challenges with breaking free of the

verb-centric SOAP mindset (POX != REST)• Dogmatic RESTafrianism• Polyglot – I need to learn a new

language?• Why can’t we stuff data into that RDMS

(Not considering "best-fit persistence" )• Can't we at least keep the XML?• Async Really? We are not google• Threads, Immutability, Non-Blocking –

doesn't the container do that?

Page 68: Architecting Web and Mobile Solutions to Meet Modern Customer Expectations A Case Study @ Cigna Brian Mitchell, Ph.D. Enterprise Architecture @DrBrianMitchell

68

Again, thanks to #CignaThoughtLeaders

1

Global Solutions GroupClinical ITRTDE

E AEnterprise Architecture

Questions?