SlideShare ist ein Scribd-Unternehmen logo
1 von 33
API-driven Legacy Migration: Results
from Project Winterfell
Keith R. McFarlane (@krmc)
What do we mean by “Legacy?”
• “Mature information systems grow old disgracefully…”1
• Software architectures (planned or “accidental”) are
conceived to address a particular need at a moment in time
– May or may not be built to anticipate new features
– Probably will not accommodate changes in business focus

• Legacy software has reached a point in its lifecycle at
which change becomes difficult

– Cannot meet new business needs in a timely manner
– Maintenance tasks become more costly and more difficult to staff

1Legacy

System Anti-Patterns and a Pattern-Oriented Migration Response by Anthony
Lauder and Stuart Kent
Don’t forget the good parts
• A legacy platform exists because it addresses needs
– If it has existed for a long time, it probably has served its function
very well
– Customers are not likely to allow a shut-down of current systems
to move to something new with fewer features

• Implications:
– Legacy migration must be staged
– We must find ways to preserve the “good parts” while addressing
current limitations
Legacy Anti-patterns and Counter-patterns
Anti-pattern

Counter-pattern

Ball and Chain

Portability Adapter (JVM, .net)

Tower of Babel

Babel Fish (PB, Thrift, etc.)

Monolith
Buried Treasure

Virtual Componentization (Façade)
Gold Mining

Tight Coupling

Implicit Invocation (SOA/EDA)

Code Pollution

Protocol Reflection (State Pattern)
Anti-pattern: “Ball and Chain”
• Summary: Software is “chained” to legacy operating
systems through use of OS-specific features
–
–
–
–

Unix: System V (vs. Posix) Message Queues
Windows: Hooks
OS X: Cocoa APIs
All: Shell calls to invoke command-line processes

• Portability is limited by original system’s scope
– Easiest: CentOS 4  CentOS 5
– Harder: CentOS 5  OS X
– Hardest: CentOS 5  Windows Server 2008
Counter-pattern: Portability Adapter
• Create or select a single portability layer technology
– JVM, .NET Common Language Runtime, Posix, LLVM
– Purpose-built Portability Layer using OSGi

• Create a service representative of OS-specific features for
consumption by new applications and services
– Allow existing apps and services to continue native feature use
– New apps and services must use features as represented in
portability layer

• Pattern application results in sweeping system changes
long-term, but leaves existing code intact for immediate
future
Anti-pattern: Tower of Babel
• Summary: System components were developed in a
variety of programming languages

– Resource constraints; must use skills available
– Attempt to attract new talent with new language adoption
– “Polyglot” language philosophy; language diversity for its own sake

• Over time, organization cannot maintain code in a large
number of languages

– Original developers may have moved on (new project, new
company, etc.)
– Special-purpose implementations in exotic or less-popular
languages (e.g., OCaml) become marginalized
– Common language runtime mitigates the problem to some extent,
but does not solve it

• Interoperation between languages and runtimes is difficult,
preventing rapid innovation
Counter-pattern: Babel Fish
• Select and integrate a language interoperability technology
that creates a bridge between multiple languages and
runtimes
– Cross-language libraries: Thrift, Avro, Pbuf
• Revisiting the “CORBA” theme
• Prone to point-to-point IDL definitions

– SOA: Wrap all services with SOAP and present WSDLs
• Maintain internal services registry

– EDA: present all modules with access to a common event bus
• Asynchronous event patterns
• Well-defined event stream
• Complete service decoupling / separation of concerns
Anti-pattern: Monolith
• Summary: Services are embedded in large, monolithic
systems

– complex custom DB apps with heavy use of stored procedures
– older ERP systems
– proprietary voice applications (e.g., IBM WebSphere Voice)

• Not easily componentized, so reuse of discrete features is
more difficult
• Developers may “specialize” in these systems

– System lifetime is prolonged by their experience, but this becomes
niche knowledge
– Risk for the business and for individual careers
Counter-pattern: Virtual Componentization
• Create a model of ideal components for each monolithic
system
– Implement idealized components using a Façade above monolithic
system
• “Fake it until you make it”

– Expose APIs for new application development

• Gradually replace Façade components with new
implementations
– Process should be invisible to newer applications and
services, who rely solely on the Façades
Anti-pattern: Buried Treasure
• Summary: Source code is the only representation of
domain expertise, and tends to be scattered rather than
centralized

