Neos Conference 2019: Announcing the Event Sourced Content Repository Alpha 1

Neos Conference 2019: Announcing the Event Sourced Content Repository Alpha 1

30c0b6f50f67163bee8500aa4115d126?s=128

Sebastian Kurfürst

May 11, 2019
Tweet

Transcript

  1. Announcing the Event Sourced Content Repository Alpha 1

  2. Content Repository Asset Storage Fusion Flow Framework Neos Neos UI

  3. example: move node

  4. Example: move node

  5. materialized path

  6. all moved one level down

  7. we need to prevent the live nodes to shine through!

  8. move node is quite complex!

  9. hard to evolve with new features

  10. NodeDataRepository NodeInterface Doctrine ORM "naive" Database Schema Identity Map Fusion

    / FlowQuery Read API Write API Dimension handling NodeData Not well defined slow for big node trees, performance hard to predict hard to reproduce bugs (sometimes) orphan nodes sometimes possible advanced features hard to integrate Masking of deleted nodes (Shadow Nodes) Workspace Shine Through Node Type Management
  11. Fusion / FlowQuery Read API Write API Node Type Management

    TraversableNodeInterface NodeInterface Commands NodeDataRepository Doctrine ORM "naive" Database Schema Identity Map Dimension handling NodeData Masking of deleted nodes (Shadow Nodes) Workspace Shine Through
  12. Fusion / FlowQuery Read API Write API Node Type Management

    TraversableNodeInterface NodeInterface Commands Dimension Space layer Content Stream / Workspace layer Doctrine ORM "naive" Database Schema Identity Map
  13. Doctrine DBAL Runtime Cache Fusion / FlowQuery Read API Write

    API Node Type Management TraversableNodeInterface NodeInterface Commands Dimension Space layer Content Stream / Workspace layer "naive" Database Schema
  14. Dimension Space layer Content Graph Event Store Commands Content Stream

    / Workspace layer Fusion / FlowQuery Read API TraversableNodeInterface NodeInterface Node Type Management Write API well defined, sound concept optimized for move and other complex cases basis for advanced features great performance Doctrine DBAL Runtime Cache
  15. It's a big change behind the scenes.

  16. It's like Git for Content.

  17. Event Sourcing / CQRS in a nutshell

  18. Model modify read classical Database Architecture Database

  19. update projections append events Event Sourced Architecture Events "modify" read*

    Event Store e1 e1 Node properties were updated e2 Node was created e3 Node properties were updated e4 Workspace was created
  20. "Model", e.g. with Doctrine ORM update projection read the "model"

    Projections DB Tables
  21. Projections can be rebuilt DB Tables Empty DB Tables apply

    event 1 DB Tables apply event 2 apply event 3 apply event 4 apply event 1000
  22. write side read side (projections) Event store (DB Table) Content

    Graph Commands Events Workspace Changes (soft) constraints …
  23. None
  24. We know what has happened in the past.

  25. We have to build a sound, consistent concept.

  26. immediately consistent strongly consistent not consistent eventually* consistent *eventually !=

    eventuell (DE) eventually == at some point in the future eventually == "bald" Consistency
  27. Progress so far

  28. December 2016: First Workshop

  29. September 2017: ES CR Workshop Kiel

  30. March 2018: ES CR Workshop Dresden

  31. None
  32. We forked Neos. until last year,

  33. October 2018: first 12k€ funding

  34. None
  35. None
  36. None
  37. None
  38. 154 potential merge conflicts legacy event sourced 154 changes 1

    change
  39. None
  40. None
  41. immediately consistent strongly consistent not consistent eventually consistent

  42. None
  43. None
  44. Eventual Consistency!

  45. None
  46. None
  47. No fork anymore, installable in Neos 4.3 instance! * *

    currently we still need a minor patch to Neos UI
  48. found+implemented migration strategy

  49. NodeMutation* convenience wrapper around commands Legacy NodeInterface property access traversal

    active-record style creation and mutation methods TraversableNodeInterface traversal NodeInterface property access New Commands *planned included in Neos 4.3 Content Graph / Subgraph NodeDataRepository !!no API!!
  50. Standalone set of packages EventSourcedContentRepository EventSourcedNeosAdjustments Doctrine DBAL ContentGraph ContentRepository

    Neos / Neos UI Graph DB (e.g. Neo4j) Content Graph
  51. implemented the difficult features move node delete node show/hide recursively

    shine through workspaces content dimensions partial workspace publishing
  52. prepared for standalone usage

  53. performance

  54. experiment prototype

  55. Risk (mostly) gone

  56. Alpha 1 do not use in production just yet play

    around with it still rough around the edges
  57. None
  58. Supported: no dimensions Supported: < 10 000 nodes internally tested:

    dimensions with fallbacks internally tested: 50 000 nodes today
  59. Supported: dimensions without fallbacks Supported: < 50 000 nodes internally

    tested: dimensions with fallbacks internally tested: 50 000 nodes today+
  60. Supported: dimensions with fallbacks Supported: 50 000 nodes internally tested:

    dimensions with fallbacks internally tested: >100 000 nodes today++
  61. How to Install / Test

  62. composer.json "repositories": [ { "type": "git", "url": "https://github.com/neos/contentrepository-development-collection.git" }, {

    "type": "git", "url": "https://github.com/neos/content-repository-dimensionspace.git" } ], "require": { "neos/contentrepository-development-collection": "dev-master", "neos/content-repository-dimensionspace": "dev-master", "neos/event-sourcing": "dev-master", "neos/neos-ui": "dev-event-sourced-patch as dev-master" }
  63. migrate content ./flow doctrine:migrate ./flow contentrepositorymigrate:run ./flow projection:replay change ./flow

    projection:replay nodehiddenstate
  64. compile Neos UI* cd Packages/Application/Neos.Ui make setup * currently we

    still need a minor patch to Neos UI
  65. Feedback!

  66. slack.neos.io #project-cr-rewrite

  67. None
  68. None
  69. We'll start a fundraiser

  70. 50 000 - 100 000 €

  71. Dreams

  72. None
  73. None
  74. None
  75. None
  76. Editing Notifications

  77. Synchronization

  78. YOUR ideas!

  79. None
  80. It's like Git for Content.

  81. it's the 3rd rewrite! ... and this is usually a

    good one :)
  82. None