Today, there are several trends that are forcing application architectures to evolve. Users expect a rich, interactive and dynamic user experience on a wide variety of clients including mobile devices. Applications must be highly scalable, highly available and run on cloud environments. Organizations often want to frequently roll out updates, even multiple times a day. Consequently, it’s no longer adequate to develop simple, monolithic web applications that serve up HTML to desktop browsers. In this talk we describe the limitations of a monolithic architecture. You will learn how to use the scale cube to decompose your application into a set of narrowly focused, independently deployable back-end services and an HTML 5 client. We will also discuss the role of technologies such as NodeJS and AMQP brokers. You will learn how a modern PaaS such as Cloud Foundry simplifies the development and deployment of this style of application.
The eBay Architecture: Striking a Balance between Site Stability, Feature Ve...Randy Shoup
eBay architects Randy Shoup and Dan Pritchett give a guided tour of the eBay architecture. They cover the evolution of the technology stack from Perl to C++ to Java. And they discuss scaling strategies for the data tier, application tier, search, and operations.
Architecting for the Cloud using NetflixOSS - Codemash WorkshopSudhir Tonse
Cloud development is inherently different than data center development. Understanding those differences, and architecting for them is critical to successful cloud solutions. In this workshop, we will both describe Netflix OSS platform components and show you how you can piece them together to build your own fault-tolerant REST services. These include: Hystrix, Ribbon, Eureka, and Archaius. In this hands-on lab, you will both learn the benefits of each of these services and use them in a sample application (in a test account). If you want to get things running in your own account, you may want to attend the afternoon session (Setting up your environment for the AWS cloud).
A common microservice architecture anti-pattern is more the merrier. It occurs when an organization team builds an excessively fine-grained architecture, e.g. one service-per-developer. In this talk, you will learn about the criteria that you should consider when deciding service granularity. I'll discuss the downsides of a fine-grained microservice architecture. You will learn how sometimes the solution to a design problem is simply a JAR file.
OpenShift is Red Hat's Platform-as-a-Service (PaaS) that lets developers quickly develop, host, and scale Docker container-based applications. OpenShift enables a uniform and standardised approach to container management across all hosting options including AWS/EC2 and other private/public cloud and on/off-premise variants. At this session, you will learn how Red Hat's enterprise clients are using OpenShift to enable their digital transformation initiatives. Examples will cover how realising a hybrid cloud strategy can simplify and reduce the risk of migrating and transitioning application workloads to containers in the cloud.
Alex Smith, Solutions Architect, Amazon Web Services, ASEAN
Stephen Bylo, Senior Solution Architect, Red Hat Asia Pacific Pte Ltd
The presentation from our online webinar "Design patterns for microservice architecture".
Full video from webinar available here: https://www.youtube.com/watch?v=826aAmG06KM
If you’re a CTO or a Lead Developer and you’re planning to design service-oriented architecture, it’s definitely a webinar tailored to your needs. Adrian Zmenda, our Lead Dev, will explain:
- when microservice architecture is a safe bet and what are some good alternatives
- what are the pros and cons of the most popular design patterns (API Gateway, Backend for Frontend and more)
- how to ensure that the communication between services is done right and what to do in case of connection issues
- why we’ve decided to use a monorepo (monolithic repository)
- what we’ve learned from using the remote procedure call framework gRPC
- how to monitor the efficiency of individual services and whole SOA-based systems.
The eBay Architecture: Striking a Balance between Site Stability, Feature Ve...Randy Shoup
eBay architects Randy Shoup and Dan Pritchett give a guided tour of the eBay architecture. They cover the evolution of the technology stack from Perl to C++ to Java. And they discuss scaling strategies for the data tier, application tier, search, and operations.
Architecting for the Cloud using NetflixOSS - Codemash WorkshopSudhir Tonse
Cloud development is inherently different than data center development. Understanding those differences, and architecting for them is critical to successful cloud solutions. In this workshop, we will both describe Netflix OSS platform components and show you how you can piece them together to build your own fault-tolerant REST services. These include: Hystrix, Ribbon, Eureka, and Archaius. In this hands-on lab, you will both learn the benefits of each of these services and use them in a sample application (in a test account). If you want to get things running in your own account, you may want to attend the afternoon session (Setting up your environment for the AWS cloud).
A common microservice architecture anti-pattern is more the merrier. It occurs when an organization team builds an excessively fine-grained architecture, e.g. one service-per-developer. In this talk, you will learn about the criteria that you should consider when deciding service granularity. I'll discuss the downsides of a fine-grained microservice architecture. You will learn how sometimes the solution to a design problem is simply a JAR file.
OpenShift is Red Hat's Platform-as-a-Service (PaaS) that lets developers quickly develop, host, and scale Docker container-based applications. OpenShift enables a uniform and standardised approach to container management across all hosting options including AWS/EC2 and other private/public cloud and on/off-premise variants. At this session, you will learn how Red Hat's enterprise clients are using OpenShift to enable their digital transformation initiatives. Examples will cover how realising a hybrid cloud strategy can simplify and reduce the risk of migrating and transitioning application workloads to containers in the cloud.
Alex Smith, Solutions Architect, Amazon Web Services, ASEAN
Stephen Bylo, Senior Solution Architect, Red Hat Asia Pacific Pte Ltd
The presentation from our online webinar "Design patterns for microservice architecture".
Full video from webinar available here: https://www.youtube.com/watch?v=826aAmG06KM
If you’re a CTO or a Lead Developer and you’re planning to design service-oriented architecture, it’s definitely a webinar tailored to your needs. Adrian Zmenda, our Lead Dev, will explain:
- when microservice architecture is a safe bet and what are some good alternatives
- what are the pros and cons of the most popular design patterns (API Gateway, Backend for Frontend and more)
- how to ensure that the communication between services is done right and what to do in case of connection issues
- why we’ve decided to use a monorepo (monolithic repository)
- what we’ve learned from using the remote procedure call framework gRPC
- how to monitor the efficiency of individual services and whole SOA-based systems.
Presentation in IBM Cloud Meet-up of Toronto
https://www.meetup.com/IBM-Cloud-Toronto/events/253903913/?_xtd=gatlbWFpbF9jbGlja9oAJGU3NmM3ZjdmLWE2NzgtNGVlNC1iNGZiLTBlZGE5ZWM0NDZjOQ
Grokking Techtalk #40: Consistency and Availability tradeoff in database clusterGrokking VN
Những năm gần đây, cùng với sự bùng nổ của các startup cùng các loại công nghệ như máy học, lượng dữ liệu phát sinh cần thu thập và xử lý trong các hệ thống ngày càng tăng cao.
Chính vì vậy, đối với các hệ thống lớn thì việc lưu trữ và xử lý dữ liệu trên một node database đã không đáp ứng được nữa, đòi hỏi phải sử dụng nhiều node kết nối với nhau để hình thành database cluster.
Đối với các database cluster nói riêng và hệ thống Distributed System nói chung, có khá nhiều chủ đề thú vị để đào sâu. Trong buổi thảo luận này, chúng ta sẽ giới hạn trong việc khảo sát về cách ba hệ thống Redis, Elastic Search và Cassandra tổ chức cluster cũng như sự trade-off giữa tính nhất quán (consistency) và khả năng đáp ứng (availability) của ba hệ thống này.
- Speaker: Lộc Võ - Lead Software Engineer @ Grab
SCS 4120 - Software Engineering IV
BACHELOR OF SCIENCE HONOURS IN COMPUTER SCIENCE
BACHELOR OF SCIENCE HONOURS IN SOFTWARE ENGINEERING
All in One Place Lecture Notes
Distribution Among Friends Only
All copyrights belong to their respective owners
Viraj Brian Wijesuriya
vbw@ucsc.cmb.ac.lk
GraphQL is a query language for APIs and a runtime for fulfilling those queries. It gives clients the power to ask for exactly what they need, which makes it a great fit for modern web and mobile apps. In this talk, we explain why GraphQL was created, introduce you to the syntax and behavior, and then show how to use it to build powerful APIs for your data. We will also introduce you to AWS AppSync, a GraphQL-powered serverless backend for apps, which you can use to host GraphQL APIs and also add real-time and offline capabilities to your web and mobile apps. You can follow along if you have an AWS account – no GraphQL experience required!
Level: Beginner
Speaker: Rohan Deshpande - Sr. Software Dev Engineer, AWS Mobile Applications
Introduction au Domain Driven Design, un livre rempli de bonnes idées pour concevoir avec agilité ses applications (conception et modélisation émergente, adéquation de la solution au problème adressé, stratégie du découpage en module et des interactions inter-équipes, alignement entre le métier et les développeurs ...)
Learn how to deploy a lean API runtime infrastructure in your private enterprise environment while getting all the benefits of Apigee Edge API management in the cloud.
Speaker: Jerry Reghunadh, Architect, CAPIOT Software Pvt. Ltd.
Level: 200 (Intermediate)
Track: Microservices
One of the leading assisted e-commerce players in India approached CAPIOT to rebuild their ERP system from the ground up. Their existing PHP-MySQL setup, while rich in functionality and having served them well for under half a decade, would not scale to meet future demands due to the exponential grown they were experiencing.
We built the entire system using a microservices architecture. To develop APIs we used Node.js, Express, Swagger and Mongoose, and MongoDB was used as the active data store. During the development phase, we solved several problems ranging from cross-service calls, data consistency, service discovery, and security.
One of the issues that we faced is how to effectively design and make cross-service calls. Should we implement a cross-service call for every document that we require or should we duplicate and distribute the data, reducing cross-service calls? We found a balance between these two and engineered a solution that gave us good performance.
In addition, our current system has 36 independent services. We enabled services to auto-discover and make secure calls.
We used Swagger to define our APIs first and enforce request and response validations and Mongoose as our ODM for schema validation. We also heavily depend on pre-save hooks to validate data and post-save hooks to trigger changes in other systems. This API-driven approach vastly enabled our frontend and backend teams to scrum together on a single API spec without worrying about the repercussions of changing API schemas.
What You Will Learn:
- How we used Swagger and Mongoose to off-load validations and schema enforcements. We used Swagger to define our APIs first and enforce request and response validations and Mongoose as our ODM for schema validation. We also heavily depend on pre-save hooks to validate data and post-save hooks to trigger changes in other systems. This API-driven approach vastly enabled our frontend and backend teams to scrum together on a single API spec without worrying about the repercussions of changing API schemas.
- How microservices and cross-service calls work. One of the issues that we faced is how to effectively design and make cross-service calls. Should we implement a cross-service call for every document that we require or should we duplicate and distribute the data, reducing cross-service calls? We found a balance between these two and engineered a solution that gave us good performance.
- How we implemented microservice auto discovery: Our current system has 36 independent services, so we enabled services to auto-discover and make secure calls.
When it comes to building our own services, our engineering groups have strong opinions, and they express them in the technologies they pick: Are microservices always the way to go? Should we choose serverless, containers, or serverless containers? Is relational over? Is Java over? Learn about our experience in building AWS services and working with customers on their cloud-native apps.
Are your APIs becoming too complicated and ad hoc? Feeling the need to set up policies for your API? This presentation will give you strategy options for designing and developing your APIs.
[WSO2Con EU 2018] The Hybrid Integration Platform: Can You Be in Business Wit...WSO2
An "unintegrated digital business" is simply an oxymoron. Digitalization does empower organizations to innovate and disrupt, but entails tackling a daunting array of application, data, APIs, mobile apps, ecosystems and "things" integration issues. An enterprisewide hybrid integration platform to support these challenges is becoming a business utility such as networks, email and ERP: a precondition to be in business for organizations of any kind.
Developing microservices with aggregates (SpringOne platform, #s1p)Chris Richardson
The Domain Model pattern is a great way to develop complex business logic. Unfortunately, a typical domain model is a tangled, birds nest of classes. It can’t be decomposed into microservices. Moreover, business logic often relies on ACID transactions to maintain consistency.
Fortunately, there is a solution to this problem: aggregates. An aggregate is an often overlooked modeling concept from the must read book Domain Driven Design. In this talk you will learn how aggregates enable you to develop business logic for the modern world of microservices and NoSQL. We will describe how to use aggregates to design modular business logic that can be partitioned into microservices. You will learn how aggregates enable you to use eventual consistency instead of ACID. We will describe the design of a microservice that is built using aggregates, and Spring Cloud.
MicroServices at Netflix - challenges of scaleSudhir Tonse
MicroServices has caught on as the design pattern of choice for many companies at scale. While MicroServices and SOA in general have many positives compared to Monolithic apps, it does come with its own challenges - especially when running at scale. These slides were for a 15 min Meetup talk hosted at Cisco
Developing applications with a microservice architecture (SVforum, microservi...Chris Richardson
Here is the version of my microservices talk that that I gave on September 17th at the SVforum Cloud SIG/Microservices meetup.
To learn more see http://microservices.io and http://plainoldobjects.com
SOA, service-oriented architectures, burst on the scene in the new millennium as the latest technology to support application growth. In concert with the Web, SOA ushered in new paradigms for structuring enterprise applications.
At the Forward Internet Group in London, we are implementing SOA in unusual ways. Rather than a few, businessrelated services being implemented per the original vision, we have developed systems made of myriads of very small, usually shortlived services.
In this workshop, we will start by exploring the evolution of SOA implementations by the speaker. In particular, lessons learned from each implementation will be discussed, and reapplication of these lessons on the next implementation. Challenges (and even failures) will be explicitly identified.
We will arrive at a model of the current systems: An environment of very small services that are loosely coupled into a complex system. We explore the demise of acceptance tests in this complex environment, and the clever replacement of business metrics in their stead.
Finally, we will conclude with the surprising programmer development process impacts of this architecture. Indeed, bedrock principles of Agile have been rendered unnecessary, something that equally surprised us. (Presented at Agile India 2013)
This slide deck explores the impact of MSA on API strategies and designs and the possible changes in API design and deployment, API security, control and monitoring, and CI/CD.
Watch recording: https://wso2.com/library/webinars/2018/09/apis-in-a-microservice-architecture
Microservice Architecture | Microservices Tutorial for Beginners | Microservi...Edureka!
( Microservices Architecture Training: https://www.edureka.co/microservices-... )
This Edureka's Microservices tutorial gives you detail of Microservices Architecture and how it is different from Monolithic Architecture. You will understand the concepts using a UBER case study. In this video, you will learn the following:
1. Monolithic Architecture
2. Challenges Of Monolithic Architecture
3. Microservice Architecture
4. Microservice Features
5. Compare architectures using UBER case-study
Presentation in IBM Cloud Meet-up of Toronto
https://www.meetup.com/IBM-Cloud-Toronto/events/253903913/?_xtd=gatlbWFpbF9jbGlja9oAJGU3NmM3ZjdmLWE2NzgtNGVlNC1iNGZiLTBlZGE5ZWM0NDZjOQ
Grokking Techtalk #40: Consistency and Availability tradeoff in database clusterGrokking VN
Những năm gần đây, cùng với sự bùng nổ của các startup cùng các loại công nghệ như máy học, lượng dữ liệu phát sinh cần thu thập và xử lý trong các hệ thống ngày càng tăng cao.
Chính vì vậy, đối với các hệ thống lớn thì việc lưu trữ và xử lý dữ liệu trên một node database đã không đáp ứng được nữa, đòi hỏi phải sử dụng nhiều node kết nối với nhau để hình thành database cluster.
Đối với các database cluster nói riêng và hệ thống Distributed System nói chung, có khá nhiều chủ đề thú vị để đào sâu. Trong buổi thảo luận này, chúng ta sẽ giới hạn trong việc khảo sát về cách ba hệ thống Redis, Elastic Search và Cassandra tổ chức cluster cũng như sự trade-off giữa tính nhất quán (consistency) và khả năng đáp ứng (availability) của ba hệ thống này.
- Speaker: Lộc Võ - Lead Software Engineer @ Grab
SCS 4120 - Software Engineering IV
BACHELOR OF SCIENCE HONOURS IN COMPUTER SCIENCE
BACHELOR OF SCIENCE HONOURS IN SOFTWARE ENGINEERING
All in One Place Lecture Notes
Distribution Among Friends Only
All copyrights belong to their respective owners
Viraj Brian Wijesuriya
vbw@ucsc.cmb.ac.lk
GraphQL is a query language for APIs and a runtime for fulfilling those queries. It gives clients the power to ask for exactly what they need, which makes it a great fit for modern web and mobile apps. In this talk, we explain why GraphQL was created, introduce you to the syntax and behavior, and then show how to use it to build powerful APIs for your data. We will also introduce you to AWS AppSync, a GraphQL-powered serverless backend for apps, which you can use to host GraphQL APIs and also add real-time and offline capabilities to your web and mobile apps. You can follow along if you have an AWS account – no GraphQL experience required!
Level: Beginner
Speaker: Rohan Deshpande - Sr. Software Dev Engineer, AWS Mobile Applications
Introduction au Domain Driven Design, un livre rempli de bonnes idées pour concevoir avec agilité ses applications (conception et modélisation émergente, adéquation de la solution au problème adressé, stratégie du découpage en module et des interactions inter-équipes, alignement entre le métier et les développeurs ...)
Learn how to deploy a lean API runtime infrastructure in your private enterprise environment while getting all the benefits of Apigee Edge API management in the cloud.
Speaker: Jerry Reghunadh, Architect, CAPIOT Software Pvt. Ltd.
Level: 200 (Intermediate)
Track: Microservices
One of the leading assisted e-commerce players in India approached CAPIOT to rebuild their ERP system from the ground up. Their existing PHP-MySQL setup, while rich in functionality and having served them well for under half a decade, would not scale to meet future demands due to the exponential grown they were experiencing.
We built the entire system using a microservices architecture. To develop APIs we used Node.js, Express, Swagger and Mongoose, and MongoDB was used as the active data store. During the development phase, we solved several problems ranging from cross-service calls, data consistency, service discovery, and security.
One of the issues that we faced is how to effectively design and make cross-service calls. Should we implement a cross-service call for every document that we require or should we duplicate and distribute the data, reducing cross-service calls? We found a balance between these two and engineered a solution that gave us good performance.
In addition, our current system has 36 independent services. We enabled services to auto-discover and make secure calls.
We used Swagger to define our APIs first and enforce request and response validations and Mongoose as our ODM for schema validation. We also heavily depend on pre-save hooks to validate data and post-save hooks to trigger changes in other systems. This API-driven approach vastly enabled our frontend and backend teams to scrum together on a single API spec without worrying about the repercussions of changing API schemas.
What You Will Learn:
- How we used Swagger and Mongoose to off-load validations and schema enforcements. We used Swagger to define our APIs first and enforce request and response validations and Mongoose as our ODM for schema validation. We also heavily depend on pre-save hooks to validate data and post-save hooks to trigger changes in other systems. This API-driven approach vastly enabled our frontend and backend teams to scrum together on a single API spec without worrying about the repercussions of changing API schemas.
- How microservices and cross-service calls work. One of the issues that we faced is how to effectively design and make cross-service calls. Should we implement a cross-service call for every document that we require or should we duplicate and distribute the data, reducing cross-service calls? We found a balance between these two and engineered a solution that gave us good performance.
- How we implemented microservice auto discovery: Our current system has 36 independent services, so we enabled services to auto-discover and make secure calls.
When it comes to building our own services, our engineering groups have strong opinions, and they express them in the technologies they pick: Are microservices always the way to go? Should we choose serverless, containers, or serverless containers? Is relational over? Is Java over? Learn about our experience in building AWS services and working with customers on their cloud-native apps.
Are your APIs becoming too complicated and ad hoc? Feeling the need to set up policies for your API? This presentation will give you strategy options for designing and developing your APIs.
[WSO2Con EU 2018] The Hybrid Integration Platform: Can You Be in Business Wit...WSO2
An "unintegrated digital business" is simply an oxymoron. Digitalization does empower organizations to innovate and disrupt, but entails tackling a daunting array of application, data, APIs, mobile apps, ecosystems and "things" integration issues. An enterprisewide hybrid integration platform to support these challenges is becoming a business utility such as networks, email and ERP: a precondition to be in business for organizations of any kind.
Developing microservices with aggregates (SpringOne platform, #s1p)Chris Richardson
The Domain Model pattern is a great way to develop complex business logic. Unfortunately, a typical domain model is a tangled, birds nest of classes. It can’t be decomposed into microservices. Moreover, business logic often relies on ACID transactions to maintain consistency.
Fortunately, there is a solution to this problem: aggregates. An aggregate is an often overlooked modeling concept from the must read book Domain Driven Design. In this talk you will learn how aggregates enable you to develop business logic for the modern world of microservices and NoSQL. We will describe how to use aggregates to design modular business logic that can be partitioned into microservices. You will learn how aggregates enable you to use eventual consistency instead of ACID. We will describe the design of a microservice that is built using aggregates, and Spring Cloud.
MicroServices at Netflix - challenges of scaleSudhir Tonse
MicroServices has caught on as the design pattern of choice for many companies at scale. While MicroServices and SOA in general have many positives compared to Monolithic apps, it does come with its own challenges - especially when running at scale. These slides were for a 15 min Meetup talk hosted at Cisco
Developing applications with a microservice architecture (SVforum, microservi...Chris Richardson
Here is the version of my microservices talk that that I gave on September 17th at the SVforum Cloud SIG/Microservices meetup.
To learn more see http://microservices.io and http://plainoldobjects.com
SOA, service-oriented architectures, burst on the scene in the new millennium as the latest technology to support application growth. In concert with the Web, SOA ushered in new paradigms for structuring enterprise applications.
At the Forward Internet Group in London, we are implementing SOA in unusual ways. Rather than a few, businessrelated services being implemented per the original vision, we have developed systems made of myriads of very small, usually shortlived services.
In this workshop, we will start by exploring the evolution of SOA implementations by the speaker. In particular, lessons learned from each implementation will be discussed, and reapplication of these lessons on the next implementation. Challenges (and even failures) will be explicitly identified.
We will arrive at a model of the current systems: An environment of very small services that are loosely coupled into a complex system. We explore the demise of acceptance tests in this complex environment, and the clever replacement of business metrics in their stead.
Finally, we will conclude with the surprising programmer development process impacts of this architecture. Indeed, bedrock principles of Agile have been rendered unnecessary, something that equally surprised us. (Presented at Agile India 2013)
This slide deck explores the impact of MSA on API strategies and designs and the possible changes in API design and deployment, API security, control and monitoring, and CI/CD.
Watch recording: https://wso2.com/library/webinars/2018/09/apis-in-a-microservice-architecture
Microservice Architecture | Microservices Tutorial for Beginners | Microservi...Edureka!
( Microservices Architecture Training: https://www.edureka.co/microservices-... )
This Edureka's Microservices tutorial gives you detail of Microservices Architecture and how it is different from Monolithic Architecture. You will understand the concepts using a UBER case study. In this video, you will learn the following:
1. Monolithic Architecture
2. Challenges Of Monolithic Architecture
3. Microservice Architecture
4. Microservice Features
5. Compare architectures using UBER case-study
Decomposing applications for scalability and deployability - svcc sv_code_ca...Chris Richardson
Today, there are several trends that are forcing application architectures to evolve. Users expect a rich, interactive and dynamic user experience on a wide variety of clients including mobile devices. Applications must be highly scalable, highly available and run on cloud environments. Organizations often want to frequently roll out updates, even multiple times a day. Consequently, it’s no longer adequate to develop simple, monolithic web applications that serve up HTML to desktop browsers.
In this talk we describe the limitations of a monolithic architecture. You will learn how to use the scale cube to decompose your application into a set of narrowly focused, independently deployable back-end services and an HTML 5 client. We will also discuss the role of technologies such as NodeJS and AMQP brokers. You will learn how a modern PaaS such as Cloud Foundry simplifies the development and deployment of this style of application.
Decomposing applications for deployability and scalability #springone2gx #s12gxChris Richardson
Today, there are several trends that are forcing application architectures to evolve. Users expect a rich, interactive and dynamic user experience on a wide variety of clients including mobile devices. Applications must be highly scalable, highly available and run on cloud environments. Organizations often want to frequently roll out updates, even multiple times a day. Consequently, it’s no longer adequate to develop simple, monolithic web applications that serve up HTML to desktop browsers.
In this talk we describe the limitations of a monolithic architecture. You will learn how to use the scale cube to decompose your application into a set of narrowly focused, independently deployable back-end services and an HTML 5 client. We will also discuss the role of technologies such as NodeJS and AMQP brokers. You will learn how a modern PaaS such as Cloud Foundry simplifies the development and deployment of this style of application.
Heard about Cloud Foundry? Already a Spring, Grails, Ruby, Node.js, Scala, or generalist programmer looking to understand what Cloud Foundry, the open source PaaS from VMware, means to you? Are you an architect trying to understand where PaaS fits it, and what it brings to the table? If you answered "yes" to any of those questions, then join the experts in this bootcamp to Cloud Foundry.
Decomposing applications for scalability and deployability (devnexus 2013)Chris Richardson
Today, there are several trends that are forcing application architectures to evolve. Users expect a rich, interactive and dynamic user experience on a wide variety of clients including mobile devices. Applications must be highly scalable, highly available and run on cloud environments. Organizations often want to frequently roll out updates, even multiple times a day. Consequently, it’s no longer adequate to develop simple, monolithic web applications that serve up HTML to desktop browsers.
In this talk we describe the limitations of a monolithic architecture. You will learn how to use the scale cube to decompose your application into a set of narrowly focused, independently deployable back-end services and an HTML 5 client. We will also discuss the role of technologies such as NodeJS and AMQP brokers. You will learn how a modern PaaS such as Cloud Foundry simplifies the development and deployment of this style of application.
Let's face it, the cloud's here to stay. Cloud Foundry, introduced to rave reviews in the NoSQL, Node.js, Ruby, Scala and Java communities, represents the most promising, most open cloud platform for Java and Spring applications today, and tomorrow. In this talk, we introduce Cloud Foundry and describe it's architecture.
You will learn about why Spring is the ideal cloud computing platform. We describe how Cloud Foundry can be used with both existing Spring applications and new ones leveraging Spring 3.1. You will learn how to use Spring Data to develop NoSQL applications on Cloud Foundry, and how to integrate applications with RabbitMQ and Spring AMQP.
Developing polyglot applications on Cloud Foundry (#oredev 2012)Chris Richardson
Developing web applications used to be simple. Your single war-file web application served up HTML to a desktop browser and used a relational database. Today however, web applications are much more complex: the front-end uses HTML5 and NodeJS, the middle tier is decomposed into multiple services, and the back-end uses a mix of SQL and NoSQL databases. Developing these kind of applications can be challenging since there are so many moving parts that need to be correctly installed and configured. Deployment is even more difficult.
In this talk, you will learn why we need to build applications with this architectural style and how Cloud Foundry, which is modern, multi-lingual, multi-service, extensible open-source PaaS, can help. We will talk about how to develop modern applications that run on Cloud Foundry and cover what’s new and different about the cloud environment. You will learn how your application can consume the various services that are provided by Cloud Foundry. We will discuss the various ways of using Cloud Foundry including the Micro Cloud that runs on a laptop as well as the hosted CloudFoundry.com.
Cloud-Native Modernization or Death? A false dichotomy. | DevNation Tech TalkRed Hat Developers
Are you familiar with the tight coupling of apps with their underlying platform that makes change hard or lack of scalability, performance, and flexibility of existing apps built with legacy technology or the fact that re-architecting apps cannot be done overnight? If yes to any of these, you probably think that you have “Cloud-Native Modernization or Death”. But what if there is another way that shows you the incremental steps to refactor the application to microservices and make use of Kubernetes/OpenShift to effectively deploy and manage it at scale on the cloud? This session guides developers on how to get started on their cloud-native journey, starting with monolithic application migration to a modern container platform using Kubernetes/OpenShift, and modernizing applications using microservices and Red Hat Cloud-Native Runtimes (Spring Boot and Quarkus).
Serverless is now well established pattern for all things Cloud. As we leverage this style architecture with more power we require more control. Discover how good architects and developers design and develop serverless platforms for the enterprise. We describe a framework that will move your serverless systems from good to great and help you grow our connected world.
Presentation on Continuous Deployment with Deployit that Vincent Partington gave at the BCS CMSG conference in London on June the 7th 2011.
http://www.bcs-cmsg.org.uk/conference2011/conference.html
Scaling Production Data across MicroservicesErik Ashepa
During the past 8 years, Fiverr migrated from a LAMP architecture all the way to 200~ Microservices with more than a dozen teams pushing a few hundred deploys a week.
Working inside the monolith was simple, all data was available but the move to microservices presented challenges as data was exposed via REST API, which caused performance and reliability issues, dependencies between teams and much more...
If you feel that your current strategy for sharing data is brittle this talk is for you! I'll present our robust solution for sharing data across Microservices, utilizing Kafka as a data hub using techniques borrowed from CQRS and DDD to tie everything together and iterate much faster!
(java2days) Is the Future of Java Cloudy?Steve Poole
Java – it’s on billions of devices. We think it powers the world. Others disagree.
In this talk we’ll examine a few of the reasons why some developers believe Java is being left behind by younger (or at least different) programming languages. We’ll show where the claims make sense and debunk some of the more outrageous slander. We know the future of Java includes a more polyglot world so we’ll help you understand with practical advice where Java shines today and where you might be better using something else. We’ll also cover the challenges that all runtimes have in the new era of Cloud and how the Java community is leading the way in evolving Java into becoming the Cloud runtime of choice.
This talk will help you become more informed when dealing with those inevitable language cage fights around the water cooler. You’ll be able to refute the fake news and replace it with clear facts. Vote for Java – you know it makes sense
YOW London - Considering Migrating a Monolith to Microservices? A Dark Energy...Chris Richardson
This is a talk I gave at YOW! London 2022.
Let's imagine that you are responsible for an aging monolithic application that's critical to your business. Sadly, getting changes into production is a painful ordeal that regularly causes outages. And to make matters worse, the application's technology stack is growing increasingly obsolete. Neither the business nor the developers are happy. You need to modernize your application and have read about the benefits of microservices. But is the microservice architecture a good choice for your application?
In this presentation, I describe the dark energy and dark matter forces (a.k.a. concerns) that you must consider when deciding between the monolithic and microservice architectural styles. You will learn about how well each architectural style resolves each of these forces. I describe how to evaluate the relative importance of each of these forces to your application. You will learn how to use the results of this evaluation to decide whether to migrate to the microservice architecture.
Dark Energy, Dark Matter and the Microservices Patterns?!Chris Richardson
Dark matter and dark energy are mysterious concepts from astrophysics that are used to explain observations of distant stars and galaxies. The Microservices pattern language - a collection of patterns that solve architecture, design, development, and operational problems — enables software developers to use the microservice architecture effectively. But how could there possibly be a connection between microservices and these esoteric concepts from astrophysics?
In this presentation, I describe how dark energy and dark matter are excellent metaphors for the competing forces (a.k.a. concerns) that must be resolved by the microservices pattern language. You will learn that dark energy, which is an anti-gravity, is a metaphor for the repulsive forces that encourage decomposition into services. I describe how dark matter, which is an invisible matter that has a gravitational effect, is a metaphor for the attractive forces that resist decomposition and encourage the use of a monolithic architecture. You will learn how to use the dark energy and dark matter forces as guide when designing services and operations.
Dark energy, dark matter and microservice architecture collaboration patternsChris Richardson
Dark energy and dark matter are useful metaphors for the repulsive forces, which encourage decomposition into services, and the attractive forces, which resist decomposition. You must balance these conflicting forces when defining a microservice architecture including when designing system operations (a.k.a. requests) that span services.
In this talk, I describe the dark energy and dark matter forces. You will learn how to design system operations that span services using microservice architecture collaboration patterns: Saga, Command-side replica, API composition, and CQRS patterns. I describe how each of these patterns resolve the dark energy and dark matter forces differently.
It sounds dull but good architecture documentation is essential. Especially when you are actively trying to improve your architecture.
For example, I spend a lot time helping clients modernize their software architecture. More often than I like, I’m presented with a vague and lifeless collection of boxes and lines. As a result, it’s sometimes difficult to discuss the architecture in a meaningful and productive way. In this presentation, I’ll describe techniques for creating minimal yet effective documentation for your application’s microservice architecture. In particular, you will learn how documenting scenarios can bring your architecture to life.
Using patterns and pattern languages to make better architectural decisions Chris Richardson
This is a presentation that gave at the O'Reilly Software Architecture Superstream: Software Architecture Patterns.
The talk's focus is the microservices pattern language.
However, it also shows how thinking with the pattern mindset - context/problem/forces/solution/consequences - leads to better technically decisions.
The microservices architecture offers tremendous benefits, but it’s not a silver bullet. It also has some significant drawbacks. The microservices pattern language—a collection of patterns that solve architecture, design, development, and operational problems—enables software developers to apply the microservices architecture effectively. I provide an overview of the microservices architecture and examines the motivations for the pattern language, then takes you through the key patterns in the pattern language.
Rapid, reliable, frequent and sustainable software development requires an architecture that is loosely coupled and modular.
Teams need to be able complete their work with minimal coordination and communication with other teams.
They also need to be able keep the software’s technology stack up to date.
However, the microservice architecture isn’t always the only way to satisfy these requirements.
Yet, neither is the monolithic architecture.
In this talk, I describe loose coupling and modularity and why they are is essential.
You will learn about three architectural patterns: traditional monolith, modular monolith and microservices.
I describe the benefits, drawbacks and issues of each pattern and how well it supports rapid, reliable, frequent and sustainable development.
You will learn some heuristics for selecting the appropriate pattern for your application.
Events to the rescue: solving distributed data problems in a microservice arc...Chris Richardson
To deliver a large complex application rapidly, frequently and reliably, you often must use the microservice architecture.
The microservice architecture is an architectural style that structures the application as a collection of loosely coupled services.
One challenge with using microservices is that in order to be loosely coupled each service has its own private database.
As a result, implementing transactions and queries that span services is no longer straightforward.
In this presentation, you will learn how event-driven microservices address this challenge.
I describe how to use sagas, which is an asynchronous messaging-based pattern, to implement transactions that span services.
You will learn how to implement queries that span services using the CQRS pattern, which maintain easily queryable replicas using events.
A pattern language for microservices - June 2021 Chris Richardson
The microservice architecture is growing in popularity. It is an architectural style that structures an application as a set of loosely coupled services that are organized around business capabilities. Its goal is to enable the continuous delivery of large, complex applications. However, the microservice architecture is not a silver bullet and it has some significant drawbacks.
The goal of the microservices pattern language is to enable software developers to apply the microservice architecture effectively. It is a collection of patterns that solve architecture, design, development and operational problems. In this talk, I’ll provide an overview of the microservice architecture and describe the motivations for the pattern language. You will learn about the key patterns in the pattern language.
QConPlus 2021: Minimizing Design Time Coupling in a Microservice ArchitectureChris Richardson
Delivering large, complex software rapidly, frequently and reliably requires a loosely coupled organization. DevOps teams should rarely need to communicate and coordinate in order to get work done. Conway's law states that an organization and the architecture that it develops mirror one another. Hence, a loosely coupled organization requires a loosely coupled architecture.
In this presentation, you will learn about design-time coupling in a microservice architecture and why it's essential to minimize it. I describe how to design service APIs to reduce coupling. You will learn how to minimize design-time coupling by applying a version of the DRY principle. I describe how key microservices patterns potentially result in tight design time coupling and how to avoid it.
Mucon 2021 - Dark energy, dark matter: imperfect metaphors for designing micr...Chris Richardson
In order to explain certain astronomical observations, physicists created the mysterious concepts of dark energy and dark matter.
Dark energy is a repulsive force.
It’s an anti-gravity that is forcing matter apart and accelerating the expansion of the universe.
Dark matter has the opposite attraction effect.
Although it’s invisible, dark matter has a gravitational effect on stars and galaxies.
In this presentation, you will learn how these metaphors apply to the microservice architecture.
I describe how there are multiple repulsive forces that drive the decomposition of your application into services.
You will learn, however, that there are also multiple attractive forces that resist decomposition and bind software elements together.
I describe how as an architect you must find a way to balance these opposing forces.
Skillsmatter CloudNative eXchange 2020
The microservice architecture is a key part of cloud native.
An essential principle of the microservice architecture is loose coupling.
If you ignore this principle and develop tightly coupled services the result will mostly likely be yet another "microservices failure story”.
Your application will be brittle and have all of disadvantages of both the monolithic and microservice architectures.
In this talk you will learn about the different kinds of coupling and how to design loosely coupled microservices.
I describe how to minimize design time and increase the productivity of your DevOps teams.
You will learn how how to reduce runtime coupling and improve availability.
I describe how to improve availability by minimizing the coupling caused by your infrastructure.
DDD SoCal: Decompose your monolith: Ten principles for refactoring a monolith...Chris Richardson
This is a talk I gave at DDD SoCal.
1. Make the most of your monolith
2. Adopt microservices for the right reasons
3. It’s not just architecture
4. Get the support of the business
5. Migrate incrementally
6. Know your starting point
7. Begin with the end in mind
8. Migrate high-value modules first
9. Success is improved velocity and reliability
10. If it hurts, don’t do it
Decompose your monolith: Six principles for refactoring a monolith to microse...Chris Richardson
This was a talk I gave at the CTO virtual summit on July 28th. It describes 6 principles for refactoring to a microservice architecture.
1. Make the most of your monolith
2. Adopt microservices for the right reasons
3. Migrate incrementally
4. Begin with the end in mind
5. Migrate high-value modules first
6. Success is improved velocity and reliability
The microservice architecture is becoming increasingly important. But what is it exactly? Why should you care about microservices? And, what do you need to do to ensure that your organization uses the microservice architecture successfully? In this talk, I’ll answer these and other questions. You will learn about the motivations for the microservice architecture and why simply adopting microservices is insufficient. I describe essential characteristics of microservices, You will learn how a successful microservice architecture consists of loosely coupled services with stable APIs that communicate asynchronously.
JFokus: Cubes, Hexagons, Triangles, and More: Understanding MicroservicesChris Richardson
The microservice architecture is becoming increasing important. But what is it exactly? Why should you care about microservices? And, what do you need to do to ensure that your organization uses the microservice architecture successfully? In this talk, I’ll answer these and other questions using shapes as visual metaphors. You will learn about the motivations for the microservice architecture and why simply adopting microservices is insufficient. I describe essential characteristics of microservices, You will learn how a successful microservice architecture consist of loosely coupled services with stable APIs that communicate asynchronous. I will cover strategies for effectively testing microservices.
Connector Corner: Automate dynamic content and events by pushing a buttonDianaGray10
Here is something new! In our next Connector Corner webinar, we will demonstrate how you can use a single workflow to:
Create a campaign using Mailchimp with merge tags/fields
Send an interactive Slack channel message (using buttons)
Have the message received by managers and peers along with a test email for review
But there’s more:
In a second workflow supporting the same use case, you’ll see:
Your campaign sent to target colleagues for approval
If the “Approve” button is clicked, a Jira/Zendesk ticket is created for the marketing design team
But—if the “Reject” button is pushed, colleagues will be alerted via Slack message
Join us to learn more about this new, human-in-the-loop capability, brought to you by Integration Service connectors.
And...
Speakers:
Akshay Agnihotri, Product Manager
Charlie Greenberg, Host
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered QualityInflectra
In this insightful webinar, Inflectra explores how artificial intelligence (AI) is transforming software development and testing. Discover how AI-powered tools are revolutionizing every stage of the software development lifecycle (SDLC), from design and prototyping to testing, deployment, and monitoring.
Learn about:
• The Future of Testing: How AI is shifting testing towards verification, analysis, and higher-level skills, while reducing repetitive tasks.
• Test Automation: How AI-powered test case generation, optimization, and self-healing tests are making testing more efficient and effective.
• Visual Testing: Explore the emerging capabilities of AI in visual testing and how it's set to revolutionize UI verification.
• Inflectra's AI Solutions: See demonstrations of Inflectra's cutting-edge AI tools like the ChatGPT plugin and Azure Open AI platform, designed to streamline your testing process.
Whether you're a developer, tester, or QA professional, this webinar will give you valuable insights into how AI is shaping the future of software delivery.
DevOps and Testing slides at DASA ConnectKari Kakkonen
My and Rik Marselis slides at 30.5.2024 DASA Connect conference. We discuss about what is testing, then what is agile testing and finally what is Testing in DevOps. Finally we had lovely workshop with the participants trying to find out different ways to think about quality and testing in different parts of the DevOps infinity loop.
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...UiPathCommunity
💥 Speed, accuracy, and scaling – discover the superpowers of GenAI in action with UiPath Document Understanding and Communications Mining™:
See how to accelerate model training and optimize model performance with active learning
Learn about the latest enhancements to out-of-the-box document processing – with little to no training required
Get an exclusive demo of the new family of UiPath LLMs – GenAI models specialized for processing different types of documents and messages
This is a hands-on session specifically designed for automation developers and AI enthusiasts seeking to enhance their knowledge in leveraging the latest intelligent document processing capabilities offered by UiPath.
Speakers:
👨🏫 Andras Palfi, Senior Product Manager, UiPath
👩🏫 Lenka Dulovicova, Product Program Manager, UiPath
Search and Society: Reimagining Information Access for Radical FuturesBhaskar Mitra
The field of Information retrieval (IR) is currently undergoing a transformative shift, at least partly due to the emerging applications of generative AI to information access. In this talk, we will deliberate on the sociotechnical implications of generative AI for information access. We will argue that there is both a critical necessity and an exciting opportunity for the IR community to re-center our research agendas on societal needs while dismantling the artificial separation between the work on fairness, accountability, transparency, and ethics in IR and the rest of IR research. Instead of adopting a reactionary strategy of trying to mitigate potential social harms from emerging technologies, the community should aim to proactively set the research agenda for the kinds of systems we should build inspired by diverse explicitly stated sociotechnical imaginaries. The sociotechnical imaginaries that underpin the design and development of information access technologies needs to be explicitly articulated, and we need to develop theories of change in context of these diverse perspectives. Our guiding future imaginaries must be informed by other academic fields, such as democratic theory and critical theory, and should be co-developed with social science scholars, legal scholars, civil rights and social justice activists, and artists, among others.
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...James Anderson
Effective Application Security in Software Delivery lifecycle using Deployment Firewall and DBOM
The modern software delivery process (or the CI/CD process) includes many tools, distributed teams, open-source code, and cloud platforms. Constant focus on speed to release software to market, along with the traditional slow and manual security checks has caused gaps in continuous security as an important piece in the software supply chain. Today organizations feel more susceptible to external and internal cyber threats due to the vast attack surface in their applications supply chain and the lack of end-to-end governance and risk management.
The software team must secure its software delivery process to avoid vulnerability and security breaches. This needs to be achieved with existing tool chains and without extensive rework of the delivery processes. This talk will present strategies and techniques for providing visibility into the true risk of the existing vulnerabilities, preventing the introduction of security issues in the software, resolving vulnerabilities in production environments quickly, and capturing the deployment bill of materials (DBOM).
Speakers:
Bob Boule
Robert Boule is a technology enthusiast with PASSION for technology and making things work along with a knack for helping others understand how things work. He comes with around 20 years of solution engineering experience in application security, software continuous delivery, and SaaS platforms. He is known for his dynamic presentations in CI/CD and application security integrated in software delivery lifecycle.
Gopinath Rebala
Gopinath Rebala is the CTO of OpsMx, where he has overall responsibility for the machine learning and data processing architectures for Secure Software Delivery. Gopi also has a strong connection with our customers, leading design and architecture for strategic implementations. Gopi is a frequent speaker and well-known leader in continuous delivery and integrating security into software delivery.
The Art of the Pitch: WordPress Relationships and SalesLaura Byrne
Clients don’t know what they don’t know. What web solutions are right for them? How does WordPress come into the picture? How do you make sure you understand scope and timeline? What do you do if sometime changes?
All these questions and more will be explored as we talk about matching clients’ needs with what your agency offers without pulling teeth or pulling your hair out. Practical tips, and strategies for successful relationship building that leads to closing the deal.
UiPath Test Automation using UiPath Test Suite series, part 4DianaGray10
Welcome to UiPath Test Automation using UiPath Test Suite series part 4. In this session, we will cover Test Manager overview along with SAP heatmap.
The UiPath Test Manager overview with SAP heatmap webinar offers a concise yet comprehensive exploration of the role of a Test Manager within SAP environments, coupled with the utilization of heatmaps for effective testing strategies.
Participants will gain insights into the responsibilities, challenges, and best practices associated with test management in SAP projects. Additionally, the webinar delves into the significance of heatmaps as a visual aid for identifying testing priorities, areas of risk, and resource allocation within SAP landscapes. Through this session, attendees can expect to enhance their understanding of test management principles while learning practical approaches to optimize testing processes in SAP environments using heatmap visualization techniques
What will you get from this session?
1. Insights into SAP testing best practices
2. Heatmap utilization for testing
3. Optimization of testing processes
4. Demo
Topics covered:
Execution from the test manager
Orchestrator execution result
Defect reporting
SAP heatmap example with demo
Speaker:
Deepak Rai, Automation Practice Lead, Boundaryless Group and UiPath MVP
Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...Jeffrey Haguewood
Sidekick Solutions uses Bonterra Impact Management (fka Social Solutions Apricot) and automation solutions to integrate data for business workflows.
We believe integration and automation are essential to user experience and the promise of efficient work through technology. Automation is the critical ingredient to realizing that full vision. We develop integration products and services for Bonterra Case Management software to support the deployment of automations for a variety of use cases.
This video focuses on the notifications, alerts, and approval requests using Slack for Bonterra Impact Management. The solutions covered in this webinar can also be deployed for Microsoft Teams.
Interested in deploying notification automations for Bonterra Impact Management? Contact us at sales@sidekicksolutionsllc.com to discuss next steps.
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024Tobias Schneck
As AI technology is pushing into IT I was wondering myself, as an “infrastructure container kubernetes guy”, how get this fancy AI technology get managed from an infrastructure operational view? Is it possible to apply our lovely cloud native principals as well? What benefit’s both technologies could bring to each other?
Let me take this questions and provide you a short journey through existing deployment models and use cases for AI software. On practical examples, we discuss what cloud/on-premise strategy we may need for applying it to our own infrastructure to get it to work from an enterprise perspective. I want to give an overview about infrastructure requirements and technologies, what could be beneficial or limiting your AI use cases in an enterprise environment. An interactive Demo will give you some insides, what approaches I got already working for real.
Epistemic Interaction - tuning interfaces to provide information for AI supportAlan Dix
Paper presented at SYNERGY workshop at AVI 2024, Genoa, Italy. 3rd June 2024
https://alandix.com/academic/papers/synergy2024-epistemic/
As machine learning integrates deeper into human-computer interactions, the concept of epistemic interaction emerges, aiming to refine these interactions to enhance system adaptability. This approach encourages minor, intentional adjustments in user behaviour to enrich the data available for system learning. This paper introduces epistemic interaction within the context of human-system communication, illustrating how deliberate interaction design can improve system understanding and adaptation. Through concrete examples, we demonstrate the potential of epistemic interaction to significantly advance human-computer interaction by leveraging intuitive human communication strategies to inform system design and functionality, offering a novel pathway for enriching user-system engagements.
State of ICS and IoT Cyber Threat Landscape Report 2024 previewPrayukth K V
The IoT and OT threat landscape report has been prepared by the Threat Research Team at Sectrio using data from Sectrio, cyber threat intelligence farming facilities spread across over 85 cities around the world. In addition, Sectrio also runs AI-based advanced threat and payload engagement facilities that serve as sinks to attract and engage sophisticated threat actors, and newer malware including new variants and latent threats that are at an earlier stage of development.
The latest edition of the OT/ICS and IoT security Threat Landscape Report 2024 also covers:
State of global ICS asset and network exposure
Sectoral targets and attacks as well as the cost of ransom
Global APT activity, AI usage, actor and tactic profiles, and implications
Rise in volumes of AI-powered cyberattacks
Major cyber events in 2024
Malware and malicious payload trends
Cyberattack types and targets
Vulnerability exploit attempts on CVEs
Attacks on counties – USA
Expansion of bot farms – how, where, and why
In-depth analysis of the cyber threat landscape across North America, South America, Europe, APAC, and the Middle East
Why are attacks on smart factories rising?
Cyber risk predictions
Axis of attacks – Europe
Systemic attacks in the Middle East
Download the full report from here:
https://sectrio.com/resources/ot-threat-landscape-reports/sectrio-releases-ot-ics-and-iot-security-threat-landscape-report-2024/
Decomposing Applications for Scalability and Deployability (April 2012)
1. Decomposing applications for
deployability and scalability
Chris Richardson
Author of POJOs in Action
Founder of the original CloudFoundry.com
@crichardson
crichardson@vmware.com
1
11. Traditional web application architecture
WAR
StoreFrontUI
Accounting
Service
MySQL
Browser Apache Database
InventoryService
Shipping
Service
Simple to Tomcat
develop
test
deploy
scale
11
13. Users expect a rich, dynamic and
interactive experience on mobile
devices and desktop
h
oug
d en
oo
’t g
HTTP Request
e isn
r
ctu
Java Web
Browser
e
hit
HTML/Javascript Application
c
I ar
ty le U
s
Old
Real-time web ≅ NodeJS
13
14. One dimensional scalability
§ Scales to handle transaction volumes
§ Higher transaction rate required run more instances
§ Some clouds will do this automatically, others easily
§ No code changes required
BUT
§ Does not scale with increasing data volumes
§ Caching is less effective
§ Requires more memory
§ Requires more I/O
14
15. Components that don’t cluster
§ Most application components are easily clustered:
• Most services are stateless
• Server-side session state: sticky session routing/state
server
BUT there are exceptions
§ Singletons that maintain global application state:
• e.g. CEP engine analyzing event stream over HTTP
§ Commercial software with a per-server license fee
§ If one application component can’t be clustered you can’t
cluster the application!
15
16. Obstacle to frequent deployments
§ Need to redeploy everything to change one component
§ Interrupts long running background (e.g. Quartz) jobs
§ Increases risk of failure
Fear of change
§ Updates will happen less often
§ e.g. Makes A/B testing UI really difficult 16
18. Scaling development
WAR
StoreFrontUI
Accounting
Scalable
!=
InventoryService development
Shipping
§ Forces teams to synchronize development efforts
§ Teams need to coordinate updates
18
19. Long-term commitment to a single technology stack
§ Let’s suppose you go with the JVM
• Some polyglot support
• Many (but not all) JVM languages interoperate easily
• e.g. Scala, Groovy modules within a Java application
• But you can’t use non-JVM languages
§ Application depends on a particular:
• Framework - e.g. Spring or Java EE
• Container - e.g. Tomcat
§ Switching technology stack touches entire application
• Painful
• Rarely done
19
20. Agenda
§ The (sometimes evil) monolith
§ Decomposing applications into services
§ How do services communicate?
§ Presentation layer design
§ Decomposing a monolithic application
§ How Cloud Foundry helps
20
21. 3 dimensions to scaling
Y axis -
functional
decomposition
Scale by
s
ng
splitting
ila g
n
hi
g s oni
rt
different things
iti
rt
im
pa
ta
in
da
ittl
s-
sp
i
ax
by
Z
ale
X axis - horizontal duplication
Sc
Scale by cloning
21
22. X axis scaling - application level
Load WAR
Balancer
Tomcat
22
23. X axis scaling - database level
Writes Consistent reads
MySQL
Master
Inconsistent reads
MySQL MySQL MySQL
Slave 1 Slave 2 Slave N
Slaves are clones
23
24. Benefits and drawbacks of X axis splits
§ Benefits
• Easy and fast to implement
• Handles increasing transaction volumes
• Simple to manage
§ Drawbacks
• Doesn’t scale with increasing data volumes
• Doesn’t address application/development complexity
• Couples entire application to a particular technology stack
24
25. Z axis scaling - data partitioning
§ Each server runs the identical code base
§ Different servers responsible for different data
§ Route request based on
• Attribute of the request
• Identity/attribute of the requestor/customer
§ For example:
• Sharding - partition data by primary key
• Free customer vs. paying customer
Server 1
Request:
... Some attribute ...
“Router”
Server 2
...
25
26. Z axis scaling - database sharding
Partition column
RESTAURANT table
ID Name …
1 Ajanta
2 Eggshop
…
X axis scaling too!
Database server 1 Database server 2
ID Name … ID Name …
1 Ajanta 2 Eggshop
… …
26
27. Z axis scaling - application example
Content Query
Update Router Query Aggregator
Search Service Search Service
Search Service Search Service
Cache Cache
Database server 1 Database server 2
Partition 1 Partition 2 27
28. Benefits and drawbacks of Z axis splits
§ Benefits
• Each server only deals with a subset of the data
• Improved caching
• Reduced memory usage and reduced I/O
• Improved transaction scalability
• Improved fault isolation - failure only makes part of the data
inaccessible
§ Drawbacks
• Doesn’t scale with increasing development and application
complexity
• Increased management/deployment complexity
28
29. Y axis scaling - functional partitioning
§ Splits monolithic application into a set of services
§ Each service implements related set of functionality
§ Partitioning schemes:
• Partition functionality by noun or by verb
• Single Responsibility Principle
• e.g. Unix utilities - do one focussed thing well
29
30. Y axis scaling - application level
billing web application
Accounting
Service
Store front web application inventory web application
Store Front InventoryService
shipping web application
ShippingService
Apply X axis cloning and/or Z axis partitioning to each service
30
31. Y axis scaling - databases
Application
MySQL MySQL
MySQL MySQL
Order Customer
table table
.... ....
Apply X axis cloning and/or Z axis partitioning to each database
31
32. Real world examples
http://techblog.netflix.com/
Between 100-150 services are accessed to
build a page.
http://highscalability.com/amazon-architecture
http://www.addsimplicity.com/downloads/
eBaySDForum2006-11-29.pdf
http://queue.acm.org/detail.cfm?id=1394128
32
33. Benefits and drawbacks of Y axis splits
§ Benefits
• Scales development: focussed two pizza devops teams
• Deploy services independently
• Scale services independently
• Improves fault isolation
• Eliminates long-term commitment to a single technology
stack
• Enforces well defined interfaces between components
§ Drawbacks
• Implementation complexity
• Deployment complexity
33
34. Two levels of architecture
§ System level
• Defines the inter-service glue: interfaces and
communication mechanisms
• Slow changing
Versus
§ Service level
• Defines the internal architecture of each service
• Far fewer constraints on technology
• Each service could use a different technology stack
• Rapid evolving
34
35. If services are small...
§ Regularly rewrite using a better technology stack
§ Pick the best developers rather than best <pick a
language> developers
§ Adapt system to changing requirements and better
technology without a total rewrite
Fred George
“Developer Anarchy”
35
36. Moreover: you are not the same you ...
§ Cell lifetimes: Can we build software
• hours - some white blood cells systems with these
characteristics?
• days - stomach lining cells
• years - bone cells Too much technical debt
• lifetime - brain cells component death?
§ 50 to 70 billion of your cells die each day
§ Yet you (the system) remains intact
http://dreamsongs.com/Files/
DesignBeyondHumanAbilitiesSimp.pdf
http://dreamsongs.com/Files/WhitherSoftware.pdf
36
37. Agenda
§ The (sometimes evil) monolith
§ Decomposing applications into services
§ How do services communicate?
§ Presentation layer design
§ Decomposing a monolithic application
§ How Cloud Foundry helps
37
38. Inter-service communication options
§ Multiple collaborating services need a communication
mechanism
§ Many choices:
• Synchronous asynchronous
• Transports: HTTP, AMQP, ...
• Formats: JSON, XML, Protocol Buffers, Thrift, ...
• Even via the database
§ Distributed application error handling strategies
38
39. Synchronous communication
wgrus-billing.war
Accounting
Service
REST
wgrus-store.war
wgrus-shipping.war
SOAP
StoreFrontUI Shipping MySQL
Service
Thrift
... wgrus-inventory.war
InventoryService
Lots of choices
39
40. Service discovery options
§ Clients need to know the coordinates of their dependencies
§ Option #1: Caller is configured with dependencies’s URL
• e.g. Environment variables, system properties
§ Option #2: Services announce their location
• Relies on ‘broadcast’ protocol or Gossip protocol to
announce location
• e.g. RabbitMQ message broker
§ Option #3: configuration server
• Maintains all the configuration information
• e.g. Zookeeper
40
41. Benefits and drawbacks
§ Benefits
• Simple to implement and use
§ Drawbacks
• Poor fault isolation: caller is blocked if server is down/slow
• Caller needs to know server’s coordinates (URL, ...)
• Less scalable than asynchronous protocols
41
42. Asynchronous message-based communication
wgrus-billing.war
Accounting
Service
wgrus-store.war
RabbitMQ wgrus-inventory.war
StoreFrontUI (Message
MySQL
Broker) Widget
InventoryService
wgrus-inventory.war
InventoryService
42
43. Benefits and drawbacks
§ Benefits
• Decouples caller from server
• Caller unaware of server’s coordinates (URL)
• Message broker buffers message when server is down/slow
§ Drawbacks
• Additional complexity of message broker
• RPC using messaging is more complex
43
45. Benefits and drawbacks
§ Benefits
• Simple
• Single (consistent) source of data
§ Drawbacks
• Defeats the purpose of having multiple services
• Less scalable
• More coupling
45
46. Better: separate databases
Customer Update Event
Order Management Customer Management
Database
Database
Orders
Customers
Customers (copy)
46
47. Maintaining consistency without 2PC
begin transaction
update order tables
save intent to update customer tables
commit transaction
for each saved intent
begin transaction
delete intent
queue message to update customer Customer management
commit transaction dequeue message
Order management begin transaction
if (update has not been applied) {
record update as applied
update customer tables
BASE: An Acid Alternative by Dan Pritchett
}
http://queue.acm.org/detail.cfm?id=1394128 commit transaction
acknowledge message 47
49. Composable futures
§ Problem:
• Service A needs to call services B and C and then D
• Makes sense to call B and C parallel
• Yet most concurrency APIs are low-level, error-prone etc
§ Solution:
• Use Akka composable futures = really nice abstraction
val futureB = callB() Two calls execute in parallel
val futureC = callC()
val futureD = for {
b <- futureB.mapTo[SomeType]
c <- futureC.mapTo[SomeType]
d <- callD(b, c) And then invokes D
} yield d
val result = Await.result(futureD, 1 second).
asInstanceOf[SomeOtherType]
Get the result of D
http://doc.akka.io/docs/akka/2.0.1/scala/futures.html
http://en.wikipedia.org/wiki/Futures_and_promises
49
50. Spring Integration
§ Builds on Spring framework
§ High-level of abstraction for building message
based applications
§ Implements EAI patterns
§ Provides plumbing for exchanging messages
between application components
§ Promotes loosely coupled components
§ Integrates with external messaging infrastructure:
JMS, AMQP, HTTP, Email, File transfer
50
51. Spring Integration concepts
§ Message channel
• Virtual pipe connecting producer and consumer
§ Message endpoints
• The filter of a pipes-and-filter architecture
• Read from and/or write to channel
§ Endpoint types:
• Transformer
• Filter
• Router
• Splitter
• Aggregator
• ServiceActivator
• Inbound channel adapter - read from external source, writes to channel
• Outbound channel adapter - read from channel write to external destination
51
53. Example of reconfigurability - local
@Service
public class OrderServiceImpl { @Service
public class ShippingServiceImpl {
@Autowired
private ShippingService shippingService; public void shipOrder(String orderId) {
System.out.println("shipped order: " + orderId);
public void placeOrder() { }
String orderId = generateOrderId();
… }
shippingService.shipOrder(orderId);
}
}
Order Shipping
Service service
Messaging
Gateway
Channel Service
Activator
53
54. Example of reconfigurability - distributed
Code unchanged in new deployment
Order Shipping
Service service
Messaging
Gateway RabbitMQ
Channel AMQP AMQP Channel Service
Activator
54
55. Handling failure
§ Errors happen (especially in distributed systems)
§ Use timeouts and retries
• Never wait forever
• Some errors are transient so retry
§ Use per-dependency bounded thread pool with bounded queue
• Limits number of outstanding requests
• Fails fast if service is slow or down
§ Use circuit breaker
• High rate of errors stop calling temporarily
• Avoids calling service that has issues
§ On failure
• Returned cached or default data
• Invoke custom error handler
http://techblog.netflix.com/2012/02/fault-tolerance-in-high-volume.html
55
56. Agenda
§ The (sometimes evil) monolith
§ Decomposing applications into services
§ How do services communicate?
§ Presentation layer design
§ Decomposing a monolithic application
§ How Cloud Foundry helps
56
58. NodeJS is the fashionable technology
Many JavaScript client frameworks have a NodeJS counterpart
e.g. socket.io
58
59. NodeJS isn’t the only game in town
JVM-based http://vertx.io/
59
60. A modern web application
Service 1
RESTful WS Node JS
Browser
HTML 5 Server Application
Application Service 2
Events
Socket.io Socket.io
client server
...
60
61. Alternatively: multiple front-end servers
Node JS Service 1
Browser
HTML 5 Node JS Service 2
Application
Node JS ...
Needs single-sign-on
61
62. NodeJS - using RESTful WS and AMQP
REST
Service
Requests
Node JS
Events
socket.io
AMQP AMQP
RabbitMQ Service
62
63. Updating the UI is easy
§ Update the UI independently of rest of system
§ Easily run A/B tests
§ Enables fast iteration of the UI
http://theleanstartup.com/principles
63
64. But coordination with backend changes required
§ Let’s imagine that you are deploying an advanced search
feature:
• Enhancements to search service
• Enhancements to UI
§ Before
• Deploy new war
§ Now:
• Some coordination required
• Deploy updated backend service
• Deploy updated NodeJS and browser code
• Enable feature using feature switch
64
65. Agenda
§ The (sometimes evil) monolith
§ Decomposing applications into services
§ How do services communicate?
§ Presentation layer design
§ Decomposing a monolithic application
§ How Cloud Foundry helps
65
66. The challenge
§ In the beginning:
• It would be easy to use Y axis/functional decomposition
• But you don’t need it and it would slow you down
§ Later on:
• You do need it
• But your application logic is tangled and decomposition is
difficult
66
67. Lower cost way to start with Y axis decomposition
§ Enforce boundaries between services, e.g. DTOs
§ But run in a single JVM with a single database
§ Use Spring Integration
• Course-grained message-based communication
• Via in-memory channels
§ Downside:
• Implementing the glue layers are extra work
67
68. Special case: Components that don’t cluster
Application
Monitoring Rest of domain classes
A
C
B
D
Esper
Tangled dependencies prevent Y axis scaling
Doesn’t cluster No X axis scaling/cloning 68
69. Don’t let this happen!
Use well-defined interfaces
Ensure loose coupling
69
71. Extracting a service = untangling dependencies
Application Service
Service C
Service A Service B
Trouble!
Domain model 1 Domain model 2
X A C
Y B
Z
71
72. Untangling dependencies
§ Domain object is part of an association class A {
• Read only - replicate private B other;
• Update only - notification interface }
• Update then read - replicate
§ Domain object is a request parameter class A {
• Read-only - replace with DTO void m(B other) {
...
• Update only - notification interface }
• Update then read - tricky }
§ Note - Need acyclic dependencies
• If used object isn’t part of a service = assumption is that it
belongs in calling service
72
73. Bounded context is a useful idea
§ Different parts of a system different domain models
§ Different services have a different view of some domain
objects, e.g.
• User Management = complex view of user
• Rest of application = PK + ACL + Name
§ Different services can have a different domain model
§ Services exchange messages to synchronize data
73
74. Untangling dependencies 1
Service A Service B Service C
Domain model 1 Domain model 2
X A C
doSomething(Y)
doSomethingElse()
Y B
getSomething()
Z
74
75. Untangling dependencies 2
Service A Service B Service C
Domain model 1 Domain model 2
doSomething(YDTO) C
X A
Facade A
doSomethingElse()
Y B
Facade B
Z
75
76. Untangling dependencies 3
Service A Service B Service C
Domain model 1 Domain model 2
C
doSomething(YDTO)
X Facade A A
Message
Broker Listener
Y
Listener B
doSomethingElse()
Z Facade B
76
77. Agenda
§ The (sometimes evil) monolith
§ Decomposing applications into services
§ How do services communicate?
§ Presentation layer design
§ Decomposing a monolithic application
§ How Cloud Foundry helps
77
79. Developing service-oriented apps is harder
§ Many more moving parts to manage
• Infrastructure services: SQL, NoSQL, RabbitMQ
• Application services
§ Who is going to setup the environments:
• the developer sandbox?
• ...
• QA environments?
79
80. Cloud Foundry makes it easier
§ Easy to deploy applications
§ Easy to provision services
§ Manifest describes the structure of a set of services
§ vmc env-add for binding 'app services' together
§ Micro Cloud Foundry is your personal cloud/sandbox
§ Caldecott exposes services for use by integration tests
80
82. Creating a service instance
$ vmc create-service mysql --name mysql1
Creating Service: OK
$ vmc services
......
=========== Provisioned Services ============
+-------------+---------+
| Name | Service |
+-------------+---------+
| mysql1 | mysql |
+-------------+---------+
84. Multi-application manifest - part 2
store/target: Path to application
name: store
url: cer-store.chrisr.cloudfoundry.me
framework:
name: spring
info:
mem: 512M
description: Java SpringSource Spring Application
exec:
mem: 512M
instances: 1
services: Required services
si-mongo:
type: :mongodb
si-rabbit:
type: :rabbitmq
84
85. One command to create services and deploy application
$ vmc push
Would you like to deploy from the current directory? [Yn]:
Pushing application 'inventory'...
Creating Application: OK
Creating Service [si-rabbit]: OK
Binding Service [si-rabbit]: OK
Creating Service [si-mongo]: OK
Binding Service [si-mongo]: OK
Creating Service [si-redis]: OK
Binding Service [si-redis]: OK
Uploading Application:
Checking for available resources: OK
Processing resources: OK
Packing application: OK
Uploading (12K): OK
vmc push:
Push Status: OK •Reads the manifest file
•Creates the required services
Staging Application 'inventory': OK
Starting Application 'inventory': OK
Pushing application 'store'...
Creating Application: OK •Deploys all the applications
Binding Service [si-mongo]: OK
Binding Service [si-rabbit]: OK
Uploading Application:
Checking for available resources: OK
Processing resources: OK
Packing application: OK
Uploading (5K): OK
Push Status: OK
Staging Application 'store': OK
85
Starting Application 'store': ...
86. Application configuration via environment variables
$ vmc env-add cf1
PAYMENT_SVC=http://...
Adding Environment Variable
[PAYMENT_SVC=http://...]: OK
Stopping Application: OK
Staging Application: OK
String value = System.getenv("PAYMENT_SVC")
@Value("#{systemEnvironment['PAYMENT_SVC']}")
private String envVariable;
87. Micro Cloud Foundry: new developer sandbox
App Instances Services
Open source Platform as a Service project
10.04
A PaaS packaged as a VMware Virtual Machine
Use as a developer sandbox
• Use the services from Junit integration tests
• Deploy your application for functional testing
• Remote debugging from STS
87
88. Using Caldecott…
$ vmc tunnel
1: mysql-135e0
2: mysql1
Which service to tunnel to?: 2
Password: ********
Stopping Application: OK
Redeploying tunnel application 'caldecott'.
Uploading Application:
Checking for available resources: OK
Packing application: OK
Uploading (1K): OK
Push Status: OK
Binding Service [mysql1]: OK
Staging Application: OK
Starting Application: OK
Getting tunnel connection info: OK
Service connection info:
username : uMe6Apgw00AhS
password : pKcD76PcZR7GZ
name : d7cb8afb52f084f3d9bdc269e7d99ab50
Starting tunnel to mysql1 on port 10000.
1: none
2: mysql
Which client would you like to start?: 2
89. …Using Caldecott
Launching 'mysql --protocol=TCP --host=localhost --port=10000 --
user=uMe6Apgw00AhS --password=pKcD76PcZR7GZ
d7cb8afb52f084f3d9bdc269e7d99ab50'
Welcome to the MySQL monitor. Commands end with ; or g.
Your MySQL connection id is 10944342
Server version: 5.1.54-rel12.5 Percona Server with XtraDB (GPL),
Release 12.5, Revision 188
Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights
reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or 'h' for help. Type 'c' to clear the current input
statement.
mysql>
90. Running JUnit test with Caldecott
Configure your test code to use port + connection info
90
91. Summary
§ Monolithic applications are simple to develop and deploy
BUT applying the scale cube
§ Decomposes your application into services
§ Enables scaling for transactions and data volumes
§ Tackles application complexity
§ Enables scaling for development
§ Enables frequent, independent deployments
§ Make it easy to leverage other technologies
AND
§ Cloud Foundry simplifies the development and deployment of
“service-oriented” applications
91