Neosperience Cloud • Deeply understand their customers and be more useful to them by delivering relevant digital experiences. • Delight customers by delivering relevant experiences across mobile, web, in-store. • Maintain their Brand identity and increase value as platforms like Amazon, Google and Facebook drive up disintermediation and make companies unintentional utilities. • Keep pace with the variety of devices and interaction models available to customers to overcome complexity and costs associated with the alignment of apps, web apps, social media and conversational interfaces. Neosperience Cloud is the technology platform that allows creating personalized experiences for your customers that drive loyalty and faster paths to purchase. Unlike existing technologies that rely only on demographics data, we use proprietary models, developed with AI, to personalize your offering to the right segment. A compelling experience for each customer at the right time, place, and situational context. …which means fast time to market, machine learning and scalability by design.
ephemeral compute power that comes into existence on request and disappears immediately after use. Use of this architecture can mitigate some security concerns such as security patching and SSH access control, and can make much more efficient use of compute resources. These systems cost very little to operate and can have inbuilt scaling features.” — ThoughtWorks, 2016
and scaling ✓ Implicitly fault-tolerant ✓ Metrics ✓ No machines, VMs, or containers ✓ Bring Your Own Code ✓ Stateless ✓ Never pay for idle ✓ Scales per request
way to decouple services (async message passing) • largely abused in the last decade (EnterpriseServiceBus / SOA) • now revamped with CQRS and Event Sourcing to handle microservices communication • serverless functions handle events • need a different approach on architectures
you run code without provisioning or managing servers. AWS Lambda executes your code only when needed and scales automatically, from a few requests per day to thousands per second. • Service released on Nov, 2014 • Introduces Event-Driven programming model • Provides a context and an event object
your customers: turn your app on - even if their smartphone is in stand-by mode - and deliver a notification to sell direct or to bring back qualified customers to your venue. • Utilize Facebook and other social media platforms to encourage digital and physical store purchases and prompt customers with personalized messages. Send promotions and relevant product information when they are ready to buy: shopping, close or inside your store, entering your competitor’s store or located in adjacent businesses.
is the scripting language for AWS Cloud Describe your cloud infrastructure in a JSON or YML template file and let CloudFormation build resources you need Templates can be versioned ensuring immutability Deployments can be parametrized Built-in helpers
install serverless —save Create a function in NodeJS (Java and Python supported too) serverless create —template=aws-nodejs Deploy service serverless deploy done!
• Funded by a 3M investment • Manages service deployments and provisioning • Vendor independent (in a future release) • Auto-provision of resources • Supports for micro-services • Improved plugin management system • Production ready serverless framework The easy, open way to build Serverless applications The Serverless Framework is an open-source CLI for building and deploying serverless applications. With over 6 million deployments handled, the Serverless Framework is the tool developers trust to build cloud applications.
of integrations and helpers to ease development and project management, from minification to dependency check, to support for web sockets or third party technologies. Support for dev dependencies exclusion, thus reducing package size and improving function load time, then minimizing cold start issue Resources are created as CloudFormation template embedded in serverless.yml serverless.yml
means every new CF functionality is natively supported by SAM cloud formation template and SAM CLI Custom Transform AWS SAM is a custom transform applied to CloudFormation Templates (a macro that processes our template and expands into a CF stack CLI handles packaging AWS SAM CLI handles code packaging and upload to S3, minimizing overhead from code to cloud
Framework’s syntax ✓ Special Serverless resources (e.g. AWS::Serverless::Function) ✓ Natively supported by AWS SAM Local (github.com/awslabs/aws-sam-local)
defining cloud infrastructure in code” https://github.com/awslabs/aws-cdk CloudFornation Custom Transform “support for user defined macros within CF script” https://aws.amazon.com/about-aws/whats-new/ 2018/09/introducing-aws-cloudformation-macros/
CloudFormation direct usage Writing CloudFormation code is uncomfortable • It’s error prone! • Debugging is hard and there is no strong validation • No support for conditional stack creation • No support for multiple creation of the same resource • Extremely verbose
a REST API with helpers Helpers to support fast resources definition Lambda code is packaged by asset Helpers to support fast resources definition Supports multiple nested stacks Stacks as constructs can be versioned and released as NPM libraries, then composed into an app
generated directly from CloudFormation primitives - map directly from CloudFormation - Ensure support for any feature CloudFormation provides - start with Cfn<something> AWS Construct Library - provide constructs representing AWS Resources (such as Bucket, Topic or Table) with default configurations - provide helpers to simplify common operations - auto-configuration for required resources - enforce best practices - start with aws<something> Customer Constructs - can be heavily customised, extend cdk.Construct - used to wrap architecture components - used to standardize common patterns - can be released as NPM package
leaving.. ur manager steps into the office.. …with another great idea: … everyone in your office is gone to the beach.. … the sun is shining, weather is hot, the day is almost over… … then your manager steps into the office, with an idea for a great business product!!
drive them to buy, based on their location and app/web/store interaction patterns. IDEA! Make it Serverless • Focus only on your code • No infrastructure to manage (your IT guy has a family, too) Scales up to production requirements • Can be released within minutes • Use DynamoDB and GSI • Serverless does not mean spaghetti-code! adopt a serverless architecture that can scale up to millions and EVOLVE through time
requirements • Deep Learning models • Integrating with 3rd party products • Different data types to persist • Need for speed and scalability • Team communication has a lot of friction: IT operation and dev teams
monolith • Multi-region deploy of SpringMVC / Java on Apache Tomcat / JBoss • Shared RDS database managed by Hibernate • Autoscaling group for EC2 instances, Elastic IP Pros ✓ Everything within a single package ✓ Simple CI workflow ✓ Easy services coordination Cons - Lifecycle: one change in code requires a full release of Neosperience - Scalability / Costs: planning autoscale for different usages is not easy - Everything is a REST endpoint
Spring Boot/Cloud on Java Stack • Docker image for each service within NGINX • DynamoDB used as façade towards clients • RDS managed through Spring Data • Coordination service (Module Manager) Pros ✓ Smaller services, same technology for everything ✓ Immutable deployments: from CI to Docker registry ✓ Easy services coordination Cons - Still paying for idle (database, instances) - Manual provisioning of resources (through Beanstalk) - Everything is a REST endpoint
Nudging & Gamification Image Personalised Commerce Personalised Advertising Customer Base Channels Customer Generations Search Customer CI / CD • Move to cloud native adoption • Script cloud resources • Each service has its own persistence • Migrate data models Neosperience Cloud
Triggers to Lambda functions • Each service defines its own persistence • Communication is handled through Kinesis • Immutable deployments Pros ✓ Many small packages ✓ Extremely fast release cycles (smaller changes) ✓ No servers to manage (woot-woot) ✓ Scalability at its best / Cost reduction ✓ There is no difference between dev/stage/ production Cons - Required a shift in team perspective towards software development (there is no one size fits all architecture) - Expensive when utilization close to 100% - No support for dedicated hardware
Serverless and microservices. The questions we faced How micro is a microservice? Decompose your system into domain specific computing units using Domain Driven Development (DDD) Do we want to reinvent the wheel? AWS provides a variety of managed services that can ease out software development, reducing time to market of orders of magnitude. Every time we had to implement a new functionality we asked ourselves whether there was an AWS service for that. How to deal with the outside world? Neosperience is a B2B2C ISV vendor. Our product can be used SaaS by companies or integrated through API. We need to rely on web standards REST and OAuth2 How about vendor lock-in? Serverless does not lock you in. Data does. But it’s the same with languages, tools or frameworks.
with a number of benefits Neosperience is a 100% Serverless cloud solution Business Domain Support ✓17 different business domains ✓5-10 microservices each domain ✓a dozen of support services (monitoring, maintenance, OAuth2, Organization, multi-tenancy, etc.) Serverless ✓100% Serverless except for ML model training Lambda Functions ✓200+ functions AWS Resources ✓400+ AWS resources ✓managed through a 15+ CloudFormation stacks Time to market ✓improved from months to weeks ✓business features released every sprint ✓technical features released multiple times a week Costs ✓reduced by an order of magnitude Team ✓developers provision cloud resources ✓innovation in encouraged, failure impact is bounded ✓shifted from running after business requirements to waiting for business requirements Happiness Dev Team has full control on delivery Business Team has feature delivery