– e.g. internal service for creating a new user may have embedded
rules about user defaults, permissions, etc.
– Accumulation of years of learning about the problem space
– Downside of “self-documenting code”: poorly written/documented
code is worse than a badly written requirements document in this
case

• Major cause of legacy system petrification

– Business rules become fragile as developers fear changes that
may have broader effects than intended
– Original requirements may be lost in the noise introduced by years
of modifications and changes in ownership
Counter-pattern: Gold Mining
• Unearth requirements and create formal software contracts
representing these for a development audience
• Many paths to discovery
– One method: lots and lots of meetings (aka. “workshops”) to
discover and record existing requirements
– A better method: define contract structure, let domain experts fill it
in, and review as a team

• Contracts can take many forms
– EDA: event format and sequence definitions
– SOA: WSDLs capturing detailed type information and message
definitions
Anti-pattern: Tight Coupling
• Summary: Elements of a legacy system that directly invoke
one another tend to become entangled over time
– Deeper meaning built into method parameters than original intent
– Invocation may depend upon external preconditions or side effects
– If changes are not synchronized, breakage will result, so teams
must move more slowly
Counter-pattern: Implicit Invocation
• Remove knowledge of external implementations from
system components
– Move to a model of brokered interaction
– components express interest in events without knowledge of the
remote implementation

• Can accomplish this with:
– Disciplined SOA, in which a registry of components provides only
component binding
– Brokered, asynchronous messaging, providing a complete
separation of concerns
Anti-pattern: Code Pollution
• Summary: Event-driven systems build up code to deal with
special event sequence cases
– Particularly relevant where Implicit Invocation is applied

• Subsystem guard code builds up over time, but protocol
rules will not be enforced elsewhere

• Maintenance complexity increases with every new special
case
Counter-pattern: Protocol Reflection
• Explicitly define event protocol, then build a shared state
machine to deal with special cases
– GoF State pattern is a good fit

• State machine is deployed for all services that need to
support the event protocol
– Changes to the protocol imply changes to the shared state
machine
Legacy System Components
Migration Strategy
Migration Strategy
Migration Strategy
Target Architecture
Why OSGi?
• OSGi Compendium APIs are analogous to typical enterprise integration
patterns (by design)
–
–
–
–

Event Admin => brokered messaging
Config Admin => service configuration access
User Admin => AAA and user account management
Monitor Admin => monitoring and alerting services for Ops

• Directly applicable to addressing legacy anti-patterns
– e.g., Event Admin implementation to support Indirect Invocation, Declarative
Services + Remote Service Admin interfaces for Virtual Componentization

• Separation of concerns built-in
– Modularity provides barrier that fosters code independence

• Developers encouraged by the model to do things the “right” way going
forward
– Easier to reuse

• Most do-it-yourself OSGi options are open source
LiveOps Winterfell Project
• Benefits
– Wrap all existing services with APIs (voice, messaging, data,
monitoring, etc.) and provide them to LO developers in a consistent
way
– Retain control over deployment image
• Nothing extra, ability to update core bundles with few interaction worries

– Accelerate development through the use of consistent tools and
technologies, safe code sharing, and a layered, extensible
platform
– Deploy a single image in LO data centers that Ops can “flavor” in
different ways (API server, SIP proxy, call manager…)
– Expose a consistent social contact center model to customers,
partners, and internal LiveOps developers for use in new applications
and services

• Base Technologies
– Daemontools
– Java 7
– Felix 4 / OSGi Core+Compendium 4.3
Winterfell Framework

Code Generation

Platform Services

• JSON IDL generates:
- JavaScript lib and
Tests
- Resource Bundle
Skeleton
- JAX-RS uses raw IDL

• All platform server types
defined by JSON
deployment file
• All code deployed;
service type selected at
runtime

Deployment Pipeline
• Continuous integration
• New server gets all bits
and activates one Arya
service per container

Monitoring

Raven Event Bus
• All events contractually
defined
• Send/receive using
Event Admin +
RabbitMQ

• Monitor Admin
implementation sends
events from all services
to monitoring pipeline
Winterfell API Layers

External APIs
Resource Model
APIs

Base Services APIs

Container APIs
Winter Gem – Open Source Container Management
• System for deploying Winterfell OSGi containers of varying
configurations
• Based on Felix OSGi Runtime
• Containers are defined by configuration files

