Skip to content

7erry/amped

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

84 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Amped

[Amped Presentation](https://slides.com/twalters/amped)

Overview

Amped is a Java-based, cloud-native, reference architecture using many Open Source projects including the following:

  • Dropwizard for microservin'
  • Swagger for API documentin'
  • Hazelcast for cachin and all things distributed
    • Cache frequently accessed data in-memory, often in front of a database
    • Store temporal data like web sessions
    • In-memory data processing/analytics
    • Service registry and discovery
    • Distributed configuration
    • Cross-JVM communication/shared storage
  • Camel for EIP'n
    • Good for decomposition / Component based (routes/components)
    • Service Orchestration
    • Cross-JVM communications
  • Hystrix for fault tolerance
    • Command Pattern
    • Circuit Breaker
    • Fallback & Degrade Abilities
  • MongoDB for persistin
    • Document Database

Architecture Overview


* Cynical Software * Architected for Change * Problem based Solution * Deterministic & Metric Driven * High Performance * High Availability * Easy Scalability * Easy Maintainability

Real-time Metrics

Investigating

  • Uses Netflix Hystrix
  • Stop cascading failures.
  • Fail-fast and rapidly recover.
  • Reduce mean-time-to-discovery (with dashboards) *Reduce mean-time-to-recovery (with dynamic configuration)

Metrics Dropwizard Dashboard

Dropwizard Dashboard

Historical Metrics

Graphite Dashboard

Graphite

CloudWatch Dashboard

CloudWatch

Project Overview

  • Scale up only some parts of the application
  • Isolate services based depending on their security profiles (PII)
  • Fault tolerance
  • Cloud friendly
  • The Unix Philosophy (Camel friendly)
    • Write programs that do one thing and do it well.
    • Write programs to work together.
    • Write programs that handle text streams, because that is a universal interface.
    • With pipes, many programs could work together, and they could work together at a distance.

The following project layout is typical of many distributed applications such as Dropwizard:

  • Many of these are optional based on Service implementation needs

Amped-facade

  • Customer-facing REST-based edge service
  • Uses DropWizard
  • Uses Hazelcast
  • Optionally uses Camel

Amped-middletier

  • Internal REST-based middletier service called by the edge service
  • Optionally uses DropWizard
  • Optionally uses Spring Boot
  • Uses Hazelcast
  • Uses Camel

Amped-core

  • Shared classes between edge and middletier
  • guava-libraries
    To summarize, don’t reinvent the wheel. If you need to do something that seems like it should be reasonably common, there may already be a class in the libraries that does what you want. If there is, use it; if you don’t know, check. Generally speaking, library code is likely to be better than code that you’d write yourself and is likely to improve over time. This is no reflection on your abilities as a programmer. Economies of scale dictate that library code receives far more attention than most developers could afford to devote to the same functionality.

Documentation

Please see [wiki] (https://github.com/7erry/amped/wiki) for detailed documentation.

https://github.com/dropwizard/dropwizard
http://www.slideshare.net/tomaslin/dropwizard-and-groovy
https://github.com/dropwizard/metrics
https://github.com/wordnik/swagger-core/wiki/JavaDropwizard-Quickstart

Requirements

  • mvn 3.x

    mvn -version


Apache Maven 3.2.2 (45f7c06d68e745d05611f7fd14efb6594181933e; 2014-06-17T09:51:42-04:00) Maven home: /Users/twalters/Documents/tools/apache-maven-3.2.2 Java version: 1.8.0_11, vendor: Oracle Corporation Java home: /Library/Java/JavaVirtualMachines/jdk1.8.0_11.jdk/Contents/Home/jre Default locale: en_US, platform encoding: UTF-8 OS name: "mac os x", version: "10.9.3", arch: "x86_64", family: "mac"
  • java 8

    java -version


java version "1.8.0_11" Java(TM) SE Runtime Environment (build 1.8.0_11-b12) Java HotSpot(TM) 64-Bit Server VM (build 25.11-b03, mixed mode)
  • JAVA_HOME set

    echo $JAVA_HOME


/Library/Java/JavaVirtualMachines/jdk1.8.0_11.jdk/Contents/Home
Tested on: ========== OS X: 10.9.3
Ubuntu: 14.04.1

Execution

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published