PrankWeb Architecture - cusbg/p2rank-framework GitHub Wiki

The idea behind the design is to have several components with smaller responsibilities, rather than one big component as in the original version. This should allow us to easily replace any component. Besides, it decreases the entry barrier for new developers, as it is easier to understand a single component than a whole system. The following diagram captures the main runtime components.

C4Component

Person(user, "User")

Enterprise_Boundary("prankweb-boundary", "PrankWeb") {

  System_Boundary("executor-p2rank-boundary", "executor-p2rank") {

    Component("conservation/alignment", "Conservation Alignment")

    Component("conservation/hmm", "Conservation HMM")

    Component("executor-p2rank", "Executor-p2rank", "", "Call other using shell.")

    Component("executor-docking", "Executor-docking", "", "Call other using shell.")
    
    Component("p2rank", "P2Rank")

    Component("java-tools", "Java-tools")

    Rel("executor-p2rank", "rabbitmq", "")

    Rel("executor-docking", "rabbitmq", "")

  }

  System_Boundary("gateway-boundary", "Gateway") {

    Container("nginx", "NginX", "", "Proxy to other components.")

    Component("frontend", "Frontend", "", "Served as a static file.")
   
    Rel("nginx", "flower", "")
    Rel("nginx", "monitor", "")
    Rel("nginx", "web-server", "")

    Rel_Right("user", "nginx", "")

  }


  Container("flower", "Flower", "", "RabbitMQ monitoring.")

  Component("monitor", "Monitor", "", "Listen for funPDBe messages.")

  Container("rabbitmq", "RabbitMQ", "", "Message broker.")

  Component("web-server", "Web-server")

  Rel("web-server", "rabbitmq", "")

}


Enterprise_Boundary("pdb-boundary")  {
  ContainerDb("pdb", "RCSB PDB")
  Rel("executor-p2rank", "pdb", "")
}


Enterprise_Boundary("alphafold-boundary")  {
  ContainerDb("alphafold", "Alphafold")
  Rel("executor-p2rank", "alphafold", "")
}

UpdateLayoutConfig($c4ShapeInRow="4", $c4BoundaryInRow="3")

Runtime components

  • Conservation Contain conservation pipelines.
  • Executor-p2rank Perform execution of a single prediction task. Calls other components using shell.
  • Executor-docking Perform execution of a docking task. Calls other components using shell.
  • Frontend Web-pages used by gateway.
  • Gateway Gateway and proxy for HTTP access.
  • Java-tools Wrap bio-java, used to produce output for PrankWeb.
  • RabbitMQ Message broker for Celery.
  • Web-server API implementation, provide access to data create tasks.

Integration components

  • Monitor Listen for FunPDBe messages and notify Google Analytics.
  • Synchronization Prepare predictions for FunPDBe.

Maintenance components

  • Administration Contains administration and maitenance related scripts.

Monitoring components

  • Flower Provide overview of RabbitMQ.
  • Grafana Dashboard for Prometheus.
  • Prometheus Collect information from other components, mostly Flower.