– Winterfile defines OSGi bundles to be downloaded and added to
container at runtime
• POM files also supported

– ERB templates used to generate configuration files
– JSON files supply configuration substitutions

• This is now open source software; please use it / fork it, and
send us your pull requests!
– See: https://github.com/liveops/winter
LoCo Framework: API Code Generation

JSON IDL

JavaScript
library

Int_gen_code.rb

Java Bean and
Implementation
classes

Test HTML +
JavaScript +
deployable site
project
Runtime API Operation

Dynamic REST API
Endpoint

App

JSON
IDL

API Services Manager

- REST API endpoint validates
requests using JSON IDL
- API Svc. Manager provides
binding from URL to Resource
Impl.
- Resource Impl. Builds and
returns resource bean
- Resource ID Service translates
inner to API IDs

Resource ID
Service

Res.
Bean

Resource Impl.
Legacy Service 1

Legacy Service 2
Migration Stage 1: API
New
Application 1

Old
Application 1

Old
Application 2

Svc. 1
Svc. 2
Svc. 3
Svc. 4

DB
Migration Stage 2: Service Ports
New
Application 1

Old
Application 1

Old
Application 2

Svc. 1
Svc. 2
Svc. 3

Svc. 3

Svc. 4

Svc. 4

DB
Migration Stage 3: App Ports
New
Application 1

New
Application 2

Old
Application 1

Old
Application 2

Svc. 1
Svc. 2
Svc. 3

Svc. 1

Svc. 4

Svc. 2

Svc. 3
Svc. 4

DB
Next Steps
• Release more OSS Projects
– Raven Event Bus
– Code Generator and API Services Manager

• Complete API coverage of platform elements
• Converge more services / simplify
• Launch application ecosystem for customers/partners
• Hire more API developers!
Q&A

Weitere ähnliche Inhalte

Was ist angesagt?

Software Factories in the Real World: How an IBM WebSphere Integration Factor...
Software Factories in the Real World: How an IBM WebSphere Integration Factor...Software Factories in the Real World: How an IBM WebSphere Integration Factor...
Software Factories in the Real World: How an IBM WebSphere Integration Factor...
ghodgkinson
 
Continuous Delivery using Release Management Automation
Continuous Delivery using Release Management AutomationContinuous Delivery using Release Management Automation
Continuous Delivery using Release Management Automation
Premkumar Veerakumar
 

Was ist angesagt? (20)

1
11
1
 
A Software Factory Integrating Rational & WebSphere Tools
A Software Factory Integrating Rational & WebSphere ToolsA Software Factory Integrating Rational & WebSphere Tools
A Software Factory Integrating Rational & WebSphere Tools
 
Operating a High Velocity Large Organization with Spring Cloud Microservices
Operating a High Velocity Large Organization with Spring Cloud MicroservicesOperating a High Velocity Large Organization with Spring Cloud Microservices
Operating a High Velocity Large Organization with Spring Cloud Microservices
 
Software Factories in the Real World: How an IBM WebSphere Integration Factor...
Software Factories in the Real World: How an IBM WebSphere Integration Factor...Software Factories in the Real World: How an IBM WebSphere Integration Factor...
Software Factories in the Real World: How an IBM WebSphere Integration Factor...
 
Challenges Scaling DevOps
Challenges Scaling DevOpsChallenges Scaling DevOps
Challenges Scaling DevOps
 
Moving To The Cloud, Evaluating Architectures
Moving To The Cloud, Evaluating ArchitecturesMoving To The Cloud, Evaluating Architectures
Moving To The Cloud, Evaluating Architectures
 
DevOps for Enterprise Systems : Innovate like a Startup
DevOps for Enterprise Systems : Innovate like a StartupDevOps for Enterprise Systems : Innovate like a Startup
DevOps for Enterprise Systems : Innovate like a Startup
 
Architecture Entropy
Architecture EntropyArchitecture Entropy
Architecture Entropy
 
Fundamentals of Deploy and Release
Fundamentals of Deploy and ReleaseFundamentals of Deploy and Release
Fundamentals of Deploy and Release
 
Cloud testing: challenges and opportunities, TaaS, Integration Testing
Cloud testing: challenges and opportunities, TaaS, Integration TestingCloud testing: challenges and opportunities, TaaS, Integration Testing
Cloud testing: challenges and opportunities, TaaS, Integration Testing
 
