Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime. - A journey from TenForce's perspective - SEMANTICS2016


Published on, a framework for building microservices-powered applications on top of Linked Data, presented from TenForce's perspective. This presentation was given at Semantics2016.

Published in: Internet
  • Be the first to comment

  • Be the first to like this - A journey from TenForce's perspective - SEMANTICS2016

  1. 1. a journey from TenForce’s perspective
  2. 2. In 60 seconds State-of-the-art web applications fuelled by Linked Data aware microservices - User-facing microservices - Easy deployment using Docker - Single Page Apps using Ember.js - Well known requirements => [HTTP+JSON+SPARQL]
  3. 3. Some history Share code on personal projects Rails is not über-productive Stay light, choose later Use microservices and semantic model
  4. 4. KISS Keep It Super Simple
  5. 5. KISS - Most of us aren’t microservice experts - Most of us aren’t UI experts - We need to get stuff done - Maximize freedom - Orthogonal features - Minimize requirements
  6. 6. Simple mental model user-facing http-services
  7. 7. Simple mental model User-facing microservices Limit base technologies: - HTTP - JSON(API) - SPARQL (one graph)
  8. 8. Simple mental model TenForce supports publishing of open data. - Use DCAT standard - EDCAT 2.0 released - mudCAT = back-end - webCAT = front-end - Custom configurations to match specific customer needs.
  9. 9. webCAT
  10. 10. Semantic models Many actors, telling parts of the same story
  11. 11. Semantic models Services read/write the part of the world they understand. User Registration: - There’s a new user => add it to the triplestore. User Login: - Check username/password => connect user to current session.
  12. 12. Semantic models Registration service Login service
  13. 13. Semantic models Many implementations, one model Same model for: - Username/Password login - OAuth login - ECAS login
  14. 14. Semantic models We use the ECAS login for ESCO-related projects. ESCO is a taxonomy of all Skills Competences and Occupations in Europe. The Dacota team finds and classifies content. Brains for hire!
  15. 15.
  16. 16. Docker Deployment made easy
  17. 17. Docker Container =~ Lightweight Linux Virtual Machine Docker Compose =~ Topology of multi-container project Each service runs in its own Docker Container In short: - Simple hosting on - Clean project description - Always works - Runs on the Big Data Europe Platform Share using Docker
  18. 18. Share using Docker We are part of Big Data Europe Making Big Data: - Easy to get started - Cheaper to maintain … in any domain - Now including Smart Big Data: => Semantics + Big Data = <3
  19. 19. Reuse everything
  20. 20. Reuse everything - Templates: basics for a service - Configurable services - mu-cl-resources - Ember add-ons - Hierarchy service + add-on - Login service + add-on
  21. 21. Base templates CatalogsIndexRoute = Ember.Route.extend ajax: Ember.inject.service() model: () -> @get('ajax').request('/hello') Hello result: {{model.value}} get '/hello/' do counter = query( "SELECT COUNT (*) as ?counter" + "WHERE {" + " ?s ?p ?o." + "}" ).first[:counter].to_i status 200 { value: counter }.to_json end FROM semtech/mu-ruby-template:2.0.0-ruby2.3 MAINTAINER Your Name <> demo: image: you/demo-service links: - db:database dispatcher: … links: - demo:demo match "/hello/*path" do Proxy.forward conn, path, "http://demo/hello/" end [mu-ruby-template]
  22. 22. Base templates [mu-ruby-template]
  23. 23. Configurable services (define-resource distribution () :class (s-prefix "dcat:Distribution") :properties `((:title :string ,(s-prefix "dct:title")) (:description :string ,(s-prefix "dct:description")) (:issued :string ,(s-prefix "dct:issued")) (:modified :string ,(s-prefix "dct:modified")) (:license :string ,(s-prefix "dct:license")) (:rights :string ,(s-prefix "dct:rights")) (:access-url :string ,(s-prefix "dcat:accessURL")) (:download-url :string ,(s-prefix "dcat:downloadURL"))) :has-one `((dataset :via ,(s-prefix "dcat:distribution") :inverse t :as "dataset") (format :via ,(s-prefix "dct:format") :as "format")) :resource-base (s-url "") :on-path "distributions") [mu-cl-resources] Full JSONAPI from abstract description
  24. 24. Configurable services [mu-cl-resources]
  25. 25. Ember add-ons > ember install ember-async-expanding-tree {{async-expanding-tree model=topNode config=customConfig}} config: labelPropertyPath: 'label' getChildren: (model) -> children = Ember.ajax("/hierarchy/" + "#{@get('hierarchyId')}" + "/target/#{model.get('id')}") showMaxChildren: 50 includeLeafs: true hierarchy: image: tf-esco/hierarchy:1.2.3 links: - db:database dispatcher: … links: - hierarchy:hierarchy match "/hierarchy/*path" do Proxy.forward conn, path, "http://hierarchy/" end [hierarchy-service]
  26. 26. Ember add-ons [hierarchy-service]
  27. 27. What we learned
  28. 28. What we learned - Extremely productive - Code reuse - Easy for juniors - Customers like front-end - Database performance is okayish
  29. 29. About the future
  30. 30. Trigger microservices by changes in semantic model. Example: - Compute KPIs when a new dataset is added - Send email/tweet by writing it to the triplestore Reactive programming
  31. 31. More performance - ember-fastboot: Faster first page render - mu-cache: Smart caching strategies in core microservices - mu-cl-resources: Partial resource caching
  32. 32. More authority Describe authorization outside the microservices: - Simplify mental model - Help in sharing content - Open gate to advanced applications search for Jonathan Langens if you want to know more
  33. 33. More interactivity Push cache updates to all visiting clients. Almost no development time to create basic interactive applications (eg: updating KPIs, chat applications, …)
  34. 34. More links
  35. 35. Lego Time Star Wars: nAQJCC-9XVSZs- a3vVhy-vPZaHw-r6NB6c-4ajSXh-rX7ezA-BBhAWf-BiWDpc-rED79Q-rX7f8u-mtctqc-wtp245-fcNzVb-CgXNsA-D4Uxps-wKj5u9-rX7fVm- rUWnBU-uhC54v-rXeB4g- zVknPq-qxEqXx-8GSCNc-nzg79j-biFNa6-9fXjwV-biFMTa-a1kbsX-5HnKDa-dQCdnW-a54g8X-bm9TRN-8zJUzU-fbGRan-sdr4hw- e9DMFz-q3qQqf-aAZwyV- bm9Tsw- dQCdpb-sdpUWU-rkow4K-wazJmK-bz4Md8-pyU2QM Wendelstein 7X: bizarre-reactor-might-save- nuclear- fusion 300SL: 5pCCRH-6NezBh-oF2nYm-gHtRrE-6KAHDv-cPKKj9-2aj2ur- s3A8ua-5pH14j-bQk48B-omejVV-q2tAx7-o8yCtS-nRauVz-5pCNWB-o525H4-o9dqig-sk2we8- o4EApo-N2NDc-o7jxQM-5pCG4c-81DnQh-exNBvp-kc9m4-exS223-cm2nm5- aPXHgc-7Tg5XD-6HQ5Q9-6w1JtR-5pCGWi-eb6dJe-pJYFdi-azFSaU-p5y4mb- 6GjCy2-q2kGp6-o52baX-9XtXDc-4GqX86-pJXbk1-8canak-q2tu1j-6HQ6eo-sjZQkD- dhaPyf-bBqucA Big Data Europe: Docker Logo: cloud/ webCAT: Banksy Van: #prettyPhoto Banksy Bananas: Your Data Stories platoform: Star Wars Clones box: 5410769283/in/photolist-9f8Bcz- 5SJTDj-55MnH2-4WEfzr-in3p6t-drf7fp-3b46gb-bKfRW4-3aYzBt-4xztdx-35E11y-9jVQVR-9wuv3f-9r3mWe-9hNTVz- 7JzMxg-7JYZFM-Hw1QSq-8FW8eh-nVj9Sc- 8ytJvH-aPPKYz-dYyYWK-7fhBFE-7GgZYm-e5M9jV-bwm6S9-7fhyGd-e5SNkL-5LDPWB-e5SNdf-4MKWht-e5SLrb- 5zPWDw-74Yjyb-8xh5Vr-9Apdwp-4XUn5j-jSHfRS- 9fAZ86-eueiqp-e5SPwu-e5MbcZ-9tJQdd- 5f4rJT-9HsoqF-9hud4U-e5MaQX-52mMrQ-e5M9WX/ GitHub Logo: has-big-dreams-for- open-source-software-and-more/ Twitter Logo: mu-ruby- template: mu-cl-resources: mu-project: Resources used & interesting links
  36. 36. More questions right now, or ask later
  37. 37. Erika Pauwels erikap @ErikaPauwels Aad Versteden madnificent @impulsater Come talk to us