Event-sourced architectures with Luminis Technologies

Size: px
Start display at page:

Download "Event-sourced architectures with Luminis Technologies"

Transcription

1 Event-sourced architectures with Luminis Technologies

2 Today's journey Event-sourcing Actors Akka Persistence Design for ES

3 Event-sourcing Is all about getting the facts straight

4 Typical 3 layer architecture UI/Client Service layer fetch modify store Database

5 Typical 3 layer architecture UI/Client Service layer fetch modify store Database Databases are shared mutable state

6 Typical entity modelling Concert artist: String date: Date availabletickets: int price: int... 1 * TicketOrder nooftickets: int userid: String

7 Typical entity modelling Concert artist = Aerosmith availabletickets = 100 price = TicketOrder TicketOrder nooftickets = 3 TicketOrder userid = 1 nooftickets = 3 userid nooftickets = 1 = 3 userid = 1

8 Typical entity modelling Concert artist = Aerosmith availabletickets = 100 price = TicketOrder TicketOrder nooftickets = 3 TicketOrder userid = 1 nooftickets = 3 userid nooftickets = 1 = 3 userid = 1 Changing the price

9 Typical entity modelling Concert artist = Aerosmith availabletickets = 100 price = TicketOrder TicketOrder nooftickets = 3 TicketOrder userid = 1 nooftickets = 3 userid nooftickets = 1 = 3 userid = 1 Changing the price

10 Typical entity modelling Concert artist = Aerosmith availabletickets = 100 price = TicketOrder TicketOrder nooftickets = 3 TicketOrder userid = 1 nooftickets = 3 userid nooftickets = 1 = 3 userid = 1 Canceling an order

11 Typical entity modelling Concert artist = Aerosmith availabletickets = 100 price = TicketOrder TicketOrder nooftickets = 3 userid = 1 nooftickets = 3 userid = 1 Canceling an order

12 Update or delete statements in your app? Congratulations, you are LOSING DATA EVERY DAY

13 Event-sourced modelling time ConcertCreated TicketsOrdered TicketsOrdered TicketsOrdered artist = Aerosmith availabletickets = 100 price = 10 nooftickets nooftickets = 3 = 3 nooftickets = 3 userid userid = 1= 1 userid = 1...

14 Event-sourced modelling time ConcertCreated TicketsOrdered TicketsOrdered TicketsOrdered artist = Aerosmith availabletickets = 100 price = 10 nooftickets nooftickets = 3 = 3 nooftickets = 3 userid userid = 1= 1 userid = 1... Changing the price

15 Event-sourced modelling time ConcertCreated TicketsOrdered TicketsOrdered TicketsOrdered PriceChanged artist = Aerosmith availabletickets = 100 price = nooftickets nooftickets = 3 = 3 nooftickets = 3 userid userid = 1= 1 userid = 1 price = 100 Changing the price

16 Event-sourced modelling time ConcertCreated TicketsOrdered TicketsOrdered TicketsOrdered PriceChanged artist = Aerosmith availabletickets = 100 price = nooftickets nooftickets = 3 = 3 nooftickets = 3 userid userid = 1= 1 userid = 1 price = 100 Canceling an order

17 Event-sourced modelling time ConcertCreated TicketsOrdered TicketsOrdered PriceChanged OrderCancelled TicketsOrdered artist = Aerosmith nooftickets nooftickets = 3 = 3 price = 100 userid = 1 nooftickets = 3 availabletickets = 100 userid userid = 1= 1 userid = 1 price = Canceling an order

18 Event-sourced modelling Immutable events Append-only storage (scalable) Replay events: reconstruct historic state Events as audit mechanism Events as integration mechanism

19 Event-sourcing: capture all changes to application state as a sequence of events Events: where from?

20 Commands & Events Do something (active) Can be rejected (validation) Can be responded to It happened. Deal with it. (facts)

21 Querying & event-sourcing How do you query a log?

22 Querying & event-sourcing How do you query a log? Command Query Responsibility Segregation

23 CQRS without ES Command Query UI/Client Service layer Database

24 CQRS without ES Command Query Command Query UI/Client UI/Client Command Query Service layer Model Model(s)? Database Datastore Datastore Datastore Datastore

25 Event-sourced CQRS Command Query UI/Client Command Model Query Model(s) Events Journal Datastore Datastore Datastore

26 Actors Mature and open source Scala & Java API Akka Cluster

27 Actors "an island of consistency in a sea of concurrency" async message send Actor mailbox state behavior Process message: update state send messages change behavior Don't worry about concurrency

28 Actors A good fit for event-sourcing? Actor mailbox state is transient mailbox is non-durable state (lost messages) behavior

29 Actors Just store all incoming messages? async message send Actor mailbox state behavior Problems with command-sourcing: side-effects poisonous (failing) messages store in journal

30 Persistence Experimental Akka module Scala & Java API Actor state persistence based on event-sourcing

31 Persistent Actor async message send (command) PersistentActor actor-id state event event Derive events from commands Store events Update state Perform sideeffects journal (actor-id)

32 Persistent Actor PersistentActor actor-id state Recover by replaying events, that update the state (no side-effects) event event journal (actor-id)

33 Persistent Actor case object Increment case object Incremented // command // event class CounterActor extends PersistentActor { def persistenceid = "counter" var state = 0 val receivecommand: Receive = { case Increment => persist(incremented) { evt => state += 1 println("incremented") val receiverecover: Receive = { case Incremented => state += 1

34 Persistent Actor case object Increment case object Incremented // command // event class CounterActor extends PersistentActor { def persistenceid = "counter" var state = 0 val receivecommand: Receive = { case Increment => persist(incremented) { evt => state += 1 println("incremented") val receiverecover: Receive = { case Incremented => state += 1

35 Persistent Actor case object Increment case object Incremented // command // event class CounterActor extends PersistentActor { def persistenceid = "counter" var state = 0 val receivecommand: Receive = { case Increment => persist(incremented) { evt => state += 1 println("incremented") async callback (but safe to close over state) val receiverecover: Receive = { case Incremented => state += 1

36 Persistent Actor case object Increment case object Incremented // command // event class CounterActor extends PersistentActor { def persistenceid = "counter" var state = 0 val receivecommand: Receive = { case Increment => persist(incremented) { evt => state += 1 println("incremented") val receiverecover: Receive = { case Incremented => state += 1