8 pipeline
8 pipeline 8 pipeline
8 pipeline
 
Software architecture also needs agile
Software architecture also needs agileSoftware architecture also needs agile
Software architecture also needs agile
 
Lessons Learned from Large Scale Adoption of DevOps for IBM z Systems Software
Lessons Learned from Large Scale Adoption of DevOps for IBM z Systems SoftwareLessons Learned from Large Scale Adoption of DevOps for IBM z Systems Software
Lessons Learned from Large Scale Adoption of DevOps for IBM z Systems Software
 
6 microservice architecture
6 microservice architecture6 microservice architecture
6 microservice architecture
 
Building a SaaS Style Application
Building a SaaS Style ApplicationBuilding a SaaS Style Application
Building a SaaS Style Application
 
DevOps for Enterprise Systems - Rosalind Radcliffe
DevOps for Enterprise Systems - Rosalind RadcliffeDevOps for Enterprise Systems - Rosalind Radcliffe
DevOps for Enterprise Systems - Rosalind Radcliffe
 
Quantifying DevOps Adoption Empirically for Demonstrable ROI
Quantifying DevOps Adoption Empirically for Demonstrable ROIQuantifying DevOps Adoption Empirically for Demonstrable ROI
Quantifying DevOps Adoption Empirically for Demonstrable ROI
 
Continuous Delivery using Release Management Automation
Continuous Delivery using Release Management AutomationContinuous Delivery using Release Management Automation
Continuous Delivery using Release Management Automation
 
Myresume1A (1)
Myresume1A (1)Myresume1A (1)
Myresume1A (1)
 
[2015/2016] Collaborative software development with Git
[2015/2016] Collaborative software development with Git[2015/2016] Collaborative software development with Git
[2015/2016] Collaborative software development with Git
 

Andere mochten auch

Hypermedia api (HATEOAS)
Hypermedia api (HATEOAS)Hypermedia api (HATEOAS)
Hypermedia api (HATEOAS)
MitinPavel
 
How to become a Product Samurai - Chris Lukassen
How to become a Product Samurai - Chris LukassenHow to become a Product Samurai - Chris Lukassen
How to become a Product Samurai - Chris Lukassen
Avisi B.V.
 
SOA Pattern : Legacy Wrappers
SOA Pattern : Legacy Wrappers SOA Pattern : Legacy Wrappers
SOA Pattern : Legacy Wrappers
WSO2
 

Andere mochten auch (20)

REST и HATEOAS
REST и HATEOASREST и HATEOAS
REST и HATEOAS
 
API Services: Building Apps That Stand Out
API Services: Building Apps That Stand OutAPI Services: Building Apps That Stand Out
API Services: Building Apps That Stand Out
 
Modernizing the Legacy - How Dish is Adapting its SOA Services for a Cloud Fi...
Modernizing the Legacy - How Dish is Adapting its SOA Services for a Cloud Fi...Modernizing the Legacy - How Dish is Adapting its SOA Services for a Cloud Fi...
Modernizing the Legacy - How Dish is Adapting its SOA Services for a Cloud Fi...
 
Securing RESTful services with Spring HATEOAS & Hdiv
Securing RESTful services with Spring HATEOAS & HdivSecuring RESTful services with Spring HATEOAS & Hdiv
Securing RESTful services with Spring HATEOAS & Hdiv
 
Hypermedia api (HATEOAS)
Hypermedia api (HATEOAS)Hypermedia api (HATEOAS)
Hypermedia api (HATEOAS)
 
HCLT Whitepaper: Legacy Modernization
HCLT Whitepaper: Legacy Modernization HCLT Whitepaper: Legacy Modernization
HCLT Whitepaper: Legacy Modernization
 
BPM for SOA+ESB+API and cloud
BPM for SOA+ESB+API and cloud BPM for SOA+ESB+API and cloud
BPM for SOA+ESB+API and cloud
 
How to become a Product Samurai - Chris Lukassen
How to become a Product Samurai - Chris LukassenHow to become a Product Samurai - Chris Lukassen
How to become a Product Samurai - Chris Lukassen
 
Apiworld
ApiworldApiworld
Apiworld
 
Legacy to industry leader: a modernization case study
Legacy to industry leader: a modernization case studyLegacy to industry leader: a modernization case study
Legacy to industry leader: a modernization case study
 
Twilio Signal 2016 API Architecture
Twilio Signal 2016 API ArchitectureTwilio Signal 2016 API Architecture
Twilio Signal 2016 API Architecture
 
LeaseWeb API Architecture @ APINL Meetup
LeaseWeb API Architecture @ APINL MeetupLeaseWeb API Architecture @ APINL Meetup
LeaseWeb API Architecture @ APINL Meetup
 
SOA Pattern : Legacy Wrappers
SOA Pattern : Legacy Wrappers SOA Pattern : Legacy Wrappers
SOA Pattern : Legacy Wrappers
 
Updating Legacy Systems: Making the Financial Case for a Modernization Project
Updating Legacy Systems: Making the Financial Case for a Modernization Project Updating Legacy Systems: Making the Financial Case for a Modernization Project
Updating Legacy Systems: Making the Financial Case for a Modernization Project
 
IO State In Distributed API Architecture
IO State In Distributed API ArchitectureIO State In Distributed API Architecture
IO State In Distributed API Architecture
 
Api Abstraction & Api Chaining
Api Abstraction & Api ChainingApi Abstraction & Api Chaining
Api Abstraction & Api Chaining
 
Legacy modernization, cloud orchestration, api publishing
Legacy modernization, cloud orchestration, api publishingLegacy modernization, cloud orchestration, api publishing
Legacy modernization, cloud orchestration, api publishing
 
Building a Modern Microservices Architecture at Gilt: The Essentials
Building a Modern Microservices Architecture at Gilt: The EssentialsBuilding a Modern Microservices Architecture at Gilt: The Essentials
Building a Modern Microservices Architecture at Gilt: The Essentials
 
Building an API Platform for Digital Transformation
Building an API Platform for Digital TransformationBuilding an API Platform for Digital Transformation
Building an API Platform for Digital Transformation
 
ITANA 2016: API Architecture and Implementation
ITANA 2016: API Architecture and ImplementationITANA 2016: API Architecture and Implementation
ITANA 2016: API Architecture and Implementation
 

Ähnlich wie API-driven Legacy Migration: Results from Project Winterfell

Software design for scientific applications
Software design for scientific applicationsSoftware design for scientific applications
Software design for scientific applications
Priyanka Lal
 

Ähnlich wie API-driven Legacy Migration: Results from Project Winterfell (20)

Blasting Out of the Past with OSGi - Keith McFarlane
Blasting Out of the Past with OSGi - Keith McFarlaneBlasting Out of the Past with OSGi - Keith McFarlane
Blasting Out of the Past with OSGi - Keith McFarlane
 
Architecting systems for continuous delivery
Architecting systems for continuous deliveryArchitecting systems for continuous delivery
Architecting systems for continuous delivery
 
OSGi Community Event 2010 - Experiences with OSGi in Industrial Applications
OSGi Community Event 2010 - Experiences with OSGi in Industrial ApplicationsOSGi Community Event 2010 - Experiences with OSGi in Industrial Applications
OSGi Community Event 2010 - Experiences with OSGi in Industrial Applications
 
Agile MDD
Agile MDDAgile MDD
Agile MDD
 
Hia 1693-effective application-development_in_iib
Hia 1693-effective application-development_in_iibHia 1693-effective application-development_in_iib
Hia 1693-effective application-development_in_iib
 
Bojan Veljanovski - Modular Software Architecture and Design (Code Camp 2016)
Bojan Veljanovski - Modular Software Architecture and Design (Code Camp 2016)Bojan Veljanovski - Modular Software Architecture and Design (Code Camp 2016)
Bojan Veljanovski - Modular Software Architecture and Design (Code Camp 2016)
 
Agile and continuous delivery – How IBM Watson Workspace is built
Agile and continuous delivery – How IBM Watson Workspace is builtAgile and continuous delivery – How IBM Watson Workspace is built
Agile and continuous delivery – How IBM Watson Workspace is built
 
SOA Mainframe Service Architecture and Enablement Practices Best and Worst Pr...
SOA Mainframe Service Architecture and Enablement Practices Best and Worst Pr...SOA Mainframe Service Architecture and Enablement Practices Best and Worst Pr...
SOA Mainframe Service Architecture and Enablement Practices Best and Worst Pr...
 
Technical Webinar: Patterns for Integrating Your Salesforce App with Off-Plat...
Technical Webinar: Patterns for Integrating Your Salesforce App with Off-Plat...Technical Webinar: Patterns for Integrating Your Salesforce App with Off-Plat...
Technical Webinar: Patterns for Integrating Your Salesforce App with Off-Plat...
 