37 Persistent Actor case object Increment case object Incremented // command // event class CounterActor extends PersistentActor { def persistenceid = "counter" var state = 0 val receivecommand: Receive = { case Increment => persist(incremented) { evt => state += 1 println("incremented") Isn't recovery with lots of events slow? val receiverecover: Receive = { case Incremented => state += 1

38 Snapshots class SnapshottingCounterActor extends PersistentActor { def persistenceid = "snapshotting-counter" var state = 0 val receivecommand: Receive = { case Increment => persist(incremented) { evt => state += 1 println("incremented") case "takesnapshot" => savesnapshot(state) val receiverecover: Receive = { case Incremented => state += 1 case SnapshotOffer(_, snapshotstate: Int) => state = snapshotstate

39 Snapshots class SnapshottingCounterActor extends PersistentActor { def persistenceid = "snapshotting-counter" var state = 0 val receivecommand: Receive = { case Increment => persist(incremented) { evt => state += 1 println("incremented") case "takesnapshot" => savesnapshot(state) val receiverecover: Receive = { case Incremented => state += 1 case SnapshotOffer(_, snapshotstate: Int) => state = snapshotstate

40 Plugins: Journal Cassandra & Snapshot Cassandra Kafka Kafka DynamoDB MongoDB MongoDB HBase HBase EventStore EventStore JDBC JDBC

41 Plugins: Serialization Default: Java serialization Pluggable through Akka: Protobuf Kryo Avro Your own

42 Persistent View Persistent Actor Persistent View Persistent View Views poll the journal Eventually consistent Polling configurable Actor may be inactive Views track single persistence-id journal Views can have own other snapshots snapshot store datastore

43 Persistent View case object ComplexQuery class CounterView extends PersistentView { override def persistenceid: String = "counter" override def viewid: String = "counter-view" var querystate = 0 def receive: Receive = { case Incremented if ispersistent => { querystate = someverycomplicatedcalculation(querystate) // Or update a document/graph/relational database case ComplexQuery => { sender()! querystate; // Or perform specialized query on datastore

44 Persistent View case object ComplexQuery class CounterView extends PersistentView { override def persistenceid: String = "counter" override def viewid: String = "counter-view" var querystate = 0 def receive: Receive = { case Incremented if ispersistent => { querystate = someverycomplicatedcalculation(querystate) // Or update a document/graph/relational database case ComplexQuery => { sender()! querystate; // Or perform specialized query on datastore

45 Persistent View case object ComplexQuery class CounterView extends PersistentView { override def persistenceid: String = "counter" override def viewid: String = "counter-view" var querystate = 0 def receive: Receive = { case Incremented if ispersistent => { querystate = someverycomplicatedcalculation(querystate) // Or update a document/graph/relational database case ComplexQuery => { sender()! querystate; // Or perform specialized query on datastore

46 Sell concert tickets bit.ly/akka-es Commands: CreateConcert BuyTickets ChangePrice AddCapacity ConcertActor price availabletickets starttime salesrecords ConcertHistoryView $50 $75 $100 journal

47 Scaling out: Akka Cluster Single writer: persistent actor must be singleton, views may be anywhere Cluster node Cluster node Cluster node Persistent Persistent Actor Actor id = "1" id = "1" Persistent Persistent Actor Actor id = "1" id = "2" Persistent Persistent Actor Actor id = "1" id = "3" distributed journal

48 Scaling out: Akka Cluster Single writer: persistent actor must be singleton, views may be anywhere How are persistent actors distributed over cluster? Cluster node Cluster node Cluster node Persistent Persistent Actor Actor id = "1" id = "1" Persistent Persistent Actor Actor id = "1" id = "2" Persistent Persistent Actor Actor id = "1" id = "3" distributed journal

49 Scaling out: Akka Cluster Sharding: Coordinator assigns ShardRegions to nodes (consistent hashing) Actors in shard can be activated/passivated, rebalanced Cluster node Cluster node Cluster node Coordinator Persistent Persistent Actor Actor id = "1" id = "1" Shard Region Persistent Persistent Actor Actor id = "1" id = "2" Shard Region Persistent Persistent Actor Actor id = "1" id = "3" Shard Region distributed journal

50 Design for event-sourcing

51 DDD+CQRS+ES DDD: Domain Driven Design Fully consistent Fully consistent Aggregate Eventual Consistency Aggregate Root entity Root entity entity entity entity entity entity

52 DDD+CQRS+ES DDD: Domain Driven Design Persistent Fully consistent Aggregate Actor Eventual Consistency Persistent Fully consistent Aggregate Actor Root entity Message passing Root entity entity entity entity entity entity

53 DDD+CQRS+ES DDD: Domain Driven Design Persistent Fully consistent Aggregate Actor Eventual Consistency Persistent Fully consistent Aggregate Actor Root entity Message passing Root entity entity entity entity entity entity Akka Persistence is not a DDD/CQRS framework But it comes awfully close

54 Designing aggregates Focus on events Structural representation(s) follow ERD

55 Designing aggregates Focus on events Structural representation(s) follow ERD Size matters. Faster replay, less write contention Don't store derived info (use views)

56 Designing aggregates Focus on events Structural representation(s) follow ERD Size matters. Faster replay, less write contention Don't store derived info (use views) With CQRS read-your-writes is not the default When you need this, model it in a single Aggregate

57 Designing commands Self-contained Unit of atomic change Granularity and intent

58 Designing commands Self-contained Unit of atomic change Granularity and intent UpdateAddress street =... city =... vs ChangeStreet street =... ChangeCity street =...

59 Designing commands Self-contained Unit of atomic change Granularity and intent UpdateAddress street =... city =... vs ChangeStreet street =... ChangeCity street =... vs Move street =... city =...

60 Versioning Actor logic: v1 and v2 event v2 event v2 event v1 event v1

61 Versioning Actor logic: v1 and v2 Actor logic: v2 event v2 event v2 event v2 event v2 event v1 event event v1 v2 event v1 event event v1 v2

62 Versioning Actor logic: v1 and v2 Actor logic: v2 Actor logic: v2 event v2 event v2 event v2 event v2 event v2 event v2 event v1 event event v1 v2 snapshot event v1 event v1 event event v1 v2 event v1

63 Versioning Actor logic: Actor logic: Actor logic: Be backwards v1 and v2 v2 v2 compatible Avro/Protobuf event v2 event v2 event v2 Serializer can do translation event v2 event v2 event v2 snapshot event v1 event event v1 v2 event v1 Snapshot versioning: event v1 event event v1 v2 event v1 harder

64 In conclusion Event-sourcing is... Powerful but unfamiliar

65 In conclusion Event-sourcing is... Powerful Combines well with UI/Client Command Model Journal Events Query Model Datastore Datastore Datastore but unfamiliar DDD/CQRS

66 In conclusion Event-sourcing is... Powerful Combines well with Not a UI/Client Command Model Journal Events Query Model Datastore Datastore Datastore but unfamiliar DDD/CQRS

67 In conclusion Akka Actors & Akka Persistence A good fit for event-sourcing Experimental, view improvements needed async message send (command) PersistentActor actor-id state event event journal (actor-id)

68 Thank you. Luminis Technologies

Event-sourced architectures with Luminis Technologies

Event-sourced architectures with Luminis Technologies Event-sourced architectures with Akka @Sander_Mak Luminis Technologies Today's journey Event-sourcing Actors Akka Persistence Design for ES Event-sourcing Is all about getting the facts straight Typical

More information

Lessons&Learned&in&Deploying&Akka& Persistence

Lessons&Learned&in&Deploying&Akka& Persistence Lessons&Learned&in&Deploying&Akka& Persistence Duncan&K.&DeVore @ironfish Akka$Days$2014 The$Challenge Turn&energy&expenditure&into&energy&revenue Commercial,&Industrials,&data&centers,&universi9es,&etc.

More information

Easy Scalability with Akka. Distribute your domain

Easy Scalability with Akka. Distribute your domain Easy Scalability with Akka Distribute your domain Who? BoldRadius Solutions boldradius.com Typesafe Partner Scala, Akka and Play specialists Ottawa, Saskatoon, San Francisco, Boston, Chicago, Montreal,

More information

Lightbend Lagom Microservices Just Right. Duncan DeVore Henrik Engström Philly JUG - July 27, 2016

Lightbend Lagom Microservices Just Right. Duncan DeVore Henrik Engström Philly JUG - July 27, 2016 Lightbend Lagom Microservices Just Right Duncan DeVore - @ironfish Henrik Engström - @h3nk3 Philly JUG - July 27, 2016 Lagom - [lah-gome] Adequate, sufficient, just right A great explanation of Lagom:

More information

Building loosely coupled and scalable systems using Event-Driven Architecture. Jonas Bonér Patrik Nordwall Andreas Källberg

Building loosely coupled and scalable systems using Event-Driven Architecture. Jonas Bonér Patrik Nordwall Andreas Källberg Building loosely coupled and scalable systems using Event-Driven Architecture Jonas Bonér Patrik Nordwall Andreas Källberg Why is EDA Important for Scalability? What building blocks does EDA consists of?

More information

Akka$Concurrency$Works

Akka$Concurrency$Works Akka$Concurrency$Works by#duncan#k.#devore, Viridity'Energy,'Inc. About&Viridity:&Energy&So2ware&Company Industrials,-data-centers,-universi1es,-etc. Help-customers-manage Renewables-&-storage Controllable-load

More information

Executive Summary. It is important for a Java Programmer to understand the power and limitations of concurrent programming in Java using threads.

Executive Summary. It is important for a Java Programmer to understand the power and limitations of concurrent programming in Java using threads. Executive Summary. It is important for a Java Programmer to understand the power and limitations of concurrent programming in Java using threads. Poor co-ordination that exists in threads on JVM is bottleneck

More information

CQRS and Event Sourcing for Java Developers Markus Eisele

CQRS and Event Sourcing for Java Developers Markus Eisele CQRS and Event Sourcing for Java Developers Markus Eisele @myfear Agenda Classical architectures and modernization CRUD vs. CQRS A little example Wrapping it up Classical Architectures Application Server

More information

Realtime visitor analysis with Couchbase and Elasticsearch

Realtime visitor analysis with Couchbase and Elasticsearch Realtime visitor analysis with Couchbase and Elasticsearch Jeroen Reijn @jreijn #nosql13 About me Jeroen Reijn Software engineer Hippo @jreijn http://blog.jeroenreijn.com About Hippo Visitor Analysis OneHippo

More information

CGAR: Strong Consistency without Synchronous Replication. Seo Jin Park Advised by: John Ousterhout

CGAR: Strong Consistency without Synchronous Replication. Seo Jin Park Advised by: John Ousterhout CGAR: Strong Consistency without Synchronous Replication Seo Jin Park Advised by: John Ousterhout Improved update performance of storage systems with master-back replication Fast: updates complete before

More information

CIB Session 12th NoSQL Databases Structures

CIB Session 12th NoSQL Databases Structures CIB Session 12th NoSQL Databases Structures By: Shahab Safaee & Morteza Zahedi Software Engineering PhD Email: safaee.shx@gmail.com, morteza.zahedi.a@gmail.com cibtrc.ir cibtrc cibtrc 2 Agenda What is

More information

Combining Concurrency Abstractions

Combining Concurrency Abstractions Combining Concurrency Abstractions Philipp Haller Typesafe, Switzerland Correctly and Efficiently Combining Concurrency Abstractions Philipp Haller Typesafe, Switzerland The Problem Tendency to combine

More information

Enabling Persistent Memory Use in Java. Steve Dohrmann Sr. Staff Software Engineer, Intel

Enabling Persistent Memory Use in Java. Steve Dohrmann Sr. Staff Software Engineer, Intel Enabling Persistent Memory Use in Java Steve Dohrmann Sr. Staff Software Engineer, Intel Motivation Java is a very popular language on servers, especially for databases, data grids, etc., e.g. Apache projects:

More information

SQL, NoSQL, MongoDB. CSE-291 (Cloud Computing) Fall 2016 Gregory Kesden

SQL, NoSQL, MongoDB. CSE-291 (Cloud Computing) Fall 2016 Gregory Kesden SQL, NoSQL, MongoDB CSE-291 (Cloud Computing) Fall 2016 Gregory Kesden SQL Databases Really better called Relational Databases Key construct is the Relation, a.k.a. the table Rows represent records Columns

More information

Processing of big data with Apache Spark

Processing of big data with Apache Spark Processing of big data with Apache Spark JavaSkop 18 Aleksandar Donevski AGENDA What is Apache Spark? Spark vs Hadoop MapReduce Application Requirements Example Architecture Application Challenges 2 WHAT

More information

Modern Stream Processing with Apache Flink

Modern Stream Processing with Apache Flink 1 Modern Stream Processing with Apache Flink Till Rohrmann GOTO Berlin 2017 2 Original creators of Apache Flink da Platform 2 Open Source Apache Flink + da Application Manager 3 What changes faster? Data

More information

Lenses 2.1 Enterprise Features PRODUCT DATA SHEET

Lenses 2.1 Enterprise Features PRODUCT DATA SHEET Lenses 2.1 Enterprise Features PRODUCT DATA SHEET 1 OVERVIEW DataOps is the art of progressing from data to value in seconds. For us, its all about making data operations as easy and fast as using the

More information

App Engine MapReduce. Mike Aizatsky 11 May Hashtags: #io2011 #AppEngine Feedback:

App Engine MapReduce. Mike Aizatsky 11 May Hashtags: #io2011 #AppEngine Feedback: App Engine MapReduce Mike Aizatsky 11 May 2011 Hashtags: #io2011 #AppEngine Feedback: http://goo.gl/snv2i Agenda MapReduce Computational Model Mapper library Announcement Technical bits: Files API User-space

More information

Philipp Wille. Beyond Scala s Standard Library

Philipp Wille. Beyond Scala s Standard Library Scala Enthusiasts BS Philipp Wille Beyond Scala s Standard Library OO or Functional Programming? Martin Odersky: Systems should be composed from modules. Modules should be simple parts that can be combined

More information

Akka: Simpler Concurrency, Scalability & Fault-tolerance through Actors. Jonas Bonér Viktor Klang

Akka: Simpler Concurrency, Scalability & Fault-tolerance through Actors. Jonas Bonér Viktor Klang Akka: Simpler Concurrency, Scalability & Fault-tolerance through Actors Jonas Bonér Viktor Klang We believe that... Writing correct concurrent applications is too hard Scaling out applications is too hard

More information

Scala Actors. Scalable Multithreading on the JVM. Philipp Haller. Ph.D. candidate Programming Methods Lab EPFL, Lausanne, Switzerland

Scala Actors. Scalable Multithreading on the JVM. Philipp Haller. Ph.D. candidate Programming Methods Lab EPFL, Lausanne, Switzerland Scala Actors Scalable Multithreading on the JVM Philipp Haller Ph.D. candidate Programming Methods Lab EPFL, Lausanne, Switzerland The free lunch is over! Software is concurrent Interactive applications

More information

Managing IoT and Time Series Data with Amazon ElastiCache for Redis

Managing IoT and Time Series Data with Amazon ElastiCache for Redis Managing IoT and Time Series Data with ElastiCache for Redis Darin Briskman, ElastiCache Developer Outreach Michael Labib, Specialist Solutions Architect 2016, Web Services, Inc. or its Affiliates. All

More information

Using the SDACK Architecture to Build a Big Data Product. Yu-hsin Yeh (Evans Ye) Apache Big Data NA 2016 Vancouver

Using the SDACK Architecture to Build a Big Data Product. Yu-hsin Yeh (Evans Ye) Apache Big Data NA 2016 Vancouver Using the SDACK Architecture to Build a Big Data Product Yu-hsin Yeh (Evans Ye) Apache Big Data NA 2016 Vancouver Outline A Threat Analytic Big Data product The SDACK Architecture Akka Streams and data

More information

Georgia Institute of Technology ECE6102 4/20/2009 David Colvin, Jimmy Vuong

Georgia Institute of Technology ECE6102 4/20/2009 David Colvin, Jimmy Vuong Georgia Institute of Technology ECE6102 4/20/2009 David Colvin, Jimmy Vuong Relatively recent; still applicable today GFS: Google s storage platform for the generation and processing of data used by services

More information

Scaling out with Akka Actors. J. Suereth

Scaling out with Akka Actors. J. Suereth Scaling out with Akka Actors J. Suereth Agenda The problem Recap on what we have Setting up a Cluster Advanced Techniques Who am I? Author Scala In Depth, sbt in Action Typesafe Employee Big Nerd ScalaDays

More information

Big Data Architect.

Big Data Architect. Big Data Architect www.austech.edu.au WHAT IS BIG DATA ARCHITECT? A big data architecture is designed to handle the ingestion, processing, and analysis of data that is too large or complex for traditional

More information

Scaling. Marty Weiner Grayskull, Eternia. Yashh Nelapati Gotham City

Scaling. Marty Weiner Grayskull, Eternia. Yashh Nelapati Gotham City Scaling Marty Weiner Grayskull, Eternia Yashh Nelapati Gotham City Pinterest is... An online pinboard to organize and share what inspires you. Relationships Marty Weiner Grayskull, Eternia Yashh Nelapati

More information

Broken Promises.

Broken Promises. Broken Promises kiki @ lightbend @kikisworldrace Data is dangerous Microservices are usually required to cooperate to achieve some end goal. Microservices need to be able to trust each other in order to

More information

Building Reactive Applications with Akka

Building Reactive Applications with Akka Building Reactive Applications with Akka Jonas Bonér Typesafe CTO & co-founder @jboner This is an era of profound change. Implications are massive, change is unavoidable Users! Users are demanding richer

More information

Relational databases

Relational databases COSC 6397 Big Data Analytics NoSQL databases Edgar Gabriel Spring 2017 Relational databases Long lasting industry standard to store data persistently Key points concurrency control, transactions, standard

More information

Topics. History. Architecture. MongoDB, Mongoose - RDBMS - SQL. - NoSQL

Topics. History. Architecture. MongoDB, Mongoose - RDBMS - SQL. - NoSQL Databases Topics History - RDBMS - SQL Architecture - SQL - NoSQL MongoDB, Mongoose Persistent Data Storage What features do we want in a persistent data storage system? We have been using text files to

More information

Cassandra, MongoDB, and HBase. Cassandra, MongoDB, and HBase. I have chosen these three due to their recent

Cassandra, MongoDB, and HBase. Cassandra, MongoDB, and HBase. I have chosen these three due to their recent Tanton Jeppson CS 401R Lab 3 Cassandra, MongoDB, and HBase Introduction For my report I have chosen to take a deeper look at 3 NoSQL database systems: Cassandra, MongoDB, and HBase. I have chosen these

More information

MD-SAL APPLICATION AWARE DATA STORE (AADS)

MD-SAL APPLICATION AWARE DATA STORE (AADS) MD-SAL APPLICATION AWARE DATA STORE (AADS) Chandramouli Venkataraman (chandramouli.venkataraman@ericsson.com) MD-SAL - Today Controller Platform APP MD-SAL Request Routing Notification Routing DOM tree

More information

Spark Streaming. Guido Salvaneschi

Spark Streaming. Guido Salvaneschi Spark Streaming Guido Salvaneschi 1 Spark Streaming Framework for large scale stream processing Scales to 100s of nodes Can achieve second scale latencies Integrates with Spark s batch and interactive

More information

Akka Streams and Bloom Filters

Akka Streams and Bloom Filters Akka Streams and Bloom Filters Or: How I learned to stop worrying and love resilient elastic distributed real-time transaction processing using space efficient probabilistic data structures The Situation

More information

Clojure Lisp for the Real #clojure

Clojure Lisp for the Real #clojure Clojure Lisp for the Real World @stuartsierra #clojure 1 Bullet Points Values Code is data Generic data access Concurrency 2 Stuart Sierra Relevance, Inc. Clojure/core Clojure contributor 3 Values 4 Values

More information

TECHNICAL WHITE PAPER. Akka A to Z. An Architect s Guide To Designing, Building, And Running Reactive Systems

TECHNICAL WHITE PAPER. Akka A to Z. An Architect s Guide To Designing, Building, And Running Reactive Systems TECHNICAL WHITE PAPER Akka A to Z An Architect s Guide To Designing, Building, And Running Reactive Systems By Hugh McKee & Oliver White Lightbend, Inc. Table Of Contents Executive Summary... 3 A Little

More information

FLAT DATACENTER STORAGE. Paper-3 Presenter-Pratik Bhatt fx6568

FLAT DATACENTER STORAGE. Paper-3 Presenter-Pratik Bhatt fx6568 FLAT DATACENTER STORAGE Paper-3 Presenter-Pratik Bhatt fx6568 FDS Main discussion points A cluster storage system Stores giant "blobs" - 128-bit ID, multi-megabyte content Clients and servers connected

More information

Introduction to NoSQL Databases

Introduction to NoSQL Databases Introduction to NoSQL Databases Roman Kern KTI, TU Graz 2017-10-16 Roman Kern (KTI, TU Graz) Dbase2 2017-10-16 1 / 31 Introduction Intro Why NoSQL? Roman Kern (KTI, TU Graz) Dbase2 2017-10-16 2 / 31 Introduction

More information

Beyond Relational Databases: MongoDB, Redis & ClickHouse. Marcos Albe - Principal Support Percona

Beyond Relational Databases: MongoDB, Redis & ClickHouse. Marcos Albe - Principal Support Percona Beyond Relational Databases: MongoDB, Redis & ClickHouse Marcos Albe - Principal Support Engineer @ Percona Introduction MySQL everyone? Introduction Redis? OLAP -vs- OLTP Image credits: 451 Research (https://451research.com/state-of-the-database-landscape)

More information

Data Acquisition. The reference Big Data stack

Data Acquisition. The reference Big Data stack Università degli Studi di Roma Tor Vergata Dipartimento di Ingegneria Civile e Ingegneria Informatica Data Acquisition Corso di Sistemi e Architetture per Big Data A.A. 2016/17 Valeria Cardellini The reference

More information

What do you mean, Backwards Compatibility?

What do you mean, Backwards Compatibility? #gotober What do you mean, Backwards Compatibility? Trisha Gee, Java Driver Developer @trisha_gee Friday, 18 October 13 What s the problem? The Domain MongoDB is an open-source document database, featuring:

More information

10/18/2017. Announcements. NoSQL Motivation. NoSQL. Serverless Architecture. What is the Problem? Database Systems CSE 414

10/18/2017. Announcements. NoSQL Motivation. NoSQL. Serverless Architecture. What is the Problem? Database Systems CSE 414 Announcements Database Systems CSE 414 Lecture 11: NoSQL & JSON (mostly not in textbook only Ch 11.1) HW5 will be posted on Friday and due on Nov. 14, 11pm [No Web Quiz 5] Today s lecture: NoSQL & JSON

More information

Reactive App using Actor model & Apache Spark. Rahul Kumar Software

Reactive App using Actor model & Apache Spark. Rahul Kumar Software Reactive App using Actor model & Apache Spark Rahul Kumar Software Developer @rahul_kumar_aws About Sigmoid We build realtime & big data systems. OUR CUSTOMERS Agenda Big Data - Intro Distributed Application

More information

Clojure Lisp for the Real clojure.com

Clojure Lisp for the Real clojure.com Clojure Lisp for the Real World @stuartsierra clojure.com Stuart Sierra Relevance, Inc. Clojure/core Clojure contributor Values Values 3 Values 3 + 2 = 5 Values let x = 3 Values let x = 3 let x = 5 Values

More information

FLAT DATACENTER STORAGE CHANDNI MODI (FN8692)

FLAT DATACENTER STORAGE CHANDNI MODI (FN8692) FLAT DATACENTER STORAGE CHANDNI MODI (FN8692) OUTLINE Flat datacenter storage Deterministic data placement in fds Metadata properties of fds Per-blob metadata in fds Dynamic Work Allocation in fds Replication

More information

NoSQL Databases. CPS352: Database Systems. Simon Miner Gordon College Last Revised: 4/22/15

NoSQL Databases. CPS352: Database Systems. Simon Miner Gordon College Last Revised: 4/22/15 NoSQL Databases CPS352: Database Systems Simon Miner Gordon College Last Revised: 4/22/15 Agenda Check-in NoSQL Databases Aggregate databases Key-value, document, and column family Graph databases Related

More information

5/2/16. Announcements. NoSQL Motivation. The New Hipster: NoSQL. Serverless. What is the Problem? Database Systems CSE 414

5/2/16. Announcements. NoSQL Motivation. The New Hipster: NoSQL. Serverless. What is the Problem? Database Systems CSE 414 Announcements Database Systems CSE 414 Lecture 16: NoSQL and JSon Current assignments: Homework 4 due tonight Web Quiz 6 due next Wednesday [There is no Web Quiz 5 Today s lecture: JSon The book covers

More information

Dynamically Configured Stream Processing Using Flink & Kafka

Dynamically Configured Stream Processing Using Flink & Kafka Powering Cloud IT Dynamically Configured Stream Processing Using Flink & Kafka David Hardwick Sean Hester David Brelloch https://github.com/brelloch/flinkforward2017 Multi-SaaS Management What does that

More information

Evolution of an Apache Spark Architecture for Processing Game Data

Evolution of an Apache Spark Architecture for Processing Game Data Evolution of an Apache Spark Architecture for Processing Game Data Nick Afshartous WB Analytics Platform May 17 th 2017 May 17 th, 2017 About Me nafshartous@wbgames.com WB Analytics Core Platform Lead

More information

Database Systems CSE 414

Database Systems CSE 414 Database Systems CSE 414 Lecture 16: NoSQL and JSon CSE 414 - Spring 2016 1 Announcements Current assignments: Homework 4 due tonight Web Quiz 6 due next Wednesday [There is no Web Quiz 5] Today s lecture:

More information

Invitation to a New Kind of Database. Sheer El Showk Cofounder, Lore Ai We re Hiring!

Invitation to a New Kind of Database. Sheer El Showk Cofounder, Lore Ai   We re Hiring! Invitation to a New Kind of Database Sheer El Showk Cofounder, Lore Ai www.lore.ai We re Hiring! Overview 1. Problem statement (~2 minute) 2. (Proprietary) Solution: Datomics (~10 minutes) 3. Proposed

More information

NoSQL systems. Lecture 21 (optional) Instructor: Sudeepa Roy. CompSci 516 Data Intensive Computing Systems

NoSQL systems. Lecture 21 (optional) Instructor: Sudeepa Roy. CompSci 516 Data Intensive Computing Systems CompSci 516 Data Intensive Computing Systems Lecture 21 (optional) NoSQL systems Instructor: Sudeepa Roy Duke CS, Spring 2016 CompSci 516: Data Intensive Computing Systems 1 Key- Value Stores Duke CS,

More information

NoSQL & Firebase. SWE 432, Fall Web Application Development

NoSQL & Firebase. SWE 432, Fall Web Application Development NoSQL & Firebase SWE 432, Fall 2018 Web Application Development Review: Nouns vs. Verbs URIs should hierarchically identify nouns describing resources that exist Verbs describing actions that can be taken

More information

Real-time Financials with Microservices and Functional Programming. Vitor Guarino https://nubank.com.

Real-time Financials with Microservices and Functional Programming. Vitor Guarino https://nubank.com. Real-time Financials with Microservices and Functional Programming Vitor Guarino Olivier vitor@nubank.com.br @ura1a https://nubank.com.br/ MAIN PRODUCT Live since September 2014 A TECHNOLOGY DRIVEN APPROACH

More information

Big Streaming Data Processing. How to Process Big Streaming Data 2016/10/11. Fraud detection in bank transactions. Anomalies in sensor data

Big Streaming Data Processing. How to Process Big Streaming Data 2016/10/11. Fraud detection in bank transactions. Anomalies in sensor data Big Data Big Streaming Data Big Streaming Data Processing Fraud detection in bank transactions Anomalies in sensor data Cat videos in tweets How to Process Big Streaming Data Raw Data Streams Distributed

More information

Fast Data apps with Alpakka Kafka connector. Sean Glover,

Fast Data apps with Alpakka Kafka connector. Sean Glover, Fast Data apps with Alpakka Kafka connector Sean Glover, Lightbend @seg1o Who am I? I m Sean Glover Senior Software Engineer at Lightbend Member of the Fast Data Platform team Organizer of Scala Toronto

More information

In-memory data pipeline and warehouse at scale using Spark, Spark SQL, Tachyon and Parquet

In-memory data pipeline and warehouse at scale using Spark, Spark SQL, Tachyon and Parquet In-memory data pipeline and warehouse at scale using Spark, Spark SQL, Tachyon and Parquet Ema Iancuta iorhian@gmail.com Radu Chilom radu.chilom@gmail.com Big data analytics / machine learning 6+ years

More information

A Distributed System Case Study: Apache Kafka. High throughput messaging for diverse consumers

A Distributed System Case Study: Apache Kafka. High throughput messaging for diverse consumers A Distributed System Case Study: Apache Kafka High throughput messaging for diverse consumers As always, this is not a tutorial Some of the concepts may no longer be part of the current system or implemented

More information

Distributed Systems. Characteristics of Distributed Systems. Lecture Notes 1 Basic Concepts. Operating Systems. Anand Tripathi

Distributed Systems. Characteristics of Distributed Systems. Lecture Notes 1 Basic Concepts. Operating Systems. Anand Tripathi 1 Lecture Notes 1 Basic Concepts Anand Tripathi CSci 8980 Operating Systems Anand Tripathi CSci 8980 1 Distributed Systems A set of computers (hosts or nodes) connected through a communication network.

More information

Distributed Systems. Characteristics of Distributed Systems. Characteristics of Distributed Systems. Goals in Distributed System Designs

Distributed Systems. Characteristics of Distributed Systems. Characteristics of Distributed Systems. Goals in Distributed System Designs 1 Anand Tripathi CSci 8980 Operating Systems Lecture Notes 1 Basic Concepts Distributed Systems A set of computers (hosts or nodes) connected through a communication network. Nodes may have different speeds

More information

Microservices. Webservices with Scala (II) Microservices

Microservices. Webservices with Scala (II) Microservices Microservices Webservices with Scala (II) Microservices 2018 1 Content Deep Dive into Play2 1. Database Access with Slick 2. Database Migration with Flyway 3. akka 3.1. overview 3.2. akka-http (the http

More information

Rok: Decentralized storage for the cloud native world

Rok: Decentralized storage for the cloud native world Whitepaper Rok: Decentralized storage for the cloud native world Cloud native applications and containers are becoming more and more popular, as enterprises realize their benefits: containers are great

More information

CS Programming Languages: Scala

CS Programming Languages: Scala CS 3101-2 - Programming Languages: Scala Lecture 6: Actors and Concurrency Daniel Bauer (bauer@cs.columbia.edu) December 3, 2014 Daniel Bauer CS3101-2 Scala - 06 - Actors and Concurrency 1/19 1 Actors

More information

High Performance NoSQL with MongoDB

High Performance NoSQL with MongoDB High Performance NoSQL with MongoDB History of NoSQL June 11th, 2009, San Francisco, USA Johan Oskarsson (from http://last.fm/) organized a meetup to discuss advances in data storage which were all using

More information

MongoDB and Mysql: Which one is a better fit for me? Room 204-2:20PM-3:10PM

MongoDB and Mysql: Which one is a better fit for me? Room 204-2:20PM-3:10PM MongoDB and Mysql: Which one is a better fit for me? Room 204-2:20PM-3:10PM About us Adamo Tonete MongoDB Support Engineer Agustín Gallego MySQL Support Engineer Agenda What are MongoDB and MySQL; NoSQL

More information

Joost van de Wijgerd BUX. Innovating Retail Trading by going Reactive

Joost van de Wijgerd BUX. Innovating Retail Trading by going Reactive Joost van de Wijgerd BUX Innovating Retail Trading by going Reactive! Agenda Introduction Architecture & Tech Stack Zooming in: Elastic Actors DevOps at BUX Q & A 15+ years experience a.o. JTeam (Trifork),

More information

Search Engines and Time Series Databases

Search Engines and Time Series Databases Università degli Studi di Roma Tor Vergata Dipartimento di Ingegneria Civile e Ingegneria Informatica Search Engines and Time Series Databases Corso di Sistemi e Architetture per Big Data A.A. 2017/18

More information

MAPR TECHNOLOGIES, INC. TECHNICAL BRIEF APRIL 2017 MAPR SNAPSHOTS

MAPR TECHNOLOGIES, INC. TECHNICAL BRIEF APRIL 2017 MAPR SNAPSHOTS MAPR TECHNOLOGIES, INC. TECHNICAL BRIEF APRIL 2017 MAPR SNAPSHOTS INTRODUCTION The ability to create and manage snapshots is an essential feature expected from enterprise-grade storage systems. This capability

More information

An Information Asset Hub. How to Effectively Share Your Data

An Information Asset Hub. How to Effectively Share Your Data An Information Asset Hub How to Effectively Share Your Data Hello! I am Jack Kennedy Data Architect @ CNO Enterprise Data Management Team Jack.Kennedy@CNOinc.com 1 4 Data Functions Your Data Warehouse

More information

Reliable Asynchronous Communication in Distributed Systems

Reliable Asynchronous Communication in Distributed Systems Master thesis in Secure and Reliable communication at Simula@UiB Reliable Asynchronous Communication in Distributed Systems Author : Espen Johnsen February 15, 2018 Acknowledgement I would like to thank

More information

Inventory (input to ECOMP and ONAP Roadmaps)

Inventory (input to ECOMP and ONAP Roadmaps) Inventory (input to ECOMP and ONAP Roadmaps) 1Q2018 2Q2018 3Q2018 4Q2018 1Q2019 2Q2019 3Q2019 4Q2019 ONAP participation and alignment Operations, Product, and other features with A&AI design impact Inventory

More information

CSE 544 Principles of Database Management Systems. Magdalena Balazinska Winter 2015 Lecture 14 NoSQL

CSE 544 Principles of Database Management Systems. Magdalena Balazinska Winter 2015 Lecture 14 NoSQL CSE 544 Principles of Database Management Systems Magdalena Balazinska Winter 2015 Lecture 14 NoSQL References Scalable SQL and NoSQL Data Stores, Rick Cattell, SIGMOD Record, December 2010 (Vol. 39, No.

More information

Distributed Systems. 22. Spark. Paul Krzyzanowski. Rutgers University. Fall 2016

Distributed Systems. 22. Spark. Paul Krzyzanowski. Rutgers University. Fall 2016 Distributed Systems 22. Spark Paul Krzyzanowski Rutgers University Fall 2016 November 26, 2016 2015-2016 Paul Krzyzanowski 1 Apache Spark Goal: generalize MapReduce Similar shard-and-gather approach to

More information

MONGODB INTERVIEW QUESTIONS

MONGODB INTERVIEW QUESTIONS MONGODB INTERVIEW QUESTIONS http://www.tutorialspoint.com/mongodb/mongodb_interview_questions.htm Copyright tutorialspoint.com Dear readers, these MongoDB Interview Questions have been designed specially

More information

functional thinking applying the philosophy of functional programming to system design and architecture

functional thinking applying the philosophy of functional programming to system design and architecture functional thinking applying the philosophy of functional programming to system design and architecture Jed Wesley-Smith @jedws functional programming has many benefits: better program reasonability, composition,

More information

App Engine: Datastore Introduction

App Engine: Datastore Introduction App Engine: Datastore Introduction Part 1 Another very useful course: https://www.udacity.com/course/developing-scalableapps-in-java--ud859 1 Topics cover in this lesson What is Datastore? Datastore and

More information

8/24/2017 Week 1-B Instructor: Sangmi Lee Pallickara

8/24/2017 Week 1-B Instructor: Sangmi Lee Pallickara Week 1-B-0 Week 1-B-1 CS535 BIG DATA FAQs Slides are available on the course web Wait list Term project topics PART 0. INTRODUCTION 2. DATA PROCESSING PARADIGMS FOR BIG DATA Sangmi Lee Pallickara Computer

More information

Search and Time Series Databases

Search and Time Series Databases Università degli Studi di Roma Tor Vergata Dipartimento di Ingegneria Civile e Ingegneria Informatica Search and Time Series Databases Corso di Sistemi e Architetture per Big Data A.A. 2016/17 Valeria

More information

Using ElasticSearch to Enable Stronger Query Support in Cassandra

Using ElasticSearch to Enable Stronger Query Support in Cassandra Using ElasticSearch to Enable Stronger Query Support in Cassandra www.impetus.com Introduction Relational Databases have been in use for decades, but with the advent of big data, there is a need to use

More information

Distributed Data Store

Distributed Data Store Distributed Data Store Large-Scale Distributed le system Q: What if we have too much data to store in a single machine? Q: How can we create one big filesystem over a cluster of machines, whose data is

More information

How to Backup at Petabyte Scale When Every Transaction Counts

How to Backup at Petabyte Scale When Every Transaction Counts How to Backup at Petabyte Scale When Every Transaction Counts Karoly Nagy OUR GLOBALLY DISTRIBUTED TEAM DUBLIN, SAN FRANCISCO, SEATTLE & MALTA FILE, SYNC & SHARE BIGGEST DATABASES TODAY SERVER FILE JOURNAL

More information

Accelerate MySQL for Demanding OLAP and OLTP Use Cases with Apache Ignite. Peter Zaitsev, Denis Magda Santa Clara, California April 25th, 2017

Accelerate MySQL for Demanding OLAP and OLTP Use Cases with Apache Ignite. Peter Zaitsev, Denis Magda Santa Clara, California April 25th, 2017 Accelerate MySQL for Demanding OLAP and OLTP Use Cases with Apache Ignite Peter Zaitsev, Denis Magda Santa Clara, California April 25th, 2017 About the Presentation Problems Existing Solutions Denis Magda

More information

Managing data consistency in a microservice architecture using Sagas

Managing data consistency in a microservice architecture using Sagas Managing data consistency in a microservice architecture using Sagas Chris Richardson Founder of eventuate.io Author of Microservices Patterns Founder of the original CloudFoundry.com Author of POJOs in

More information

CSE 530A. Non-Relational Databases. Washington University Fall 2013

CSE 530A. Non-Relational Databases. Washington University Fall 2013 CSE 530A Non-Relational Databases Washington University Fall 2013 NoSQL "NoSQL" was originally the name of a specific RDBMS project that did not use a SQL interface Was co-opted years later to refer to

More information

The Google File System

The Google File System The Google File System Sanjay Ghemawat, Howard Gobioff and Shun Tak Leung Google* Shivesh Kumar Sharma fl4164@wayne.edu Fall 2015 004395771 Overview Google file system is a scalable distributed file system

More information

5/1/17. Announcements. NoSQL Motivation. NoSQL. Serverless Architecture. What is the Problem? Database Systems CSE 414

5/1/17. Announcements. NoSQL Motivation. NoSQL. Serverless Architecture. What is the Problem? Database Systems CSE 414 Announcements Database Systems CSE 414 Lecture 15: NoSQL & JSON (mostly not in textbook only Ch 11.1) 1 Homework 4 due tomorrow night [No Web Quiz 5] Midterm grading hopefully finished tonight post online

More information

Domain Driven Design Kevin van der Vlist

Domain Driven Design Kevin van der Vlist Domain Driven Design Kevin van der Vlist kvdvlist@sogyo.nl Objectives 1. Show the usefullnes of DDD 2/27 Objectives 1. Show the usefullnes of DDD 2. Warn you about a two headed monster 2/27 Objectives

More information

The Stream Processor as a Database. Ufuk

The Stream Processor as a Database. Ufuk The Stream Processor as a Database Ufuk Celebi @iamuce Realtime Counts and Aggregates The (Classic) Use Case 2 (Real-)Time Series Statistics Stream of Events Real-time Statistics 3 The Architecture collect

More information

An overview of (a)sync & (non-) blocking

An overview of (a)sync & (non-) blocking An overview of (a)sync & (non-) blocking or why is my web-server not responding? with funny fonts! Experiment & reproduce https://github.com/antonfagerberg/play-performance sync & blocking code sync &

More information

BigTable. Chubby. BigTable. Chubby. Why Chubby? How to do consensus as a service

BigTable. Chubby. BigTable. Chubby. Why Chubby? How to do consensus as a service BigTable BigTable Doug Woos and Tom Anderson In the early 2000s, Google had way more than anybody else did Traditional bases couldn t scale Want something better than a filesystem () BigTable optimized

More information

Column-Family Databases Cassandra and HBase

Column-Family Databases Cassandra and HBase Column-Family Databases Cassandra and HBase Kevin Swingler Google Big Table Google invented BigTableto store the massive amounts of semi-structured data it was generating Basic model stores items indexed

More information

Today CSCI Coda. Naming: Volumes. Coda GFS PAST. Instructor: Abhishek Chandra. Main Goals: Volume is a subtree in the naming space

Today CSCI Coda. Naming: Volumes. Coda GFS PAST. Instructor: Abhishek Chandra. Main Goals: Volume is a subtree in the naming space Today CSCI 5105 Coda GFS PAST Instructor: Abhishek Chandra 2 Coda Main Goals: Availability: Work in the presence of disconnection Scalability: Support large number of users Successor of Andrew File System

More information

/ Cloud Computing. Recitation 8 October 18, 2016

/ Cloud Computing. Recitation 8 October 18, 2016 15-319 / 15-619 Cloud Computing Recitation 8 October 18, 2016 1 Overview Administrative issues Office Hours, Piazza guidelines Last week s reflection Project 3.2, OLI Unit 3, Module 13, Quiz 6 This week

More information

Databases and Big Data Today. CS634 Class 22

Databases and Big Data Today. CS634 Class 22 Databases and Big Data Today CS634 Class 22 Current types of Databases SQL using relational tables: still very important! NoSQL, i.e., not using relational tables: term NoSQL popular since about 2007.

More information

DYNAMO: AMAZON S HIGHLY AVAILABLE KEY-VALUE STORE. Presented by Byungjin Jun

DYNAMO: AMAZON S HIGHLY AVAILABLE KEY-VALUE STORE. Presented by Byungjin Jun DYNAMO: AMAZON S HIGHLY AVAILABLE KEY-VALUE STORE Presented by Byungjin Jun 1 What is Dynamo for? Highly available key-value storages system Simple primary-key only interface Scalable and Reliable Tradeoff:

More information

Jargons, Concepts, Scope and Systems. Key Value Stores, Document Stores, Extensible Record Stores. Overview of different scalable relational systems

Jargons, Concepts, Scope and Systems. Key Value Stores, Document Stores, Extensible Record Stores. Overview of different scalable relational systems Jargons, Concepts, Scope and Systems Key Value Stores, Document Stores, Extensible Record Stores Overview of different scalable relational systems Examples of different Data stores Predictions, Comparisons

More information

Event Sourcing. Intro & Challenges

Event Sourcing. Intro & Challenges Event Sourcing Intro & Challenges Michael Plöd innoq Principal Consultant @bitboss Most current systems only store the current state Classical Architecture IncidentRestController IncidentBusinessService

More information

Distributed Data Management Replication

Distributed Data Management Replication Felix Naumann F-2.03/F-2.04, Campus II Hasso Plattner Institut Distributing Data Motivation Scalability (Elasticity) If data volume, processing, or access exhausts one machine, you might want to spread

More information

Nevin Dong 董乃文 Principle Technical Evangelist Microsoft Cooperation

Nevin Dong 董乃文 Principle Technical Evangelist Microsoft Cooperation Nevin Dong 董乃文 Principle Technical Evangelist Microsoft Cooperation Microservices Autonomous API Gateway Events Service Discovery Circuit Breakers Commands Aggregates Bounded Context Event Bus Domain Events

More information