Software Architecture and Architectors: useless VS valuable
Software Architecture and Architectors: useless VS valuableSoftware Architecture and Architectors: useless VS valuable
Software Architecture and Architectors: useless VS valuable
 
Introduction to Apache Synapse
Introduction to Apache SynapseIntroduction to Apache Synapse
Introduction to Apache Synapse
 
Understanding Microservices
Understanding Microservices Understanding Microservices
Understanding Microservices
 
Chris Phillips SCIM Mace-Dir Internet2 Fall Member Meeting Refresh
Chris Phillips SCIM Mace-Dir Internet2 Fall Member Meeting RefreshChris Phillips SCIM Mace-Dir Internet2 Fall Member Meeting Refresh
Chris Phillips SCIM Mace-Dir Internet2 Fall Member Meeting Refresh
 
AMIS OOW Review 2012 - Deel 7 - Lucas Jellema
AMIS OOW Review 2012 - Deel 7 - Lucas JellemaAMIS OOW Review 2012 - Deel 7 - Lucas Jellema
AMIS OOW Review 2012 - Deel 7 - Lucas Jellema
 
Architectural Decisions: Smoothly and Consistently
Architectural Decisions: Smoothly and ConsistentlyArchitectural Decisions: Smoothly and Consistently
Architectural Decisions: Smoothly and Consistently
 
Architectural Decisions: Smoothly and Consistently
Architectural Decisions: Smoothly and ConsistentlyArchitectural Decisions: Smoothly and Consistently
Architectural Decisions: Smoothly and Consistently
 
Technology insights: Decision Science Platform
Technology insights: Decision Science PlatformTechnology insights: Decision Science Platform
Technology insights: Decision Science Platform
 
Ppt nardeep
Ppt nardeepPpt nardeep
Ppt nardeep
 
How Microsoft ALM Tools Can Improve Your Bottom Line
How Microsoft ALM Tools Can Improve Your Bottom LineHow Microsoft ALM Tools Can Improve Your Bottom Line
How Microsoft ALM Tools Can Improve Your Bottom Line
 
Software design for scientific applications
Software design for scientific applicationsSoftware design for scientific applications
Software design for scientific applications
 

Kürzlich hochgeladen

Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Victor Rentea
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Safe Software
 
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Victor Rentea
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
panagenda
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
?#DUbAI#??##{{(☎️+971_581248768%)**%*]'#abortion pills for sale in dubai@
 

Kürzlich hochgeladen (20)

MS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsMS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectors
 
Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
 
ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challenges
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 
AXA XL - Insurer Innovation Award Americas 2024
AXA XL - Insurer Innovation Award Americas 2024AXA XL - Insurer Innovation Award Americas 2024
AXA XL - Insurer Innovation Award Americas 2024
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
Ransomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdfRansomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdf
 
CNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In PakistanCNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In Pakistan
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxCorporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptx
 
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
 
Exploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with MilvusExploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with Milvus
 

API-driven Legacy Migration: Results from Project Winterfell

  • 1. API-driven Legacy Migration: Results from Project Winterfell Keith R. McFarlane (@krmc)
  • 2. What do we mean by “Legacy?” • “Mature information systems grow old disgracefully…”1 • Software architectures (planned or “accidental”) are conceived to address a particular need at a moment in time – May or may not be built to anticipate new features – Probably will not accommodate changes in business focus • Legacy software has reached a point in its lifecycle at which change becomes difficult – Cannot meet new business needs in a timely manner – Maintenance tasks become more costly and more difficult to staff 1Legacy System Anti-Patterns and a Pattern-Oriented Migration Response by Anthony Lauder and Stuart Kent
  • 3. Don’t forget the good parts • A legacy platform exists because it addresses needs – If it has existed for a long time, it probably has served its function very well – Customers are not likely to allow a shut-down of current systems to move to something new with fewer features • Implications: – Legacy migration must be staged – We must find ways to preserve the “good parts” while addressing current limitations
  • 4. Legacy Anti-patterns and Counter-patterns Anti-pattern Counter-pattern Ball and Chain Portability Adapter (JVM, .net) Tower of Babel Babel Fish (PB, Thrift, etc.) Monolith Buried Treasure Virtual Componentization (Façade) Gold Mining Tight Coupling Implicit Invocation (SOA/EDA) Code Pollution Protocol Reflection (State Pattern)
  • 5. Anti-pattern: “Ball and Chain” • Summary: Software is “chained” to legacy operating systems through use of OS-specific features – – – – Unix: System V (vs. Posix) Message Queues Windows: Hooks OS X: Cocoa APIs All: Shell calls to invoke command-line processes • Portability is limited by original system’s scope – Easiest: CentOS 4  CentOS 5 – Harder: CentOS 5  OS X – Hardest: CentOS 5  Windows Server 2008
  • 6. Counter-pattern: Portability Adapter • Create or select a single portability layer technology – JVM, .NET Common Language Runtime, Posix, LLVM – Purpose-built Portability Layer using OSGi • Create a service representative of OS-specific features for consumption by new applications and services – Allow existing apps and services to continue native feature use – New apps and services must use features as represented in portability layer • Pattern application results in sweeping system changes long-term, but leaves existing code intact for immediate future
  • 7. Anti-pattern: Tower of Babel • Summary: System components were developed in a variety of programming languages – Resource constraints; must use skills available – Attempt to attract new talent with new language adoption – “Polyglot” language philosophy; language diversity for its own sake • Over time, organization cannot maintain code in a large number of languages – Original developers may have moved on (new project, new company, etc.) – Special-purpose implementations in exotic or less-popular languages (e.g., OCaml) become marginalized – Common language runtime mitigates the problem to some extent, but does not solve it • Interoperation between languages and runtimes is difficult, preventing rapid innovation
  • 8. Counter-pattern: Babel Fish • Select and integrate a language interoperability technology that creates a bridge between multiple languages and runtimes – Cross-language libraries: Thrift, Avro, Pbuf • Revisiting the “CORBA” theme • Prone to point-to-point IDL definitions – SOA: Wrap all services with SOAP and present WSDLs • Maintain internal services registry – EDA: present all modules with access to a common event bus • Asynchronous event patterns • Well-defined event stream • Complete service decoupling / separation of concerns
  • 9. Anti-pattern: Monolith • Summary: Services are embedded in large, monolithic systems – complex custom DB apps with heavy use of stored procedures – older ERP systems – proprietary voice applications (e.g., IBM WebSphere Voice) • Not easily componentized, so reuse of discrete features is more difficult • Developers may “specialize” in these systems – System lifetime is prolonged by their experience, but this becomes niche knowledge – Risk for the business and for individual careers
  • 10. Counter-pattern: Virtual Componentization • Create a model of ideal components for each monolithic system – Implement idealized components using a Façade above monolithic system • “Fake it until you make it” – Expose APIs for new application development • Gradually replace Façade components with new implementations – Process should be invisible to newer applications and services, who rely solely on the Façades
  • 11. Anti-pattern: Buried Treasure • Summary: Source code is the only representation of domain expertise, and tends to be scattered rather than centralized – e.g. internal service for creating a new user may have embedded rules about user defaults, permissions, etc. – Accumulation of years of learning about the problem space – Downside of “self-documenting code”: poorly written/documented code is worse than a badly written requirements document in this case • Major cause of legacy system petrification – Business rules become fragile as developers fear changes that may have broader effects than intended – Original requirements may be lost in the noise introduced by years of modifications and changes in ownership
  • 12. Counter-pattern: Gold Mining • Unearth requirements and create formal software contracts representing these for a development audience • Many paths to discovery – One method: lots and lots of meetings (aka. “workshops”) to discover and record existing requirements – A better method: define contract structure, let domain experts fill it in, and review as a team • Contracts can take many forms – EDA: event format and sequence definitions – SOA: WSDLs capturing detailed type information and message definitions
  • 13. Anti-pattern: Tight Coupling • Summary: Elements of a legacy system that directly invoke one another tend to become entangled over time – Deeper meaning built into method parameters than original intent – Invocation may depend upon external preconditions or side effects – If changes are not synchronized, breakage will result, so teams must move more slowly
  • 14. Counter-pattern: Implicit Invocation • Remove knowledge of external implementations from system components – Move to a model of brokered interaction – components express interest in events without knowledge of the remote implementation • Can accomplish this with: – Disciplined SOA, in which a registry of components provides only component binding – Brokered, asynchronous messaging, providing a complete separation of concerns
  • 15. Anti-pattern: Code Pollution • Summary: Event-driven systems build up code to deal with special event sequence cases – Particularly relevant where Implicit Invocation is applied • Subsystem guard code builds up over time, but protocol rules will not be enforced elsewhere • Maintenance complexity increases with every new special case
  • 16. Counter-pattern: Protocol Reflection • Explicitly define event protocol, then build a shared state machine to deal with special cases – GoF State pattern is a good fit • State machine is deployed for all services that need to support the event protocol – Changes to the protocol imply changes to the shared state machine
  • 22. Why OSGi? • OSGi Compendium APIs are analogous to typical enterprise integration patterns (by design) – – – – Event Admin => brokered messaging Config Admin => service configuration access User Admin => AAA and user account management Monitor Admin => monitoring and alerting services for Ops • Directly applicable to addressing legacy anti-patterns – e.g., Event Admin implementation to support Indirect Invocation, Declarative Services + Remote Service Admin interfaces for Virtual Componentization • Separation of concerns built-in – Modularity provides barrier that fosters code independence • Developers encouraged by the model to do things the “right” way going forward – Easier to reuse • Most do-it-yourself OSGi options are open source
  • 23. LiveOps Winterfell Project • Benefits – Wrap all existing services with APIs (voice, messaging, data, monitoring, etc.) and provide them to LO developers in a consistent way – Retain control over deployment image • Nothing extra, ability to update core bundles with few interaction worries – Accelerate development through the use of consistent tools and technologies, safe code sharing, and a layered, extensible platform – Deploy a single image in LO data centers that Ops can “flavor” in different ways (API server, SIP proxy, call manager…) – Expose a consistent social contact center model to customers, partners, and internal LiveOps developers for use in new applications and services • Base Technologies – Daemontools – Java 7 – Felix 4 / OSGi Core+Compendium 4.3
  • 24. Winterfell Framework Code Generation Platform Services • JSON IDL generates: - JavaScript lib and Tests - Resource Bundle Skeleton - JAX-RS uses raw IDL • All platform server types defined by JSON deployment file • All code deployed; service type selected at runtime Deployment Pipeline • Continuous integration • New server gets all bits and activates one Arya service per container Monitoring Raven Event Bus • All events contractually defined • Send/receive using Event Admin + RabbitMQ • Monitor Admin implementation sends events from all services to monitoring pipeline
  • 25. Winterfell API Layers External APIs Resource Model APIs Base Services APIs Container APIs
  • 26. Winter Gem – Open Source Container Management • System for deploying Winterfell OSGi containers of varying configurations • Based on Felix OSGi Runtime • Containers are defined by configuration files – Winterfile defines OSGi bundles to be downloaded and added to container at runtime • POM files also supported – ERB templates used to generate configuration files – JSON files supply configuration substitutions • This is now open source software; please use it / fork it, and send us your pull requests! – See: https://github.com/liveops/winter
  • 27. LoCo Framework: API Code Generation JSON IDL JavaScript library Int_gen_code.rb Java Bean and Implementation classes Test HTML + JavaScript + deployable site project
  • 28. Runtime API Operation Dynamic REST API Endpoint App JSON IDL API Services Manager - REST API endpoint validates requests using JSON IDL - API Svc. Manager provides binding from URL to Resource Impl. - Resource Impl. Builds and returns resource bean - Resource ID Service translates inner to API IDs Resource ID Service Res. Bean Resource Impl. Legacy Service 1 Legacy Service 2
  • 29. Migration Stage 1: API New Application 1 Old Application 1 Old Application 2 Svc. 1 Svc. 2 Svc. 3 Svc. 4 DB
  • 30. Migration Stage 2: Service Ports New Application 1 Old Application 1 Old Application 2 Svc. 1 Svc. 2 Svc. 3 Svc. 3 Svc. 4 Svc. 4 DB
  • 31. Migration Stage 3: App Ports New Application 1 New Application 2 Old Application 1 Old Application 2 Svc. 1 Svc. 2 Svc. 3 Svc. 1 Svc. 4 Svc. 2 Svc. 3 Svc. 4 DB
  • 32. Next Steps • Release more OSS Projects – Raven Event Bus – Code Generator and API Services Manager • Complete API coverage of platform elements • Converge more services / simplify • Launch application ecosystem for customers/partners • Hire more API developers!
  • 33. Q&A